标题:位图为何变小了?
取消只看楼主
BlueDreame
Rank: 1
等 级:新手上路
帖 子:545
专家分:2
注 册:2004-12-16
结帖率:66.67%
 问题点数:0 回复次数:5 
位图为何变小了?

我用画图画了512×512@24bit的位图,可利用如下API时:

HBITMAP hBmp = (HBITMAP) ::LoadImage(...);
BITMAP bm;
::GetObject(...);

// hDC, hDCBmp are valid

::SelectObject(hDCBmp, hBmp);

::BitBlt(...);

//...

关键是bm.bmWidth == bm.bmHeight == 64了。即使在BitBlt中使用512也没用。谁知道是怎么回事。谢谢。

搜索更多相关主题的帖子: 位图 变小 
2006-10-13 07:34
BlueDreame
Rank: 1
等 级:新手上路
帖 子:545
专家分:2
注 册:2004-12-16
得分:0 

可是那样位图就失真了。


2006-10-13 09:09
BlueDreame
Rank: 1
等 级:新手上路
帖 子:545
专家分:2
注 册:2004-12-16
得分:0 

代码:

if(! hBmp)
{
return FALSE;
}

m_lpDDSBack->Restore();
::DeleteObject( m_hBmp );
m_hBmp = hBmp;

HDC hDC;
HDC hDCBmp = ::CreateCompatibleDC( NULL );
::SelectObject(hDCBmp, m_hBmp);

BITMAP bm;
::GetObject(m_hBmp, sizeof( bm ), &bm);
m_rcSrc.left = m_rcSrc.top = 0;
m_rcSrc.right = bm.bmWidth;
m_rcSrc.bottom = bm.bmHeight;

m_lpDDSBack->GetDC( &hDC );
::BitBlt(hDC, 0, 0, bm.bmWidth, bm.bmHeight, hDCBmp, 0, 0, SRCCOPY);
m_lpDDSBack->ReleaseDC( hDC );

::DeleteDC( hDCBmp );

hBmp 就是用LoadImage得到的。


2006-10-13 09:47
BlueDreame
Rank: 1
等 级:新手上路
帖 子:545
专家分:2
注 册:2004-12-16
得分:0 

C++ Builder 6写的,包里有.exe

DRkVBo9C.rar (442.22 KB) 位图为何变小了?



2006-10-13 09:56
BlueDreame
Rank: 1
等 级:新手上路
帖 子:545
专家分:2
注 册:2004-12-16
得分:0 

对DirectDraw的封装和对位图的操作用的是标准C++和Win32 API。与开发环境无关。

里面有.exe


2006-10-13 14:19
BlueDreame
Rank: 1
等 级:新手上路
帖 子:545
专家分:2
注 册:2004-12-16
得分:0 

问题已经解决,原来出在LR_DEFAULTSIZE上,我不知道它原来代表64.

谢谢两位。


2006-10-13 14:37



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-96024-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.179623 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved