Конференция "Media" » Цветовые схемы в работе с jpg (инструмент IJL) [D7, WinXP]
 
  • Pasha L © (04.08.07 13:24) [0]
    Здравствуйте. Для работы с jpeg я использую IJL. Возникли несколько вопросов про цвет.Я кодирую TBitmap (код, именно в таком виде - работает исправно):
    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;
     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.JPGBytes := pBuf;
     jpegprops.JPGFile := nil;
     jpegprops.JPGWidth := DIB.dsBm.bmWidth;
     jpegprops.JPGHeight := DIB.dsBm.bmHeight;
     jpegprops.JPGChannels := 3;
     jpegprops.JPGColor := IJL_YCBCR;
     jpegprops.jquality := 0;
     jpegprops.jprops.JPGFile:=nil;
     jpegprops.jprops.state.hFile := nil;
     ijlWrite(@jpegprops,IJL_JBUFF_WRITEWHOLEIMAGE);
     ReallocMem(pBuf,jpegprops.JPGSizeBytes);
     size:=jpegprops.JPGSizeBytes;
     ijlFree(@jpegprops);
     result:=pbuf;
    end;



    (Для просмотра полученного jpg вывожу его в файл)

    В данном случае, когда всё правильно работает:

    №1
    jpegprops.DIBColor=IJL_BGR
    jpegprops.JPGColor=IJL_YCBCR


    cледовательно, в моем tbitmap цвета представлены в виде BGR, IJL переводит эту схему в YCbCr (об этом прочитал в википедии :) )

    Экспериментирую:

    №2
    jpegprops.DIBColor=IJL_RGB
    jpegprops.JPGColor=IJL_YCBCR


    у полученного jpeg меняются местами красный и синий каналы (при просмотре это видно)

    №3
    jpegprops.DIBColor=IJL_YCBCR
    jpegprops.JPGColor=IJL_YCBCR


    вообще другая интерпретация цветов - всё в порядке, как и должно быть

    №5
    jpegprops.DIBColor=IJL_RGB
    jpegprops.JPGColor=IJL_RGB


    кодировка удается, но изображение получается более расплывчатым, чем в №1. Почему?

    №5
    jpegprops.DIBColor=IJL_BGR
    jpegprops.JPGColor=IJL_BGR


    вроде, должно полуиться то же, что в №4. Но кодировка не удается (ijlWrite=-8). Почему?

    Далее
    Как я понимаю, буква А в IJL_RGBA_FPX и IJL_YCBCRA_FPX означает alpha. Вопрос: как задействовать этот канал? Допустим, есть bmp - хочу, чтобы у jpg, который я получу их этого bmp, слева направо прозрачность уменьшалась.

    Заранее спасибо.
  • Pasha L © (04.08.07 14:00) [1]
    очепятка: после №3, как известно :) , следует №4
 
Конференция "Media" » Цветовые схемы в работе с jpg (инструмент IJL) [D7, WinXP]
Есть новые Нет новых   [134431   +10][b:0][p:0.001]