Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Растянуть растровый рисунок

Delphi , Графика и Игры , Bitmap

Растянуть растровый рисунок

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

// This function stretches a bitmap with specified number of pixels 
// in horizontal, vertical dimension 
// Example Call : ResizeBmp(Image1.Picture.Bitmap , 200 , 200); 

// Diese Funktion zerrt eine Bitmap in die anzugebenden Pixel 
// Beispielaufruf : ResizeBmp(Image1.Picture.Bitmap , 200 , 200); 

function TForm1.ResizeBmp(bitmp: TBitmap; wid, hei: Integer): Boolean;
 var
    TmpBmp: TBitmap;
   ARect: TRect;
 begin
   Result := False;
   try
     TmpBmp := TBitmap.Create;
     try
       TmpBmp.Width  := wid;
       TmpBmp.Height := hei;
       ARect := Rect(0,0, wid, hei);
       TmpBmp.Canvas.StretchDraw(ARect, Bitmp);
       bitmp.Assign(TmpBmp);
     finally
       TmpBmp.Free;
     end;
     Result := True;
   except
     Result := False;
   end;
 end;

Перевод контента на русский язык:

Функция Delphi, именуемая ResizeBmp, растягивает битмап-изображение до указанного ширины и высоты, сохраняя при этом его соотношение сторон. Функция принимает три параметра: bitmp, который является оригинальным битмапом, wid, который является желаемой шириной resized битмапа, и hei, которая является желаемой высотой.

В функции происходит следующее:

  1. Создается временный битмап TmpBmp с помощью метода TBitmap.Create.
  2. Свойства Width и Height временного битмапа устанавливаются в указанные wid и hei, соответственно.
  3. Определяется прямоугольник ARect с темиже размерами, что resized битмап.
  4. Метод StretchDraw канваса временного битмапа вызывается, передавая в него ARect и оригинальный битмап bitmp. Это растягивает оригинальное изображение до соответствующего прямоугольника, сохраняя при этом его соотношение сторон.
  5. Временный битмап TmpBmp присваивается оригинальному битмапу bitmp.
  6. Если возникнут ошибки во время выполнения функции, она возвращает False.

Вот некоторые предложения по улучшению кода:

  1. Рассмотрите возможность добавления параметра для указания, следует ли растягивать или уменьшать изображение. Это можно достичь установкой свойства Mode метода StretchDraw.
  2. Функция сейчас предполагает, что оригинальный битмап имеет альфа-канал (то есть, это не градационное изображение). Если это не так, рассмотрите возможность добавления проверки для этого перед попыткой растянуть изображение.
  3. Вам может потребоваться добавить обработку ошибок для случаев, когда resized битмап не может быть создан успешно.

Вот обновленная версия кода с этими предложениями:

function TForm1.ResizeBmp(bitmp: TBitmap; wid, hei: Integer; StretchMode: TCanvasStretchDrawMode): Boolean;
var
  TmpBmp: TBitmap;
  ARect: TRect;
begin
  Result := False;
  try
    TmpBmp := TBitmap.Create;
    try
      TmpBmp.Width := wid;
      TmpBmp.Height := hei;
      ARect := Rect(0, 0, wid, hei);
      if StretchMode = dstDefault then
        TmpBmp.Canvas.StretchDraw(ARect, bitmp)
      else
        TmpBmp.Canvas.Draw(0, 0, bitmp);
      bitmp.Assign(TmpBmp);
    finally
      TmpBmp.Free;
    end;
    Result := True;
  except
    Result := False;
  end;
end;

Вы можете вызывать эту функцию, передавая в нее оригинальный битмап, желаемую ширину и высоту, а также режим растяжения:

ResizeBmp(Image1.Picture.Bitmap, 200, 200, dstDefault);

Функция ResizeBmp для растягивания растровых рисунков, которая принимает в себя битмап и размеры в пикселях, после чего StretchDraw рисунок на новый битмап и присваивает результат исходному битмапу.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Bitmap ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-05-01 12:52:38/0.0031731128692627/0