2011-12-04 4 views
2

This SWT snippet SWT ImageDataBufferedImageを変換:ComponentColorModelを持つBufferedImageをSWT ImageDataに変換するにはどうすればよいですか?

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

問題はColorModelの第三のサブクラスであり、である:ComponentColorModelは。そして私はこのカラーモデルを使ってイメージを変換する必要があります。どうすればいいのですか?ロマノフの答えでhere見つかり

答えて

3

(!しかし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; 
4

、次の行を変更します。

int[] pixelArray = colorModel.getComponentSize(); 
+0

int[] pixelArray = new int[3]; 

をこれも必要になる場合があります'data.transparentPixel'の修正です。 –

関連する問題