字符畫

字符畫

字母标點漢字組成的圖畫
字符畫,一種由字母、标點、漢字或其他字符組成的圖畫。[1]簡單的字符畫是利用字符的形狀代替圖畫的線條來構成簡單的人物、事物等形象,它一般由人工制作而成;複雜的字符畫通常利用占用不同數量像素的字符代替圖畫上不同明暗的點,它一般由程序制作而成。字符畫是互聯網時代的産物,通常應用于即時聊天中。
    中文名:字符畫 外文名: 别名: 定義:一種由字母、标點、漢字或其他字符組成的圖畫 應用領域:繪畫 所屬領域:技術 所屬學科:IT

關鍵技術

第一個關鍵技術漢字庫讀取技術字符畫

使用漢字庫技術可以做到和操作系統無關性,先了解一下點陣字庫的基本原理。如下所示,下面是一個“字”的點陣圖,在16點陣字庫中一個漢字為16x16點,每一行使用兩個字節表示,如下面示例第一行的十六進制為:0x02和0x00,所以,一個漢字在16點陣字庫中需要占用2x16個字節,24點陣字庫需要3x24個字節,下面僅以16點陣字庫為例,其他點陣類似。本文我們來運用Python的圖像處理功能,實現将圖片轉成字符畫。

██████ █████████

███████ ████████

██            ██

██ ██████████ ██

█ ██████████ ███

███        █████

█████████ ██████

████████ ███████

███████ █████ ██

               █

███████ ████████

███████ ████████

███████ ████████

███████ ████████

█████ █ ████████

██████ █████████

下面的函數返回指定字符串的字符畫文本

functionGet16(constAWord,AForeground,ABackground:string):string;

functionGetBit(constc,n:byte):integer;

begin

result:=(cshrn)and1;

end;

var

iLen:integer;

iFileSize:integer;

s:string;

k,l,i,p:integer;

cw:array[0..31]ofchar;

qu_ma,wei_ma:integer;

File16:file;

begin

iLen:=length(AWord);

AssignFile(File16,piProgramInfo.Path+HZK16);

FileMode:=fmOpenRead;

try

Reset(File16,1);

finally

FileMode:=fmOpenReadWrite;

end;

iFileSize:=FileSize(File16);

try

forl:=1toiLendiv2do

begin

k:=l*2-1;

//如果不是漢字,往前進一位

whilekiLenthenbreak;

if((ord(AWord[k])and$80)0)then

begin

qu_ma:=ord(AWord[k])-161;

wei_ma:=ord(AWord[k+1])-161;

if(94*qu_ma+wei_ma)*32+32>iFileSizethencontinue;

try

seek(File16,(94*qu_ma+wei_ma)*32);

except

myMessageBox(fseekcallfail!);

exit;

end;

BlockRead(File16,cw,32);

fori:=0to15do

begin

forp:=7downto0do

begin

ifGetBit(ord(cw[i*2]),p)=1thens:=s+AForeground

elses:=s+ABackground;

end;

forp:=7downto0do

begin

ifGetBit(ord(cw[i*2+1]),p)=1thens:=s+AForeground

elses:=s+ABackground;

end;

s:=s+#13#10;

end;

end;

end;

finally

CloseFile(File16);

end;

result:=s;

end;

第二個關鍵技術使用系統字庫進行轉換

其實使用系統字庫是極為自由的方式,因為這樣完全不必關心字庫的技術,這一切都交給系統好了,充分利用系統資源。

如果定義一個設備,然後設定好設備的各種屬性,包括寬度、高度、字體、顔色等,然後在上面繪制文本就可以了,要轉換為字符畫,隻需要把設備上的點陣信息轉換為文本即可。配合CreateFontIndirect函數,使用DrawText可以繪制豐富的文本效果。實現完整的字符畫效果

下面是十二号宋體的轉換結果:

█████ ██████

█          █

  ████████ █

██       ███

██████ █████

█████ ██████

           █

█████ ██████

█████ ██████

█████ ██████

███   ██████

████████████

下面是九号@黑體的轉換結果:

████████████

██  ███ ████

██ ████ ████

██ █ ██ ████

██ █  █ ████

█  █       █

   █ ██ ██ █

██ █ ██ ██ █

██ █ ██ ████

██ ████ ████

██  ███ ████

████████████

第三個關鍵技術圖片轉換為文本

要把圖像轉換為文本,這其中有一個很大的困難,就是文本沒有顔色,所以特别引進了一個概念:文本灰度,就是把不同字母在屏幕上顯示的大小排序,得到一張灰度表,用這個灰度表來轉換圖片,可以達到比較好的效果。

下面的函數可以把一個位圖轉換成文本,ABit是位圖,AGray是灰度

functionImageToText(ABit:TBitmap;constAGray:string):string;

var

x,y:integer;

s:string;

pColor:Longint;

R,G,B:byte;

iGray:integer;

sGrayPer:string;

iGrayLen:integer;

iIndex:integer;

begin

s:=;

sGrayPer:=AGray;

iGrayLen:=Length(sGrayPer);

fory:=0toABit.Height-1do

begin

forx:=0toABit.Width-1do

begin

pColor:=ABit.Canvas.Pixels[x,y];

R:=pColorand$FF;

G:=(pColorshr8)and$FF;

B:=(pColorshr16)and$FF;

iGray:=HiByte(R*77+G*151+B*28);

iIndex:=(iGray*iGrayLendiv255);

ifiIndexiGrayLentheniIndex:=iGrayLen;

s:=s+sGrayPer[iIndex];

end;

s:=s+CRLF;

end;

result:=s;

end;

這是一個常用且效果比較好的灰度:“MNHQ$OC?7>!:-;.”

第四個關鍵技術把文本轉換為圖像

要把文本轉換為圖片,必須獲取兩個重要參數:轉換後的寬和高,要取得這兩個參數,我們可以使用GetTextExtentPoint32函數,該函數的定義如下:

functionGetTextExtentPoint32(DC:HDC;Str:PChar;Count:Integer;varSize:TSize):BOOL;

DC傳入設備句柄

Str為文本内容

Count為文本的長度(字節)

Size返回寬和高

在實際應用中,往往被轉換的文本有多行,且每一行的長度不定,

所以我們還需要在生成圖像前進行一遍預掃,以便獲得完整的圖像大小

下面演示了文本轉換為圖像的代碼

////////////////////////////////////////////////////////////////////////////////

//功能:把文本轉換為位圖

//AOwner:窗體參數

//AText:要轉換的文本

//AFont:文本的字體

//ABitmap:轉換後的位圖對象

//日期:2003.12.15

////////////////////////////////////////////////////////////////////////////////

procedureTextToBitmap(AOwner:TObject;constAText:TStrings;AFont:TFont;ABitmap:TBitmap);

var

i:integer;

iWidth,iHeight:integer;

iCharHeight:integer;

s:string;

r:TRect;

size:TSize;

lblTemp:TLabel;

begin

iWidth:=0;

iHeight:=0;

lblTemp:=TLabel.Create(nil);

r.Top:=0;

try

lblTemp.Visible:=false;

lblTemp.Parent:=TWinControl(AOwner);

lblTemp.Font.Assign(AFont);

ABitmap.Canvas.Brush.Style:=bsClear;

ABitmap.Canvas.Pen.Color:=rgb(0,0,0);

ABitmap.Canvas.Brush.Color:=RGB(255,255,255);

ABitmap.Canvas.Font.Assign(AFont);

//下面代碼用戶獲得文本的最大寬度和高度

fori:=0toAText.Count-1do

begin

s:=AText.Strings[i];

ifs=thens:=;

lblTemp.Caption:=s;

GetTextExtentPoint32(lblTemp.Canvas.Handle,pchar(lblTemp.Caption),lblTemp.GetTextLen,size);

ifiWidth

iHeight:=iHeight+Size.cy;

end;

//獲得一個字符的高度

GetTextExtentPoint32(lblTemp.Canvas.Handle,pchar(),length(),size);

iCharHeight:=size.cy;

ABitmap.Width:=iWidth;

ABitmap.Height:=iHeight;

fori:=0toAText.Count-1do

begin

s:=AText.Strings[i];

r.Left:=0;

r.Right:=ABitmap.Width;

r.Bottom:=r.Bottom+iCharHeight;

DrawText(ABitmap.Canvas.Handle,PChar(s),length(s),r,0);

r.Top:=r.Top+iCharHeight;

end;

finally

lblTemp.Free;

end;

end;

轉換

圖片轉換成字符畫,一幅SHE的字符畫,由密密麻麻的字符組成,粉絲們真是瘋狂得可以,一個字母一個字母地拼,不怕被整崩潰啊沒想到,原來有一種專門将圖片轉換為字符的程序。

下面要介紹的就是一個專門的圖片轉換網站。找一張合适的圖片,點擊“浏覽”,然後點Submit,這樣就得到字符畫了。如果想保存下來,接下來為這張圖取一個名字(不支持中文),然後點Submit,進入另一個頁面後點DownloadNow,你會得到一個txt格式的文件,剛才的字符畫就保存其中了。另外,此頁面還可以調整字符畫的明暗并選擇不同的字符(字符畫上方)。點GotoMyPage,就會得到一個專門保存剛才字符畫的頁面。

軟件

小燕子字符畫

軟件大小:810KB

軟件語言:簡體中文

軟件類别:國産軟件/免費軟件/文字處理

應用平台:Win9x/NT/2000/XP/2003

根據需要生成各種字符畫,另外本軟件最大的特點是可以在沒有漢字支持的平台使用漢字,自動支持十六點陣漢字庫,并且可以顯示本機所有的漢字庫,可以用來檢測本機某一種字庫是否包含所有标準漢字;也可以用來書寫密文,比如用兩個比較相似的字符生成一個字符畫,在平常的字體下,人眼不能分辨具體的内容,如果要看時,隻需将文字的字體變小即可;當然了,最大功能的是可以用她來寫情書,哈哈!用特别的形式表達你特别的用心。程序特别增加了“轉換圖片”功能和“字符畫創作工具”,使《小燕子字符畫》更加實用。

搜狗拼音輸入法,絢麗的表情,豐富的字符畫,便利的英文輸入法,搜狗拼音3.6有多個功能,其中包括字符畫。搜狗3.6版的首詞命中率、候選率比3.5版有所提高!CPU占用率指标有所降低!主要包括:

包括豐富的表情和字符畫在内的快捷輸入,如輸入huhu,提供(~o~)~zZ;輸入xin,提供❤;輸入qingwa,提供

@..@

(--/)

(.>__<.)

^^^^^^還有更多:♠♥♦♣☀☻☎♩♪♫♬……随你選擇!

bug修正:修正了模糊音設置同步問題後恢複默認的bug。

網絡特有浪漫

字符畫,網絡特有的浪漫。聊了一晚上都是一屏屏的文字也是一種乏味。隔着看不見的網絡,全靠文字來表達一切似乎缺少了點什麼。所以網蟲們發明了用鍵盤上的符号來表情的方法,比如用“:”來表示高興,一方面這個符号比打出具體的文字方便,而另一方面似乎也比純粹的文字更直觀一些。

有人說這個符号就像笑臉,說老實話,怎麼看都有點牽強。不過如果你真覺得純粹的文字不夠有趣,這類簡單的符号又不夠形象的話,那麼你還可以試試字符畫在QQ中又被稱為QQ圖标,用字符的形式來構成一些有趣的圖案,來表情達意,這是網蟲們想到的絕妙點子。一個由字符組成的心形,或者一隻用字符構成的史努比圖案,讓網友在純粹的文字之外體會到一種網絡特有的浪漫。又或者你想對網友的生日表達你的祝福,你是打一句“生日快樂”好呢,還是送出一份用字符構成的生日蛋糕更讓對方開心呢?

答案是顯而易見的。不過要玩轉字符畫,光是用QQ這個軟件是不行的,在聊天的時候你也沒時間設計一幅有趣的字符畫出來。所以有人就開發了一個小程序為你提供豐富的字符畫,你隻要選中你喜歡的,雙擊一下就能自動地加到你的聊天輸入框中,甚至自動發送。用法和上面提到的“表情”軟件差不多。而這個軟件就是QQ圖形留言器。強烈建議你試用一下啦。不一樣的特别的文字,不一般的特别的問候,自然是發送給那個特别的人啦。 

上一篇:園丁小區

下一篇:機密武裝

相關詞條

相關搜索

其它詞條