我想加载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>

的LoadImage

我没有用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");
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top