Увеличение размера или глубины 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;

Аналогично с альфа-каналом - я оставлю это пользователю в качестве упражнения для создания аналогичной функции:-).

Другие вопросы по тегам