2011-10-27 13 views
4

私の画像ファイルに対応するテキストファイルから読み込まれたデータがあります。このデータは現在2D配列になっています。私はこのイメージを見せたい。明らかに、画像はバッファリングされた画像の形式であることを示します。私のものは単純な2Dの二重フォーマットです。 イメージのサイズを変更することで、イメージを2倍大きくすることができます(もちろん、その間に補間が必要です)。Javaの2D配列データの画像を表示

つまり、imshowとimresizeのMatlabをJavaでどのように等しくすることができますか?

+2

をより明確化し、いくつかのコードを投稿 –

+0

ここで私は、Javaにそれを変更したいMATLABコードです:。。 A = importdataは( 'D:\image_arr = 0(9 * 2 * 32,6 * 4); %img_arr = 0(576,24); arr_index = 1; (モジュール= 0:32-1)は(xtal_row = 0:6-1)のため :(2-1 block_col = 0)ため (4-1 block_row = 0)ため \t(xtal_col =用0:9-1) \t \t x = 2 * 9 * module + 9 * block_col + xtal_col + 1; \t y = 6 * block_row + xtal_row + 1; \t img_arr(x、y)= b(arr_index); \t arr_index = arr_index + 1; end end end end end – user1016048

+0

minlocal = min(min(img_arr)); maxlocal = max(max(img_arr)); img_arr2 =(img_arr-minlocal)/(maxlocal-minlocal); img_arr4 = imresize(img_arr2、[2 * 576,2 * 24]); imshow(img_arr4 ') – user1016048

答えて

3

配列ベースの強度行列とJavaのレンダリング可能な画像との間で変換する簡単な方法はありません。少なくとも私が知っているものではありません。また、画面に画像を表示するための単純な1行の方法もありません。

この場合、BufferedImageは実行可能な解決策になります。あなたがしなければならないのは、目的のサイズのBufferedImageを作成し、次に2D強度マトリックスをループし、結果の画像の色を塗りつぶすことです。

データをBufferedImageの形式にしたら、それをレンダリングに直接使用できます。たとえば、イメージを表示するためのカスタムJPanelコンポーネントを使用してJFrameを作成できます。次のサンプルコードは、この手順を示しています:(2D配列内の画像データが区間[0,1]に収まるようにスケーリングされていることを前提としていますが、そうでない場合、塗りつぶす前に再スケーリングする必要がありますBufferedImageのである。)は、上記の例が示すように、サイズ変更した後、あなたは、単にグラフィックスコンテキストをスケーリングし、その上にヒントをレンダリング補間を可能にすることによって、それを達成することができ、得られた出力画像に補間に満足している場合

public class ImageTest { 

    private static final int HEIGHT = 250; 
    private static final int WIDTH = 250; 

    public static void main(String[] args) { 
     double[][] data = new double[WIDTH][HEIGHT]; 
     Random r = new Random(); 
     for(int i = 0; i < WIDTH; i++) { 
      for(int j = 0; j < HEIGHT; j++) { 
       data[i][j] = r.nextDouble(); 
      } 
     } 

     final BufferedImage img = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB); 
     Graphics2D g = (Graphics2D)img.getGraphics(); 
     for(int i = 0; i < WIDTH; i++) { 
      for(int j = 0; j < HEIGHT; j++) { 
       float c = (float) data[i][j]; 
       g.setColor(new Color(c, c, c)); 
       g.fillRect(i, j, 1, 1); 
       data[i][j] = r.nextDouble(); 
      } 
     } 

     JFrame frame = new JFrame("Image test"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JPanel panel = new JPanel() { 
      @Override 
      protected void paintComponent(Graphics g) { 
       Graphics2D g2d = (Graphics2D)g; 
       g2d.clearRect(0, 0, getWidth(), getHeight()); 
       g2d.setRenderingHint(
         RenderingHints.KEY_INTERPOLATION, 
         RenderingHints.VALUE_INTERPOLATION_BILINEAR); 
         // Or _BICUBIC 
       g2d.scale(2, 2); 
       g2d.drawImage(img, 0, 0, this); 
      } 
     }; 
     panel.setPreferredSize(new Dimension(WIDTH*2, HEIGHT*2)); 
     frame.getContentPane().add(panel); 
     frame.pack(); 
     frame.setVisible(true); 
    } 
} 

画像を表示/レンダリングするときに使用します。 (これはもちろん、BufferedImageで同様の方法で直接行うことができます。

関連する問題