- PR -

画像の表示

1
投稿者投稿内容
h2
ベテラン
会議室デビュー日: 2004/12/23
投稿数: 58
投稿日時: 2004-12-23 15:05
はじめまして h2 と申します.
現在 JNI から RGB の順に 8bit×3 で値を格納した int型配列を受け取り,それを画像として SWING を用いたアプリで表示したいと考えています.いろいろ調べ試してみたのですが,JAVA側での処理をどうすればよいのか見えてきません.
JAVA では配列に格納した値をどのようにすれば画像として表示出来るのでしょうか?
どなたかご教授頂けませんか?よろしくお願いします.
当方の環境は,Fedora Core 3,j2sdk1.4 です.
keisuken
会議室デビュー日: 2003/04/18
投稿数: 4
投稿日時: 2004-12-23 17:36
Swing は書籍や解説サイトなどを参考にしてください。Google のお世話になればいくつか見つかるでしょう。
今回の場合画像の表示は、BufferedImage を使えばできます。
http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/awt/image/BufferedImage.html
ただし、BufferedImage.TYPE_INT_RGB などが使えると思いますが、渡ってきた配列が BufferedImage の要求するものと異なるかもしれないので変換が必要かもしれませんね。

[ メッセージ編集済み 編集者: keisuken 編集日時 2004-12-23 17:37 ]
h2
ベテラン
会議室デビュー日: 2004/12/23
投稿数: 58
投稿日時: 2004-12-23 19:21
keisuken さん
さっそくのご指導ありがとうございます.
以下のように書いてみたのですが,Image クラスから BufferedImage クラスに格納する方法がわからず困っております.
どうすれば,Image クラスを変換できるのでしょうか?
それとも,Image クラスを経由することが間違いなのでしょうか?
質問ばかりで大変申し訳ないのですがよろしくお願いします.

import java.io.*;
import javax.swing.*;
import java.awt.*;
import java.awt.image.*;
import java.awt.event.*;

public class ShowImage extends JFrame {
public ShowImage () {
super("ShowImage");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

int img_tmp[] = new int[64*64];
int i;
BufferedImage bimg = new BufferedImage(64, 64,
BufferedImage.TYPE_INT_RGB);

// 一時的に帯状の画像を配列上に生成
         // 実際は JNI から渡される
for (i=0; i<64*64/3; i++){
img_tmp[i] = 0xff0000;
}
for (; i<64*64*2/3; i++){
img_tmp[i] = 0x00ff00;
}
for (; i<64*64; i++){
img_tmp[i] = 0x0000ff;
}

//
bimg = Toolkit.getDefaultToolkit().createImage(
              new MemoryImageSource(64, 64, img_tmp, 0, 64));

getContentPane().add(new JLabel(new ImageIcon(bimg)));
pack();
setVisible(true);
}

public static void main(String[] args){
try {
new ShowImage();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
h2
ベテラン
会議室デビュー日: 2004/12/23
投稿数: 58
投稿日時: 2004-12-23 19:49
h2 です.
お騒がせ致しましたが,WritableRaster の setElem を使うことで画像を表示することができました.
keisuken さんありがとうございました.
1

スキルアップ/キャリアアップ(JOB@IT)