Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

Курс видеоуроков КРЭКЕРСТВО + ПРОГРАММИРОВАНИЕ 2017
(актуальность: июнь 2017)
Свежие инструменты, новые видеоуроки!

  • 400+ видеоуроков
  • 800 инструментов
  • 100+ свежих книг и статей

УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

БОЛЬШОЙ FAQ ПО DELPHI



Качественно уменьшить изображение

В Delphi изменять размеры изображения очень просто, используя CopyRect:


 procedure TForm1.Button1Click(Sender: TObject);
 begin
   Form1.Canvas.Font.Size := 24;
   Form1.Canvas.TextOut(0, 0, 'Text');
   Form1.Canvas.CopyRect(Bounds(0, 50, 25, 10), Form1.Canvas,
   Bounds(0, 0, 100, 40));
 end;
 

Но этот способ не очень хорош для уменьшения не маленьких картинок – мелкие детали сливаются. Для частичного устранения этого недостатка при уменьшении изображения в четыре раза я беру средний цвет в каждом квадратике 4X4. К чему это приводит, посмотрите сами.


 procedure TForm1.Button1Click(Sender: TObject);
 var
   x, y: integer;
   i, j: integer;
   r, g, b: integer;
 begin
   Form1.Canvas.Font.Size := 24;
   Form1.Canvas.TextOut(0, 0, 'Text');
   for y := 0 to 10 do
   begin
     for x := 0 to 25 do
     begin
       r := 0;
       for i := 0 to 3 do
         for j := 0 to 3 do
           r := r + GetRValue(Form1.Canvas.Pixels[4*x+i, 4*y+j]);
       r := round(r / 16);
       g := 0;
       for i := 0 to 3 do
         for j := 0 to 3 do
           g := g + GetGValue(Form1.Canvas.Pixels[4*x+i, 4*y+j]);
       g := round(g / 16);
       b := 0;
       for i := 0 to 3 do
         for j := 0 to 3 do
           b := b + GetBValue(Form1.Canvas.Pixels[4*x+i, 4*y+j]);
       b := round(b / 16);
       Form1.Canvas.Pixels[x,y+50] := RGB(r, g, b)
     end;
     Application.ProcessMessages;
   end;
 end;
 




<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ



Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS