首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Windows Mobile >

IImagingFactory装如bit地图的有关问题

2012-12-18 
IImagingFactory装如bitmap的问题我用CreateCompatibleBitmap创建了一张位图,请问怎样用IImagingFactory中

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);



if(SUCCEEDED(m_pimgfactory->CreateImageFromBuffer(buffer,bmp.bmWidthBytes*bmp.bmHeight,BufferDisposalFlagNone,&m_pimage)))
m_pimage->Draw(GetDC()->m_hDC,&rc,NULL);

这是独立出来的代码,并没有报错,可是就是画不出图
[解决办法]
。。。
mark
[解决办法]
BYTE *buffe1r=NULL; 
你的数据在哪呢?肯定是不行的了。
const void * 指向数据区。
[解决办法]
谁能提供下iimaging.lib的下载地址啊

热点排行