VC實現將圖片轉換為數組

來源:互聯網
上載者:User
2007-7-19 13:38:26VC實現將圖片轉換為數組

  上個學期,我嘗試過使用不帶字型檔的LCD12864模組。這種模組能顯示128x64像素的內容,顯示面積相當大,對學習單片機並用來開發介面可是很有吸引力的哦。

  於是,我向個學長借了個過來用。開發平台是430。之所以用它,是因為它內部RAM大,還有相當快的速度,是51所不及的。再加上那塊430板,是一個即將畢業的研究生畫的,板上資源相當豐富,又小巧,我很喜歡。

  對LCD12864模組來說,程式時序上沒有什麼大問題,只要按著資料手冊來,沒有什麼太大的難度。當時開始弄時,還是有點不自信,但這樣的東西,重要的就是是否有膽量參與進去,做一做。最終還是會有收穫的。430程式有機會再分享,這裡不展開。

  主要是PC機上的圖片轉換工具。因為學習VC有一個學期左右了,很想挑戰下,把一張圖片轉換成LCD12864所能識別的資料類型。先介紹下LCD12864內部RAM的結構。螢幕上的128x64個像素分為兩個屏,左屏和右屏,分別是64x64像素的地區。對每一屏來說,每縱向的8個點便是一個位元組的資料。位元組中每一bit的值代表該位的亮與滅(因為使用的是無灰階級的模組)。這樣,整個屏的資料就可以用兩個大的數組來表示,每一數組得是512個位元組。

  LCD12864是已經能顯示出來,但是只能顯示一些簡單的矩形。如何才能把圖片轉換成數組,便是我思考的問題。於是,就用VC實現了一個小程式。

  程式中用了一個類,是直接借鑒《精通Visual C++.NET影像處理編程》裡的CDib類,是一個方便的能對映像讀寫操作的類。用它主要是為了使用的一個佛羅依德抖動演算法,該演算法可以將一個映像(彩色或灰階,灰階效果更好)轉為只用黑白點表示,較黑的地方黑點越密,較淺色的地方,黑點越稀鬆。這樣,得到的映像就可以按像素點轉化為相應的位元組資料,儲存出來即可。

  下面的程式段是儲存像素的部分:

 // For the left screen.
 for(k = 0; k < 8; k++){   // LCD page
  for (j = 0; j < 64; j ++){ // LCD coloum
   for(i = 0; i < 8; i++){ // LCD row
    if(m_desDC.GetPixel(j, i + k * 8) == RGB(0, 0, 0)){
     ucCS1[k][j] |= 0x01 << i;
    }
   }
  }
 }

  採用移位的方式,將8個點的資訊存為一個位元組。

  程式最終介面如下,還有產生的資料檔案。

  程式目前還有些小bug,比如開啟圖片後,當程式介面重繪時就顯示不出圖片。試過很多辦法,比如在MFC的OnPaint函數裡回入繪圖時,程式會變得很慢,它會一直在重繪。或是其它的比如active等類型的函數裡加過,也沒有。有機會再完善點吧,畫圖怎麼說都是視窗系統的優勢啊,掌握好畫圖也是項不錯的技術。

Tags: VC  映像 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.