高分请教关于prn(打印机格式)

管哥的天下 2013-12-03 03:06:04

struct GongZhengSPrtImageINFO
{
int nImageType; //must be 0x58485942
int nVersion; //must be 0x00000000
int nImageWidth; // RIP Image pixel width
int nImageHeight; // RIP Image pixel height

int nImageColorNum; //RIP image Color number include 4 (YMCK)
//6 YMCKLcLm 8 YMCKLcLmOrGr
int nImageColorDeep; //1,2,4,8 RIP image output bitpercolor
int nImageResolutionX; //RIP image X resolution, 180,360,720
int nImageResolutionY; //RIP Image Y resolution, 186,372,558,744

int nCompressMode; // First version should be 0 , no compress mode
int nBytePerLine; //Color plane bytes for line
int nBidirection; // Bidirection for 1, Unidirection for 0
int nPass; //1,2,3,4,6,8,12 Pass

int nSpeed; //High speed 0 Middle speed 1 Low Speed 2
int nReserve[8]; //Fill with 0
};

这个是一个prn的头文件,
对于nBytePerLine这个不是很清楚,我问了蒙泰的人,他给我的回复是这个。

nBytesPerLine记录了每个颜色面的长度, 以4色为例, 文件头后的存储如下:
YYYYYY...YYY (nBytesPerLine bytes)
MMMMMM...MMM (nBytesPerLine bytes)
CCCCCC...CCC (nBytesPerLine bytes)
KKKKKK...KKK (nBytesPerLine bytes)
...下一行同样的Y, M, C, K数据。

文件读取了,
nImageWidth=4984
nImageHeight = 9452
nImageResolutionX=600
nImageResolutionY=800
这个nBytesPerLine的值是624字节(是B),我就不明白了,这个跟nImageWidth和nImageHeight到底有什么关系?
比如RGB,知道了宽度和高度,就可以对每一个rgb进行取值了,那这个为什么呢??????
...全文
1842 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
詹凌 2016-07-25
  • 打赏
  • 举报
回复
有了如上结构提数据,怎么生成PRT格式的文件
huhangf362 2016-05-26
  • 打赏
  • 举报
回复
引用 10 楼 lm_whales 的回复:
[quote=引用 9 楼 guandq2106 的回复:] [quote=引用 8 楼 lm_whales 的回复:] 这个很简单呀 你是做喷墨打印机的吗,还是喷绘机,写真机!
喷墨打印机的[/quote] YMCK是分层的 第1层Y 第2层M 第3层C 第4层K 。。。。。 每若干层(level 或者plane)为一行数据,这里是4层,对应颜色是YMCK 每层字节数,即nBytesPerLine 每行字节数,这个nBytesPerLine 用处不大,主要用来处理数据对齐 其实就是用nImageWidth计算出来的一个字节数 nImageWidth 和nImageColorDeep结合,再进行对齐处理,可以计算出nBytesPerLine nBytesPerLine 可以命名为nBytesPerColorPerLine 每色每行字节数, 或者nBytesPerLevelPerLine, nBytesPerplanePerLine 每层每行字节数。 nImageColorDeep是每个颜色的深度,实际表示,用多少位(Bit)处理一个像素(Pixel), 或者叫点 (dot)的颜色。 1个位,每字节8个点 2级灰度 ,无灰度打印 2个位,每字节4个点 4级灰度 4个位,每字节2个点 16级灰度 8个位,每字节1个点 64级灰度 每层各出一个点,就凑成一个像素,该像素的灰度和位数相关。 nBytesPerLine的计算方法: nBytesPerLine = (nImageWidth * nImageColorDeep +(AlignSize-1))/AlignSize *8; 有人觉得,这个公式可能会溢出,改为 nBytesPerLine = ((nImageWidth * nImageColorDeep -1))/AlignSize-1) *8; 这个公式中nImageWidth必须大于0 ,一半都会的。 AlignSize 可能是32,16,8 等 8的倍数。 如果RIP由你来做,则 可以任选32,16,8中的一个。 否则,不管他,直接读nBytesPerLine更方便。 PS: .prn 可以是,任何格式,只要打印机支持就行。 所以,不可能,支持全部的.prn 格式。 你只要针对,你这一款打印机,就可以了。 已知,其他的打印机的.prn格式,有HPGL,HPGL2,HPRTL HPGL2-RTL ,PostScript,等等 有些就支持这种RAW格式,还有些支持压缩格式。 还有 epson打印机,有自己的专用格式等等 .... 有的打印机,直接支持Tiff格式输出。 甚至有打印机,直接支持BMP格式,JPG格式文件输出的。 [/quote]请教一个问题,如果我要打印一幅bmp的文件,那么从pc端传到打印机的数据是bmp数据还是经过打印机驱动转化之后的prn文件,这个在喷墨打印机和喷绘机里面是一样的吗?谢谢!
lm_whales 2014-01-06
  • 打赏
  • 举报
回复
哦,是我多事了
管哥的天下 2014-01-06
  • 打赏
  • 举报
回复
引用 10 楼 lm_whales 的回复:
[quote=引用 9 楼 guandq2106 的回复:] [quote=引用 8 楼 lm_whales 的回复:] 这个很简单呀 你是做喷墨打印机的吗,还是喷绘机,写真机!
喷墨打印机的[/quote] YMCK是分层的 第1层Y 第2层M 第3层C 第4层K 。。。。。 每若干层(level 或者plane)为一行数据,这里是4层,对应颜色是YMCK 每层字节数,即nBytesPerLine 每行字节数,这个nBytesPerLine 用处不大,主要用来处理数据对齐 其实就是用nImageWidth计算出来的一个字节数 nImageWidth 和nImageColorDeep结合,再进行对齐处理,可以计算出nBytesPerLine nBytesPerLine 可以命名为nBytesPerColorPerLine 每色每行字节数, 或者nBytesPerLevelPerLine, nBytesPerplanePerLine 每层每行字节数。 nImageColorDeep是每个颜色的深度,实际表示,用多少位(Bit)处理一个像素(Pixel), 或者叫点 (dot)的颜色。 1个位,每字节8个点 2级灰度 ,无灰度打印 2个位,每字节4个点 4级灰度 4个位,每字节2个点 16级灰度 8个位,每字节1个点 64级灰度 每层各出一个点,就凑成一个像素,该像素的灰度和位数相关。 nBytesPerLine的计算方法: nBytesPerLine = (nImageWidth * nImageColorDeep +(AlignSize-1))/AlignSize *8; 有人觉得,这个公式可能会溢出,改为 nBytesPerLine = ((nImageWidth * nImageColorDeep -1))/AlignSize-1) *8; 这个公式中nImageWidth必须大于0 ,一半都会的。 AlignSize 可能是32,16,8 等 8的倍数。 如果RIP由你来做,则 可以任选32,16,8中的一个。 否则,不管他,直接读nBytesPerLine更方便。 PS: .prn 可以是,任何格式,只要打印机支持就行。 所以,不可能,支持全部的.prn 格式。 你只要针对,你这一款打印机,就可以了。 已知,其他的打印机的.prn格式,有HPGL,HPGL2,HPRTL HPGL2-RTL ,PostScript,等等 有些就支持这种RAW格式,还有些支持压缩格式。 还有 epson打印机,有自己的专用格式等等 .... 有的打印机,直接支持Tiff格式输出。 甚至有打印机,直接支持BMP格式,JPG格式文件输出的。 [/quote] 讲的很详细啊,不过我这个已经自己搞好了
lm_whales 2013-12-31
  • 打赏
  • 举报
回复
引用 9 楼 guandq2106 的回复:
[quote=引用 8 楼 lm_whales 的回复:] 这个很简单呀 你是做喷墨打印机的吗,还是喷绘机,写真机!
喷墨打印机的[/quote] YMCK是分层的 第1层Y 第2层M 第3层C 第4层K 。。。。。 每若干层(level 或者plane)为一行数据,这里是4层,对应颜色是YMCK 每层字节数,即nBytesPerLine 每行字节数,这个nBytesPerLine 用处不大,主要用来处理数据对齐 其实就是用nImageWidth计算出来的一个字节数 nImageWidth 和nImageColorDeep结合,再进行对齐处理,可以计算出nBytesPerLine nBytesPerLine 可以命名为nBytesPerColorPerLine 每色每行字节数, 或者nBytesPerLevelPerLine, nBytesPerplanePerLine 每层每行字节数。 nImageColorDeep是每个颜色的深度,实际表示,用多少位(Bit)处理一个像素(Pixel), 或者叫点 (dot)的颜色。 1个位,每字节8个点 2级灰度 ,无灰度打印 2个位,每字节4个点 4级灰度 4个位,每字节2个点 16级灰度 8个位,每字节1个点 64级灰度 每层各出一个点,就凑成一个像素,该像素的灰度和位数相关。 nBytesPerLine的计算方法: nBytesPerLine = (nImageWidth * nImageColorDeep +(AlignSize-1))/AlignSize *8; 有人觉得,这个公式可能会溢出,改为 nBytesPerLine = ((nImageWidth * nImageColorDeep -1))/AlignSize-1) *8; 这个公式中nImageWidth必须大于0 ,一半都会的。 AlignSize 可能是32,16,8 等 8的倍数。 如果RIP由你来做,则 可以任选32,16,8中的一个。 否则,不管他,直接读nBytesPerLine更方便。 PS: .prn 可以是,任何格式,只要打印机支持就行。 所以,不可能,支持全部的.prn 格式。 你只要针对,你这一款打印机,就可以了。 已知,其他的打印机的.prn格式,有HPGL,HPGL2,HPRTL HPGL2-RTL ,PostScript,等等 有些就支持这种RAW格式,还有些支持压缩格式。 还有 epson打印机,有自己的专用格式等等 .... 有的打印机,直接支持Tiff格式输出。 甚至有打印机,直接支持BMP格式,JPG格式文件输出的。
管哥的天下 2013-12-30
  • 打赏
  • 举报
回复
引用 8 楼 lm_whales 的回复:
这个很简单呀 你是做喷墨打印机的吗,还是喷绘机,写真机!
喷墨打印机的
lm_whales 2013-12-28
  • 打赏
  • 举报
回复
这个很简单呀 你是做喷墨打印机的吗,还是喷绘机,写真机!
管哥的天下 2013-12-10
  • 打赏
  • 举报
回复
引用 4 楼 truelance 的回复:
nBytesPerLine就是一行打印需要的缓冲字符数, 是在nImageResolutionX=600 的基础上增加一些打印机附属字节.
不是很懂啊,还希望提示
管哥的天下 2013-12-04
  • 打赏
  • 举报
回复
引用 5 楼 worldy 的回复:
nImageWidth=4984//高度宽度但不知道是用什么多单位? nImageHeight = 9452 这个nBytesPerLine//应该是每行字节数
字节
worldy 2013-12-03
  • 打赏
  • 举报
回复
nImageWidth=4984//高度宽度但不知道是用什么多单位? nImageHeight = 9452 这个nBytesPerLine//应该是每行字节数
熊熊大叔 2013-12-03
  • 打赏
  • 举报
回复
nBytesPerLine就是一行打印需要的缓冲字符数, 是在nImageResolutionX=600 的基础上增加一些打印机附属字节.
管哥的天下 2013-12-03
  • 打赏
  • 举报
回复
引用 2 楼 truelance 的回复:
nImageWidth是图像的像素个数, 但是每个图像大小不一样, 而显示器和打印机的宽度是固定的. 所以图像像素个数和打印出来的点数是不一样的, 打印大图时会把几个像素压成一个点.
你说了这么多,那我问你nBytesPerLine到底是什么?
熊熊大叔 2013-12-03
  • 打赏
  • 举报
回复
nImageWidth是图像的像素个数, 但是每个图像大小不一样, 而显示器和打印机的宽度是固定的. 所以图像像素个数和打印出来的点数是不一样的, 打印大图时会把几个像素压成一个点.
管哥的天下 2013-12-03
  • 打赏
  • 举报
回复
高手如果接错过prn的活着ymck的,请赐教。

3,882

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧