![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Странный косяк с палитрой у TBitmap [D7, WinXP]
TheBug © (2007-06-18 13:32:00)Необходимо отрисовывать черно-белые изображения. Для этого необходимо сгенирировать палитру. А потом для тестироавния рисую градиентную картинку и вывожу в Image (imgMap). Код такой.
type
LogPal = record
lpal : TLogPalette;
dummy: Array[0..255] of TPaletteEntry;
end;
procedure TMainForm.btnTestClick(Sender: TObject);
var
palGrey: LogPal;
P: PByteArray;
i, j: integer;
b: byte;
begin
imgMap.Picture.Bitmap.PixelFormat := pf8bit;
imgMap.Picture.Bitmap.Width := 256;
imgMap.Picture.Bitmap.Height := 256;
palGrey.lPal.palVersion := $300;
palGrey.lPal.palNumEntries := 256;
for b := 0 to 255 do
begin
palGrey.dummy[b].peRed := b;
palGrey.dummy[b].peGreen := b;
palGrey.dummy[b].peBlue := b;
palGrey.dummy[b].peFlags := 0;
end;
imgMap.Picture.Bitmap.Palette := CreatePalette(palGrey.lpal);
for i := 0 to imgMap.Picture.Bitmap.Height - 1 do
begin
P := imgMap.Picture.Bitmap.ScanLine[i];
for j := 0 to imgMap.Picture.Bitmap.Width - 1 do
begin
P[j] := i;
end;
end;
imgMap.Invalidate;
end;
Так вот. В нулевой строке, цвет не черный, как ожидалось, а какой-то зеленый. В чем тут проблема?
TheBug (2007-06-18 21:08:00) [1]2MBo
Косяк, ты прав...
MBo (2007-06-18 16:38:00) [2]заметь, что в хелпе используется массив, начиная с palPalEntry, а не с dummy[0]
GetSystemPaletteEntries(tempCanvas.Handle,0,256,SysPal.lpal.palPalEntry);
TheBug (2007-06-18 16:17:00) [3]2 MBo
Код из хелпа...
MBo (2007-06-18 15:07:00) [4]>Проблема была решена перенос локальных переменных в глобальные.
Странно это.
Кстати, LogPal у тебя некорректно описана - нулевой элемент таблицы уже есть в TLogPalette
TheBug (2007-06-18 14:49:00) [5]Проблема была решена перенос локальных переменных в глобальные.
Но я так и не понял, почему так заработало.
MBo (2007-06-18 14:01:00) [6]SetDIBColorTable попробуй