Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

画像保存の方法

javaについての質問です。
 http://www.takana.info/java4/alphacompositetest.htm
を参照していただければわかると思いますが 

動かした画像を保存したいのですが、私はjava初心者のためどうしたらいいかよくわかりません。ソースを貼り付けておきますので、解かる方はソースに保存方法を加えていただき表示していただけると非常に助かります。
勝手なお願いではありますが、よろしくお願いします。
//AlphaCompositeTest

import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
/*
<applet code="AlphaCompositeTest" width=600 height=500>
<param name="file" value="pict0.jpg">
</applet>
*/
public class AlphaCompositeTest extends JApplet implements ChangeListener {

//Eclipseの場合、シリアライズ可能クラスでこれがないと警告が出る
private static final long serialVersionUID=0;
//画像の枚数
static final int NUMBER=3;
//
AlphaCompositeTestPanel panel;
//
JSlider slider02,slider01,slider00;
//
public void init(){
//初期化の後、画像とその透明度をセット
panel=new AlphaCompositeTestPanel();
for(int n=0;n<NUMBER;n++){
panel.setImage(n,getImage(getDocumentBase(),"a"+n+".jpg"));
panel.setAlpha(n,0.5F);
}
//
JPanel panel2=new JPanel();
panel2.setLayout(new GridLayout(3,2));
panel2.add(new JLabel("1枚目"));
panel2.add(slider02=new JSlider(0,255,255));
panel2.add(new JLabel("2枚目"));
panel2.add(slider01=new JSlider(0,255,255));
panel2.add(new JLabel("3枚目"));
panel2.add(slider00=new JSlider(0,255,255));
//コンテナ枠
Container cp=getContentPane();
cp.add(panel,BorderLayout.CENTER);
cp.add(panel2,BorderLayout.SOUTH);
//
slider02.addChangeListener(this);
slider01.addChangeListener(this);
slider00.addChangeListener(this);
}
//それぞれの画像の透明度をセット

public void stateChanged(ChangeEvent e) {
if(e.getSource()==slider02){
float f=(float)(slider02.getValue())/255;
panel.setAlpha(2,f);
//
repaint();
}else if(e.getSource()==slider01){
float f=(float)(slider01.getValue())/255;
panel.setAlpha(1,f);
//
repaint();
}else if(e.getSource()==slider00){
float f=(float)(slider00.getValue())/255;
panel.setAlpha(0,f);
//
repaint();
}
}
}



2個目のjavaファイルです。
//AlphaCompositeTestPanel

import java.awt.*;
import javax.swing.JPanel;

public class AlphaCompositeTestPanel extends JPanel {
//Eclipseの場合、シリアライズ可能クラスでこれがないと警告が出る
private static final long serialVersionUID=0;
//
Image[] images;
float[] alphas;
//
public AlphaCompositeTestPanel(){
images=new Image[AlphaCompositeTest.NUMBER];
alphas=new float[AlphaCompositeTest.NUMBER];

}
//画像を受け取って保持
public void setImage(int n,Image img){
images[n]=img;
}
//透明度を受け取って保持
public void setAlpha(int n,float f){
alphas[n]=f;
}
//
public void paintComponent(Graphics g){
super.paintComponent(g);
//
Graphics2D g2=(Graphics2D)g;
//
for(int n=0;n<AlphaCompositeTest.NUMBER;n++){
//透明度をセットして、画像を描画
AlphaComposite comp=AlphaComposite.getInstance(AlphaComposite.SRC_OVER,alphas[n]);
g2.setComposite(comp);
//
g2.drawImage(images[n],0,0,this);
}
}
}

 

3

回答

3436

閲覧

3件の回答

評価

0

http://bbs.wankuma.com/index.cgi?mode=al2&namber=12906

評価

0

アプレットの場合、いわゆる署名付きアプレットでなければファイルへの保存はできません。ローカルなアプリケーションならできますが、その場合は、画像が表示されているパネルコンポーネントを画像化(Image化)して保存するか、またはg2.drawImage()のg2をBufferedImageのGraphics2Dとして多重描画を行い、そのBufferedImageをパネル上にdrawImage()する(単純な一回描画)とともに、ImageIOを使ってファイルにセーブします。

評価

0

返答ありがとうございます。
正直、Java初心者なのでよくわかりませんがやってみます。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。