Масштабировать (изменить изображение) в TBitMap
Модератор: Модераторы
Масштабировать (изменить изображение) в TBitMap
Как изменить размер изображения находящегося в TBitMap до заданного размера?
Да да! У меня та же задача. Только изображение в компоненте Image.
Методов не нашел. Побыренькому сам написал 1:2 (в проекте этого хватило) но как-то это не аккуратненько. Может кто носом в алгоритмы ткнет, или реализовано уже.
Методов не нашел. Побыренькому сам написал 1:2 (в проекте этого хватило) но как-то это не аккуратненько. Может кто носом в алгоритмы ткнет, или реализовано уже.
Не т такого метода?!!!!! 
Берем ImageMagic и вдумчиво перепераем 
Можно так:
Код: Выделить всё
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 спасибо!
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), то альфа, хоть и не полноценно (либо есть/либо нет) отрабатывает... при масштабировании теряется...
- Alexx2000
- постоялец
- Сообщения: 490
- Зарегистрирован: 25.10.2006 00:22:07
- Откуда: Мытищи
- Контактная информация:
Вот модуль, позволяющий масштабировать TBitmap, поддерживает альфа-канал и несколько алгоритмов масштабирования.
