首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > WinCE >

到底如何把修改后的图片显示出来,求大家帮助!

2013-09-07 
到底怎么把修改后的图片显示出来,求大家帮助!!各位好,我做了一个图片的二值化,把打开的图片进行二值化,然

到底怎么把修改后的图片显示出来,求大家帮助!!
各位好,我做了一个图片的二值化,把打开的图片进行二值化,然后显示出来,二值化成功了,但是怎么也没办法显示,请帮着看一下到底是哪里的问题!!

//这个是打开图片按钮
void CNcistTestDlg::OnBnClickedButOpen()
{
CFileDialog dlg(TRUE, _T("BMP"), NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
_T("BMP Files (*.bmp)|*.bmp|All Files (*.*)|*.*||"));
if(dlg.DoModal() != IDOK)
{
return;
}

//读取BMP文件到m_pBuffer
CString bmpPath = dlg.GetPathName();
HBITMAP hBitmap = SHLoadDIBitmap(bmpPath);
if(false == m_image.IsNull()){
m_image.Destroy();
}
m_image.Attach(hBitmap);


}
//这个是显示
void CNcistTestDlg::OnPaint()
{
//CPaintDC dc(this); // device context for painting
// TODO: 在此处添加消息处理程序代码
// 不为绘图消息调用 CDialog::OnPaint()
CRect rect;

if(m_image && false == m_image.IsNull())
{
// 居中画
CPaintDC dc(this);
m_image.Draw(dc, 120, 80, 200, 150, 0, 0, 200, 150);
}
CDialog::OnPaint();

}
//这个是二值化按钮
void CNcistTestDlg::OnBnClickedButSearch()
{
COLORREF pixel;
int r,g,b;
int iWidth,iHeight;
int g_imgW;
    int g_imgH;
CPaintDC dc(this);

iWidth = m_image.GetWidth();
    iHeight = m_image.GetHeight();

g_imgW = iWidth;
g_imgH = iHeight;

int i = 0;
int j = 0;
for(i = 0; i < iHeight; i++){
for(j = 0; j < iWidth; j++){
pixel = m_image.GetPixel(j,i);
r = GetRValue(pixel);
g = GetGValue(pixel);
b = GetBValue(pixel);
if((r + g + b) <= 127 * 3){
m_image.SetPixelRGB(j,i,0,0,0);

}
else{
m_image.SetPixelRGB(j,i,255,255,255);
}
}
}

m_image.Draw(dc, 120, 80, 200, 150, 0, 0, 200, 150);}
红色的字能显示吗?或者怎么写?求其大家了 图片 bmp 二值化,wince


[解决办法]

可以显示的,但是要点一下打开图片,再把资源管理器窗口关掉,才会呈现出黑白色图案,而且如果图片大小超过资源管理器窗口覆盖范围,多出来那一片就不是黑白的了
到底如何把修改后的图片显示出来,求大家帮助!
到底如何把修改后的图片显示出来,求大家帮助!

我推测是要对窗口执行类似“刷新”的操作才可以显示出二值化后的图片


[解决办法]
到底如何把修改后的图片显示出来,求大家帮助!按照6L那位大虾的回复,我搞定了,把 Invalidate(); 写在最底下那个 } 的前面即可自动刷新
[解决办法]
按照6L那位大虾的回复,我搞定了,把 Invalidate(); 写在最底下那个 } 的前面即可自动刷新


这是刷新的基本知识:想要显示出来,就必须重绘

热点排行