如题,请指点,不胜感激

解决方案 »

  1.   

    将图像读入BufferedImage类中
    for(int i=0;i<image.width;i++){
      for(int j=0;j<image.height;j++){
          //bi is instance of BufferedImage
          //pixel是某一点的象素
          int pixel = bi.getRGB(i, j);
      }
    }
    通过象素可以取到颜色分量do something 。就这么多,希望对你有帮助。
      

  2.   

    问题已解决, 感谢 pupppet 提供的思路,现将部分代码贴出分享
    解决方案具体如下,先将 SWT Canvas 中绘制的图像输出到 Image 中, 获得 ImageData(不过在这个过程中,在 ImageData 中没有办法获得颜色值,不知道是不是我没有找到方法,总之用 ImageData.getRgbs() 返回的总是 NULL), 然后将 ImageData 转换成 java.awt.BufferedImage, 从中获取颜色,具体代码如下:public Color getCanvasColor(Canvas canvas, int x, int y)
    {
    Image image = new Image(Display.getDefault(), canvas.getBounds().width, canvas.getBounds().height);
    ImageData data = image.getImageData();

    BufferedImage bi = convertToAWT(data);
    if(bi != null)
    {
    int rgb = bi.getRGB(150, 15);
    int R =(rgb & 0xff0000 ) >> 16 ;
    int G= (rgb & 0xff00 ) >> 8 ;
    int B= (rgb & 0xff );
    return new Color(Display.getDefault(), R, G, B);
    }
    return null;
    }/*
     * 以下是 org.eclipse.swt.graphics.Image 和 java.awt.image.BufferedImage 互转的方法
     * 来自 http://www.java2s.com/CN/Code/Java/SWT-JFace-Eclipse/ConvertbetweenSWTImageandAWTBufferedImage.htm
     */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);
    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++) {
    int pixel = data.getPixel(x, y);
    RGB rgb = palette.getRGB(pixel);
    pixelArray[0] = rgb.red;
    pixelArray[1] = rgb.green;
    pixelArray[2] = rgb.blue;
    raster.setPixels(x, y, 1, 1, pixelArray);
    }
    }
    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;
    }
    }

    ImageData convertToSWT(BufferedImage bufferedImage) {
    if (bufferedImage.getColorModel() instanceof DirectColorModel) {
    DirectColorModel colorModel = (DirectColorModel) bufferedImage
    .getColorModel();
    PaletteData palette = new PaletteData(colorModel.getRedMask(),
    colorModel.getGreenMask(), colorModel.getBlueMask());
    ImageData data = new ImageData(bufferedImage.getWidth(),
    bufferedImage.getHeight(), colorModel.getPixelSize(),
    palette);
    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;
    } else if (bufferedImage.getColorModel() instanceof IndexColorModel) {
    IndexColorModel colorModel = (IndexColorModel) bufferedImage
    .getColorModel();
    int size = colorModel.getMapSize();
    byte[] reds = new byte[size];
    byte[] greens = new byte[size];
    byte[] blues = new byte[size];
    colorModel.getReds(reds);
    colorModel.getGreens(greens);
    colorModel.getBlues(blues);
    RGB[] rgbs = new RGB[size];
    for (int i = 0; i < rgbs.length; i++) {
    rgbs[i] = new RGB(reds[i] & 0xFF, greens[i] & 0xFF,
    blues[i] & 0xFF);
    }
    PaletteData palette = new PaletteData(rgbs);
    ImageData data = new ImageData(bufferedImage.getWidth(),
    bufferedImage.getHeight(), colorModel.getPixelSize(),
    palette);
    data.transparentPixel = colorModel.getTransparentPixel();
    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++) {
    raster.getPixel(x, y, pixelArray);
    data.setPixel(x, y, pixelArray[0]);
    }
    }
    return data;
    }
    return null;
    }感谢各位,结贴散分。