影象處理----bmp 轉換 txt (乙個有有趣的演算法)
把位**件轉換成和圖案很相似的字元文字。其實原理很簡單,用到了和圖案化技術類似的思想:首先將位圖分成同樣大小的小塊,求出每一塊灰度的平均值,然後和每個字元的灰度做比較,找出最接近的那個字元,來代表這一小塊圖象。那麼,怎麼確定字元的灰度呢?做下面的實驗就明白了。
開啟notepad,輸入字元「1」,選定該字元,使其反色。按alt+printscreen鍵拷貝視窗螢幕。開啟paintbrush,貼上,然後把圖放到最大(*8),開啟「檢視」->「縮放」->「顯示網格」選單
這時數數字元「1」用了幾個點?是22個。字元的灰度和它所佔的黑色點數有關,點越少,灰度值越大,空格字元的灰度最大,為全白,因為它乙個黑點也沒有;而字元「w」的灰度值就比較低了。每個字元的面積是8*16(寬*高),所以乙個字元的灰度值可以用如下的公式計算(1-所佔的黑點數/(8*16))*255。下面是可顯示的字元,及對應的灰度,共有95個。
static char ch[95]= ',
'a','s','d','f','g','h','j','k','l',':','"',
'z','x','c','v','b','n','m','<','>','?' };
static int gr[95]= ;
具體的程式如下:
void bmp2txt(gptr globals,unsigned char *gray) ', 'a','s','d','f','g','h','j','k','l',':','"', 'z','x','c','v','b','n','m','<','>','?' }; static int gr[95]= ;
file *fp = null; fp = fopen( "c://test.txt", "wb" );
for (int i=0;i<94;i++) } } int transwidth = gstuff->imagesize.h/8; int transheight = gstuff->imagesize.v/16; int sum=0; for(i=0;iimagesize.v-(16*i+k)-1)*gstuff->imagesize.h+(8*j)+m); //g+(v-(16*i+k)-1)*h+(8*j)+m (倒畫演算法) sum+=(unsigned char)*(gray+i*gstuff->imagesize.h*16+8*j+gstuff->imagesize.h*k+m); //正畫演算法 } } //現在計算完乙個塊的灰度值 sum/=8*16; sum=(255-sum)*gr[94]/255; k=0; while(gr[k+1] 看到乙個很有趣的猜數列題目 url 原文引用如下 quote 111 211211 111221 312211 13112221 1113213211 聰明的你,請找出其中的規律,並把下一行數字寫出來 用你的人品保證,先別搜,先想想.quote 我找了好久沒有找到規律,最後還是google了一把 o... 資料 aid name 1 test1 2 test2 3 test3 bid name code 11 test1 001 12 test1 002 13 test2 004 結果 a.id b.code 1 001 2 004 3 null 方法一 先左連線,在去掉重複的資料 with ta a... 前段時間碰到這麼乙個有趣的題目 int a 0x1234abcd char b char a printf d n b 請問輸出的內容是什麼?題目大概的意思是,int型別的指標轉換為char型別的指標後,會讀取原來哪些內容。int型別是4個位元組,char型別是1個位元組,肯定只能讀取一部分內容,所...用Ruby算乙個有趣的數列
oracle 乙個有趣的行列轉換問題
關於指標型別轉換的乙個有趣實驗