java - 可以将 swt.graphics.image 转换为 awt.image 吗?

标签 java image swt awt

我正在使用 eclipse.swt.graphics.image呈现 pdf文件,但我想使用 awt.image 在 jLabel 上绘制它们像这样label.setIcon(new ImageIcon(image)); .是否可以?那怎么办呢?

最佳答案

import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.awt.image.DirectColorModel;
import java.awt.image.IndexColorModel;
import java.awt.image.WritableRaster;

import org.eclipse.swt.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.graphics.*;

public class SWTImageTools {

static BufferedImage convertToAWT(ImageData data) {
    ColorModel colorModel = null;
    PaletteData palette = data.palette;
    if (palette.isDirect) {
        colorModel = new DirectColorModel(data.depth, palette.redMask, palette.greenMask, palette.blueMask);
        BufferedImage bufferedImage = new BufferedImage(colorModel, colorModel.createCompatibleWritableRaster(data.width, data.height), false, null);
        for (int y = 0; y < data.height; y++) {
            for (int x = 0; x < data.width; x++) {
                int pixel = data.getPixel(x, y);
                RGB rgb = palette.getRGB(pixel);
                bufferedImage.setRGB(x, y,  rgb.red << 16 | rgb.green << 8 | rgb.blue);
            }
        }
        return bufferedImage;
    } else {
        RGB[] rgbs = palette.getRGBs();
        byte[] red = new byte[rgbs.length];
        byte[] green = new byte[rgbs.length];
        byte[] blue = new byte[rgbs.length];
        for (int i = 0; i < rgbs.length; i++) {
            RGB rgb = rgbs[i];
            red[i] = (byte)rgb.red;
            green[i] = (byte)rgb.green;
            blue[i] = (byte)rgb.blue;
        }
        if (data.transparentPixel != -1) {
            colorModel = new IndexColorModel(data.depth, rgbs.length, red, green, blue, data.transparentPixel);
        } else {
            colorModel = new IndexColorModel(data.depth, rgbs.length, red, green, blue);
        }       
        BufferedImage bufferedImage = new BufferedImage(colorModel, colorModel.createCompatibleWritableRaster(data.width, data.height), false, null);
        WritableRaster raster = bufferedImage.getRaster();
        int[] pixelArray = new int[1];
        for (int y = 0; y < data.height; y++) {
            for (int x = 0; x < data.width; x++) {
                int pixel = data.getPixel(x, y);
                pixelArray[0] = pixel;
                raster.setPixel(x, y, pixelArray);
            }
        }
        return bufferedImage;
    }
}

这有帮助!

关于java - 可以将 swt.graphics.image 转换为 awt.image 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34697729/

相关文章:

java - 如何将图标作为类路径资源添加到使用 WindowBuilder 创建的 SWT 窗口?

java - SWT 中从右到左的 Shell

java - Java 中的控制剪辑音量 -> FloatControl Volume 不执行任何操作

java - 如何在我的 Gradle JAR 类路径构建脚本中包含 com.sun.tools JAR 并与我的 IDE 同步?

尝试连接数据库时出现 java.net.UnknownHostException

java - 有趣的。 JAVA 中创建和读取 RGB 值是不同的

android - 将图片绘制到 View 的 Canvas 上什么都不做

javascript - 在 javascript 中删除图像 onclick - 不起作用

java - Objectify 中的 "ofy().save().entities( )"和 "ofy().save().entitiy()"如何工作

java - 运行 Java Eclipse SWT(64 位 Linux)