1

x 및 y 방향으로 이미지를 꿰매 붙이기 위해 클래스를 코딩하려고합니다. x 방향은 작동 중이고 y 방향을 줄이려면 이미지를 90 ° 회전시킨 다음 이미 재조정 한 이미지 (x 방향에만 해당)에 동일한 코드를 실행 한 다음 다시 초기 상태로 돌리는 것이 좋습니다.회전 BufferedImage가 색상을 변경합니다.

AffineTransform으로 뭔가를 발견하고 사용해 보았습니다. 그것은 실제로 회전 된 이미지를 만들어 냈지만 색상을 엉망으로 만들었고 왜 그런지 모르겠습니다.

import java.awt.image.BufferedImage; 
import java.awt.geom.AffineTransform; 
import java.awt.image.AffineTransformOp; 
import java.io.File; 
import java.io.IOException; 
import javafx.scene.paint.Color; 
import javax.imageio.ImageIO; 


public class example { 
/** 
* @param args the command line arguments 
*/ 
public static void main(String[] args) throws IOException { 
    // TODO code application logic here 

    BufferedImage imgIn = ImageIO.read(new File("landscape.jpg")); 
    BufferedImage imgIn2 = imgIn; 

    AffineTransform tx = new AffineTransform(); 
    tx.rotate(Math.PI/2, imgIn2.getWidth()/2, imgIn2.getHeight()/2);//(radian,arbit_X,arbit_Y) 

    AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_BILINEAR); 
    BufferedImage last = op.filter(imgIn2, null);//(sourse,destination) 
    ImageIO.write(last, "JPEG", new File("distortedColors.jpg")); 
} 

}

그냥
BufferedImage imgIn = ImageIO.read(new File("landscape.jpg"));에서 파일 이름을 변경하고 그것을 시도 :

이 모든 코드입니다.

실행하면 히트 맵, 이음새가있는 이미지 및 재배 정된 이미지의 4 가지 이미지가 생성됩니다. 마지막 이미지는 회전이 제대로 작동하는지 테스트하는 것으로 회전 된 이미지가 표시되지만 왜곡 된 색상이 표시되어야합니다 ...

도움말에 크게 감사드립니다!

편집 : op.filter(imgIn2, null);null 전달로 인해 발생하는 색상 변환이처럼

enter image description here

+0

당신이 당신이 그 최종 이미지에 잘못된 데이터를 작성하지 않을 수 있도록 디버깅나요 작동? 같은 색 설정 (색 공간 등)을 사용 했습니까? 또한 게시하시기 바랍니다 [mvce] (http://stackoverflow.com/help/mcve), 너무 많은 코드를 IMO입니다. – Thomas

+0

어떻게 색상이 엉망이 되었습니까? 모든 녹색이 분홍색으로 된 것처럼 흐릿하거나 색이 바뀌 었습니까? 어쩌면 당신은 당신의 이미지를 보여 줄 수 있습니다. –

+0

예, 정말로 빨리 수정하겠습니다. – ViktorG

답변

2

보인다. 당신이 그런 식으로 변경하면

작동한다 :

BufferedImage last = new BufferedImage(imgIn2.getWidth(), imgIn2.getHeight(), imgIn2.getType()); 
op.filter(imgIn2, last); 
+0

작동, 내 오류를 찾으려면 AffineTransformOP의 설명서를 다시 읽으십시오. 고맙습니다 – ViktorG

2

문제로 인 AffineTransformOp 당신이 필요로하는 대신 당신이 지금 가지고있는 선형의

AffineTransformOp.TYPE_NEAREST_NEIGHBOR 

.

설명서 힌트의 두 번째 단락을 참조하십시오.

이 클래스는 아핀 2D는 대상 이미지 래스터 좌표 2D 소스 이미지 래스터 좌표 에서 선형 매핑을 실행합니다. 사용되는 보간 유형은 RenderingHints 객체 또는이 클래스에 정의 된 정수 보간 유형 중 하나에 의한 에 의해 생성자를 통해 으로 지정됩니다. RenderingHints 객체가 생성자에 지정되면 보간 힌트와 렌더링 품질 힌트를 사용하여이 작업에 대한 보간 유형을 으로 설정합니다.

색 변환 힌트와 디더링 힌트는 색 변환이 필요할 때 사용할 수 있습니다. 에 다음 제약 조건이 충족되어야합니다. 원본 및 대상이 달라야합니다. Raster 객체의 경우 소스의 수는 대상의 수와 같아야합니다.

그래서이

AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_NEAREST_NEIGHBOR); 
관련 문제