
MFC中显示内存中的位图到对话框的程序为何出错?
//只截取了绘制图象部分的程序,自己感觉出现问题的地方已标出//大家帮忙看看这个显示内存中的位图到对话框的程序为什么没有颜色!voidCMyDlg::OnPaint(){...
//只截取了绘制图象部分的程序,自己感觉出现问题的地方已标出
//大家帮忙看看这个显示内存中的位图到对话框的程序为什么没有颜色!
void CMyDlg::OnPaint()
{
CDialog::OnPaint();
short int *pRGB={0}; //定义颜色矩阵
CWnd *pWnd=GetDlgItem(IDC_STATIC);
CDC *pDC=pWnd->GetDC(),hDC;
bitmap.CreateBitmap (512, 512, 0, 16, pRGB); //创建位图,问题 1
pWnd->Invalidate();
pWnd->UpdateWindow();
CDC dcmemory;
dcmemory.CreateCompatibleDC(pDC);
dcmemory.SelectObject(&bitmap);
for (int ii = 0; ii <100; ii++) //找一小块区域赋给颜色值
{
for (int jj = 0; jj<100; jj++)
{
dcmemory.SetPixel(ii,jj,RGB(120,120,120)); //问题 2
}
}
pDC->BitBlt(300, 0, 512, 512, &dcmemory, 0, 0, SRCCOPY); //在屏幕上显示512*512的bmp图片
dcmemory.DeleteDC();
}
//为什么在问题 1 处,第三、四个参数无论怎么设置,图片都是黑白的,或者有时候就根本不显示图片?
//我希望图片由一定灰度,不能纯黑纯白,可是问题2处好像无论如何小块区域内的颜色不是纯黑就是纯白! 展开
//大家帮忙看看这个显示内存中的位图到对话框的程序为什么没有颜色!
void CMyDlg::OnPaint()
{
CDialog::OnPaint();
short int *pRGB={0}; //定义颜色矩阵
CWnd *pWnd=GetDlgItem(IDC_STATIC);
CDC *pDC=pWnd->GetDC(),hDC;
bitmap.CreateBitmap (512, 512, 0, 16, pRGB); //创建位图,问题 1
pWnd->Invalidate();
pWnd->UpdateWindow();
CDC dcmemory;
dcmemory.CreateCompatibleDC(pDC);
dcmemory.SelectObject(&bitmap);
for (int ii = 0; ii <100; ii++) //找一小块区域赋给颜色值
{
for (int jj = 0; jj<100; jj++)
{
dcmemory.SetPixel(ii,jj,RGB(120,120,120)); //问题 2
}
}
pDC->BitBlt(300, 0, 512, 512, &dcmemory, 0, 0, SRCCOPY); //在屏幕上显示512*512的bmp图片
dcmemory.DeleteDC();
}
//为什么在问题 1 处,第三、四个参数无论怎么设置,图片都是黑白的,或者有时候就根本不显示图片?
//我希望图片由一定灰度,不能纯黑纯白,可是问题2处好像无论如何小块区域内的颜色不是纯黑就是纯白! 展开
3个回答
展开全部
你的颜色矩阵pRGB这样定义是不行的,没有分配空间的指针送给函数去处理天知道它会给你什么(或许又发现一个Exploit^_^),你需要按照创建位图的实际数据空间大小给它分配内存,或者直接用NULL。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
式试CreateCompatibleBitmap?
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
参数3含义不清楚,要显示彩色图的话就要设成1
图片不显示可能跟你的显示器的显示模式有关系,如果显示器的色深为32bits的话,显示16bits的位图就有问题,你可以把参数4设成32
图片不显示可能跟你的显示器的显示模式有关系,如果显示器的色深为32bits的话,显示16bits的位图就有问题,你可以把参数4设成32
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询