画出来怎么是黑白的?

J_John 2002-11-08 04:00:06
void CClass::Draw(HWND hWnd)
{
unsigned char t;

CClientDC dc(CWnd::FromHandle(hWnd));
CDC dcMemory;
CBitmap bitmap;
CRect rect;

dcMemory.CreateCompatibleDC(&dc);
bitmap.CreateCompatibleBitmap(&dcMemory, m_ImageColCount, m_ImageRowCount);
dcMemory.SelectObject(&bitmap);


for (int i = 0; i < m_ImageRowCount; i++)
for (int j = 0; j < m_ImageColCount; j++)
{
t = m_ImageData[i * m_ImageColCount + j];
dcMemory.SetPixel(j, i, RGB(t, t, t));
}

::GetWindowRect(hWnd, &rect);

dc.StretchBlt(0, 0, rect.Width(), rect.Height(), &dcMemory, 0, 0, m_ImageColCount, m_ImageRowCount, SRCCOPY);

}

调用这个函数后,在目标窗体上出现的是纯黑白的图片。但实际上应该是具有一定灰度的,所以问题是不是出在CClientDC dc的调色板上?望各位赐教。
...全文
97 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
J_John 2002-11-10
  • 打赏
  • 举报
回复
唉,我自己已经找到方法了。
因为CDC是内存设备上下文,在构造时便自动构造了一个黑白的位图,所以
bitmap.CreateCompatibleBitmap(&dcMemory, m_ImageColCount, m_ImageRowCount);
便会建立一个黑白的位图,画出来就自然是黑白的了。

但如果改成
bitmap.CreateCompatibleBitmap(&dc, m_ImageColCount, m_ImageRowCount);
就好了,因为真实dc是用彩色位图的。
ukyoking 2002-11-08
  • 打赏
  • 举报
回复
你把
CDC dcMemory;
CBitmap bitmap;声明为类成员并在构造函数中初始化就正常了,我也碰倒过相似的问题,不知道什么原因
upup
cooljjyy 2002-11-08
  • 打赏
  • 举报
回复
如果是调色板模式就不能用dcMemory.SetPixel(j, i, RGB(t, t, t));
应该用SetPixel(j, i, t);
nicolas2001 2002-11-08
  • 打赏
  • 举报
回复
gz:)

15,978

社区成员

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

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