首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2014-01-08 
高分请教关于prn(打印机格式)struct GongZhengSPrtImageINFO{intnImageType//must be 0x58485942intnVers

高分请教关于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//应该是每行字节数
[解决办法]
这个很简单呀
你是做喷墨打印机的吗,还是喷绘机,写真机!

[解决办法]
引用:
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格式文件输出的。



热点排行