programing

Java가 이미지를 버퍼 이미지로 변환

yoursource 2022. 10. 22. 13:12
반응형

Java가 이미지를 버퍼 이미지로 변환

StackOverflow에는 이미 다음과 같은 질문이 있으며, 받아들여지는 답변은 "캐스팅"입니다.

Image image = ImageIO.read(new File(file));
BufferedImage buffered = (BufferedImage) image;

프로그램에서는 다음을 시도합니다.

final float FACTOR  = 4f;
BufferedImage img = ImageIO.read(new File("graphic.png"));
int scaleX = (int) (img.getWidth() * FACTOR);
int scaleY = (int) (img.getHeight() * FACTOR);
Image image = img.getScaledInstance(scaleX, scaleY, Image.SCALE_SMOOTH);
BufferedImage buffered = (BufferedImage) image;

안타깝게도 실행 시간 오류가 발생합니다.

sun.awt.image를 표시합니다.ToolkitImage는 java.awt.image에 캐스트할 수 없습니다.버퍼링된 이미지

분명히 캐스팅은 효과가 없다.
질문:이미지를 Buffered Image로 변환하는 적절한 방법 또는 방법이 있습니까?

Java 게임 엔진에서:

/**
 * Converts a given Image into a BufferedImage
 *
 * @param img The Image to be converted
 * @return The converted BufferedImage
 */
public static BufferedImage toBufferedImage(Image img)
{
    if (img instanceof BufferedImage)
    {
        return (BufferedImage) img;
    }

    // Create a buffered image with transparency
    BufferedImage bimage = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_ARGB);

    // Draw the image on to the buffered image
    Graphics2D bGr = bimage.createGraphics();
    bGr.drawImage(img, 0, 0, null);
    bGr.dispose();

    // Return the buffered image
    return bimage;
}

이를 처리하는 한 가지 방법은 새로운 Buffered Image를 만들고 그래픽 오브젝트에 축소된 이미지를 새로운 Buffered Image로 그리는 것입니다.

final float FACTOR  = 4f;
BufferedImage img = ImageIO.read(new File("graphic.png"));
int scaleX = (int) (img.getWidth() * FACTOR);
int scaleY = (int) (img.getHeight() * FACTOR);
Image image = img.getScaledInstance(scaleX, scaleY, Image.SCALE_SMOOTH);
BufferedImage buffered = new BufferedImage(scaleX, scaleY, TYPE);
buffered.getGraphics().drawImage(image, 0, 0 , null);

그건 캐스팅하지 않아도 효과가 있을 거야.

Kotlin을 사용하는 경우 Sri Harsha Chilakapati가 제안하는 것과 동일한 방법으로 이미지에 확장 메서드를 추가할 수 있습니다.

fun Image.toBufferedImage(): BufferedImage {
    if (this is BufferedImage) {
        return this
    }
    val bufferedImage = BufferedImage(this.getWidth(null), this.getHeight(null), BufferedImage.TYPE_INT_ARGB)

    val graphics2D = bufferedImage.createGraphics()
    graphics2D.drawImage(this, 0, 0, null)
    graphics2D.dispose()

    return bufferedImage
}

그리고 이렇게 사용하세요.

myImage.toBufferedImage()

만약 당신이 그것을 돌려받는다면sun.awt.image.ToolkitImage이미지를 거기에 캐스트 한 후 getBufferedImage()를 사용하여,BufferedImage.

따라서 캐스팅하는 마지막 코드 행 대신 다음과 같은 작업을 수행할 수 있습니다.

BufferedImage buffered = ((ToolkitImage) image).getBufferedImage();

언급URL : https://stackoverflow.com/questions/13605248/java-converting-image-to-bufferedimage

반응형