
MFC在对话框中根据灰度矩阵画图
如题,使用CDC类做的,由于灰度矩阵是2592*1944,不知道是不是比较大的原因,需要6秒左右才能显示出来!麻烦各位看下,是不是我程序哪里不对?或者是这么大的图像用CD...
如题,使用CDC类做的,由于灰度矩阵是2592*1944,不知道是不是比较大的原因,需要6秒左右才能显示出来!
麻烦各位看下,是不是我程序哪里不对? 或者是这么大的图像用CDC类做不太合适, 我在网上看到有人说用DIB做,但是这个不太熟,也不太清楚到底行不行,麻烦各位支支招,谢谢!
void CFrameAuto::DrawOnStaticArea(CDC* pCDC)
{
CDC m_MemDC;
CBitmap m_Bitmap;
m_MemDC.CreateCompatibleDC(pCDC);
m_Bitmap.CreateCompatibleBitmap(pCDC, 2592, 1944);
m_MemDC.SelectObject(m_Bitmap);
for(size_t i = 0; i < 2592; ++i)
{
for(size_t j = 0; j < 1944; ++ j)
{
m_MemDC.SetPixel(i, j, RGB(g_grey,g_grey,g_grey));
}
}
pCDC->StretchBlt(0, 0, 259,194,&m_MemDC,0, 0, 2592,1944, SRCCOPY);
m_Bitmap.DeleteObject();
m_MemDC.DeleteDC();
} 展开
麻烦各位看下,是不是我程序哪里不对? 或者是这么大的图像用CDC类做不太合适, 我在网上看到有人说用DIB做,但是这个不太熟,也不太清楚到底行不行,麻烦各位支支招,谢谢!
void CFrameAuto::DrawOnStaticArea(CDC* pCDC)
{
CDC m_MemDC;
CBitmap m_Bitmap;
m_MemDC.CreateCompatibleDC(pCDC);
m_Bitmap.CreateCompatibleBitmap(pCDC, 2592, 1944);
m_MemDC.SelectObject(m_Bitmap);
for(size_t i = 0; i < 2592; ++i)
{
for(size_t j = 0; j < 1944; ++ j)
{
m_MemDC.SetPixel(i, j, RGB(g_grey,g_grey,g_grey));
}
}
pCDC->StretchBlt(0, 0, 259,194,&m_MemDC,0, 0, 2592,1944, SRCCOPY);
m_Bitmap.DeleteObject();
m_MemDC.DeleteDC();
} 展开
1个回答
展开全部
SetPixel效率非常低,耗时长是肯定的。
你这个要纯色的位图,直接用刷子就可以了。
比如这样:
m_MemDC.FillSolidRect(0,0,2592,1944,RGB(g_grey,g_grey,g_grey));
用这个代替你的for双重循环就可以了。
更多追问追答
追问
这个只是我做的一个实验,实际上不是纯色的图,
追答
具体问题具体分析,SetPixel的效率就是低,在每次绘图时大量使用肯定会很慢。

2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件...
点击进入详情页
本回答由光点科技提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询