Форум: "Начинающим";
Текущий архив: 2009.08.23;
Скачать: [xml.tar.bz2];
ВнизКак правильно работать с палитрой Найти похожие ветки
← →
Priest (2009-06-23 14:59) [0]Есть такой код
procedure InitBitmapPallete(Bmp:TBitmap);
var
j: Byte;
LogPalette: TMaxLogPalette;
PLogPal: PLogPalette;
begin
with LogPalette do
begin
palVersion := $0300;
palNumEntries := 256;
for j := 0 to 255 do
with palPalEntry[j] do
begin
peRed := j; //$FF;
peGreen := j;
peBlue := j; //0;
peFlags := 0;
end;
end; //with LogPalette do
PLogPal := @LogPalette;
Bmp.PixelFormat := pf8bit;
Bmp.Palette := CreatePalette(PLogPal^);
end;
В конце я пишу CreatePalette. Не будет ли утечек памяти? Должен ли я в конце работы освободить палитру?
← →
Sapersky (2009-06-23 16:45) [1]Я бы порекомендовал использовать FastLIB:
http://sapersky.narod.ru/files/FastLIBv389i.rar
Работа с палитрой там на порядок удобнее.
← →
Priest (2009-06-23 17:45) [2]К сожалению код старый, поэтому не хочу сильно модифицировать
← →
Sapersky (2009-06-24 14:46) [3]Cудя по исходникам TBitmap - он удаляет палитру сам:
procedure TBitmapImage.FreeHandle;
begin
<..>
InternalDeletePalette(FPalette);
FPalette := 0;
end;
procedure TBitmap.SetPalette(Value: HPALETTE);
var
AHandle: HBITMAP;
DIB: TDIBSection;
begin
// при назначении новой палитры удаляет старую
if FImage.FPalette <> Value then
begin
with FImage do
if (Value = 0) and (FRefCount = 1) then
begin
InternalDeletePalette(FPalette);
FPalette := 0;
end
<..>
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.08.23;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.006 c