문제

인덱스 콜로 모드가있는 완충학이 있습니다. 그런 다음 변환 된 DisplayImage 버전을 생성하기 위해 Affinetransformop에 아피 네트란색을 적용하려고합니다.

코드 스 니펫은 다음과 같습니다.

int type = isRGB() ? AffineTransformOp.TYPE_BILINEAR : AffineTransformOp.TYPE_NEAREST_NEIGHBOR;
AffineTransformOp op = new AffineTransformOp(atx, type);
displayImage = op.filter(displayImage, null);

나는 많은 이미지로 이것을 실행하고 있으며, 이전 게시물에서 변환 유형을 Bilinear로 설정하면 DirectColormodel로 이미지를 다시 얻었 기 때문에 메모리가 부족한 것을 발견했습니다. 그러나이 DirectColormodel에는 올바른 알파 채널이있었습니다 (번역 한 후 이미지를 녹색 배경으로 그리면 전체 이미지 주위에서 녹색을 볼 수있었습니다). 보간 유형을 가장 가까운 이웃에게 설정하면 이미지의 위와 왼쪽 픽셀은 배경이 무엇이든 검은 색으로 나타납니다. 나는 이것이 알파가 설정되지 않았다는 것을 의미한다고 가정합니다.

누구든지 인덱스 콜로 모드로 알파 채널을 올바르게 설정하는 방법을 말하거나 올바른 알파로 인덱스 콜로 모드를 얻도록 Affinetransformop 매개 변수를 변경하는 방법을 알려줄 수 있습니까?

감사!!

편집 : 여기에 원하는 효과가 있습니다 AffineTransformOp.TYPE_BINLINEAR: alt text

여기에 내가 보는 효과가 있습니다 AffineTransformOp.TYPE_NEAREST_NEIGHBOR: alt text

전체 배경은 초기에 효과를 위해 녹색으로 칠해져 있으며 두 경우 모두 이미지가 위치 (0, 0)에 그려집니다.

도움이 되었습니까?

해결책

당신이 달성하려는 효과가 확실하지 않지만, 전환하기 전에 알파를 조정할 때 예상 결과를 얻습니다. 일반적으로 시작합니다 setComposite(AlphaComposite.Clear) 그 뒤에 fillRect(). 다른 모든 것이 실패하면 가능합니다 filter() a WritableRaster, 당신이 원하는 결과를 무차별합니다. 또한, 당신은 볼 수 있습니다 RenderingHints ~와 연관되다 KEY_ALPHA_INTERPOLATION. 여기에 있습니다 장난감 나는 알파, 모드 및 색상의 다양한 조합을 실험하는 데 사용합니다.

나는 당신의 이미지가 보여주는 효과를보고 기억하는 것 같습니다. 그것을 회상합니다 AffineTransformOp 다른 코디네이트가있는 이미지를 반환 할 수 있습니다. 특히 회전하면 추가 된 "빈"공간이 제대로 초기화되지 않는 것으로 생각됩니다. 아래 코드로 투명한 테두리를 얻을 수 있으므로 중앙 주위의 회전도 다소 대칭적인 것으로 나타납니다.

private BufferedImage getSquareImage(BufferedImage image) {
    int w = image.getWidth();
    int h = image.getHeight();
    int max = Math.max(w, h);
    BufferedImage square = new BufferedImage(
            max, max, BufferedImage.TYPE_INT_ARGB);
    Graphics2D g2d = square.createGraphics();
    g2d.setRenderingHint(
            RenderingHints.KEY_ANTIALIASING,
            RenderingHints.VALUE_ANTIALIAS_ON);
    g2d.setComposite(AlphaComposite.Clear);
    g2d.fillRect(0, 0, max, max);
    g2d.setComposite(AlphaComposite.Src);
    g2d.drawImage(image, (max - w) / 2, (max - h) / 2, null);
    g2d.dispose();
    return square;
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top