2010-12-01 1 views
4

Мне нужно перевернуть на Java необработанное изображение с инвертированными строками. Перевернувшись, я имею в виду, что первая строка изображения хранится в конце файла.Перевернув вертикально необработанное изображение в 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")); 
+1

что ваша причина для жесткого кодирования кодирующего пикселя и ColorSpace? Если вы делаете * GraphicsEnvironment.getLocalGraphicsEnvironment(). getDefaultScreenDevice(). getDefaultConfiguration(). createCompatibleImage (...) * у вас будет пиксельная кодировка, которая лучше всего подходит для платформы, на которой работает ваша программа. – SyntaxT3rr0r 2010-12-01 16:58:58

ответ

4

Использование java.awt.AffineTransform:

аффинные преобразования могут быть построены с использованием последовательности переводов, весы, переворачивается, вращений и ножницы.

См this и this, чтобы увидеть, как листать реализован с использованием AffineTransform

Смежные вопросы