Java中与C#PixelFormat's成员匹配的内容。.Net PixelFormat有Java相当于?
即Format24bppRgb与BufferedImage.TYPE_INT_RGB匹配吗?
这是我的代码。我得到了它有净的的PixelFormat = Format32bppArgb 我创建的BufferedImage这样一个形象:
int sizeBytes = width * height;
DataBufferByte dataBuffer = new DataBufferByte(myImageBytes, sizeBytes);
WritableRaster raster = Raster.createInterleavedRaster(dataBuffer, // dataBuffer
width, // width
height, // height
width * 4, // scanlineStride
4, // pixelStride
new int[]{0, 1, 2, 3}, // bandOffsets
null); // location
java.awt.image.ColorModel colorModel = new ComponentColorModel(ColorSpace.getInstance(ColorSpace.CS_sRGB), // ColorSpace
new int[]{8, 8, 8, 8}, // bits
true, // hasAlpha
false, // isPreMultiplied
ComponentColorModel.TRANSLUCENT, DataBuffer.TYPE_BYTE);
BufferedImage result = new BufferedImage(colorModel, raster, false, null);
后,我创建一个BufferedImage,红色和蓝色在它交换。
接下来,我试图创建一个图片作为跟随
BufferedImage result = new BufferedImage(width, height, BufferedImage.TYPE_4BYTE_ABGR);
WritableRaster r = result.getRaster();
int[] pixels = byteToInt(bytes);
r.setPixels(0, 0, width, height , pixels); // ! Here an exception occures, because after I converted the byte array to int one the width becomes too long.
字节数组用这种方法
private int[] byteToInt(byte[] pixels) {
int[] ints = new int[pixels.length/3];
int byteIdx = 0;
for (int pixel = 0; pixel < ints.length; pixel++) {
int red = (int) pixels[byteIdx++] & 0xFF;
int green = (int) pixels[byteIdx++] & 0xFF;
int blue = (int) pixels[byteIdx++] & 0xFF;
int rgb = (red << 16) | (green << 8) | blue;
ints[pixel] = rgb;
}
return ints;
}
的颜色现在看起来不错转换,但我得到异常
java.lang.ArrayIndexOutOfBoundsException: 27600
at sun.awt.image.ByteInterleavedRaster.setPixels(ByteInterleavedRaster.java:1106)
如果我使用较小的宽度(例如宽度/ 3),颜色看起来不错,但图片本身缩小。
我在这个问题上停滞不前。任何帮助表示赞赏。谢谢。
如果您的问题已经回答了,或者如果它不再有效,请勾选以选择最合适的答案,以便每个人都知道问题已得到解决。谢谢。 – wattostudios 2012-05-14 13:39:06