如题,我想对一张BMP位图进行处理,算法我大致知道,但不知道相关函数。我知道Bitmap包括BitmapFileHeader,BitmapInfoHeader,调色板,像素索引值表这四个部分,我有两个方面的问题:1、怎样得到这四部份的具体数据,如(22,32)这个点的RGB值。我先建立CBitmap 对象bmp,再bmp.LoadBitmap(我的图片)。然后怎么搞呢?CBitmap没有封装相关函数啊?MFC中BITMAP结构体也没有后面3部分啊????2、怎样从内存创建一张位图文件并显示???不需要保存到磁盘。就是说,我自己凭想象创建BitmapFileHeader,BitmapInfoHeader这两个结构体,调色板用二维数组,像素索引值表用一维数组,用具体数据填充这四部份。怎样用这四部份组建一个Bitmap文件,并获取他的句柄HBitmap?????
如果位图已经通过LoadBitmap加载到内存,则内存中的图像与显示设备紧密相关,比如原图是彩色图片,显示器是黑白色,通过bmp.LoadBitmap(我的图片)后,内存中的图像数据是黑白色的数据,而且还与显示器位数有关。如果需要在原位图数据上进行图像处理,就不要bmp.LoadBitmap来加载位图,而是打开文件获取位图数据。如果仅仅是在当前显示设备下进行效果处理,则可以使用bmp.LoadBitmap加载位图,通过CBitmap的GetBitmapBit函数可以获取位图数据,如果是24位显示器,则每3个字节表示一个像素,其中第一个字节是B,第二个字节是G,第3个字节是R;如果是32位的显示器,每4个字节表示一个像素,一般前3个字节与24位显示器一样,第4个字节一般没有什么意义。
Microsoft Visual C++,(简称Visual C++、MSVC、VC++或VC)是Microsoft公司推出的开发Win32环境程序,面向对象的可视化集成编程系统。它不但具有程序框架自动生成、灵活方便的类管理、代码编写和界面设计集成交互操作、可开发多种程序等优点,而且通过简单的设置就可使其生成的程序框架支持数据库接口、OLE2,WinSock网络、3D控制界面。
它以拥有“语法高亮”,IntelliSense(自动完成功能)以及高级除错功能而著称。比如,它允许用户进行远程调试,单步执行等。还有允许用户在调试期间重新编译被修改的代码,而不必重新启动正在调试的程序。其编译及建置系统以预编译头文件、最小重建功能及累加连结著称。这些特征明显缩短程式编辑、编译及连结花费的时间,在大型软件计划上尤其显著。
在线等 VC++关于加载读取JPG,PNG,BMP 或者DX 图像格式的问题
2.用二进制将图片写进文件,使用的时候再从文件中抽取出来,可以定义一个类似于这样的结构体 struct PICTURE_INFO { TCHAR name[50]; \/\/文件名 UINT size; \/\/文件大小 TCHAR *pData; \/\/保存数据的指针 } 或者把图片做为二进制资源加进exe文件 3.也就是你说的直接对文件进行加密,比如说...
求教VC++高手,如何将自己导入的bitmap显示
1.把你的图包含到程序的“Bitmap资源”里,会有提示,主要是说该资源使用了大于256色的调色板,在VC里无法编辑等等,你确定就行 2.定位到 OnPaint(),在if()...else()中的else()下添加如下代码 else { \/\/CDialog::OnPaint();\/\/注意要禁止这个调用 CPaintDC dc(this);CRect rect;GetClient...
VC++中,用CFile类,BMP位图打开使用Read和Write函数的问题
你好!void CDib::SaveFile(const char filename)\/\/存放的目标路径 {CFile dibFile(filename,CFile::modeWrite|CFile::modeCreate);dibFile.Write((void*)&bitmapFileHeader,sizeof(BITMAPFILEHEADER));dibFile.WriteHuge(pDib,fileLength-sizeof(BITMAPFILEHEADER));\/\/这里的fileLength在那里初始化的?dibFi...
VC++关于如何用GDI+取得图片的Hbitmap
Graphics graphics(dc.m_hDC); status = graphics.GetLastStatus(); if(Ok == status) { graphics.DrawImage(pImage, 0, 0); \/\/ enjoy of bitmap; } dc.SelectObject(pbmpOld);}一个是用同样是GDI+的Bitmap重新读取文件或读取Image保存的文件:Bitmap* pBitmap = Bit...
vc++中定义图像信息的一段,看不懂,求解释
继续查这2个结构:BITMAPINFOHEADER —— 定义了图像尺寸、颜色数、每像素字节数(或位数)、调色板数等等;RGBQUAD —— 如果 BITMAPINFOHEADER 定义了颜色数非零,这就是调色板起始元素。请参考其他资料以助理解。
用vc++读取bmp格式的图片并显示出来的程序代码
file.Close();return -1;} \/\/读入位图数据 file.ReadHuge(DibBuf,bfSize);file.Close();LPBITMAPINFO pBMI;int size = bfOffBits - 14;pBMI = (LPBITMAPINFO)new char[sizeof(BITMAPINFOHEADER)+256*sizeof(RGBQUAD)];\/\/生成信息头 memcpy(pBMI,DibBuf,size);LPVOID lpBits = (LPVOID)((...
vc++ CBitmap
LoadBitmap是CBitmap的一个方法,Attach是CGdiObject的一个方法,CGdiObject是CBitmap的父类 通常如果资源并不是在该模块中,而是在资源模块中,我会使用Attach,而在本模块中,则使用LoadBitmap。虽然也可以通过Attach来实现,但是我是这么使用的,具体其他更详细的区别,我还没有发现。希望能对你有所帮助。
【高分求救】VC++下如何载入一张位图并获取该位图的像素值
nIDResource 指定位图资源中资源的ID号。获取位图可以用GetBitmapBits()DWORD GetBitmapBits( DWORD dwCount, LPVOID lpBits ) const;CBitmap::GetBitmap int GetBimap( BITMAP* pBitMap );返回值:调用成功时返回非零值,否则为0。参数: pBitMap 指向BITMAP结构的一个指针,不能为NULL。说明:...
在VC++中如何进行图像处理?
申请个二维或一维数组,把图像亮度值装进去。比如用:CBitmap::LoadBitmap 之类的函数,把硬盘中的文件读进数组。然后做各种图像处理。(二值化,过滤处理之类的)再显示或存盘。或者用一些现成的图像处理库。比如收费的(LeadTools),免费的(OpenCV)之类的。
C++图片处理问题(高分50)
第一个问题很麻烦,因为一个BMP图包含的信息部仅仅是每个点的数据,还有很多bitmap格式信息,解决方法:首先你要确定你用什么环境,vc++6.0,2003,2005可用的办法不一样 然后,去网上搜一段写好了的函数或类来解决这个问题,他的实现方法如果你对bmp格式文件存储没有兴趣的话大可以不必关心,与图像处...