请问如何读取BMP文件的每个象素值? 最好读取PCX也可以,不过只可读BMP也可以。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://www.vckbase.com/document/viewdoc/?id=674位图文件读写综述 我是楼主: 更正一下问题,不读bmp了,只读PCX。 怎样用VC读取PCX图象每个象素的值? 在网上找到一个方法,但不知道他的参数怎么搞。方法如下:========================================================/***************************************************************************** 函数名称:LoadPCXLine(PPCXHEAD ppcxHdr, LPBYTE ppcxImg, LPBYTE ppcxBits) const** 参数:PPCXHEAD ppcxHdr -指向PCXHEAD结构的指针!NULL,导入BitPlane,BytePerLine,=>clScanLineSize* LPBYTE ppcxImg -指向PCX图象区指针!NULL,RLE压缩编码,位置递增+=rec。* 调用之前获得首地址指针: * LPBYTE ppcxBits -指向DIB数据区的指针,按扫描行(scanline)长度递增** 返回:UINT rec -返回每行解压以后的字节数目** 说明:根据PCX图象数据指针,对RLE进行解码****************************************************************************/UINT CPcxImage::LoadPCXLine(PPCXHEAD ppcxHdr, LPBYTE ppcxImg, LPBYTE ppcxBits) const{ ASSERT(ppcxHdr!=NULL&&ppcxImg!=NULL&&ppcxBits!=NULL); // because in bitmap bits order, it's blue=>green=>red // however pcx is red=>green=>blue so use decrease order //----------------------------------------- UINT lPos(0), // 记录存入ppcxBits的总数 iX(0), // 记录每个位平面字节序号 rec(0); // 读取_ppcxImg_ 字节序号 for ( int bp=ppcxHdr->BitPlane-1; bp >= 0; bp-- ) { // RLE 解码======= iX=0; while ( iX<ppcxHdr->BytePerLine ) { BYTE uiValue = ppcxImg[rec++]; if ( (uiValue & 0xc0) == 0xc0 ) // 判断高位字节是否设置 0xc0 { uiValue = uiValue & 0x3f ; // 计算重复 BYTE Color = ppcxImg[rec++]; // 提取颜色 // 存放到内存DIB for ( BYTE bRepeat=0; bRepeat < uiValue; bRepeat++ ) { ppcxBits[(iX++)*ppcxHdr->BitPlane+bp] = Color; lPos++; } } else { ppcxBits[(iX++)*ppcxHdr->BitPlane+bp] = uiValue; lPos++; } } } return rec;}/////////////////////程序完////////////////////////我是楼主:以下这三个参数怎么实现?对指向文件的指针不熟悉。PPCXHEAD ppcxHdr -指向PCXHEAD结构的指针!NULL,导BitPlane,BytePerLine,=>clScanLineSize* LPBYTE ppcxImg -指向PCX图象区指针!NULL,RLE压缩编码,位置递增+=rec。* 调用之前获得首地址指针: * LPBYTE ppcxBits -指向DIB数据区的指针,按扫描行(scanline)长度递增先谢了!! 这个LoadPCXLine应该是不全的呀 是不全 不过今天自己搞店了 唉 感觉CSDN主要是用来灌水的 不过也难怪 谁还想休息时间忙这些 bmp格式的图是DIB位图,也就是设备无关位图.DIB位图文件结构如下: ___________________________________ | 位图文件头结构BITMAPFILEHEADER | ----------------------------------- | 位图信息头结构BITMAPINFOHEADER | ----------------------------------- | 位图颜色表RGBQUAD | ----------------------------------- | 位图象素数据 | -----------------------------------希望对你有用. 怎么建立一个SOCKET侦听队列 怎样读取文件中的数据? 单文档怎样保持窗口最大化? SliderBar默认为向上值变小,怎么样反过来? zhou80bin(彬彬)请进!解决过USB插拔事件捕捉的各位gg,mm请指教一二,感激不尽。(快要被开除了,救命) 好奇怪! 各位大侠,写注册表用什么类,有那些步骤? ONLINE FOR HELP:在局誉网中,马上给分!!! MFC初学一个奇怪问题 请问RegQueryValueEx函数如何用。全部分相送!!!!!!!!! 堆区与代码段和数据段的关系是什么? 编译当中出现的问题,怎么办?
位图文件读写综述
更正一下问题,不读bmp了,只读PCX。
怎样用VC读取PCX图象每个象素的值?
方法如下:========================================================
/****************************************************************************
* 函数名称:LoadPCXLine(PPCXHEAD ppcxHdr, LPBYTE ppcxImg, LPBYTE ppcxBits) const
*
* 参数:PPCXHEAD ppcxHdr -指向PCXHEAD结构的指针!NULL,导入BitPlane,BytePerLine,=>clScanLineSize
* LPBYTE ppcxImg -指向PCX图象区指针!NULL,RLE压缩编码,位置递增+=rec。
* 调用之前获得首地址指针:
* LPBYTE ppcxBits -指向DIB数据区的指针,按扫描行(scanline)长度递增
*
* 返回:UINT rec -返回每行解压以后的字节数目
*
* 说明:根据PCX图象数据指针,对RLE进行解码
****************************************************************************/
UINT CPcxImage::LoadPCXLine(PPCXHEAD ppcxHdr, LPBYTE ppcxImg, LPBYTE ppcxBits) const
{
ASSERT(ppcxHdr!=NULL&&ppcxImg!=NULL&&ppcxBits!=NULL); // because in bitmap bits order, it's blue=>green=>red
// however pcx is red=>green=>blue so use decrease order
//-----------------------------------------
UINT lPos(0), // 记录存入ppcxBits的总数
iX(0), // 记录每个位平面字节序号
rec(0); // 读取_ppcxImg_ 字节序号
for ( int bp=ppcxHdr->BitPlane-1; bp >= 0; bp-- )
{
// RLE 解码=======
iX=0;
while ( iX<ppcxHdr->BytePerLine )
{
BYTE uiValue = ppcxImg[rec++];
if ( (uiValue & 0xc0) == 0xc0 ) // 判断高位字节是否设置 0xc0
{
uiValue = uiValue & 0x3f ; // 计算重复
BYTE Color = ppcxImg[rec++]; // 提取颜色
// 存放到内存DIB
for ( BYTE bRepeat=0; bRepeat < uiValue; bRepeat++ )
{
ppcxBits[(iX++)*ppcxHdr->BitPlane+bp] = Color;
lPos++;
}
}
else
{
ppcxBits[(iX++)*ppcxHdr->BitPlane+bp] = uiValue;
lPos++;
}
}
} return rec;
}/////////////////////程序完////////////////////////我是楼主:
以下这三个参数怎么实现?对指向文件的指针不熟悉。PPCXHEAD ppcxHdr -指向PCXHEAD结构的指针!NULL,导BitPlane,BytePerLine,=>clScanLineSize
* LPBYTE ppcxImg -指向PCX图象区指针!NULL,RLE压缩编码,位置递增+=rec。
* 调用之前获得首地址指针:
* LPBYTE ppcxBits -指向DIB数据区的指针,按扫描行(scanline)长度递增
先谢了!!
DIB位图文件结构如下:
___________________________________
| 位图文件头结构BITMAPFILEHEADER |
-----------------------------------
| 位图信息头结构BITMAPINFOHEADER |
-----------------------------------
| 位图颜色表RGBQUAD |
-----------------------------------
| 位图象素数据 |
-----------------------------------
希望对你有用.