高分请教关于prn(打印机格式)
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进行取值了,那这个为什么呢??????
prn?ymck?myck?rgb prn;ymck;cmyk;rgb;
[解决办法]
nImageWidth是图像的像素个数, 但是每个图像大小不一样, 而显示器和打印机的宽度是固定的.
所以图像像素个数和打印出来的点数是不一样的, 打印大图时会把几个像素压成一个点.
[解决办法]
nBytesPerLine就是一行打印需要的缓冲字符数, 是在nImageResolutionX=600 的基础上增加一些打印机附属字节.
[解决办法]
nImageWidth=4984//高度宽度但不知道是用什么多单位?
nImageHeight = 9452
这个nBytesPerLine//应该是每行字节数
[解决办法]
这个很简单呀
你是做喷墨打印机的吗,还是喷绘机,写真机!
[解决办法]
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格式文件输出的。