Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.09.21;
Скачать: CL | DM;

Вниз

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 вся ветка

Текущий архив: 2008.09.21;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.013 c
15-1217745537
Nous Mellon_
2008-08-03 10:38
2008.09.21
Вопрос по регуляркам + php


2-1218543073
zivan
2008-08-12 16:11
2008.09.21
TAction, TActionMenuBar


15-1217311137
TUser
2008-07-29 09:58
2008.09.21
Установка Линукса на рейд 1


15-1217339422
oldman
2008-07-29 17:50
2008.09.21
Поздравления с днем сисадмина (25 июля) были...


15-1217024688
Германн
2008-07-26 02:24
2008.09.21
Редактирование AVI с видеокамеры Panasonic