Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.041 c
15-1167038965
click
2006-12-25 12:29
2007.01.14
Font.Size < 8


15-1166794248
Pit_q
2006-12-22 16:30
2007.01.14
Интересно, у всех сотрудников ГИБДД есть водительские права?


1-1163786612
DarkFlow
2006-11-17 21:03
2007.01.14
Playlist как у Winamp


15-1166474454
Cyrax
2006-12-18 23:40
2007.01.14
Можно ли (теоретически и практически) заюзать Xerces ?


2-1166909334
школьник :-)
2006-12-24 00:28
2007.01.14
ADO и транзакции