com.docomostar.opt.ui
クラス Graphics2

Object
  拡張com.docomostar.ui.Graphics
      拡張com.docomostar.opt.ui.Graphics2

public class Graphics2
extends com.docomostar.ui.Graphics

拡張グラフィックスクラスです。 機種依存の描画処理などを持ちます。
拡張グラフィクスをサポートしている場合は、paint メソッドに渡される グラフィクスオブジェクトや getGraphics メソッドで返されるグラフィクス オブジェクトは、実際には Graphics2 クラスのインスタンスとなっています。 例えば下記のような形で使い分けることができます。

 class MyCanvas extends Canvas{
     public void paint(Graphics g) {
         if (g instanceof Graphics2) {
             Graphics2 g2 = (Graphics2)g;
             g2.drawNthImage(i, 1, 0, 0);
             ...
         } else {
             g.drawImage(i, 0, 0);
             ...
         }
     }
 }
 
端末によってサポートされていない場合があります。未サポートの場合、 メソッドが呼び出された時点でUnsupportedOperationExceptionを発生します。

導入されたバージョン:
Star-1.0

フィールドの概要
static int CM_NORMAL
          描画時の座標モードのうち、ノーマルモードを表します(=0)。
static int CM_ZOOM
          描画時の座標モードのうち、256倍にズームするモードを表します(=256)。
static int OP_ADD
          レンダリング時の演算方法のうち、「加算」を表します(=1)。
static int OP_REPL
          レンダリング時の演算方法のうち、「置き換え」を表します(=0)。
static int OP_SUB
          レンダリング時の演算方法のうち、「減算」を表します(=2)。
 
クラス com.docomostar.ui.Graphics から継承したフィールド
AQUA, BLACK, BLUE, FLIP_HORIZONTAL, FLIP_NONE, FLIP_ROTATE, FLIP_ROTATE_LEFT, FLIP_ROTATE_RIGHT, FLIP_ROTATE_RIGHT_HORIZONTAL, FLIP_ROTATE_RIGHT_VERTICAL, FLIP_VERTICAL, FUCHSIA, GRAY, GREEN, LIME, MAROON, NAVY, OLIVE, PURPLE, RED, SILVER, TEAL, WHITE, YELLOW
 
コンストラクタの概要
protected Graphics2()
           
 
メソッドの概要
 void drawImage(com.docomostar.ui.Image image, AffineTrans at)
          イメージに 2 次元のアフィン変換をかけて描画します。
 void drawImage(com.docomostar.ui.Image image, AffineTrans at, int sx, int sy, int width, int height)
          イメージの一部に 2 次元のアフィン変換をかけて描画します。
 void drawNthImage(com.docomostar.media.MediaImage image, int k, int x, int y)
          アニメーションGIFファイルから生成した 複数の画像をもつメディアイメージオブジェクトの任意の画像を描画します。
 void drawNumber(int x, int y, int value, int digit)
          数値を右詰めで描画します。
 com.docomostar.ui.Image getImage(int x, int y, int width, int height)
          矩形領域のピクセルをイメージとして取得します。
static int getIntermediateColor(int color1, int color2, int ratio)
          指定された2色の中間色を取得します。
 int getSyncUnlockInterval()
          表示デバイスの垂直同期の間隔をμ秒単位で取得します。
 void setCoordinateMode(int mode)
          描画時の座標指定モードを設定します。
 void setRenderMode(int operator, int srcRatio, int dstRatio)
          レンダリング時の演算方法を設定します。
 int syncUnlock(int interval)
          表示デバイスの垂直同期に合わせたタイミングで、ダブルバッファリングの終了(Graphics#unlock(true)相当)を行います。
 
クラス com.docomostar.ui.Graphics から継承したメソッド
clearClip, clearRect, clipRect, copy, copyArea, drawArc, drawChars, drawImage, drawImage, drawImage, drawImage, drawImageMap, drawImageReference, drawImageReference, drawLine, drawPolyline, drawPolyline, drawRawImage, drawRawImage, drawRect, drawScaledImage, drawSpriteSet, drawSpriteSet, drawString, drawString, drawString, fillArc, fillPolygon, fillPolygon, fillRect, getColorOfName, getColorOfRGB, getColorOfRGB, getPixel, getPixels, getRGBPixel, getRGBPixels, lock, setClip, setColor, setFlipMode, setFont, setOrigin, setPictoColorEnabled, setPixel, setPixel, setPixels, setRGBPixel, setRGBPixels, unlock
 
クラス Object から継承したメソッド
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

フィールドの詳細

CM_NORMAL

public static final int CM_NORMAL
描画時の座標モードのうち、ノーマルモードを表します(=0)。

関連項目:
setCoordinateMode(int), 定数フィールド値

CM_ZOOM

public static final int CM_ZOOM
描画時の座標モードのうち、256倍にズームするモードを表します(=256)。

関連項目:
setCoordinateMode(int), 定数フィールド値

OP_REPL

public static final int OP_REPL
レンダリング時の演算方法のうち、「置き換え」を表します(=0)。

関連項目:
setRenderMode(int, int, int), 定数フィールド値

OP_ADD

public static final int OP_ADD
レンダリング時の演算方法のうち、「加算」を表します(=1)。

関連項目:
setRenderMode(int, int, int), 定数フィールド値

OP_SUB

public static final int OP_SUB
レンダリング時の演算方法のうち、「減算」を表します(=2)。

関連項目:
setRenderMode(int, int, int), 定数フィールド値
コンストラクタの詳細

Graphics2

protected Graphics2()
メソッドの詳細

setCoordinateMode

public void setCoordinateMode(int mode)
描画時の座標指定モードを設定します。

パラメータ:
mode - 座標指定モードを指定します。 CM_NORMAL 、CM_ZOOM のいずれかを指定できます。
例外:
com.docomostar.lang.UnsupportedOperationException -
本機能が未サポートの場合に発生します。
IllegalArgumentException -
引数 mode に不正な値が指定された場合に発生します。

setRenderMode

public void setRenderMode(int operator,
                          int srcRatio,
                          int dstRatio)
レンダリング時の演算方法を設定します。 描画先のキャンバスまたはイメージのピクセル値のRGB成分を (DR, DG, DB)、 描画色のRGB成分を (SR, SG, SB) とした時、i = R, G, B について、それぞれ下記のような演算が行われます。 レンダリング時の演算方法の指定がどの描画メソッドで有効かは機種依存です。
srcRatio, dstRatioに指定できる値は0から255とします。指定した値は255を1.0とした比率でDiが計算されます。 なお、実装によっては、指定したsrcRatio, dstRatioの値は、実装がサポートしている固定値に丸められる場合があります。
演算結果が0-255の範囲を越えた場合は上限/下限値として解釈されます。

パラメータ:
operator - 演算方法を指定します。 OP_REPL、OP_ADD、OP_SUB のいずれかを指定します。
srcRatio - ソースピクセルの乗数を0から255の範囲で指定します。
dstRatio - デスティネーションピクセルの乗数を0から255の範囲で指定します。
例外:
com.docomostar.lang.UnsupportedOperationException -
本機能が未サポートの場合に発生します。
IllegalArgumentException -
引数 operator に不正な値が指定された場合に発生します。
IllegalArgumentException -
引数 srcRatio, dstRatio に不正な値が指定された場合に発生します。

getImage

public com.docomostar.ui.Image getImage(int x,
                                        int y,
                                        int width,
                                        int height)
矩形領域のピクセルをイメージとして取得します。 グラフィクスオブジェクトが関連付けられているキャンバスまたはイメージの 左上(x, y), 右下(x + width - 1, y + height - 1)で構成される矩形 (幅width, 高さheight) に描画されているピクセルの内容を、 新たに生成したイメージオブジェクトとして取得します。
イメージは、Graphics#setClip(int, int, int, int)メソッド等によって設定されたユーザクリッピング領域には関わりなく取得できます。
ただし、グラフィクスオブジェクトが関連付けられているキャンバスまたはイメージの範囲外を含む矩形領域を指定した場合には、範囲外の領域を切り落として取得します。 この場合、取得されるイメージのサイズは(width, height)よりも小さくなります。
なお、取得されるイメージはImage.createImage(int, int)メソッドによって取得されるイメージと同様の、オフスクリーンイメージとなります。
Dialog表示中に本メソッドが取得するイメージの内容は、機種依存となります。

パラメータ:
x - 矩形の左上のX座標を指定します。
y - 矩形の左上のY座標を指定します。
width - 矩形の幅を指定します。
height - 矩形の高さを指定します。
戻り値:
矩形領域に描画されているピクセルをの内容を持つイメージオブジェクトを生成して返します。 ただし、関連付けられているキャンバス・ イメージの完全に範囲外の領域が指定された結果、 返されるべきイメージの幅・高さが 0 になってしまう場合には null を返します。
例外:
com.docomostar.lang.UnsupportedOperationException -
本機能が未サポートの場合に発生します。
IllegalArgumentException -
引数 width, height のどちらかまたは両方に 0 以下の値が指定された場合に発生します。

drawNumber

public void drawNumber(int x,
                       int y,
                       int value,
                       int digit)
数値を右詰めで描画します。 描画位置は、ベースラインの座標を指定します。 描画位置から指定された桁数分の領域内に数値を右詰で描画します。
固定幅フォントの場合には、「(無限の空白文字列)+(valueを文字列化したもの)」を右からdigit文字分切り出して、Graphics#drawStringを呼び出すのと同等の処理となります。 valueに負の値が指定された場合には、「(無限の空白文字列)+(マイナス記号'-')+(-valueを文字列化したもの)」を右からdigit文字分切り出したものとなります。
したがって、指定digitが小さくて桁数に収まらない場合には、数値文字列の右の部分(小さい桁)のみが描画され、左の部分(大きい桁)は描画されません。
プロポーショナルフォントの場合の振舞いは機種依存となりますが、指定された桁数の任意の数値を表示するのに十分な矩形領域をとらなければなりません。

パラメータ:
x - X座標を指定します。
y - Y座標を指定します。
value - 描画する数値を指定します。
digit - 桁数を指定します。
例外:
com.docomostar.lang.UnsupportedOperationException -
本機能が未サポートの場合に発生します。
IllegalArgumentException -
引数 digit に0以下の値が指定された場合に発生します。

drawImage

public void drawImage(com.docomostar.ui.Image image,
                      AffineTrans at)
イメージに 2 次元のアフィン変換をかけて描画します。

イメージ上の座標 (x, y) の画素は、 以下のような行列演算によって求められる座標 (x', y') に描画されます。

 [ x']      1   [ m00 m01 m02  ] [ x ]
 [ y'] = ------ [ m10 m11 m12  ] [ y ]
 [ 1 ]    4096  [  0   0  4096 ] [ 1 ]
 
引数には、3 次元アフィン変換用に用意されている AffineTrans クラスのオブジェクトを指定しますが、 その中の m00, m01, m02, m10, m11, m12 の六つの要素のみが使用されます。

パラメータ:
image - 描画するイメージオブジェクトを指定します。
at - 2次元のアフィン変換の行列を指定します。
例外:
com.docomostar.lang.UnsupportedOperationException -
本機能が未サポートの場合に発生します。
NullPointerException -
引数 image または at に null が指定された場合に発生します。
com.docomostar.ui.UIException -
(ILLEGAL_STATE)
引数 image に既に dispose されているイメージが指定された場合に発生します。

drawImage

public void drawImage(com.docomostar.ui.Image image,
                      AffineTrans at,
                      int sx,
                      int sy,
                      int width,
                      int height)
イメージの一部に 2 次元のアフィン変換をかけて描画します。

イメージ上の座標 (x, y) の画素は、 以下のような行列演算によって求められる座標 (x', y') に描画されます。

 [ x']      1   [ m00 m01 m02  ] [ x ]
 [ y'] = ------ [ m10 m11 m12  ] [ y ]
 [ 1 ]    4096  [  0   0  4096 ] [ 1 ]
 
引数には、3 次元アフィン変換用に用意されている AffineTrans クラスのオブジェクトを指定しますが、 その中の m00, m01, m02, m10, m11, m12 の六つの要素のみが使用されます。

パラメータ:
image - 描画するイメージオブジェクトを指定します。
at - 2次元のアフィン変換の行列を指定します。
sx - 描画元の矩形の左上の X 座標を指定します。
sy - 描画元の矩形の左上の Y 座標を指定します。
width - 描画元の矩形の幅を指定します。
height - 描画元の矩形の高さを指定します。
例外:
com.docomostar.lang.UnsupportedOperationException -
本機能が未サポートの場合に発生します。
NullPointerException -
引数 image または at に null が指定された場合に発生します。
IllegalArgumentException -
引数 width, height のどちらかまたは両方に 0 未満の値が指定された場合に発生します。
com.docomostar.ui.UIException -
(ILLEGAL_STATE)
引数 image に既に dispose されているイメージが指定された場合に発生します。

drawNthImage

public void drawNthImage(com.docomostar.media.MediaImage image,
                         int k,
                         int x,
                         int y)
アニメーションGIFファイルから生成した 複数の画像をもつメディアイメージオブジェクトの任意の画像を描画します。

パラメータ:
image - 描画するイメージオブジェクトを指定します。
k - 何番目のイメージを描画するかを指定します。 イメージオブジェクトが n 枚の画像をもつ場合、 有効な k の値域は 0, 1, ..., (n - 1) です。
x - 描画先のX座標を指定します。
y - 描画先のY座標を指定します。
例外:
com.docomostar.lang.UnsupportedOperationException -
本機能が未サポートの場合に発生します。
NullPointerException -
引数 image に null が指定された場合に発生します。
com.docomostar.ui.UIException -
(ILLEGAL_STATE)
引数 image に既に unuse, dispose されているメディアイメージが指定された場合に発生します。
IllegalArgumentException -
引数 k に負の値またはメディアイメージオブジェクトがもつ 画像の数以上の値が指定された場合に発生します。

getIntermediateColor

public static int getIntermediateColor(int color1,
                                       int color2,
                                       int ratio)
指定された2色の中間色を取得します。 引数ratioが0の時はcolor1と同じ色を、 255の時はcolor2と同じ色を返します。
すなわち、次式に相当する演算を行うことにより中間色が取得されます。
( (255-ratio)*color1 + ratio*color2 ) / 255
なお、具体的な中間色の算出方法は機種依存です。 演算R,G,Bの各成分ごとに上式を適用してもかまいませんし、別の色空間に変換した後に演算を行ってもかまいません。

パラメータ:
color1 - 中間色の元となる色の一つを指定します。指定する値は、Graphics.getColorOfRGB メソッド等で返される機種依存の色を表す整数値です。
color2 - 中間色の元となる色の一つを指定します。指定する値は、Graphics.getColorOfRGB メソッド等で返される機種依存の色を表す整数値です。
ratio - 中間色の、color2への近さを指定します。 指定できる範囲は0から255です。
戻り値:
color1とcolor2の中間色を返します。返される値は、機種依存の色を表す整数値です。
例外:
com.docomostar.lang.UnsupportedOperationException -
本機能が未サポートの場合に発生します。
IllegalArgumentException -
引数 color1, color2に不正な値が指定された場合に発生します。
IllegalArgumentException -
引数 ratio に不正な値が指定された場合に発生します。

getSyncUnlockInterval

public int getSyncUnlockInterval()
表示デバイスの垂直同期の間隔をμ秒単位で取得します。

垂直同期がちょうど1秒間に60回の表示デバイスの場合は、1000000/60=16667が返されます。

戻り値:
表示デバイスの垂直同期の間隔をμ秒単位で返します。
例外:
com.docomostar.lang.UnsupportedOperationException -
本機能が未サポートの場合に発生します。

syncUnlock

public int syncUnlock(int interval)
表示デバイスの垂直同期に合わせたタイミングで、ダブルバッファリングの終了(Graphics#unlock(true)相当)を行います。

本メソッドの使用により、ちらつき(ティアリングノイズ)のない滑らかな表示を実現できます。

引数に1を指定すると、本メソッドを呼び出してから最初の垂直同期を待って表示更新を行います。 引数にnを指定すると、本メソッドを前回呼び出した時に待った垂直同期から数えて、n回目の垂直同期を待って表示更新を行います(ただし、呼び出しが当該垂直同期より後だった場合は、次の垂直同期を待ちます)。 したがって、ちょうど1秒間に60回の表示デバイスにおいてn=3で呼び出し続けた場合は、毎秒20回の表示更新が行われることになります。

返り値としては、本メソッドを前回呼び出した時に待った垂直同期から数えて、何回目の垂直同期を実際に待ったのかが返されます。 そのため、通常は引数と同じ値となりますが、引数で指定した垂直同期よりも後のタイミングで本メソッドを呼び出した場合には、引数よりも大きな値が返されることになります。 ただし、実際に待った垂直同期の回数が int 型の最大値を超える場合には、 int 型の最大値が返されます。

Graphics#lock() によってダブルバッファリングを開始していない状況で本メソッドを呼び出した場合は、何も処理を行わず、返り値は0となります。 ダブルバッファリングを開始している状態で、Star アプリが起動してから初めて本メソッドを呼び出した時の振舞いは引数1の場合と同様となり、返り値は1となります。

描画対象の Image が既に破棄されている状況で本メソッドを呼び出した場合は、 何も行なわず、返り値は 0 となります。 また、Graphics#unlock(true) が実画面の描画更新処理を行なわない状況で本メソッドを呼び出した場合は、 垂直同期待ち(及び表示更新)は行なわず、返り値は 0 となります。 具体的には、描画対象の Canvas がカレントフレームでない場合、 画面占有状態(FEP画面等)の場合などが該当します。 これらの場合(返り値が 0 の場合)、垂直同期回数のカウントはリセットされずに継続されます。

サスペンド中には、垂直同期は停止するものと見なします。 すなわち、レジューム後に本メソッドを呼び出した場合は、「サスペンド前の垂直同期の回数+レジューム後の垂直同期の回数 = interval」となるまで待ちます。

本メソッドで垂直同期を待っている間は、他のJavaスレッドやイベント処理は実行されません。 本メソッドで垂直同期を待っている状態でサスペンド要求があった場合、要求は一時保留され、本メソッド終了後に要求が実行されます。 同様に、各種リスナ等によるイベント通知も本メソッド終了後に遅延して通知されることに注意して下さい。

パラメータ:
interval - 前回から数えて何回目の垂直同期を待つかを指定します。
戻り値:
実際に前回から数えて何回目の垂直同期を待ったのかを返します。
例外:
com.docomostar.lang.UnsupportedOperationException -
本機能が未サポートの場合に発生します。
IllegalArgumentException -
引数 interval に 0 以下の値が指定された場合に発生します。
IllegalArgumentException -
引数 interval が実装がサポートする上限値を超えていた場合に発生します。


NTT DOCOMO,INC.

本製品または文書は著作権法により保護されており、その使用、複製、再頒布および逆コンパイルを制限するライセンスのもとにおいて頒布されます。NTTドコモ(その他に許諾者がある場合は当該許諾者も含めて)の書面による事前の許可なく、本製品および関連する文書のいかなる部分も、いかなる方法によっても複製することが禁じられます。フォントを含む第三者のソフトウェアは、著作権法により保護されており、その提供者からライセンスを受けているものです。

Sun、Sun Microsystems、Java、J2MEおよびJ2SEは、米国およびその他の国における米国 Sun Microsystems,Inc.の商標または登録商標です。サンのロゴマークは、米国 Sun Microsystems, Inc.の登録商標です。

FeliCaは、ソニー株式会社が開発した非接触ICカードの技術方式です。FeliCaは、ソニー株式会社の登録商標です。

「iモード」、「iアプリ/アイアプリ」、「i-αppli」ロゴ、「DoJa」はNTTドコモの商標または登録商標です。

その他記載された会社名、製品名などは該当する各社の商標または登録商標です。