C ++:什么是阅读和Windows上使用C ++写的BMP文件,最简单的方法?
-
11-07-2019 - |
题
我想加载BMP文件,执行一些操作上它在存储器中,并输出在Windows上使用C ++一个新的BMP文件(Win32本地)。我知道 ImageMagick的的,它的C ++结合的 Magick ++ ,但我认为这是这个项目的矫枉过正,因为我目前在其他文件格式或平台不感兴趣。
什么是代码设置方面的最简单的方法来读取和写入BMP文件?答案可能是“只使用Magick ++,这是最简单的。”
相关问题:什么是最好的图像处理库
解决方案
在为Windows开发刚刚我通常只使用ATL 的CImage 类
其他提示
EasyBMP 如果你只想BMP支持。 I'ts很简单,开始使用在几分钟内,它是多平台的,如果你需要这一点。
一个BMP文件由3层结构。随后的字节的阵列BITMAPFILEHEADER后跟一个BITMAPINFO。
使用Win32是调用的CreateFile,GetFileSize,ReadFile和CloseHandle的该文件图像加载到存储器加载BMP文件,然后该绝对最简单的方法只投的指针缓冲器,一个BITMAPFILEHEADER并从那里。
我撒谎,更简单的方法是调用的LoadImage。并确保通过LR_DIBSECTION标志以确保GDI犯规加载的图像转换成任何一位深度主显示器配置为。这有让你一个HBITMAP,你可以选择到DC,因此提请各地使用GDI的优势。
要然而保存它,没有捷径。您需要准备一个BITMAPFILEHEADER,写出来,填写BITMAPINFO结构,写出来,然后实际像素数据。
在的CBitmap 类做BMP我/ O。
#include <windows.h>
我没有用Magick ++,但Windows有一个库,称为Windows图像处理组件,其很可能会满足您的需求。
我试图CImage
如上,但我有C数组充满了我只是想转储为BMP(或任何其他格式)的像素值的。 CImage
没有构造函数是什么,以及我不想链接MFC(用于CBitmap
),也不揣摩IWIC。
什么是很容易被 CIMG :
#include <cimg/cimg.h>
using namespace cimg_library;
//...
void SaveMyData(uint8_t *pxarray, int width, int height)
{
CImg<uint8_t> img(pxarray, width, height);
img.save_bmp("sav.bmp");
}