Текущий архив: 2007.01.14;
Скачать: CL | DM;
Вниз
Работа с палитрой в Delphi Найти похожие ветки
← →
Efir (2006-05-20 21:10) [0]Народ, может кто знает, почему при замене палитры у Bitmap"а изменяется сама битовая карта этого Bitmap"а?
← →
MBo © (2006-05-21 20:04) [1]Покажи пример кода (или псевдокода), при выполнении которого это происходит
← →
antonn © (2006-05-21 20:14) [2]bitmap.pixelformat:=pf8bit?
:)
← →
MBo © (2006-05-21 20:21) [3]>antonn © (21.05.06 20:14) [2]
Вот и я подобное заподозревал...
← →
Efir (2006-05-21 20:48) [4]Да BitmapPixelFormat:=pf8bit;
Вот кусок кода:
var
pal:PLogPalette;
i:integer;
begin
pal:=nil;
GetMem(pal,sizeof(TLogPalette)+sizeof(TPaletteEntry)*High(ColorTable));
pal.palVersion:=$300;
pal.palNumEntries:=High(ColorTable)+1;
DeleteObject(Bitmap.Palette);
for i:=0 to High(ColorTable) do begin
pal.palPalEntry[i].peRed :=ColorTable[i].Red;
pal.palPalEntry[i].peGreen:=ColorTable[i].Green;
pal.palPalEntry[i].peBlue :=ColorTable[i].Blue;
pal.palPalEntry[i].peFlags:=ColorTable[i].Flags;
end;
Bitmap.Palette:=CreatePalette(pal^);
mas:=nil;
FreeMem(pal);
ColorTable - это уже изменённая таблица цветов.
Вот в результате такого кода и изменяются ссылки в битовой карте на цвета
в палитре. Конечно, можно сначала сохранить битовую карту например в массив, а после изменения палитры снова восстановить Bitmap. Но это лишний расход ресурсов. Вот я и ищу другой способ справиться с этой проблемой.
← →
MBo © (2006-05-21 21:06) [5]Хм...
Я не пользовался Bitmap.Palette, а метод SetPalette работает сложным образом и, видимо, все-таки преобразует DIB.
Я обычно использую SetDIBColorTable - попробуй.
← →
Efir (2006-05-21 22:06) [6]Тогда придётся создать DIB, изменить таблицу цветов и снова перевести в Bitmap?
← →
MBo © (2006-05-21 22:24) [7]Битмап может быть двух типов - DIB или DDB. У тебя какой?
← →
Efir (2006-05-22 11:30) [8]У меня DIB.
← →
MBo © (2006-05-22 11:46) [9]>У меня DIB.
Тогда нет проблем.
← →
Efir (2006-05-22 12:21) [10]Просто я работаю с TBitmap. Но, пожалуй ты прав, лучше использовать SetDIBColorTable и работать напрямую с DIB.
Спасибо за совет.
← →
MBo © (2006-05-22 12:34) [11]Одно другому не помеха ;)
TBitmap является оберткой над DIBsection или DDB, так что изменять ему не нужно, а просто использовать низкоуровневые возможности
Страницы: 1 вся ветка
Текущий архив: 2007.01.14;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.03 c