Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2008.09.21;
Скачать: [xml.tar.bz2];

Вниз

IJL - как при кодировке узнать размер полученной информации   Найти похожие ветки 

 
Pasha L ©   (2007-07-31 20:01) [0]

Здравствуйте.
Я работаю с JPG при помощи Intel JPG Library (IJL)
Хочу сделать функцию, кодирующую изображение из TBitmap в жпг-формат и записывающую полученную информацию в память. Ввод - объект класса TBitmap, вывод - адрес в памяти и размер информации.

Делаю так (взял из сэмпла, но что-то тут не пашет, смотрите комментарии):
[Code]function encodeJPEG(var size:cardinal;bmp:TBitmap):pbyte;
var
 jpegprops : TJPEG_CORE_PROPERTIES;
 iNChannels : Integer;
 DIB : TDIBSection;
 pBuf:pbyte;
begin
 ijlInit(@jpegprops);
 FillChar(DIB,SizeOf(DIB),0);
 GetObject(bmp.Handle,SizeOf(DIB),@DIB);
 iNChannels := 3; //три канала - RGB (без альфа)
 jpegprops.DIBWidth := DIB.dsBm.bmWidth;
 jpegprops.DIBHeight := -DIB.dsBm.bmHeight;
 jpegprops.DIBChannels := iNChannels;
 jpegprops.DIBColor := IJL_BGR;
 jpegprops.DIBPadBytes := ((((DIB.dsBm.bmWidth*iNChannels)+3) div 4)*4)-(DIB.dsBm.bmWidth*3);
 size:=DIB.dsBm.bmWidth*DIB.dsBm.bmHeight*iNChannels;// сначала, как я понял, задаем такой размер, какой был бы у несжатой картинки
 jpegprops.DIBBytes := PByte(DIB.dsBm.bmBits);
 pBuf:=AllocMem(size);//выделяем место как для несжатой картинки - с запасом. Потом, как я понимаю, часть места должна быть освобождена
 jpegprops.JPGSizeBytes := size;
 jpegprops.JPGFile := nil;
 jpegprops.JPGWidth := DIB.dsBm.bmWidth;
 jpegprops.JPGHeight := DIB.dsBm.bmHeight;
 jpegprops.JPGChannels := 3;
 jpegprops.JPGColor := IJL_YCBCR;
 jpegprops.jquality := 70;
 jpegprops.jprops.JPGFile:=nil;
 jpegprops.jprops.state.hFile := nil;
 ijlWrite(@jpegprops,IJL_JBUFF_WRITEWHOLEIMAGE);
 ReallocMem(pBuf,jpegprops.JPGSizeBytes);// тут, как я думал, после предыдущей строчки jpegprops.JPGSizeBytes уже должно принять настоящее значение размера полученного jpg, но это не так - jpegprops.JPGSizeBytes остался равным size
 size:=jpegprops.JPGSizeBytes;
 ijlFree(@jpegprops);
 result:=pbuf;
end;
[/Code]

При записи полученной информации в файл и сравнивании этого файла с полученным с помощью Picture.SaveToFile (сохранение картинки в bmp) наблюдаю полное сходство в размерах jpg- и bmp-файлов. Но jpg, в отличие от bmp, не открывается (ясен-красен, почему...)

Вопрос: как же решить задачу с нахождением настоящего размера полученной от кодировки информации?


 
Pasha L ©   (2007-08-01 15:59) [1]

Уже подсказали: не указал jpegprops.JPGBytes := pBuf;



Страницы: 1 вся ветка

Форум: "Media";
Текущий архив: 2008.09.21;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.006 c
2-1218566528
gear
2008-08-12 22:42
2008.09.21
Как программно передвинуть каретку в TEdit?


3-1206102916
Still Swamp
2008-03-21 15:35
2008.09.21
TParam и BLOB


3-1206525519
Mery
2008-03-26 12:58
2008.09.21
Запрос


2-1218563419
Mozgan
2008-08-12 21:50
2008.09.21
Разработка инсталлятора


15-1217486508
tesseract
2008-07-31 10:41
2008.09.21
Ну вот и свершилось





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский