버퍼링 된 이미지를 사용하지 않고 알파 채널이있는 Java 이미지

StackOverflow https://stackoverflow.com/questions/2273730

  •  20-09-2019
  •  | 
  •  

문제

나는 a에 많은 타일을 그리는 것 Canvas,이 타일은 어느 쪽이든 표현됩니다 Images 또는 BufferedImage에스.

나는 밀리 초 끌기를 얻는 것을 알았다 Images하지만 내가 사용하기 시작한 것 BufferedImage타일의 경우 프레임 타임 스카이 로켓은 20ms 이상으로 로켓입니다.

BufferedImage buffered = ImageIO.read(new File(fileName));
Image image = Toolkit.getDefaultToolkit().createImage(fileName);

이 두 이미지 모두 알파 채널을 지원합니다. 알파 능력을 사용하고 싶습니다 Image중개 버퍼 용. 그러나 JDK 에서이 툴킷 호출 외에 파일을 생성 할 수있는 장소를 찾지 못했습니다.

기본적으로 누구나 알파를 지원할 수있는 빈 이미지 (BufferedImage가 아님)를 만드는 방법을 알고 있습니까?

도움이 되었습니까?

해결책

귀하의 질문에 직접 답변하려면 :

// Create a empty BufferedImage which supports alpha
// It will be just as fast a Toolkit image
BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);

일부 배경 :

그것은 모두 당신이 사용하고있는 bufferedimage의 유형으로 내려집니다. BufferedImage는 유형 (int_argb, 4byte_argb 등)을 지정할 수있는 생성자를 제공합니다. ImageIO를 사용하는 경우 BufferedImage의 구성에 사용되는 유형을 제어 할 수 없습니다. imageio는 사용자 정의 인 "0"유형을 사용합니다. 이 유형은 이미지 데이터를 메모리에 저장/액세스하는 방법을 제어하여 이미지가 화면 (또는 다른 이미지)에 그리기/복사/블리팅되는 방식에 크게 재생됩니다.

코드를 기반으로 간단한 테스트를 만들었고 BufferedImage는 항상 매우 느리게 렌더링합니다. type_int_argb로 두 번째 bufferedImage를 생성하고 ImageIO에서 첫 번째 bufferedImage를 복사했습니다. 이 type_int_argb bufferedimage는 툴킷 이미지와 동일한 속도로 렌더링됩니다.

다른 팁

이전 ImageConsumer/ImageProducer API를 사용하여 원하는 컨텐츠로 이미지 객체를 만들 수 있습니다.

이것은 Argb 픽셀에서 이미지 객체를 생성합니다. pix 주어진 너비와 높이의 배열 :

public static Image createImage( int width, int height, int[] pix )
{
    return createImage( width, height, pix, 0, width );
}

public static Image createImage( int width, int height, int[] pix, int offs, int scan )
{
    Toolkit toolkit = Toolkit.getDefaultToolkit();
    ImageProducer source = new MemoryImageSource( width, height, pix, offs, scan );
    return toolkit.createImage( source );
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top