アプレットのプログラムで、まずグラフを描画し、その
描画したグラフをJPEGファイルに保存したいのですが、
どなたかやり方をご存知ないでしょうか?
また、それ関連の処理が記されているHPをご存知ないでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (2件)

実現するためには、2つのステップを踏む必要があります。



その1.JPEGファイルの保存先は、
サーバー上に保存するならCGIを使えば可能です。
CGIとアプレットの通信をまず勉強しましょう。

その2.アプレットでJPEGファイルを作成するには、
フリーで公開されているライブラリ等を使えば
出来ると思います。(たとえばJimiなど。)
(Java Plug-inがOKでJava2限定ならJava2Dを使うという手もあります。)

いきなりアプレットは難しいと思うのでまずは
雛形としてアプリケーションを作ってみてはどうでしょうか?

参考URL:http://java.sun.com/products/jimi/
    • good
    • 0

アプレットはセキュリティの弱点になりうるため、通常はいろいろ


な制約がかかっています。その一つはローカルのファイルを読み書
きできないというものです(セキュリティの甘いブラウザならば、
できるかもしれません)。また、ローカルの実行可能プログラムを
実行することもできません。署名つきアプレットというのが使える
なら、この制約も緩和されると思いますが、それはアプレット作者
を信用できるかどうかにかかってきます。

もう一点、グラフのように境界がはっきりして色数の少ない図は、
JPEGではなくGIFかPNGにする方が、画質・ファイルサイズの両面か
ら有利です。GIFは特許問題がからんでいるので、そろそろPNGに切
り替えた方がいいでしょう。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

Qjavaアプレットでの文字化けと動的なグラフ描画について

ネットワークのノード間のつながりを簡易的に描画するようなアプレットやフラッシュ等を探しています(質問1)。棒グラフや円グラフといったものは多く見つかるのですが・・・。
[HyperGraph] http://hypergraph.sourceforge.net/ でそれらしいのを見つけたのですがUTF-8で書いた(他も同様)XMLファイルを読み込ませるとアプレットをロードした際に日本語が文字化けしてしまいます。調べたところアプレット側ではUnicode(UTF-8)で処理するとかなんとかということでアプレットのソースを改良する必要があるのかどうかというところで悩んでいます(質問2)。よろしくお願いします。

Aベストアンサー

■質問2について
そのアプレットのソースコード内で、
描画時の"デフォルトの"フォントが、
Arialに設定されているようです。

(i)そのアプレット用の"プロパティファイル"を作って(
※名前は仮にhoge.propとする)、

(ii)このプロパティファイルの1項目として
hypergraph.hyperbolic.text.fontName=
を設定し(※等号の右辺は、とりあえず何も書かなくても大丈夫っぽい)、

(iii)HTMLのアプレットタグに
<param name="properties" value="hoge.prop">
を追加。

<参考>
http://hypergraph.sourceforge.net/propfiles.html
http://hypergraph.sourceforge.net/propVisual.html

■質問1について
sunのJDKにデモがあります。
(http://oshiete1.goo.ne.jp/qa1466120.html)

たしか、
連結ノード間・・・引力
全ノード間・・・斥力
だったような。

■質問2について
そのアプレットのソースコード内で、
描画時の"デフォルトの"フォントが、
Arialに設定されているようです。

(i)そのアプレット用の"プロパティファイル"を作って(
※名前は仮にhoge.propとする)、

(ii)このプロパティファイルの1項目として
hypergraph.hyperbolic.text.fontName=
を設定し(※等号の右辺は、とりあえず何も書かなくても大丈夫っぽい)、

(iii)HTMLのアプレットタグに
<param name="properties" value="hoge.prop">
を追加。

<参考>
http://hypergraph.sourcefo...続きを読む

Qアプレットで描画したグラフを画像に保存する方法について

初めて質問させていただきます。
プログラム上で、javaアプレットで描画した折れ線グ
ラフ、棒グラフをJPEGなどの画像ファイルとして保存
する方法が分からず困っています。

ひとつの方法として、プリントスクリーンを使用する
方法を考えたのですが、これだと表示されている画面
そのものが画像ファイルとして保存されてしまい、マ
ウスカーソルまでもが入っていたりする画像となって
しまいます。

何か良い方法がありましたら教えてください。
よろしくお願いします。

Aベストアンサー

http://forum.java.sun.com/thread.jspa?threadID=416184&messageID=1838514

に情報があります。screen captureを使わない方法は,Jun 26, 2003 10:09 AM (reply 2 of 3) に示されています。

この方法でBufferedImageを作って,あとはそれを,

http://java.sun.com/products/java-media/2D/samples/suite/Image/JPEGFlip.java

の94~107行目あたりに示されてる,JPEGImageEncoderを用いる方法でJPEGにエンコードしてやればよいと思われます。

ただし,JPEGImageEncoderを用いる方法は,J2SE SDK の非標準パッケージであるcom.sun.image.codec.jpegに依存しているため,プラットフォームによっては問題が起きる可能性があります。

これを避けるには,

http://www.javadrive.jp/java2d/bufferedImage/index2.html
http://www.fk.urban.ne.jp/home/kishida/kouza/kishou/jsp04.html

などで示されているように,javax.imageioパッケージを利用すればよいと思われます。

http://forum.java.sun.com/thread.jspa?threadID=416184&messageID=1838514

に情報があります。screen captureを使わない方法は,Jun 26, 2003 10:09 AM (reply 2 of 3) に示されています。

この方法でBufferedImageを作って,あとはそれを,

http://java.sun.com/products/java-media/2D/samples/suite/Image/JPEGFlip.java

の94~107行目あたりに示されてる,JPEGImageEncoderを用いる方法でJPEGにエンコードしてやればよいと思われます。

ただし,JPEGImageEncoderを用いる方法は,J2SE SDK の...続きを読む

Qアプレットで文字列の描画を横を半分に縮小して描画したい。

java初心者です。

アプレットで文字列を描画するときにdrawStringメソッドで描画すると思うのですが、それでデフォルトで描画する時の横の長さを半分にして描画したいのですが(見た目的には縦長にする感じです)、何か方法はあるでしょうか?

よろしくお願いします。

Aベストアンサー

>デフォルトで描画する時の横の長さを半分にして描画したいのですが(見た目的には縦長にする感じです)、何か方法はあるでしょうか?

これは、つまり描画する領域の横幅を決めて、折り返し表示するようにしたいのでしょうか。それとも1文字1文字の横幅が狭くなった感じで表示したい、ということでしょうか。

前者ですと、まともにやろうとするとかなり大変です。java.awt.font.LineBreakMeasurerというクラスを使い、指定の幅ごとにテキストを切り出して描画するような処理をします。面倒な人は、たいていテキストの横幅をFontmetrixなどで割り出していくつかに分割して描いたりします。

後者の場合には、Graphics2Dにはアフィン変換という座標変換の機能がありますので、それを利用して横の座標軸を圧縮して描画するという手があるでしょう。

Graphics2D g2 = (Graphics2D)g;
g2.scale(0.5,1.0);
g2.drawString(・・・);

こんな感じで描画すると、横の座標軸が縦の2分の1になり、結果として横幅が通常の半分になります。

>デフォルトで描画する時の横の長さを半分にして描画したいのですが(見た目的には縦長にする感じです)、何か方法はあるでしょうか?

これは、つまり描画する領域の横幅を決めて、折り返し表示するようにしたいのでしょうか。それとも1文字1文字の横幅が狭くなった感じで表示したい、ということでしょうか。

前者ですと、まともにやろうとするとかなり大変です。java.awt.font.LineBreakMeasurerというクラスを使い、指定の幅ごとにテキストを切り出して描画するような処理をします。面倒な人は、たいて...続きを読む

Qアプレットを再描画させたい

アプレットを作りましたが、ウィンドウの大きさを変えた時にも描いたオブジェクトをrepaintを使って再描画させるのは
どのようにすればよいのでしょうか。
_______________________________
public class QQ_Oekaki extends Applet implements ActionListener
{
Graphics g;
Color col;

int w;
int h;

Button btnBlue;
Button btnYellow;

public void init()
{
g = getGraphics();

btnBlue = new Button("Blue");
this.add(btnBlue);
btnBlue.addActionListener(this);
btnBlue.setFont(new Font("SansSerif", Font.ITALIC, 10));
btnBlue.setForeground(Color.blue);

btnYellow = new Button("Yellow");
this.add(btnYellow);
btnYellow.addActionListener(this);
btnYellow.setFont(new Font("SansSerif", Font.ITALIC, 10));
btnYellow.setForeground(Color.yellow);

this.addMouseMotionListener
(
new MouseMotionAdapter()
{
public void mouseDragged(MouseEvent e)
{
int x = e.getX();
int y = e.getY();

g.setColor(Color.green);
g.setColor(col);
g.fillRect(x,y,5,5);
}
}
);
}

public void actionPerformed(ActionEvent ae)
{

if(ae.getActionCommand()=="Yellow")
{
col = Color.yellow;
}

if(ae.getActionCommand()=="Blue")
{
col = Color.BLUE;
}
}
}

アプレットを作りましたが、ウィンドウの大きさを変えた時にも描いたオブジェクトをrepaintを使って再描画させるのは
どのようにすればよいのでしょうか。
_______________________________
public class QQ_Oekaki extends Applet implements ActionListener
{
Graphics g;
Color col;

int w;
int h;

Button btnBlue;
Button btnYellow;

public void init()
{
g = getGraphics();

btnBlue = new Button("Blue");
this.add(btnBlue);
btnBlue.addActionLi...続きを読む

Aベストアンサー

質問の意味がよく分からないので、質問にはお答えしません。それ以前に、アプレットの基本形/標準形を勉強してください。以下のアプレットをコンパイルし、動かしてみてください。参考URLは、http://を略します。
------------------------------------------------------
/* save and compile as QQ */
/*
<applet code="QQ" width="400" height="400"></applet>
*/
import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public class QQ extends Applet implements ActionListener{
Color col;
int ox, oy, nx, ny;
Button btnBlue;
Button btnYellow;

public void init(){
col = Color.lightGray; //ボタンが押される前の描画色

setBackground(Color.darkGray);

btnBlue = new Button("Blue");
add(btnBlue);
btnBlue.addActionListener(this);
btnBlue.setFont(new Font("SansSerif", Font.ITALIC, 10));
btnBlue.setForeground(Color.blue);

btnYellow = new Button("Yellow");
add(btnYellow);
btnYellow.addActionListener(this);
btnYellow.setFont(new Font("SansSerif", Font.ITALIC, 10));
btnYellow.setForeground(Color.yellow);

addMouseMotionListener(new MouseMotionAdapter(){
public void mouseDragged(MouseEvent e){
ox = nx;
oy = ny;
nx = e.getX();
ny = e.getY();
QQ.this.repaint();
}
});

addMouseListener(new MouseAdapter(){
public void mousePressed(MouseEvent e){
ox = nx = e.getX();
oy = ny = e.getY();
QQ.this.repaint();
}
});
}

public void update(Graphics g){ //背景塗りつぶしを抑止する(連続描画のため)
g.setColor(col);
paint(g);
}

public void paint(Graphics g){
g.drawLine(ox, oy, nx, ny);
}

public void actionPerformed(ActionEvent ae){
if (ae.getActionCommand()=="Yellow"){
col = Color.yellow;
}
else if (ae.getActionCommand()=="Blue"){
col = Color.BLUE;
}
QQ.this.repaint();
}
}
--------------------------------------------------

質問の意味がよく分からないので、質問にはお答えしません。それ以前に、アプレットの基本形/標準形を勉強してください。以下のアプレットをコンパイルし、動かしてみてください。参考URLは、http://を略します。
------------------------------------------------------
/* save and compile as QQ */
/*
<applet code="QQ" width="400" height="400"></applet>
*/
import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public class QQ extends Applet implements ActionListener{
...続きを読む

Qjavaでアプレットの描画が出来ない

ものすごく初心者な質問で申し訳ありません。
jdk-1.6.0をVine linux 3.2にインストールして使用しています。
javaのソースを書いてコンパイルするなどには問題は無いのですが
(今のところ)
以下のようなアプレットを試してみたところアプレットの窓は起動しますが
描画がされません。

import java.applet.Applet;
import java.awt.Graphics;
/*
<applet code="test" width=200 height=200>
</applet>
*/

public class test extends Applet {
public void paint(Graphics g) {
g.drawLine(10,10,180,110);
}
}

以上のコードを
%javac test.java
%appletviewer test.java
としました。窓は起動し、アプレットが開始された、と表示されるのですが
線が見当たりません。

(ちなみに教科書にあるサンプルなので間違いがあったとしたら写し間違いです)
線が表示されるはずなんですが、表示されないのです。
まども起動するので何かJAVAを使う環境として何か細かい設定を間違って
いるのかと思い質問しました。

分かる方がいらっしゃったら教えてください。

ものすごく初心者な質問で申し訳ありません。
jdk-1.6.0をVine linux 3.2にインストールして使用しています。
javaのソースを書いてコンパイルするなどには問題は無いのですが
(今のところ)
以下のようなアプレットを試してみたところアプレットの窓は起動しますが
描画がされません。

import java.applet.Applet;
import java.awt.Graphics;
/*
<applet code="test" width=200 height=200>
</applet>
*/

public class test extends Applet {
public void paint(Graphics g) {
g.drawLine(...続きを読む

Aベストアンサー

#2です(Win:XP JDK1.6)で確かめてますが
「警告: AppletViewer プロパティファイルが読み込まれません: C:\Documents and Settings\hogehoge\.hotjava\properties デフォルトを使用します。」
とでます。(私もはじめて)これが表示されるのは最初だけで、
最初のViewer 起動時に C:\Documents and Settings\hogehoge\の下に
.appletviewer なるファイルが生成されています。
その中身は
------------------------1
http.proxyPort=80
package.restrict.access.sun=true
http.proxyHost=
-----------------------------1
です。意味はわかりません。2回目以降はこの生成されたファイルを読んでいるようでエラーになりません。
vineがないので推測ですが、viewer起動時に作成されるはずの
.appletviewer が権限がなく作成されない。(メッセージ出てもよさそうですが)
.appletviewer を権限がなく読めない。
などが考えられます。
アカウント近辺にそのようなファイルはありませんか?
あれば属性を確認してください。
ない場合はHomeディレクトリの下(かな?)に
.hotjavaディレクトリを作成し
その中にpropertiesファイルを作成してください。中身は 1で構わないかと。。。
それにしても「デフォルトを使用します。」って一文が非常に気になります。

#2です(Win:XP JDK1.6)で確かめてますが
「警告: AppletViewer プロパティファイルが読み込まれません: C:\Documents and Settings\hogehoge\.hotjava\properties デフォルトを使用します。」
とでます。(私もはじめて)これが表示されるのは最初だけで、
最初のViewer 起動時に C:\Documents and Settings\hogehoge\の下に
.appletviewer なるファイルが生成されています。
その中身は
------------------------1
http.proxyPort=80
package.restrict.access.sun=true
http.proxyHost=
---------...続きを読む


人気Q&Aランキング

おすすめ情報