java - 如何将具有 ComponentColorModel 的 BufferedImage 转换为 SWT ImageData?

标签 java swt awt bufferedimage

This SWT snippetBufferedImage 转换为 SWT ImageData:

static ImageData convertToSWT(BufferedImage bufferedImage) {
    if (bufferedImage.getColorModel() instanceof DirectColorModel) {
        ...
    } else if (bufferedImage.getColorModel() instanceof IndexColorModel) {
        ...
    }
    return null;
}

问题是,ColorModel 有第三个子类:ComponentColorModel。我需要使用此颜色模型转换图像。我该怎么做?

最佳答案

找到 here (但请注意 crosay 的回答中的补丁!)

if (bufferedImage.getColorModel() instanceof ComponentColorModel) {
    ComponentColorModel colorModel = (ComponentColorModel)bufferedImage.getColorModel();

    //ASSUMES: 3 BYTE BGR IMAGE TYPE

    PaletteData palette = new PaletteData(0x0000FF, 0x00FF00,0xFF0000);
    ImageData data = new ImageData(bufferedImage.getWidth(), bufferedImage.getHeight(), colorModel.getPixelSize(), palette);

    //This is valid because we are using a 3-byte Data model with no transparent pixels
    data.transparentPixel = -1;

    WritableRaster raster = bufferedImage.getRaster();
    int[] pixelArray = new int[3];
    for (int y = 0; y < data.height; y++) {
        for (int x = 0; x < data.width; x++) {
            raster.getPixel(x, y, pixelArray);
            int pixel = palette.getPixel(new RGB(pixelArray[0], pixelArray[1], pixelArray[2]));
            data.setPixel(x, y, pixel);
        }
    }
    return data;

关于java - 如何将具有 ComponentColorModel 的 BufferedImage 转换为 SWT ImageData?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8374276/

相关文章:

java 打印 : incorrect paper size

java - kafka 消费者 API consumer.poll() 不能正常工作,没有异常,只是阻塞

java - TomEE CDI @Inject NullPointerException

java - 如何从 utf-8 字符中去除不可见的字符

java - 如何在 Amazon 中托管 REST API?

javascript - 通过Swt Eclipse浏览器监听字段的变化

java - 使用 UIManager/ColorUIResource 设置按钮背景

java - 平等地抢占多余空间

java - TableViewer 单元格编辑器不工作 - SWT

java - Jtable 没有显示?