Samples > 画像を保存する

 

画像を保存する

画像を保存するには、生成したImageオブジェクトからImageDataを取り出し、ImageLoaderのsaveメソッドで保存します。

Image img = new Image(...);
ImageData data = img.getImageData();
ImageLoader loader = new ImageLoader();
loader.data = new ImageData[]{ data };
loader.save("circle.bmp", SWT.IMAGE_BMP);

4行目でImageLoaderにImageDataを与えるわけですが、配列としてデータを代入しています。この理由はアニメーションGIF画像やインターレース形式のJPEG画像ではデータ構造として複数のフレームを持つのでImageDataが配列とて扱われているのです。

ImageLoaderのsave(String filename, int style)メソッドでは、以下の画像フォーマットをサポートしています。2番目の引き数に以下のファイルフォーマットを指定することで、そのフォーマットで画像を保存することが可能です。

画像フォーマット スタイル引き数
WindowsBMPフォーマット IMAGE_BMP
RLE圧縮のWindowsBMPフォーマット IMAGE_BMP_RLE
GIFフォーマット IMAGE_GIF
Windowsアイコンフォーマット IMAGE_ICO
JPEGフォーマット IMAGE_JPEG
PNGフォーマット IMAGE_PNG

サンプルプログラム

以下のサンプルはブランクImageにGCで円を描画し、それをビットマップファイルとして保存しています。

ソースコード (SavingImageTest.java)

import org.eclipse.swt.widgets.*;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.layout.*;

public class SavingImageTest {

        public static void main(String[] args) {
                new SavingImageTest();
        }
        public SavingImageTest() {
                Display display = new Display();
                final Shell shell = new Shell(display);
                shell.setText("SavingImageTest");

                final Image image = new Image(display, 100, 100);
                GC gc = new GC(image);
                gc.setBackground(display.getSystemColor(SWT.COLOR_BLUE));
                gc.fillOval(10, 10, 80, 80);
                
                shell.setLayout(new RowLayout(SWT.VERTICAL));
                Canvas c = new Canvas(shell, SWT.BORDER);
                c.setLayoutData(new RowData(100,100));
                c.addPaintListener(new PaintListener(){
                        public void paintControl(PaintEvent e) {
                                e.gc.drawImage(image, 0, 0);
                        }
                });
                
                Button b = new Button(shell, SWT.PUSH);
                b.setText("保存");
                b.addSelectionListener(new SelectionAdapter(){
                        public void widgetSelected(SelectionEvent e) {
                                ImageData data = image.getImageData();
                                ImageLoader loader = new ImageLoader();
                                loader.data = new ImageData[]{data};
                                loader.save("circle.bmp", SWT.IMAGE_BMP);
                                MessageBox box = new MessageBox(shell, SWT.OK);
                                box.setMessage("画像を保存しました。");
                                box.setText("画像の保存");
                                box.open();
                        }

                });

                shell.pack();
                shell.open();
                while (!shell.isDisposed()) {
                        if (!display.readAndDispatch()) {
                                display.sleep();
                        }
                }
                display.dispose();
        }
}


最新更新日: 2004年1月30日
 

Copyright(C) 2003,2004 Jasmin Project. All Right Reserved.
SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送