急急急!!!如何从windows提取点阵?

lian98 2002-03-15 09:01:26
在Windows下编程可以用以下方法实现:


1创建一个内存DC,调用Textout将每一个字画到memDC上,就可以得到字符的点阵。


2调用GetGlyphOutline也可以得到字符的点阵。


谁可对上面方法进行指点,最好有例子来说明.谢谢



...全文
75 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
lian98 2002-03-27
  • 打赏
  • 举报
回复
结了,strip得80
involute得20
wuxq 2002-03-18
  • 打赏
  • 举报
回复
我的一段显示到液晶屏的程序:
m_Bitmap.CreateBitmap(128, 64, 1, 1, NULL);
m_dc.CreateCompatibleDC(NULL);
m_pOldBitmap = m_dc.SelectObject(&m_Bitmap);

m_dc.SelectStockObject(WHITE_PEN);
m_dc.Rectangle(0, 0, 128, 64);
// 显示到bitmap
m_dc.DrawText(m_strMenu, CRect(0, 0, 128, 64), DT_LEFT);
// 拷贝到屏幕
dc.BitBlt(0, 0, 128, 64, &m_dc, 0, 0, SRCCOPY);

// 转换为液晶屏格式
BYTE bits[16 * 64], yj[16 * 64];
m_Bitmap.GetBitmapBits(16 * 64, bits);
int is8, iy8;
memset(yj, 0, 16 * 64);
for (i = 0; i < 128; i++)
{
is8 = i / 8;
iy8 = 7 - i % 8;
for (int j = 0; j < 64; j++)
{
yj[i + (j / 8) * 128] |= ((bits[is8 + j * 16] >> iy8) & 1) << (7 - (j % 8));
}
}
involute 2002-03-18
  • 打赏
  • 举报
回复
//刚才有句错了,别误人子弟
//应该是
dc.BitBlt(0,0,32,32,pDC,0,0,SRCCOPY);
involute 2002-03-18
  • 打赏
  • 举报
回复
//呵呵,方法很奇特,我来帮帮你

pDC->OutText(0,0,"Hello,World");
CDC dc;
dc.CreateCompatibleDC(pDC);
CBitmap bmp,*pOldBmp;
bmp.CreateCompatibleBitmap(pDC,32,32);//位图设多大看你输出的字了,试试好了
pOldBmp=dc.SelectObject(&dc)
dc.BitBlt(0,0,32,32,pDC,100,100,SRCCOPY);
for(int x=0;x<32;x++)
for(int y=0;y<32;y++)
{
if(dc.GetPixel(x,y)==RGB(0x00,0x00,0x00))//输出文本的颜色,这里是黑的,该点有点阵
{
....
//你要怎么处理就放在这里好了
....
}
}
pOldBmp=dc.SelectObject(pOldBmp);
strip 2002-03-18
  • 打赏
  • 举报
回复
email 已发出

lian98 2002-03-16
  • 打赏
  • 举报
回复
我比较笨,可以给出上面这种方法的例子吗?
E-Mail:lian98@21cn.com
strip 2002-03-16
  • 打赏
  • 举报
回复
1创建一个内存DC,调用Textout将每一个字画到memDC上,就可以得到字符的点阵。

这种方法理解上比较简单,不用去理解微软的格式,谁都会实现
strip 2002-03-16
  • 打赏
  • 举报
回复
【函数】
GetGlyphOutline

【操作系统】
Win9X:Yes
WinNT:Yes

【声明】
GetGlyphOutline Lib "gdi32" Alias "GetGlyphOutlineA" (ByVal hdc As Long, ByVal uChar As Long, ByVal fuFormat As Long, lpgm As GLYPHMETRICS, ByVal cbBuffer As Long, lpBuffer As Any, lpmat2 As MAT2) As Long

【说明】
取得TureType字体中构成一个字符的曲线信息。主要用于将文本转换成曲线,以及用于字体的特殊处理(比如造字程序。无论如何,都要求程序员掌握高深的字体技术)。请参考由微软发布的TureType字体规格书,其中对这个字体进行了更详细的解释

【返回值】


【其它】


【参数表】



大全说明

函数功能:该函数取得被选进指定设备环境的TrueType字体的字符轮廓或位图。


函数原型:DWORD GetGlyphOutline(HDC hdc, UINT uChar, UINT uFormat, LPGLYPHMETRICS lpgm, DWORD cbBuffer, LPVOID lpvBuffer, CONST MAT2 *lpmat2);


参数:


hdc:设备环境句柄。


uChar:指定被返回其数据的字符。


uFormat:指定函数取得的数据的格式。可用下列值之一:各值含义为:


GGO_BITMAP:函数获得字形位图。要得到善于内存分配的信息,参见后面备注部分。


GGO_NATIVE:函数获得光栅器(rasterrizer)的本地格式的曲线数据点,并使用字体的设计单位,当指定了此值,由lpMatrix指定的任何变换都被忽略。


GGO_METRICS:函数只获得由lpgm指定的GLYPHMETRICS结构。其余缓冲区被忽徊,此值影响函数失败时返回值的含义,参见后面的返回值部分。


GGO_GRAY2_BITMAP:函数获得含5级灰色的字形位图。


GGO_GRAY4_BITMAP:函数获得含17级灰色的字形位图。


GGO_GRAY8_BITMAP:函数获得含65级灰色的字形位图。


注意:对GGO_GRAYnBITMAP值,函数获得n*n+1级灰色的字形位图。


lpgm:指向结构GLYPHMETRICS的指针,用于描述字表在字符单元的放置。


cbBuffer:指向定缓冲区的大小,该缓冲区用于复制轮廓字符的信息。如果此值为零,函数返回需要的缓冲区大小。


lpvBuffer:指向缓冲区的指针,该缓冲区用于复制轮廓字符的信息,如果此值为NULL,函数返回需要的缓冲区大小。


lpmat2:指向MAT2结构的指针,该结构为字符信息转换矩阵。


返回值:如果指定了GGO_BITMAP, GGO_GRAY2_BITMAP, GGO_GRAY4_BITMAP, GGO_GRAY8_BITMAP,或GGO_NATIVE值且函数调用成功,返回值将大于0,否则,返回值是GDI_ERROR。如果指定了上述之一值,但缓冲区或地址是0,则返回需要的缓冲区的字节数。


如果GGO_METRICS被指定且函数调用失败,返回值是GDI_ERROR。


Windows NT:若想获得更多错误信息,请调用GetLastError函数。


备注:GetGlyphOutline返回的字形轮廓是一种配有网络的字形(配有网络的字形是指一种被修改的字形,使其点阵图尽可能地与字形的原始设计一致)。如果一个应用程序需要一种无修改的字形轮廓,应该在那些大小等于字体的em单位的字体中要求一个字符的字形轮廓,字体的em单位值存在于结构OUTLINETEXTMETRIC的otmEMSquare成员中。


由GetGlyphOutline指定GGO_BITMAP返回的字形位图是一种双字对齐、面向行的单色位图,当指定GGO_GRAY2_BITMAP,返回的位图是一种双字对齐、面向行的,其值在0-4之间的字节数组。当GGO_GRAY8_BITMAP指定时,返回的位图是一种双字对齐、面向行的,其值在0-16之间的字节数组。当指定GGO_GRAY8_BITMAP时,返回的位图是一种双字对齐,面向行的,其值在0-255之间的字节数组。应用程序可以指定lpMatrix参数里的2-对-2转换矩阵来将以位图格式获得的字符旋转。


速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头文件:wingdi.h;库文件:gdi32.lib;Unicode:在Windows NT环境下实现为Unicode和ANSI两种版本。

strip 2002-03-16
  • 打赏
  • 举报
回复
http://support.microsoft.com/support/kb/articles/Q87/1/15.ASP
“ Q87115 GetGlyphOutline() Native Buffer Format” 介 绍 了 Native格 式 。


http://support.microsoft.com/support/kb/articles/Q113/2/62.asp
“ Q113262 SAMPLE: Plotting TrueType Characters” , 这 是 一 个 用 C语 言 写 的 例 子 , 也 是 关 于 Native格 式 , 程 序 比 较 短 , 容 易 看 懂 。

http://support.microsoft.com/support/kb/articles/Q97/3/40.asp
“ Q97340 SAMPLE: GetGlyphOutline() Function Demonstration” , 这 是 三 篇 中 最 详 细 的 了 , 其 中 有 一 个 帮 助 文 件 , 全 面 的 介 绍 所 有 参 数 的 用 法 , 例 子 也 是 用 C语 言 写 的 , 比 较 长 。
minkerui 2002-03-15
  • 打赏
  • 举报
回复
WIN9X好像有转换地软件

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧