2016-05-19 8 views
0

私はbytearrayにBMPを持っています。 SWTを使用してEclipse PluginにBMPを表示したいと思います。EclipseプラグインでのBMPのロードSWTを使用したパースペクティブ

私はスイングを使用してBMPを表示したい場合 - 次のようにそれを行うことができます。

BufferedImage bufferedImage = null; 
    try { 
     bufferedImage = ImageIO.read(new ByteArrayInputStream(getLocalByteArray())); 
    } catch (IOException ex) { 

    } 

    JLabel jLabel = new JLabel(new ImageIcon(bufferedImage)); 

    JPanel jPanel = new JPanel(); 
    jPanel.add(jLabel); 
    this.add(jPanel); 

更新: BMPは、バイト配列として表現されます。これは、この前提条件です。

SWTを使用してEclipse Pluginでこれを行うにはどうすればよいですか?注:私はパースペクティブを使用しています。

答えて

0

OK - 私はそれを理解しました。コードが短いので、私は文脈を含めました:

public void createPartControl(Composite parent) { 
    try { 
     BufferedInputStream inputStream = new BufferedInputStream(new ByteArrayInputStream(getLocalByteArray())); 
     ImageData imageData = new ImageData(inputStream); 
     Image image = ImageDescriptor.createFromImageData(imageData).createImage(); 


     // Create the canvas for drawing 
     Canvas canvas = new Canvas(parent, SWT.NONE); 
     canvas.addPaintListener(new PaintListener() { 
     public void paintControl(PaintEvent e) { 
     GC gc = e.gc; 
     gc.drawImage(image,10,10); 
     } 
     }); 
2

SWT Imageは入力ストリームから直接作成できます。 Windows形式のBMPを含むいくつかのデータ形式がサポートされています。例えば

Image image = new Image(display, new ByteArrayInputStream(...)); 

は、結果として得られる画像は、Labelに設定するか、他の場所で使用することができます。

+0

謝罪。私は私の質問を更新しました。バイト配列として表されるBMPは、前提条件です。ありがとう。 –

+1

回答をお読みください。これは、(ByteArray)InputStreamからイメージを作成します。あなたのメソッド呼び出しで...を置き換えれば完了です。そして、イメージを処分することを忘れないでください。 –

1

Imageコンストラクタでファイルを指定し、Labelに設定するだけです。

public static void main(String[] args) { 
    Display display = new Display(); 
    Shell shell = new Shell(display); 
    shell.setLayout(new FillLayout()); 

    Label label = new Label(shell, SWT.NONE); 
    Image image = new Image(display, "image.bmp"); 
    label.setImage(image); 

    shell.pack(); 
    shell.open(); 

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

    image.dispose(); 
} 

メモリリークを作成しないように画像の自分自身をdispose()にする必要があります。

+0

お詫び申し上げます。私は私の質問を更新しました。バイト配列として表されるBMPは、前提条件です。ありがとう。 –

関連する問題