Delphi: PNG в ImageList, меняйте цвет, сохраняя альфа - PullRequest
1 голос
/ 21 марта 2019

Delphi.

У меня есть ImageList (либо TImageList, либо DevExpress TcxImageList), который содержит изображения PNG с использованием альфа-канала.RGB часть изображения - черный квадрат.Альфа-канал содержит форму реальной картинки.Я хочу изменить цвет черного квадрата, сохраняя при этом форму в альфа-канале.(Так что со временем я меняю цвет значка-формы-значка-на что угодно.)

Я пробовал много способов, но безуспешно.Я попытался изменить свойства списков и экспортировать RGB и альфа-разделение.

TImageList: маска не экспортируется.Если я делаю SaveToFile, он сохраняет 0-байтовый файл, и Replace также говорит, что размер маски неправильный (0 * 0 px)

BMPimg := TBitmap.Create;
BMPmask := TBitmap.Create;
Try
  TImageListHack(il1).GetImages(0, BMPimg, BMPmask);
  BMPimg.Canvas.Brush.Color := clRed;
  BMPimg.Canvas.FillRect(TRect.Create(0, 0, BMPimg.Width, BMPimg.Height));
  il1.Replace(i, BMPimg, BMPmask);
  End;
Finally
  BMPimg.Free;
  BMPmask.Free;
End;

TcxImageList: он загружает картинку + маску в BMPimg, и маскачерный квадрат вместо фигуры в BMPmask.

BMPimg := TBitmap.Create;
BMPmask := TBitmap.Create;
Try
  il1.GetBitmap(i, BMPimg);
  il1.GetMask(i, BMPmask);
  BMPimg.Canvas.Brush.Color := clRed;
  BMPimg.Canvas.FillRect(TRect.Create(0, 0, BMPimg.Width, BMPimg.Height));
  il1.Replace(i, BMPimg, BMPmask);
Finally
  BMPimg.Free;
  BMPmask.Free;
End;

Как я могу изменить цвет переднего плана при сохранении альфа-канала в изображениях PNG списка изображений?

1 Ответ

2 голосов
/ 21 марта 2019

Эххххх.

Я должен вручную установить размеры BMPmask, тогда маска будет правильной.

...
BMPmask.Width := il1.Width;
BMPmask.Height := il1.Height;
TImageListHack(il1).GetImages(0, BMPimg, BMPmask);
...
...