从内存缓冲区的Win32 C / C ++加载图像 [英] Win32 C/C++ Load Image from memory buffer

查看:142
本文介绍了从内存缓冲区的Win32 C / C ++加载图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我要加载图像文件(.bmp)上的Win32应用程序文件,但我不希望使用标准LoadBitmap /的LoadImage从Windows API:我想它从一个缓冲区已在内存中加载。我可以很容易地直接从文件加载一个位图,并打印在屏幕上,但这个问题是让我卡住了。

我正在寻找的是,是这样的一个功能:

  HBITMAP LoadBitmapFromBuffer(字符*缓冲区,诠释的宽度,高度INT);


解决方案

没关系,我发现我的解决方案!这里的初始化code:

 的std :: ifstream的是;
is.open(Image.bmp的std :: IOS ::二进制);
is.seekg(0,性病:: IOS ::结束);
长度= is.​​tellg();
is.seekg(0,性病:: IOS :: BEG);
的pbuffer =新的char [长度]
is.read(pbuffer的,长度);
is.close();tagBITMAPFILEHEADER BFH = *(* tagBITMAPFILEHEADER)pbuffer的;
tagBITMAPINFOHEADER波黑= *(* tagBITMAPINFOHEADER)(+的pbuffer的sizeof(tagBITMAPFILEHEADER));
RGBQUAD RGB = *(* RGBQUAD)(+的pbuffer的sizeof(tagBITMAPFILEHEADER)+的sizeof(tagBITMAPINFOHEADER));BITMAPINFO双向;
bi.bmiColors [0] = RGB;
bi.bmiHeader =波黑;字符* pPixels =(+的pbuffer bfh.bfOffBits);字符* ppvBits;HBITMAP = CreateDIBSection(NULL,&放大器;双向,DIB_RGB_COLORS,(无效**)及ppvBits,NULL,0);
SetDIBits(NULL,HBITMAP,0,bih.biHeight,pPixels,&安培; BI,DIB_RGB_COLORS);GetObject的(HBITMAP,sizeof运算(位图),放大器;的CBitmap);

I want to load an image (.bmp) file on a Win32 application, but I do not want to use the standard LoadBitmap/LoadImage from Windows API: I want it to load from a buffer that is already in memory. I can easily load a bitmap directly from a file and print it on the screen, but this issue is making me stuck.

What I'm looking for is a function that works like this:

HBITMAP LoadBitmapFromBuffer(char* buffer, int width, int height);

解决方案

Nevermind, I found my solution! Here's the initializing code:

std::ifstream is;
is.open("Image.bmp", std::ios::binary);
is.seekg (0, std::ios::end);
length = is.tellg();
is.seekg (0, std::ios::beg);
pBuffer = new char [length];
is.read (pBuffer,length);
is.close();

tagBITMAPFILEHEADER bfh = *(tagBITMAPFILEHEADER*)pBuffer;
tagBITMAPINFOHEADER bih = *(tagBITMAPINFOHEADER*)(pBuffer+sizeof(tagBITMAPFILEHEADER));
RGBQUAD             rgb = *(RGBQUAD*)(pBuffer+sizeof(tagBITMAPFILEHEADER)+sizeof(tagBITMAPINFOHEADER));

BITMAPINFO bi;
bi.bmiColors[0] = rgb;
bi.bmiHeader = bih;

char* pPixels = (pBuffer+bfh.bfOffBits);

char* ppvBits;

hBitmap = CreateDIBSection(NULL, &bi, DIB_RGB_COLORS, (void**) &ppvBits, NULL, 0);
SetDIBits(NULL, hBitmap, 0, bih.biHeight, pPixels, &bi, DIB_RGB_COLORS);

GetObject(hBitmap, sizeof(BITMAP), &cBitmap);

这篇关于从内存缓冲区的Win32 C / C ++加载图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆