2017-11-30 10 views
0

2次元カラーリストを実際のイメージに変換してエクスポートしようとしていますが、使用しようとすると色が歪みます)javafx2からイメージを作成するbufferImageを使用して2dカラーリストを作成する

import javafx.scene.paint.Color; 

import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.IOException; 
import java.util.List; 

import javax.imageio.ImageIO; 

public class ImageAction { 
    public static void fromColorGrid(List<List<Color>> colorGrid) { 
     int width = colorGrid.size(); 
     int height = colorGrid.get(0).size(); 

     BufferedImage buffImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 

     // Set each pixel of the BufferedImage to the color from the Color[][]. 
     for (int x = 0; x < width; x++) { 
      for (int y = 0; y < height; y++) { 
       String colorStr = colorGrid.get(x).get(y).toString().replace("0x", ""); 
       int rgb = Integer.parseInt(colorStr, 16); 
       System.out.println(colorStr + " " + rgb); 
       buffImage.setRGB(x, y, rgb); 
      } 
     } 
     try { 
      File outputfile = new File("saved.png"); 
      ImageIO.write(buffImage, "png", outputfile); 
     } catch (IOException e) { 
      System.out.println("Ups"); 
     } 
    } 
} 

どこが間違っていますか?

答えて

0

このビットは、私には奇妙に思える:

String colorStr = colorGrid.get(x).get(y).toString().replace("0x", ""); 
int rgb = Integer.parseInt(colorStr, 16); 
System.out.println(colorStr + " " + rgb); 
buffImage.setRGB(x, y, rgb); 

コードはJavaFXのの色のクラスのtoString()方法、which explicitly statesに依存している:このメソッドは、情報提供のみを目的として使用されることを意図して

。返される文字列の内容と形式は、実装によって異なる場合があります。任意の特定のtoString()の実装に依存していない以上

Color fxColor = colorGrid.get(x).get(y); 
java.awt.Color awtColor = new java.awt.Color((float) fxColor.getRed(), 
     (float) fxColor.getGreen(), 
     (float) fxColor.getBlue(), 
     (float) fxColor.getOpacity()); 
buffImage.setRGB(x, y, awtColor.getRGB()); 

、そして私の簡単なテストでコードがいるようだ:

代わりに、単にRGB値を使用してAWTの色に直接変換しますその場でうまく動作します。

関連する問題