Масштабировать (изменить изображение) в TBitMap

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Масштабировать (изменить изображение) в TBitMap

Сообщение qivi » 31.05.2012 01:09:42

Как изменить размер изображения находящегося в TBitMap до заданного размера?
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Масштабировать (изменить изображение) в TBitMap

Сообщение vada » 31.05.2012 11:40:44

Да да! У меня та же задача. Только изображение в компоненте Image.
Методов не нашел. Побыренькому сам написал 1:2 (в проекте этого хватило) но как-то это не аккуратненько. Может кто носом в алгоритмы ткнет, или реализовано уже.
Аватара пользователя
vada
энтузиаст
 
Сообщения: 691
Зарегистрирован: 14.02.2006 13:43:17

Re: Масштабировать (изменить изображение) в TBitMap

Сообщение qivi » 31.05.2012 12:23:39

Не т такого метода?!!!!! :shock:
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Масштабировать (изменить изображение) в TBitMap

Сообщение vada » 31.05.2012 15:43:52

Берем ImageMagic и вдумчиво перепераем :(
Аватара пользователя
vada
энтузиаст
 
Сообщения: 691
Зарегистрирован: 14.02.2006 13:43:17

Re: Масштабировать (изменить изображение) в TBitMap

Сообщение iskander » 31.05.2012 16:45:07

Можно так:
Код: Выделить всё
procedure ScaleBitmap(aBitmap: TBitmap;Scale: Single);
var
  tmp: TBitmap;
begin
  tmp := TBitmap.Create;
  try
    tmp.Width := Round(aBitmap.Width * Scale);
    tmp.Height := Round(aBitmap.Height * Scale);
    tmp.Canvas.StretchDraw(Bounds(0,0,tmp.Width,tmp.Height), aBitmap);
    aBitmap.Assign(tmp);
  finally
    tmp.Free;
  end;
end;
iskander
энтузиаст
 
Сообщения: 624
Зарегистрирован: 08.01.2012 18:43:34

Re: Масштабировать (изменить изображение) в TBitMap

Сообщение vada » 31.05.2012 16:48:00

Опа! Здорово! iskander спасибо!
Аватара пользователя
vada
энтузиаст
 
Сообщения: 691
Зарегистрирован: 14.02.2006 13:43:17

Re: Масштабировать (изменить изображение) в TBitMap

Сообщение tema » 31.05.2012 17:35:14

tema
постоялец
 
Сообщения: 376
Зарегистрирован: 24.03.2011 20:19:27

Re: Масштабировать (изменить изображение) в TBitMap

Сообщение qivi » 01.06.2012 16:03:13

iskander писал(а):Можно так:

Код: Выделить всё
    procedure ScaleBitmap(aBitmap: TBitmap;Scale: Single);
    var
      tmp: TBitmap;
    begin
      tmp := TBitmap.Create;
      try
        tmp.Width := Round(aBitmap.Width * Scale);
        tmp.Height := Round(aBitmap.Height * Scale);
        tmp.Canvas.StretchDraw(Bounds(0,0,tmp.Width,tmp.Height), aBitmap);
        aBitmap.Assign(tmp);
      finally
        tmp.Free;
      end;
    end;


Спасибо, мне подошло.
Почти то же самое:
Код: Выделить всё
function ScaleBitmap(aBitmap:TBitmap;Scale:Single):TBitmap;
begin
  if (aBitmap.Width<>0)and(aBitmap.Height<>0) then
  begin
    result:=TBitmap.Create;
    result.Width:=Round(aBitmap.Width*Scale);
    result.Height:=Round(aBitmap.Height*Scale);
    result.Canvas.StretchDraw(Bounds(0,0,result.Width,result.Height),aBitmap);
  end else result:=nil;
end;


Хотя есть косячёк...
Известное дело что стандартными средствами альфа это недосягаемый космос, тем не менее, не знаю как, но если загрузить в TBitMap изображение из PNG с альфой, а потом выполнить на какой ни буть канвас.Draw(3,3,sGlyph), то альфа, хоть и не полноценно (либо есть/либо нет) отрабатывает... при масштабировании теряется... :(
11.JPG
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Масштабировать (изменить изображение) в TBitMap

Сообщение Alexx2000 » 01.06.2012 22:36:10

Вот модуль, позволяющий масштабировать TBitmap, поддерживает альфа-канал и несколько алгоритмов масштабирования.
Аватара пользователя
Alexx2000
постоялец
 
Сообщения: 489
Зарегистрирован: 25.10.2006 00:22:07
Откуда: Мытищи


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 234

Рейтинг@Mail.ru