当前位置: 代码迷 >> Windows Mobile >> IImagingFactory装如bit地图的有关问题
  详细解决方案

IImagingFactory装如bit地图的有关问题

热度:8444   发布时间:2013-02-26 00:00:00.0
IImagingFactory装如bitmap的问题
我用CreateCompatibleBitmap创建了一张位图,请问怎样用IImagingFactory中的函数读取这张位图?
------解决方案--------------------------------------------------------
CreateCompatibleBitmap创建位图后保存为文件。
然后用这个函数读取就OK了:IImagingFactory::CreateImageFromFile
具体使用查查MSDN。
------解决方案--------------------------------------------------------
补充一下。
CreateCompatibleBitmap返回的是HBITMAP。
可以用FromHbitmap函数转换为bitmap。
------解决方案--------------------------------------------------------
IImagingFactory也许已经提供了直接读取位图句柄的方法。不过有一种方法是可行的,你可以先将CreateCompatibleBitmap的这幅位图截取下来保存为一幅图片,再利用CreateImageFromFile 将这幅图片加载到Imaging上。
------解决方案--------------------------------------------------------
那么,有没有办法把CreateCompatibleBitmap创建出来的图片转变成流呢?或者是临时的资源文件?因为把bitmap保存为文件再读取,这样效率并不好
------解决方案--------------------------------------------------------
uint CreateImageFromBuffer(IntPtr buffer, uint size, BufferDisposalFlag disposalFlag, out IImage image);

------解决方案--------------------------------------------------------
引用:
uint CreateImageFromBuffer(IntPtr buffer, uint size, BufferDisposalFlag disposalFlag, out IImage image); 

能详细一点吗?我主要是想知道如何把HBITMAP转换为buffer
------解决方案--------------------------------------------------------
看看例子,X:\Program Files\Windows CE Tools\wce500\Windows Mobile 5.0 Smartphone SDK\Samples\CPP\Win32\Imaging
------解决方案--------------------------------------------------------
看看例子,X:\Program Files\Windows CE Tools\wce500\Windows Mobile 5.0 Smartphone SDK\Samples\CPP\Win32\Imaging
------解决方案--------------------------------------------------------
CDC dc;
BYTE *buffer=NULL;
dc.CreateCompatibleDC(NULL);
BITMAPINFO bitmapinfo={0};
bitmapinfo.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
bitmapinfo.bmiHeader.biWidth=40;
bitmapinfo.bmiHeader.biHeight=40;
bitmapinfo.bmiHeader.biPlanes=1;
bitmapinfo.bmiHeader.biBitCount=24;
HBITMAP bitmap=CreateDIBSection(dc,&bitmapinfo,DIB_RGB_COLORS,(LPVOID *)&buffer,NULL,0);
BYTE *buffe1r=NULL;
m_pimgfactory->CreateImageFromBuffer(buffe1r,40*40*3,BufferDisposalFlagNone,&m_pimage);

搞了好久终于在WM下实现HBITMAP的转换,但这段代码总是在CreateImageFromBuffer中报错,不知何解?
------解决方案--------------------------------------------------------
报什么错啊~~
是不是你没有引用头文件和LIB库啊?
------解决方案--------------------------------------------------------
IImagingFactory *m_pimgfactory;
IImage *m_pimage;

CoInitializeEx(NULL,COINIT_MULTITHREADED);
CoCreateInstance(CLSID_ImagingFactory,
NULL,
CLSCTX_INPROC_SERVER,
IID_IImagingFactory,
(LPVOID*)&m_pimgfactory);
CDC dc;
BYTE *buffer=NULL;
dc.CreateCompatibleDC(GetDC());
BITMAPINFO bitmapinfo={0};
bitmapinfo.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
bitmapinfo.bmiHeader.biWidth=40;
bitmapinfo.bmiHeader.biHeight=40;
bitmapinfo.bmiHeader.biPlanes=1;
bitmapinfo.bmiHeader.biBitCount=24;

HBITMAP bitmap=CreateDIBSection(dc,&bitmapinfo,DIB_RGB_COLORS,(LPVOID *)&buffer,NULL,0);
dc.SelectObject(bitmap);
CPen pen(PS_SOLID,5,RGB(255,0,0));
dc.SelectObject(&pen);
dc.MoveTo(5,5);
dc.LineTo(35,35);
dc.MoveTo(35,5);
dc.LineTo(5,35);
pen.DeleteObject();

BITMAP bmp;
GetObject(bitmap,sizeof(BITMAP),&bmp);
CRect rc(0,0,40,40);
  相关解决方案