2013-09-25 23 views
1

我正在学习在java中使用BufferedImages,并试图创建一个动画,其中动画的每一帧都是数学上摆弄像素数据的结果。我只是在玩耍而已。最初我使用了一个索引的ColorModel,但我已经将它改变(以利用更多的颜色)到一个直接的ColorModel。但现在一个错误影响了说 -使用BufferedImages创建WritableRaster时,如何确保它与特定的ColorModel兼容?

光栅[email protected]是ColorModel的DirectColorModel不兼容:rmask = FF0000的GMask = FF00 bmask = FF AMASK = FF000000

我使用的代码创建的BufferedImage和WriteableRaster是在这里:

public void initialize(){ 
    int width = getSize().width; 
    int height = getSize().height; 
    data = new int [width * height]; 

    DataBuffer db = new DataBufferInt(data,height * width); 
    WritableRaster wr = Raster.createPackedRaster(db,width,height,1,null); 
    image = new BufferedImage(ColorModel.getRGBdefault(),wr,false,null); 
    image.setRGB(0, 0, width, height, data, 0, width); 
} 

回答

1

,最简单的方式,以确保你有一个WritableRaster是兼容的ColorModel是先选择颜色模型,然后从它创建栅格像这样:

ColorModel colorModel = ColorModel.getRGBdefault(); // Or any other color model 
WritableRaster raster = colorModel.createCompatibleWritableRaster(width, height); 

然而,这可能是不实际的,比如像你来自哪里,现有阵列创建DataBuffer你的情况。在这种情况下,我真的建议望着java.awt.image.BufferedImage建设者和不同ColorModel实现的createCompatibleWritableRaster方法的源代码(这是我自学如何做到这一点:-)方式。它显示了可以很好地协同工作的最常见的光栅和颜色模型组合。

你行:

Raster.createPackedRaster(db,width,height,1,null); 

...似乎创建栅格每像素MultiPixelPackedSampleModel和1位......这两者都是可能与RGB颜色模式不兼容。你想可能需要定义:这是

int[] masks = new int[]{0xff0000, 0xff00, 0xff}; // Add 0xff000000 if you want alpha 
Raster.createPackedRaster(db, width, height, width, masks, null); 

PS:你不应该需要做image.setRGB您的代码的最后一行,因为图像是使用你的data数组作为后盾缓冲了。

相关问题