- PR -

アプレットでの画像表示

投稿者投稿内容
未記入じゃけんど
ベテラン
会議室デビュー日: 2004/11/09
投稿数: 65
お住まい・勤務地: Osaka City
投稿日時: 2005-02-10 17:03
いつも参考にさせていただいております

現在、ソケット通信でバイナリ型にて取得した画像ファイルを
一旦ローカルに保存後に、アプレットに表示するという処理を作成しております。
保存後に表示するアプレット自体は完成したのですが、
ローカルに保存せずに、アプレットに表示する方法というのはあるのでしょうか?
アプレットのImageへ、直接バイナリ型を入力するようなことは可能なのでしょうか?
ご存知のかた、どうかよろしくお願いします。

下がバイナリファイルを受信後に保存するソースです

try {
Socket soc = new Socket("localhost",9999);

BufferedInputStream in = new BufferedInputStream(soc.getInputStream());
// 保存するディレクトリー
FileOutputStream out = new FileOutputStream("C:\\myapplet\\imageTest.jpg");
byte[] buf = new byte[1024];

int len = 0;
while( (len=in.read(buf)) != -1 ) {
out.write(buf,0,len);
}

out.close();
in.close();

img = getImage(getCodeBase(),"imageTest.jpg");

} catch (Exception ex) {
ex.printStackTrace();
}

// 保存した画像を表示
Graphics g=getGraphics();
g.drawImage(img,10,10,this);
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-02-10 17:11
サーバ側にイメージを用意して、URLで直接指定してやるのが一番手っ取り早いと思います。
通信部分は特に意識しなくとも HTTP で取得してくれますよね。きっと。
未記入じゃけんど
ベテラン
会議室デビュー日: 2004/11/09
投稿数: 65
お住まい・勤務地: Osaka City
投稿日時: 2005-02-10 18:00
すいませんが仕様上、直接指定ができません。
それができたら苦労しなくていいんですがね。
ShinpeiKato
会議室デビュー日: 2005/02/10
投稿数: 2
投稿日時: 2005-02-10 18:20
読み込みからbyte[]をつくって、ImageIconに渡してコンストラクト、
getImageするって方法があります。
Imageクラスはシリアライズできないのでイメージのシリアライゼーションが
ほしいときにもImageIconクラスは使えますよ。
未記入じゃけんど
ベテラン
会議室デビュー日: 2004/11/09
投稿数: 65
お住まい・勤務地: Osaka City
投稿日時: 2005-02-15 17:48
うまくいきません

int len = 0;
while( (len=in.read(buf)) != -1 ) {
out.write(buf,0,len);
}

ImageIcon iIcon = new ImageIcon(buf);

で画像ファイルをイメージアイコンにいれましたが、
アプレットでの表示。(getImageの方法がわかりません)
助けてください。
かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2005-02-15 21:34
引用:

で画像ファイルをイメージアイコンにいれましたが、
アプレットでの表示。(getImageの方法がわかりません)
助けてください。



そんなあなたのためのチュートリアル
http://java.sun.com/docs/books/tutorial/uiswing/misc/icon.html
MARU
常連さん
会議室デビュー日: 2005/02/16
投稿数: 35
投稿日時: 2005-02-16 10:12
BufferedImage image = ImageIO.read(new ByteArrayInputStream( buf ) );
ImageIcon icon = new ImageIcon(image);

以前こんな感じで実装した記憶があります。
ご参考までに。
未記入じゃけんど
ベテラン
会議室デビュー日: 2004/11/09
投稿数: 65
お住まい・勤務地: Osaka City
投稿日時: 2005-02-16 18:32
ローカルから画像を一度、バイナリに変換して(URLをあえて使用せずに)
再度、画像ファイルとしてアプレットに表示しようとして
次のようなコードを書きました。
しかし、表示することができません。
どこかおかしいでしょうか?わかるかた、おねがいします。

import java.applet.*;
import java.io.*;
import java.awt.*;

public class TestTestTest extends Applet {

Image img =null;
String S_PATH = "image1.jpg";

public void init() {
try {
FileInputStream in = new FileInputStream(S_PATH);

ByteArrayOutputStream Baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(Baos);

byte[] buf = new byte[64];
int len = 0;
while( (len=in.read(buf)) != -1 ) {
oos.write(buf,0,len);
}
Baos.flush();
img = Toolkit.getDefaultToolkit().createImage(Baos.toByteArray());

in.close();
Baos.close();
oos.close();

img = getImage(getCodeBase(),"image1.jpg");
} catch (Exception e){
System.out.println(e.toString());
}
}
public void paint(Graphics g){
g.drawString("画像を表示します",10,10);
g.drawImage(img,20,10,this);
}
}

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