如何显示剪贴板中的DIB位图

文斌 2003-10-23 12:30:52
我通过GetClipboardData(CF_DIB)获得了剪贴板上的位图结构BITMAPINFO,请问我要如何才能将这个位图通过StretchDIBits显示在指定的DC中?

已知剪贴板中确实存在CF_DIB的位图且读出正确

最好有部分源程序

万分感谢
...全文
198 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
mct1025 2003-10-23
  • 打赏
  • 举报
回复
没有调色板的情况
CFileStatus fstatus;
CFile file;
LONG cb;
HGLOBAL hGlobal;
if(file.Open("c:\\start2.bmp",CFile::modeRead)&&
file.GetStatus("c:\\start2.bmp",fstatus)&&((cb

=fstatus.m_size)!= -1))
{
hGlobal = GlobalAlloc(GPTR,cb);
file.Seek(sizeof(BITMAPFILEHEADER), CFile::begin );
file.ReadHuge(hGlobal,cb);
file.Close();
}
if (hGlobal == NULL)
return;
OpenClipboard();
EmptyClipboard();

HANDLE h = ::SetClipboardData( CF_DIB, (BITMAPINFO *)hGlobal)

;
HANDLE hdib = ::GetClipboardData(CF_DIB);

if (hdib == NULL)
return;
BITMAPINFOHEADER *pbih = (BITMAPINFOHEADER *)hdib;
CDC *pDC = GetDC();
::StretchDIBits(pDC->m_hDC,0,0,pbih->biWidth,pbih->biHeight,
0,0,pbih->biWidth,pbih->biHeight,
(BYTE *)pbih+sizeof(BITMAPINFOHEADER),(BITMAPINFO

*)pbih,DIB_RGB_COLORS,SRCCOPY);
ReleaseDC(pDC);
CloseClipboard();
GlobalFree(hGlobal);

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧