Мне нужно перевернуть в Java необработанное изображение с инвертированными строками. Под инвертированным я имею в виду, что первая строка изображения сохраняется в конце файла.
Мне удалось добиться того, что я хочу, переупорядочив ряды изображений с помощью вспомогательного буфера. Я включил свой код ниже.
Я думаю, что это можно оптимизировать путем перевода координат, избегая копирования из памяти. Я попытался реализовать DataBuffer, который инвертировал бы строки, но используемый мной растр требует DataBufferByte (конечный класс).
Кто-нибудь знает более оптимизированный способ делать то, что я хочу?
Спасибо
...
int w = 640;
int h = 480;
byte[] flippedData = new byte[640*480*4];
int scanLineLength = w*4;
for(int i=0;i!=h; ++i) {
System.arraycopy(originalData, scanLineLength*i, flippedData, scanLineLength*(h-i)-scanLineLength, scanLineLength);
}
DataBuffer db = new DataBufferByte(flippedData,flippedData.length);
WritableRaster raster = Raster.createInterleavedRaster(db, w, h, scanLineLength, 4, new int[]{2,1,0}, new Point(0,0));
ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_sRGB);
ColorModel cm = new ComponentColorModel(cs, false, false, Transparency.OPAQUE, DataBuffer.TYPE_BYTE);
BufferedImage img = new BufferedImage(cm, raster, false, null);
ImageIO.write(img, "JPEG", new File("out.jpg"));