将图像转换为字符

妙笔生花tys 妙笔生花tys 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
将图像转换为字符
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);
}
}
...全文

相关推荐

C#将图像转换为ASCII字符画

总结一下,C#实现图像到ASCII字符画的转换涉及到读取图像、预处理、灰度映射、缩放、绘制字符和输出结果等多个步骤。

Conmajia

LabVIEW实现字符串艺术:ASCII图像转换

LabVIEW(Laboratory Virtual Instrument Engineering Workbench)是一种由美国国家仪器(National Instruments,简称NI)公司开发的图形化编程语言。它通过图形化编程取代了传统的文本式编程,使工程师能够更直观地设计和实现复杂的工程应用。LabVIEW广泛应用于数据采集、仪器控制及工业自动化等领域,特别适合进行快速原型开发。

抹韵

使用强度的图像到字符转换器

标题中的“使用强度的图像到字符转换器”指的是一个技术,它允许将图像的数据转换成由1和0组成的字符矩阵,这种技术常用于创建ASCII艺术或者在终端或控制台环境中展示图像。

weixin_38747233

GIF图像转换字符

【GIF图像转换字符】是一种将GIF动态图像转化为由字符组成的艺术形式的技术。这种转换方式通常用于在有限的颜色或特殊显示环境下展示图像,比如在旧式的终端机、文本聊天室或者为了创建独特的视觉效果。

zonkey520

文本到图像:将图像转换为文本字符-matlab开发

【标题】:“文本到图像:将图像转换为文本字符-matlab开发”在计算机科学领域,将图像转换为文本字符是一种独特的技术,它涉及到图像处理和字符识别。

weixin_38734008
评论 7
收藏 已收藏
分享
返回顶部