bmp 轉換 txt 乙個有有趣的演算法

2021-04-18 13:44:27 字數 1594 閱讀 4268

影象處理----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]

用Ruby算乙個有趣的數列

看到乙個很有趣的猜數列題目 url 原文引用如下 quote 111 211211 111221 312211 13112221 1113213211 聰明的你,請找出其中的規律,並把下一行數字寫出來 用你的人品保證,先別搜,先想想.quote 我找了好久沒有找到規律,最後還是google了一把 o...

oracle 乙個有趣的行列轉換問題

資料 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個位元組,肯定只能讀取一部分內容,所...