Увеличение размера или глубины TBitmap
Когда я увеличиваю размер растрового изображения (например)...
bitmap.Width := bitmap.Width + 30;
... У меня есть контроль над тем, чем заполнены правые 30 пикселей, или я просто предполагаю, что они неинициализированы?
Точно так же, если я изменюсь PixelFormat
от pf24bit
в pf32bit
я могу контролировать, с чем инициализируются альфа-байты?
Смущающий вопрос новичка, но мой гугл-фу подвел меня.:)
1 ответ
Решение
Поскольку в документации не определено, что происходит в этом случае, вы не можете полагаться ни на что. Скорее всего, новые пиксели будут 0 (черные), но если вам важно, какие они, вы должны явно их заполнить:
FUNCTION ExpandBitMap(BMP : TBitMap ; AddW,AddH : Cardinal ; FillColor : TColor = clBlack) : TBitMap;
VAR
OrgW,OrgH : Cardinal;
BEGIN
OrgW:=BMP.Width; OrgH:=BMP.Height;
BMP.Width:=OrgW+AddW; BMP.Height:=OrgH+AddH;
BMP.Canvas.Brush.Color:=FillColor;
BMP.Canvas.Brush.Style:=bsSolid;
BMP.Canvas.FillRect(Rect(OrgW,0,BMP.Width,BMP.Height));
BMP.Canvas.FillRect(Rect(0,OrgH,OrgW,BMP.Height));
Result:=BMP
END;
Аналогично с альфа-каналом - я оставлю это пользователю в качестве упражнения для создания аналогичной функции:-).