root/graph/JavaPopWeb/src/jp/ac/nime/computer/grpsimulator/ColorDumpView.java

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. ColorDumpView
  2. paint
  3. 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_[][];
}

/* [<][>][^][v][top][bottom][index][help] */