请问如何用cbitmap类在内存里,画一个图形,然后将该图形存成bmp文件
解决方案 »
- 关于界面线程
- CListCtrl中的多行提示信息怎么实现,现在只能显示单行提示信息?
- 用ATL写的服务如何调试?请给出具体的步骤,多谢!!!
- 在工具栏中实现csliderctrl控件
- 特级菜鸟问题,怎样截取CString 的一部分?
- VC6是怎么没有这个"comsvcs.h"文件..是不是说明不支持com+,我将VC7中的拿来用,编译不过..
- 上海招聘VC程序员1名 - 不限学历
- 关于IO完成端口,WSASend()发送后,GetQueuedCompletionStatus一直阻塞着?求解答!
- 我已经发现“小花帽”病毒的一点秘密,希望对各位高手编写修复程序有一点帮助
- ATL-DHTML控件的window.external为空
- (求助!)raw socket 编程技巧!
- 一个最初级的settimer程序, 为什么ontimer不执行呀
CBitmapDC - An automatic memory DC wrapper
{
CPictureHolder picture;
picture.CreateFromBitmap((HBITMAP)bmp, NULL, TRUE);
LPPICTUREDISP pPictureDisp=picture.GetPictureDispatch();
pPictureDisp->Release(); // must be released
IStorage* pStg = 0; hr = ::StgCreateDocfile(L"c:\\picttest",
STGM_SHARE_EXCLUSIVE |
STGM_CREATE |
STGM_READWRITE,
0, &pStg);
if(SUCCEEDED(hr))
{
IStream* pStream = 0; hr = pStg->CreateStream(L"PICTURE",
STGM_SHARE_EXCLUSIVE |
STGM_CREATE |
STGM_READWRITE,
0, 0, &pStream);
if(SUCCEEDED(hr))
{
hr = pPictureDisp->SaveAsFile(pStream,
TRUE, // save mem copy
NULL);
pStream->Release();
}
pStg->Release();
}
pPictureDisp->Release();
}
CRect rt;
GetClientRect(rt);
CBitmap bitmap;
CBitmap* pOldbitmap;
CDC MemDC;
MemDC.CreateCompatibleDC(pDC);
bitmap.LoadBitmap(IDB_WORKSPACE);
pOldbitmap = MemDC.SelectObject(&bitmap);
pDC->BitBlt(50,50,rt.Width()-10,rt.Height()-10,&MemDC,0,0,SRCCOPY);
MemDC.SelectObject(pOldbitmap);
MemDC.DeleteDC();
CRect rt;
GetClientRect(rt);
CBitmap bitmap;
CBitmap* pOldbitmap;
CDC MemDC;
MemDC.CreateCompatibleDC(pDC);
bitmap.LoadBitmap(IDB_WORKSPACE);
pOldbitmap = MemDC.SelectObject(&bitmap);
pDC->BitBlt(50,50,rt.Width()-10,rt.Height()-10,&MemDC,0,0,SRCCOPY);
MemDC.SelectObject(pOldbitmap);
MemDC.DeleteDC();
CBitmap bitmap;
HANDLE h=::LoadImage(0,"f:\\aaa.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
bitmap.Attach(h);——————————————————————————
CFile file("F:\\aaa1.bmp",CFile::modeCreate|CFile::modeWrite);
CArchive ar(&file,CArchive::store); BITMAP size;
bitmap.GetBitmap(&size);
int iHeight=size.bmHeight;
int iWidth=size.bmWidth;
int WIDTHBYTES;
unsigned char * pBitBuf=NULL; WIDTHBYTES=(iWidth*3+3)/4*4;
pBitBuf=(unsigned char *)malloc(WIDTHBYTES*iHeight); BITMAPFILEHEADER BitFileHead;
BITMAPINFOHEADER BitInfoHead;
BitInfoHead.biHeight=iHeight;
BitInfoHead.biWidth=iWidth;
BitInfoHead.biSizeImage=WIDTHBYTES*iHeight;
BitInfoHead.biSize = sizeof(BITMAPINFOHEADER);
BitInfoHead.biPlanes = 1;
BitInfoHead.biBitCount = 24;
BitInfoHead.biCompression = BI_RGB;
BitInfoHead.biXPelsPerMeter = 2952; // 75 DPI
BitInfoHead.biYPelsPerMeter = 2952; // 75 DPI
BitInfoHead.biClrUsed = 0;
BitInfoHead.biClrImportant = 0;
BitFileHead.bfType = 'MB'; // Non-portable... sigh
BitFileHead.bfSize = BitInfoHead.biSizeImage+sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
BitFileHead.bfReserved1 = 0;
BitFileHead.bfReserved2 = 0;
BitFileHead.bfOffBits =sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER); BITMAPINFO mapinfo;
mapinfo.bmiHeader=BitInfoHead;
// mapinfo.bmiColors HDC hdc = CreateIC (TEXT("DISPLAY"), NULL, NULL, NULL) ;
::GetDIBits (hdc, (HBITMAP)h,0, iHeight, pBitBuf, &mapinfo, DIB_RGB_COLORS) ;
file.Write(&BitFileHead,sizeof(BITMAPFILEHEADER));
file.Write(&BitInfoHead,sizeof(BITMAPINFOHEADER));
file.Write(pBitBuf,WIDTHBYTES*iHeight); free(pBitBuf);
ar.Close();
file.Close();
bitmap.DeleteObject();
http://www.yangning.com/cgi-bin/topic.cgi?forum=1&topic=82&show=0
GDI 完全不熟:(