2017-11-30 16 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); 

그 코드는 자바 FX의 색상 클래스의 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 컬러로 직접 변환 장소에서 잘 작동합니다.