有一个图形对象,保存在IPicture中,我想从其中取出一指定矩形区域,并保存入另一个图形对象中,并获得其IPicture接口,如何做到呢?谢谢!!
解决方案 »
- 初学者用win32api编计算器,窗口显示出错
- CString char* char[]有什么区别?
- activex的ocx控件能不能读写注册表
- CreateCompatibleBitmap创建的位图默认是黑色的,在往上画之前,必须刷成你要的底色譬如白色。怎么刷它的底色?
- 动态生成位图,添加到CImageList供CListCtrl使用,两种方法,有一个不成功。
- 好高兴,我的五子棋人人对弈的功能搞定了~
- 请问快速合并文件的方法
- 自定义工具栏的消息映射问题
- 一个莫名其妙的问题
- visual c++ components请问怎么添加?我的版本里没有啊,找了很多软件都不可以,有没有人帮忙呢?
- 在classwizard中显示不出workspace中已有的类。删除.clw,用ctrl-w也没用!!!
- 统计一下大家的职业,谢谢
你可以先将要得到的区域画在一个内存设备上,得到他的位图句柄,再把位图存入另一个IPicture中。我觉得得到位图句柄就可以作任何事了,没有必要再要一个IPicture了。
我是需要实现这样一个方法
谢谢
CDC::BitBlt()
具体可以参考:MSDN==>CDC:Bitmap Functions
IPicuture->Render到一个BITMAP上
然后把这个BITMAP中你需要的再放到IPicture里面,一般用用没什么问题,几百MB的超大图片可能效率会底些。
IStream* pStream = NULL;
if(S_OK == CreateStreamOnHGlobal(hGlobal, TRUE, &pStream) )
{
OleLoadPicture(pStream, nSize, FALSE, IID_IPicture, (LPVOID *)&m_IPicture);
}
----
刚才copy少了。。呵呵
hGlobal中的数据是什么?怎么存入呢?要完全由自己创建关于图片的信息吗?
自己创建需要建立图片信息
CFile PictureFile;
CFileException e;
int nSize = 0;
if(PictureFile.Open(sFilePathName, CFile::modeRead | CFile::typeBinary, &e))
{
nSize = PictureFile.GetLength();
BYTE* pBuffer = new BYTE[nSize];
if(PictureFile.Read(pBuffer, nSize) > 0 )
{
//LoadPictureData就是我上面的代码了
if(LoadPictureData(pBuffer, nSize))
bResult = TRUE;
}
PictureFile.Close();
delete [] pBuffer;
}
我用的是VS.net,使用了其中的CImage类,它其中的Save函数,大致调用了如下方式:
Gdiplus::Bitmap bm( m_hBitmap, NULL );
status = bm.Save( pStream, &clsidEncoder, NULL );
但是,Gdiplus与VB.net兼容,但是与VB6写的程序似乎不兼容,所以我以为是我代码的问题,提取问题的重点后,有以上一问。
非常感谢你的回答,稍后给分。再次对你的热心帮助表示感谢!