社区
图形处理/算法
帖子详情
菜鸟告急:怎样将位图像素数据读入数组??(vc++)
RobJack
2009-05-11 10:31:40
get_image(int x, int y, int Dx, int Dy, BYTE *buf)//矩形窗口数据读入一维数组,x、y、Dx、Dy分别为左上角起始坐标,图像宽度和高度
例如
for(i = 0; i < Dy; i++)
{
get_image(x, y + i, Dx, i, buf); // 读出一行数据
……
}
具体如何将位图的一行数据读出来呢?请给代码,不胜感激!!
...全文
302
8
打赏
收藏
菜鸟告急:怎样将位图像素数据读入数组??(vc++)
get_image(int x, int y, int Dx, int Dy, BYTE *buf)//矩形窗口数据读入一维数组,x、y、Dx、Dy分别为左上角起始坐标,图像宽度和高度 例如 for(i = 0; i < Dy; i++) { get_image(x, y + i, Dx, i, buf);//读出一行数据 …… } 具体如何将位图的一行数据读出来呢?请给代码,不胜感激!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
lucklizhan
2009-05-14
打赏
举报
回复
直接解析比较清楚一点
cau228charm
2009-05-14
打赏
举报
回复
这个函数的参数有问题吧
huguangdieying
2009-05-13
打赏
举报
回复
void bmpshift(void)
{
FILE *fp;
LONG i,j,MapHeight,MapWidth;
BITMAPINFOHEADER infoheader;
memset(&infoheader,0,sizeof(BITMAPINFOHEADER));
fp=fopen(".\\33.bmp","rb");
fseek(fp,14,SEEK_SET); //指针移动
fread(&infoheader,sizeof(BITMAPINFOHEADER),1,fp); //infoheader指向信息头 指针会移动
MapHeight=infoheader.biHeight;
MapWidth=infoheader.biWidth;
GLfloat r,g,b;
for(i=0;i<MapHeight;i++)
for(j=0;j<MapWidth;j++)
{
b=float(fgetc(fp));
g=float(fgetc(fp));
r=float(fgetc(fp));
if(infoheader.biBitCount==32)
fgetc(fp);
}
fclose(fp);
}可以读24位或32位的rgb数据
dujimache123
2009-05-13
打赏
举报
回复
BITMAPINFO * pBmpInfo;
BYTE * pBmpData;
BITMAPFILEHEADER bmpHeader;
BITMAPINFOHEADER bmpInfo;
CFile bmpFile;
CString strFileName;
CString strFilter = "位图文件(*.bmp)|*.bmp|所有文件(*.*)|*.*|";
CFileDialog dlg(TRUE,NULL,NULL,NULL,strFilter,this);
if (!dlg.DoModal() == IDOK) return;
strFileName = dlg.GetPathName();
/// 通过读取位图文件显示位图
if(!bmpFile.Open(strFileName,CFile::modeRead|CFile::typeBinary)) return;
if (bmpFile.Read(&bmpHeader,sizeof(BITMAPFILEHEADER)) != sizeof(BITMAPFILEHEADER))
{
AfxMessageBox("read bmp header failed!");
return;
}
if (bmpHeader.bfType != 0x4d42)
{
AfxMessageBox("invalid file type!");
return;
}
if (bmpFile.Read(&bmpInfo,sizeof(BITMAPINFOHEADER)) != sizeof(BITMAPINFOHEADER))
{
AfxMessageBox("read bmp infor header failed!");
return;
}
if (bmpInfo.biBitCount != 24)
{
AfxMessageBox("File is not 24 bit.Application doesn't support this kind of file!");
return;
}
pBmpInfo = (BITMAPINFO *)new char[sizeof(BITMAPINFOHEADER)];
if (!pBmpInfo)
{
AfxMessageBox("memory error!");
return;
}
memcpy(pBmpInfo,&bmpInfo,sizeof(BITMAPINFOHEADER));
DWORD dataBytes = bmpHeader.bfSize - bmpHeader.bfOffBits;
pBmpData = (BYTE*)new char[dataBytes];
if (!pBmpData)
{
AfxMessageBox("memory error!");
delete pBmpData;
return;
}
if (bmpFile.Read(pBmpData,dataBytes) != dataBytes)
{
AfxMessageBox("Read bmp data failed!");
delete pBmpInfo;
delete pBmpData;
return;
}
bmpFile.Close();
CClientDC *pDC = new CClientDC(this);
pDC->SetStretchBltMode(COLORONCOLOR);
StretchDIBits(pDC->GetSafeHdc(),0,0,bmpInfo.biWidth,bmpInfo.biHeight,0,0,bmpInfo.biWidth,bmpInfo.biHeight,pBmpData,pBmpInfo,DIB_RGB_COLORS,SRCCOPY);
doudouHuY
2009-05-13
打赏
举报
回复
方法1、自己解析bmp文件,分析bitmapheader获取位图信息,载入位图数据
方法2、直接将位图当做资源载入进来然后获取位图像素信息
chiwa737
2009-05-13
打赏
举报
回复
学习
-------------------------------------
http://slash-directx.blogspot.com/
TADICAN
2009-05-12
打赏
举报
回复
为什么不用Resource?
xsc2001
2009-05-12
打赏
举报
回复
这个还得看你的位图是8位还是24位的,不同的位图一个象素保存的数据大小不一样,你是要把象素弄到一个buf里?
VC小技巧:窗体中显示bmp图象
本文介绍如何在Visual
C++
中加载并显示BMP格式的图像。通过在SDI应用程序中利用GDI函数实现图像显示,包括创建内存设备上下文、选择
位图
对象等步骤。
用什么函数能获取屏幕当前
像素
值
本文探讨了在视频播放过程中获取屏幕某点
像素
值的方法。针对getpixel函数无法正常工作的问题,提出了禁用显卡硬件加速、打开多个播放进程以及直接通过播放软件获取帧
数据
等解决方案。
基于VC的数字图像处理——BMP文件读取、存储、像元值统计
本文详细介绍了一种在Visual
C++
环境下使用Visual Studio 2010进行BMP图像读写及统计的方法,包括图像信息读取、
像素
值统计与图像保存等功能。代码示例清晰,适合初学者学习。
pygame.surfarray.array3d()的作用
本文详细介绍了pygame库中的surfarray.array3d()函数。该函数用于将Surface对象中的
像素
复制到一个三维
数组
中,适用于各种
像素
格式。通过示例展示了如何使用此函数获取显示Surface的图像
数据
。
二值化的cv2.threshold函数
这篇博客介绍了如何运用cv2.threshold函数进行图像二值化操作,适合初学者理解。同时,博主推荐了一系列从入门到精通的技术教程,包括TensorFlow、
C++
标准模板库、
C++
和Python编程,以及在Visual Studio和VC2015中使用各种库的实践课程。
图形处理/算法
19,464
社区成员
50,678
社区内容
发帖
与我相关
我的任务
图形处理/算法
VC/MFC 图形处理/算法
复制链接
扫一扫
分享
社区描述
VC/MFC 图形处理/算法
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章