1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

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

Тема в разделе "Delphi - программирование", создана пользователем Pavelbej, 8 фев 2006.

Статус темы:
Закрыта.
  1. Pavelbej

    Pavelbej Гость

    Репутация:
    0
    Имеется картинка, например 1024x768 или 800x600. Как можно ее качественно уменьшить до примерно 100x100 пикселей? Помогите, очень надо. Нашел один вариант но там идет считывание каждого пикселя по стпрока, потом подсчет общего цвета четырех соседних пикселей, короче медленно работает. Буду очень рад вашей помощи.
     
  2. DZX

    DZX Гость

    Репутация:
    0
    Возьми два TPicture, залей в один свое изображение и прорисуй в канве второго его с масштабированием. Не знаю как с качеством, но это самый простой и быстрый способ. Если надо пример можно поискать в инете или я могу покопаться в своих исходниках делал я давно такую бороду.
     
  3. Barmutik

    Barmutik Гость

    Репутация:
    0
    Как вариант .. достаточно приемлимое качество после сжатия...

    Код:
    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;
     
  4. Pavelbej

    Pavelbej Гость

    Репутация:
    0
    Наверное я не правильно изложил проблему. Мне нужно сделать предварительный просмотр.
     
  5. DZX

    DZX Гость

    Репутация:
    0
    Ну и чего тогда мучаться ложишь на форму объект изображение, ставишь размер
    нужный, выключаешь авторазмер, растягивание выставляешь и грузи и смотри.
     
  6. Barmutik

    Barmutik Гость

    Репутация:
    0
    Ну так и чем приведённая функция не подходит ?
     
  7. Guest

    Guest Гость

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

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

    Но тут упор делается на качество.
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей