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

Вниз

Работа с палитрой   Найти похожие ветки 

 
jel   (2003-04-09 10:06) [0]

Как правильно работать с палитрой nBitmap?

Есть отдельно растр и отдельно его палитра. Если я собираю из них файл bmp все нормально, но когда пытаюсь собрать их в кучу в экземпляре tBitmap цвета сильно искажены. Делаю примерно так:

устанваливаю размеры битмапа и формат пиксела, копирую растр в ScanLines, и bmp.Palette := CreatePalette(...); После этого не выводя битмап на экран - пишу в файл. Результат совсем не похож на собранный ручками файл.

Может быть нужно сделать что-то еще для правильного отображения цветов?


 
MBo   (2003-04-09 10:16) [1]

возможно, LOGPALETTE некорректно сделана
SetDIBColorTable не пробовал?


 
jel   (2003-04-09 10:32) [2]

LOGPALETTE сделана вроде ровно, а вот не резервирует ли система какое-либо количество цветов под собственные нужды? При внимательном рассмотрении оказываются сильно искаженными только несколько позиций палитры, стоящих первыми, остальные искажаются не так сильно.

И не нужно ли делать RealizePalette()?


 
MBo   (2003-04-09 10:38) [3]

20 цветов - системная палитра (ButtonFaceColor и т.п.)
Если установлено режим экрана с 256 цветами, RealizePalette обязательно придется делать, но могут возникнуть искжения цветов в остальных окнах


 
jel   (2003-04-09 10:40) [4]

То есть иными словами даже в консольном приложении, где битмап не будет отображаться на экране, полностью 256 цветов использовать не даст система?


 
MBo   (2003-04-09 13:01) [5]

работает вроде нормально.

procedure TForm1.Button4Click(Sender: TObject);
var ab:array[word] of byte;
ct:array[byte] of TRGBQuad;
b:tbitmap;
i:integer;
begin
b:=tbitmap.create;
b.pixelformat:=pf8bit;
b.Width := 256;
b.Height := 256;
for i:=0 to 255 do begin
ct[i].rgbRed:=i;
ct[i].rgbBlue:=i;
ct[i].rgbGreen:=i;
ct[i].rgbReserved:=0;
end;
for i:=0 to 65535 do
ab[i]:=i shr 8;
SetDIBColorTable(b.canvas.Handle,0,$100,ct);
SetBitmapBits(b.Handle, sizeof(ab),@ab);
Image1.picture.assign(b);
b.SaveToFile("e:\256.bmp");
b.free;
end;



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

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

Наверх




Память: 0.45 MB
Время: 0.011 c
3-100626
viktor
2003-07-07 13:35
2003.07.31
cat := CreateOleObject( ADOX.Catalog )


3-100629
paxer
2003-07-10 11:21
2003.07.31
Нужнай дока по Interbase (желат.на русском)


6-100847
Snap
2003-05-23 00:31
2003.07.31
tracert и им подобные


1-100670
Salvator
2003-07-17 22:38
2003.07.31
Работа с Dll


1-100702
Legran
2003-07-18 14:24
2003.07.31
Как добится другого поведения OpenDialog





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский