Уменьшение изображения

  • Автор темы Pavelbej
  • Дата начала
Статус
Закрыто для дальнейших ответов.
P

Pavelbej

#1
Имеется картинка, например 1024x768 или 800x600. Как можно ее качественно уменьшить до примерно 100x100 пикселей? Помогите, очень надо. Нашел один вариант но там идет считывание каждого пикселя по стпрока, потом подсчет общего цвета четырех соседних пикселей, короче медленно работает. Буду очень рад вашей помощи.
 
D
#2
Возьми два TPicture, залей в один свое изображение и прорисуй в канве второго его с масштабированием. Не знаю как с качеством, но это самый простой и быстрый способ. Если надо пример можно поискать в инете или я могу покопаться в своих исходниках делал я давно такую бороду.
 
B

Barmutik

#3
Как вариант .. достаточно приемлимое качество после сжатия...

Код:
procedure CompressImageSpecifiedSize(Bmp: Graphics.TBitmap; AWidth, AHeight: Integer;
APixelFormat: TPixelFormat);
var
TempBmp: Graphics.TBitmap;
AX: Real;
AY: Real;
Compress: Real;
begin
{$ifdef ControlStack}
try
{$endif ControlStack}
TempBmp := Graphics.TBitmap.Create;
TempBmp.PixelFormat := APixelFormat;
TempBmp.Canvas.Lock;
AX := Bmp.Width / AWidth;
AY := Bmp.Height / AHeight;
if AX > AY then
 Compress := AX
else
 Compress := AY;
if Compress > 1 then
begin
 TempBmp.Width := Max(1, Round(Bmp.Width / Compress));
 TempBmp.Height := Max(1, Round(Bmp.Height / Compress));
end
else
begin
 TempBmp.Width := Bmp.Width;
 TempBmp.Height := Bmp.Height;
end;
SetStretchBltMode(TempBmp.Canvas.Handle, HALFTONE);
SetBrushOrgEx(TempBmp.Canvas.Handle, 0, 0, nil);
StretchBlt(TempBmp.Canvas.Handle, 0, 0, TempBmp.Width, TempBmp.Height,
 Bmp.Canvas.Handle, 0, 0, Bmp.Width, Bmp.Height, SRCCOPY);
Bmp.Width := TempBmp.Width;
Bmp.Height := TempBmp.Height;
Bmp.Canvas.Draw(0, 0, TempBmp);
Bmp.PixelFormat := APixelFormat;
TempBmp.Canvas.Lock;
TempBmp.Free;
{$ifdef ControlStack}
except
 on E: Exception do
 begin
  ReRaiseException(E, 1547);
  raise;
 end;
end;
{$endif ControlStack}
end;
 
P

Pavelbej

#4
Наверное я не правильно изложил проблему. Мне нужно сделать предварительный просмотр.
 
D
#5
Ну и чего тогда мучаться ложишь на форму объект изображение, ставишь размер
нужный, выключаешь авторазмер, растягивание выставляешь и грузи и смотри.
 
B

Barmutik

#6
Ну так и чем приведённая функция не подходит ?
 
G

Guest

#7
Пример реализации уменьшения изображений в четыре раза: http://www.defder.nm.ru/download/Downsampler.exe

Можно посмотреть исходник декомпилятором NET Reflector, например.

Но тут упор делается на качество.
 
Статус
Закрыто для дальнейших ответов.