/* [<][>][^][v][top][bottom][index][help] */
DEFINITIONS
This source file includes following definitions.
- ColorDumpView
- paint
- setDump
package jp.ac.nime.computer.grpsimulator;
import java.awt.*;
/** ColorDumpViewクラスは、画像表示パネルクリック時の
* 近傍ドットのRGB値を16進数で色分けダンプ表示する
* JComponentの派生クラスです。
* @author igarashi
*/
public class ColorDumpView extends javax.swing.JComponent {
/** ダンプ表示する近傍ドットのサイズを指定してColorDumpViewを構築します
* @param nDumpWidth ダンプ表示する領域のドット単位の幅
* @param nDumpHeight ダンプ表示する領域のドット単位の高さ
*/
public ColorDumpView( int nDumpWidth, int nDumpHeight ) {
super();
// ダンプサイズからテキストエリアの大きさを求める
nDumpWidth_ = nDumpWidth;
nDumpHeight_ = nDumpHeight;
font_ = new Font("Monospaced", Font.PLAIN, 13);
java.awt.FontMetrics metrics = getFontMetrics(font_);
nFontHeight_ = metrics.getHeight();
nFontMaxAscent_ = metrics.getMaxAscent();
int nCharWidth = metrics.charWidth(' ');
Dimension dim = new Dimension(nCharWidth*(nDumpWidth_*7-1), nFontHeight_*nDumpHeight_);
setMaximumSize(dim);
setMinimumSize(dim);
setPreferredSize(dim);
// ダンプ表示に用いる色を作成しておく
red_ = new Color(160,0,0);
green_ = new Color(0,160,0);
blue_ = new Color(0,0,160);
// 表示用の文字列のための配列を確保
strBuf_ = new String[nDumpHeight_][3];
}
public void paint(Graphics g) {
super.paint(g);
if (strBuf_[0][0] != null) {
g.setFont(font_);
for (int y = 0; y < nDumpHeight_; y ++) {
int dy = nFontMaxAscent_ + y * nFontHeight_;
g.setColor(red_);
g.drawString( strBuf_[y][0], 0, dy );
g.setColor(green_);
g.drawString( strBuf_[y][1], 0, dy );
g.setColor(blue_);
g.drawString( strBuf_[y][2], 0, dy );
}
}
}
/** ダンプ表示する領域のRGB値を配列で渡します。
* @param dump RGB値の配列。下位24bitのみ設定し、それ以外は0とする。ただし、無効なドットの値には-1を設定する。
*/
public void setDump(int dump[]) {
if (dump.length >= (nDumpWidth_*nDumpHeight_)) {
int nDumpStrLen = nDumpWidth_*7-1;
for (int y = 0; y < nDumpHeight_; y ++) {
StringBuffer bufR = new StringBuffer();
StringBuffer bufG = new StringBuffer(" ");
StringBuffer bufB = new StringBuffer(" ");
for (int x = 0; x < nDumpWidth_; x ++) {
int d = dump[y * nDumpWidth_ + x];
if (d == -1) {
bufR.append("--");
bufG.append("--");
bufB.append("--");
} else {
String hexbufR = "0" + Integer.toHexString((d&0xFF0000)>>16).toUpperCase();
String hexbufG = "0" + Integer.toHexString((d&0x00FF00)>> 8).toUpperCase();
String hexbufB = "0" + Integer.toHexString( d&0x0000FF ).toUpperCase();
bufR.append( hexbufR.substring(hexbufR.length()-2) );
bufG.append( hexbufG.substring(hexbufG.length()-2) );
bufB.append( hexbufB.substring(hexbufB.length()-2) );
}
bufR.append(" ");
bufG.append(" ");
bufB.append(" ");
}
bufR.setLength(nDumpStrLen);
strBuf_[y][0] = bufR.toString();
bufG.setLength(nDumpStrLen);
strBuf_[y][1] = bufG.toString();
bufB.setLength(nDumpStrLen);
strBuf_[y][2] = bufB.toString();
}
repaint();
}
}
private int nDumpWidth_;
private int nDumpHeight_;
private Font font_;
private int nFontHeight_;
private int nFontMaxAscent_;
private Color red_;
private Color green_;
private Color blue_;
private String strBuf_[][];
}