小辉程序员之路, since 1996 http://www.xiaohui.com
乐走天涯: 工作并快乐着,职业并休闲着
 » 首页 > Mulitmedia 多媒体: 位图(Bitmap)及图像格式处理

拷贝位图到剪接板


http://www.XiaoHui.com 日期: 2002-01-26 13:00

拷贝位图到剪接板非常简单,唯一要注意的是,如果位图需要调色板才能正确显示,则也要拷贝调色板。

函数一:拷贝设备相关位图到调色板

// CopyBitmapToClipboard - Copies a device-dependent bitmap to clipboard // pWnd - Pointer to window that opens the clipboard // bitmap - The device-dependent bitmap // pPal - Pointer to logical palette - Can be NULL // NOTE - GDI objects are detached from bitmap & pPal // as the clipboard owns them after the copy void CopyBitmapToClipboard( const CWnd *pWnd, CBitmap& bitmap, CPalette* pPal ) { ::OpenClipboard(pWnd->GetSafeHwnd()); ::EmptyClipboard() ; if( pPal ) ::SetClipboardData (CF_PALETTE, pPal->GetSafeHandle() ) ; ::SetClipboardData (CF_BITMAP, bitmap.GetSafeHandle() ) ; ::CloseClipboard () ; bitmap.Detach(); if( pPal ) pPal->Detach(); }函数二:拷贝设备无关位图到剪接板

CopyDIBToClipboard()与CopyBitmapToClipboard()非常相似,内存句柄包含BITMAPINFO,位图首先要使用GlobalAlloc()分配内存。一旦DIB拷贝到剪接板,内存句柄就被剪接板拥有,并不能让应用程序释放。

// CopyDIBToClipboard - Copies a device-dependent bitmap to clipboard // pWnd - Pointer to window that opens the clipboard // hDIB - Memory handle that contains BITMAPINFO & bitmap bits // pPal - Pointer to logical palette - Can be NULL // NOTE - GDI objects are detached from bitmap & pPal // as the clipboard owns them after the copy void CopyDIBToClipboard( const CWnd *pWnd, HGLOBAL hDIB, CPalette* pPal ) { ::OpenClipboard(pWnd->GetSafeHwnd()); ::EmptyClipboard(); if( pPal ) ::SetClipboardData (CF_PALETTE, pPal->GetSafeHandle() ) ; ::SetClipboardData (CF_DIB, hDIB ) ; ::CloseClipboard () ; bitmap.Detach(); if( pPal ) pPal->Detach(); }函数三:拷贝窗口图像到剪接板

CopyWndToClipboard()函数拷贝窗口图像到剪接板。

void CopyWndToClipboard( CWnd *pWnd ) { CBitmap bitmap; CClientDC dc(pWnd); CDC memDC; CRect rect; memDC.CreateCompatibleDC(&dc); pWnd->GetWindowRect(rect); bitmap.CreateCompatibleBitmap(&dc, rect.Width(),rect.Height() ); CBitmap* pOldBitmap = memDC.SelectObject(&bitmap); memDC.BitBlt(0, 0, rect.Width(),rect.Height(), &dc, 0, 0, SRCCOPY); pWnd->OpenClipboard() ; EmptyClipboard() ; SetClipboardData (CF_BITMAP, bitmap.GetSafeHandle() ) ; CloseClipboard () ; memDC.SelectObject(pOldBitmap); bitmap.Detach(); }

Tags: VC 源码: Bitmap



 文章评论

目前没有任何评论.

↓ 快抢占第1楼,发表你的评论和意见 ↓
 
发表你的评论
如果你想针对此文发表评论, 请填写下列表单:
姓名: * 必填
E-mail: 可选 (不会被公开)
反垃圾广告: 为了防止广告机器人自动发贴, 请计算下列表达式的值:
10 + 18 = * 必填
评论内容:
* 必填
你可以使用下列标签修饰文字:
[b] 文字 [/b]: 加粗文字
[quote] 文字 [/quote]: 引用文字

 

小辉程序员之路 建站于 1997 ◇ 做一名最好的开发者是我不变的理想……
Copyright(C) 1997-2008 XiaoHui.com   All rights reserved
声明:站内所有原创文字,未经许可,均可转载、复制。
转载时必须以链接形式注明作者和原始出处