成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JavaMe開發(fā):低級界面繪圖之點陣字

開發(fā) 后端
JavaMe自帶的字體只有三種:Font.SIZE_SMALL、Font.SIZE_MEDIA和Font.SIZE_LARGE,所謂的Font.SIZE_LARGE其實也不是很大。如果要繪制其他字號的字體該怎么辦呢?運用低級界面Canvas繪制的點陣字是一個不錯的選擇。

【問題描述】JavaMe自帶的字體只有三種:Font.SIZE_SMALL、Font.SIZE_MEDIA和Font.SIZE_LARGE,所謂的Font.SIZE_LARGE其實也不是很大。如果要繪制其他字號的字體該怎么辦呢?運用低級界面Canvas繪制的點陣字是一個不錯的選擇。

【字模工具】

曉奇工作室

取模方式:從左到右從上到下,橫向8點左高位

【分析】

所謂“點陣字”就是文字是由點陣構(gòu)成的。點陣字有兩個基本屬性,那就是寬(width)和高(height)。先看一個例子:

 

如圖1所示,Asc5x8表示寬度為5,高度為8的點陣字集。一個char型的字符能表示8位。取模工具實際上是用二進(jìn)制“1”,表示點陣的文字。用二進(jìn)制的“0”,表示非文字的空白塊。以Asc5x8的“!”為例進(jìn)行講解:

0x20,0x20,0x20,0x20,0x20,0x00,0x20,0x00, // -!-

對應(yīng)的點陣為:

00100000

00100000

00100000

00100000

00100000

00000000

00100000

00000000

注意到,如果將“1”替換為像素點顯示,而“0”替換為空白塊。則剛好顯示為一個“!”號。寬度為5,所以用一個字節(jié)表示就可以了。如果寬度超過一個字節(jié),那么如何計算需要多少個字節(jié)才能表示寬度呢?原則是,寬度的表示必須為字節(jié)的倍數(shù)。如寬度為9,那么超過一個字節(jié),所以用2個字節(jié)表示。

總結(jié)寬度所需字節(jié)計算公式如下:

n = (width-1)/8+1

Asc5x8中width即為5.

那么高度如何計算呢?高度其實不用進(jìn)行計算,由取模軟件完成了。

明白上述原理后,就很簡單了。且看代碼。

 

【代碼清單】

  1. package com.token.view.components;  
  2.  
  3. import javax.microedition.lcdui.Graphics;  
  4. import javax.microedition.lcdui.game.GameCanvas;  
  5.  
  6. public class CustomFont {  
  7.       
  8.     public final char font24x48[][] =           // ASCII  
  9.     {  
  10.         {  
  11.             0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  // - -  
  12.             0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  13.             0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  14.             0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  15.             0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  16.             0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  17.             0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  18.             0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  19.             0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  20.             0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  21.             0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  22.             0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  23.             0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  24.             0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  25.             0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  26.             0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  27.             0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  28.             0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 
  29.         },  
  30.  
  31.         {  
  32.             0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  // -!-  
  33.             0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  34.             0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,  
  35.             0x00,0x78,0x00,0x00,0x78,0x00,0x00,0x78,  
  36.             0x00,0x00,0x78,0x00,0x00,0x78,0x00,0x00,  
  37.             0x78,0x00,0x00,0x78,0x00,0x00,0x78,0x00,  
  38.             0x00,0x78,0x00,0x00,0x78,0x00,0x00,0x30,  
  39.             0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,  
  40.             0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,  
  41.             0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,  
  42.             0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,  
  43.             0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  44.             0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  45.             0x00,0x00,0x70,0x00,0x00,0xF8,0x00,0x00,  
  46.             0xF8,0x00,0x00,0xF8,0x00,0x00,0x70,0x00,  
  47.             0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  48.             0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  49.             0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 
  50.         },  
  51.  
  52.         {  
  53.             0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  // -"-  
  54.             0x00,0x00,0xC0,0xC0,0x01,0xE1,0xE0,0x03,  
  55.             0xE3,0xE0,0x03,0xC3,0xC0,0x07,0x87,0x80,  
  56.             0x07,0x07,0x00,0x0E,0x0E,0x00,0x0C,0x0C,  
  57.             0x00,0x18,0x18,0x00,0x10,0x10,0x00,0x20,  
  58.             0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  59.             0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  60.             0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  61.             0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  62.             0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  63.             0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  64.             0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  65.             0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  66.             0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  67.             0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  68.             0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  69.             0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  70.             0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 
  71.         },  
  72.           
  73.         ...  
  74.  
  75.         {  
  76.             0x07,0x80,0x00,0x1F,0xC0,0x00,0x10,0xE0,  // --  
  77.             0x04,0x20,0x70,0x04,0x20,0x38,0x08,0x40,  
  78.             0x1C,0x08,0x40,0x0F,0x10,0x00,0x07,0xF0,  
  79.             0x00,0x03,0xC0,0x00,0x00,0x00,0x00,0x00,  
  80.             0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  81.             0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  82.             0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  83.             0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  84.             0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  85.             0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  86.             0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  87.             0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  88.             0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  89.             0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  90.             0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  91.             0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  92.             0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  93.             0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 
  94.         }  
  95.         };  
  96.               
  97.     public CustomFont()  
  98.     {  
  99.           
  100.     }  
  101.       
  102.     public void drawmat(GameCanvas canvas, Graphics g, char mat[], int w, int h, int x, int y, int color)  
  103.     {  
  104.         int i,j,k,n;  
  105.           
  106.         n = (w-1)/8+1;  
  107.         for(j=0; j<h; j++)  
  108.         {  
  109.             for(i=0; i<n; i++)  
  110.             {  
  111.                 for(k=0; k<8; k++)  
  112.                 {  
  113.                     if (!((mat[j * n + i] & (0x80 >> k)) == 0)) /* 測試為1的位則顯示 */    
  114.                              {     
  115.                         g.setColor(color);     
  116.                                     g.drawLine(x + i * 8 + k, y + j, x + i * 8 + k, y + j);     
  117.                                 }     
  118.  
  119.                 }  
  120.             }  
  121.         }  
  122.     }  
  123.  
  124. }  

n就是表示整個寬度需要的字節(jié)數(shù),由于寬度為24,故需要3個字節(jié)表示。j記錄縱向(高度)位置。代碼的處理,就是通過一個畫線函數(shù)進(jìn)行的。每次以字節(jié)為單位(變量k處理),對“1”進(jìn)行檢測,檢測到1后,記錄k的位置。

 

【調(diào)用方法】

CustomFont主要用于GameCanvas派生的類。在繼承GameCanvas的類中:

(1)聲明對象

  1. private CustomFont cf; 

(2) 初始化對象(在構(gòu)造函數(shù)中)

  1. cf = new CustomFont(); 

(3) 調(diào)用方法(畫字符串passwd)

  1. for(int i=0; i<passwd.length(); i++)  
  2. {  
  3.                       
  4.     cf.drawmat(this, graphics, cf.font24x48[passwd.charAt(i)-' '], 2448, (width-6*24)/2+i*24, (height-48)/3, Color.WHITE);  

【效果】

圖2中,框中的文字就是通過繪制得到的。

 

【設(shè)計參考】 

(1) http://aiquantong.iteye.com/blog/1457906

(2) http://blog.csdn.net/alleniversoncomputer/article/details/7016368

原文鏈接:http://blog.csdn.net/tandesir/article/details/7506065

【系列文章】

  1. JavaMe開發(fā):低級界面繪圖之點陣字
  2. JavaMe開發(fā):低級界面繪圖之菜單
  3. JavaMe開發(fā):也說MVC設(shè)計模式
  4. JavaMe開發(fā):繪制可自動換行文本
  5. JavaMe開發(fā):繪制文本框TextEdit
  6. JavaM開發(fā):自適應(yīng)滾動顯示
責(zé)任編輯:林師授 來源: tandesir的博客
相關(guān)推薦

2012-05-09 10:03:08

JavaMEJava

2012-05-09 10:09:18

JavaMEJava

2012-05-09 10:58:25

JavaMEJava

2012-05-09 10:35:36

JavaMEJava

2012-05-09 10:22:44

JavaMEJava

2010-06-03 14:01:26

JavaSEJavaMEiPhone

2009-09-22 17:53:32

C# COM組件開發(fā)

2011-08-10 18:24:22

iPhone 圖形 繪圖

2013-09-16 15:42:00

Android優(yōu)化界面UI

2013-09-16 15:33:28

Android優(yōu)化界面UI

2013-09-16 15:50:04

Android優(yōu)化界面UI

2011-08-29 15:30:53

JavaMELua

2022-08-26 08:18:04

軟件開發(fā)高級系統(tǒng)設(shè)計低級系統(tǒng)設(shè)計

2014-02-26 09:13:39

2013-04-23 17:11:47

Windows Pho用Express Bl

2011-05-03 16:41:04

BlackBerry

2023-05-30 14:50:20

界面開發(fā)鴻蒙

2022-09-02 14:56:24

Python界面開發(fā)庫框架

2009-08-20 16:41:30

unixLinux低級IO函數(shù)

2023-11-17 11:40:51

C++內(nèi)存
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 欧美激情a∨在线视频播放 成人免费共享视频 | 欧美一区二区三区四区在线 | 中文字幕视频在线观看 | 国产精品一区二区不卡 | 91精品国产综合久久国产大片 | 午夜影院黄 | 男人电影天堂 | 中文字幕日韩欧美 | 国产一区二区自拍 | 亚洲精品日本 | 久草视频在线播放 | 久热久热 | 午夜影院黄| 国产免费观看一区 | 欧美一区二区视频 | 亚洲视频在线播放 | 国偷自产av一区二区三区 | 欧美国产精品一区二区 | 97视频精品 | 女女百合av大片一区二区三区九县 | 久久久久久91 | 中文字字幕一区二区三区四区五区 | 天天射天天干 | 国产在线观看免费 | 国产成人综合久久 | av一级久久 | 91精品国产一区 | 国产资源在线视频 | 色综合久久伊人 | 亚洲欧美国产视频 | 精品亚洲一区二区三区 | 久久久久久成人 | 欧美视频二区 | 欧美日韩一区精品 | 国产91丝袜在线播放 | 亚洲国产成人精品久久久国产成人一区 | 99pao成人国产永久免费视频 | 国产成人精品久久二区二区 | 9999视频| 成人福利网 | 一级a性色生活片久久毛片波多野 |