已有8人关注
请教:《Visual C++开发实战1200例》实例536图像转换为字符
发表在VC++答疑区 2015-05-19
是否精华
版块置顶:
《Visual C++开发实战1200例》实例536图像转换为字符
源代码如下:
void CPictureToTextDlg::OnConvert() 
{
CPaintDC dc(this);
long* m_pbmpdata;
long* p_tmp;
BITMAPINFO *m_pbmpinfo,m_bmp;

HBITMAP hbmp=(HBITMAP)LoadImage(::AfxGetResourceHandle(),"bitmap.bmp",
IMAGE_BITMAP,0, 0,LR_DEFAULTCOLOR|LR_LOADFROMFILE);
m_bmp.bmiHeader.biSize=sizeof(m_bmp.bmiHeader);
m_bmp.bmiHeader.biBitCount=0;

int bmpWidth;
int bmpHeight;
GetDIBits(dc.GetSafeHdc(),hbmp,0,1,NULL,&m_bmp,DIB_RGB_COLORS);
bmpWidth=m_bmp.bmiHeader.biWidth;
bmpHeight=m_bmp.bmiHeader.biHeight;

p_tmp=(long*)malloc(bmpWidth*bmpHeight*m_bmp.bmiHeader.biBitCount+sizeof(BITMAPINFO));
m_pbmpinfo=(BITMAPINFO*)p_tmp;
m_pbmpdata=p_tmp+sizeof(BITMAPINFO);
memcpy(p_tmp,(const void*)&m_bmp,sizeof(BITMAPINFOHEADER));
GetDIBits(dc.GetSafeHdc(),hbmp,0,m_bmp.bmiHeader.biHeight,m_pbmpdata,
m_pbmpinfo,DIB_RGB_COLORS);

long lngBackColor=RGB(255,255,255);
long lTemp;
int r,g,b;
CString strChar,strTemp;
for(int i=bmpHeight;i>1;i--)
{
for(int j=1;j<bmpWidth;j++)
{
lTemp=m_pbmpdata[(j-1)+(i-1)*bmpWidth];

r=GetRValue(lTemp);
g=GetGValue(lTemp);
b=GetBValue(lTemp);

if(r>224 || g >224 ||  r >224)
strChar=" ";
else if(r>192 || g >192 ||  r >192 )
strChar="#";
else if(r>160 || g >160 ||  r >160 )
strChar="%";
else if(r>128 || g >128 ||  r >128 )
strChar="$";
else if(r>96 || g >96 ||  r >96 )
strChar="8";
else if(r>64 || g >64 ||  r >64 )
strChar="X";
else if(r>32 || g >32 ||  r >32 )
strChar="?";
else
strChar="?";
m_edit.GetWindowText(strTemp);
strTemp=strTemp+strChar;
m_edit.SetWindowText(strTemp);

}
m_edit.GetWindowText(strTemp);
strTemp=strTemp+"\r\n";
m_edit.SetWindowText(strTemp);
}
}

我想把前面代码换成获取图像上下文那样的,怎么做?

就跟下面灰度化实例类似的
void CTang511Dlg::OnOK() 
{
CDC* pDC = m_image.GetDC();
CRect m_rect ;
m_image.GetClientRect(m_rect);

COLORREF m_color;
DWORD m_gray;
BYTE r,g,b;
for (int i = 0; i<m_rect.right;i++)
for (int j = 0;j<m_rect.bottom;j++)
{
m_color = pDC->GetPixel(i,j);
r = GetRValue(m_color);
g = GetGValue(m_color);
b = GetRValue(m_color);

m_gray = (0.38*r+0.49*g+0.1*b);

m_color = RGB(m_gray,m_gray,m_gray);
pDC->SetPixel(i,j,m_color);
}
}
分享到:
精彩评论 3
学分: LV1
TA的每日心情
开心
2020-06-16 09:16:38
2015-05-19
沙发
您好,读者,由于我们作者时间有限,我们仅对我们图书中的原项目有错误的提供帮助及解决,大家自行开发或改编程的项目不予提供解决。
您可以加群讨论。VC/C/C++技术交流群:365354473
佚名
学分:70 LV3
TA的每日心情
开心
2021-07-05 14:21:40
2015-05-19
板凳
[FIELDSET][LEGEND]引自:1楼[/LEGEND]
您好,读者,由于我们作者时间有限,我们仅对我们图书中的原项目有错误的提供帮助及解决,大家自行开发或改编程的项目不予提供解决。
您可以加群讨论。VC/C/C++技术交流群:365354473

[/FIELDSET]

回复:我想问下,这串代码是什么意思?
HBITMAP hbmp=(HBITMAP)LoadImage(::AfxGetResourceHandle(),"bitmap.bmp", 
爱学习
学分:0 LV1
TA的每日心情
开心
2020-03-23 20:54:03
2015-05-20
地板
[FIELDSET][LEGEND]引自:2楼[/LEGEND]
[FIELDSET][LEGEND]引自:1楼[/LEGEND]
您好,读者,由于我们作者时间有限,我们仅对我们图书中的原项目有错误的提供帮助及解决,大家自行开发或改编程的项目不予提供解决。
您可以加群讨论。VC/C/C++技术交流群:365354473

[/FIELDSET]

回复:我想问下,这串代码是什么意思?
HBITMAP hbmp=(HBITMAP)LoadImage(::AfxGetResourceHandle(),"bitmap.bmp", 
[/FIELDSET]

回复:
  加载位图。
首页上一页 1 下一页尾页 3 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照