Я пытаюсь сделать некоторые манипуляции с изображениями, используя IConverter
класс, который включен в Xuggle библиотеки для преобразования изображений из IVideoPicture
типа для BufferedImage
типа но я встречаю ошибку в названии.java.awt.image.RasterFormatException: массив данных слишком мал (должен быть> 388799)
Вот мой код:
BufferedImage orgnlimage = new BufferedImage(Picture.getWidth(), Picture.getHeight(), BufferedImage.TYPE_3BYTE_BGR);
IConverter converter = ConverterFactory.createConverter(orgnlimage, IPixelFormat.Type.BGR24);
orgnlimage = converter.toImage(Picture); // Exception on this line
Размеры изображения в вопросе, является 360x360.
Это исключение я получаю:
Exception in thread "main" java.awt.image.RasterFormatException: Data array too small (should be > 388799)
at sun.awt.image.ByteComponentRaster.verify(ByteComponentRaster.java:947)
at sun.awt.image.ByteComponentRaster.<init>(ByteComponentRaster.java:201)
at sun.awt.image.ByteInterleavedRaster.<init>(ByteInterleavedRaster.java:191)
at sun.awt.image.ByteInterleavedRaster.<init>(ByteInterleavedRaster.java:113)
at java.awt.image.Raster.createWritableRaster(Raster.java:980)
at com.xuggle.xuggler.video.BgrConverter.toImage(BgrConverter.java:195)
at xuggler.Encrypt.main(Encrypt.java:53)
at xuggler.DecodeAndSaveAudioVideo.main(DecodeAndSaveAudioVideo.java:141)
Мой второй attemp:
public IVideoPicture main(IVideoPicture Picture) throws NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException, IOException
{
int width = Picture.getWidth();
int height = Picture.getHeight();
long timestamp = Picture.getTimeStamp();
BufferedImage orgnlimage = videoPictureToImage(Picture);
byte[] orgnlimagebytes =toByte(orgnlimage);
byte[] encryptedbytes = encrypt(orgnlimagebytes, "abc");
//System.out.println(encryptedbytes.length);
BufferedImage encryptedimage = toImage(encryptedbytes, width, height);
String desc = ConverterFactory.findDescriptor(encryptedimage);
IConverter converter = ConverterFactory.createConverter(desc, Picture);
IVideoPicture Pic = converter.toPicture(encryptedimage, timestamp);
return Pic;
}
и трассировки стека:
Exception in thread "main" java.nio.BufferOverflowException
at java.nio.DirectByteBuffer.put(DirectByteBuffer.java:363)
at java.nio.ByteBuffer.put(ByteBuffer.java:859)
at com.xuggle.xuggler.video.BgrConverter.toPicture(BgrConverter.java:132)
at xuggler.Encrypt.main(Encrypt.java:62)
at xuggler.DecodeAndSaveAudioVideo.main(DecodeAndSaveAudioVideo.java:141)
У вас есть трассировка стека, возможно? На какой строке вы получите «RasterFormatException»? Кроме того, каковы размеры вашего изображения? – haraldK
ошибка находится в последней строке, а размеры взяты из изображения IPicture. –
Я имел в виду, каковы размеры, буквально (например, 120x120 или аналогичные)? И, вы * должны * включить трассировку стека, в вопрос. – haraldK