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

Вниз

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

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

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

Наверх




Память: 0.48 MB
Время: 0.013 c
1-100813
Jakkie
2003-07-17 14:30
2003.07.31
Rtf->Plain text


14-100966
sapsi
2003-07-15 08:20
2003.07.31
Пересечение границы Украины


8-100842
Chlavik
2003-04-06 23:10
2003.07.31
Если больше одной sound карты ...


14-100927
rust
2003-07-14 18:31
2003.07.31
Export


1-100789
cjiohobaji
2003-07-17 07:20
2003.07.31
таймер