Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.02.03;
Скачать: CL | DM;

Вниз

Antialiasing   Найти похожие ветки 

 
Барковъ   (2008-01-04 13:50) [0]

type

PixArray = Array [0..2] of Byte;

....

procedure Antialiasing(Bitmap: TBitmap; Rect: TRect; Percent: Integer);
var
 pix, prevscan, nextscan, hpix: ^PixArray;
 l, p: Integer;
 R, G, B: Integer;
 R1, R2, G1, G2, B1, B2: Byte;
begin
 Bitmap.PixelFormat := pf24bit;
 with Bitmap.Canvas do
 begin
   Brush.Style := bsclear;
   for l := Rect.Top to Rect.Bottom - 1 do
   begin
     pix:= Bitmap.ScanLine[l];
     if l <> Rect.Top then prevscan := Bitmap.ScanLine[l-1]
     else prevscan := nil;
     if l <> Rect.Bottom - 1 then nextscan := Bitmap.ScanLine[l+1]
     else nextscan := nil;

     for p := Rect.Left to Rect.Right - 1 do
     begin
       R1 := pix^[2];
       G1 := pix^[1];
       B1 := pix^[0];

       if p <> Rect.Left then
       begin
         //Pixel links
         //Pixel left

         hpix := pix;
         dec(hpix);
         R2 := hpix^[2];
         G2 := hpix^[1];
         B2 := hpix^[0];

         if (R1 <> R2) or (G1 <> G2) or (B1 <> B2) then
         begin
           R := R1 + (R2 - R1) * 50 div (Percent + 50);
           G := G1 + (G2 - G1) * 50 div (Percent + 50);
           B := B1 + (B2 - B1) * 50 div (Percent + 50);
           hpix^[2] := R;
           hpix^[1] := G;
           hpix^[0] := B;
         end;
       end;

       if p <> Rect.Right - 1 then
       begin
         //Pixel rechts
         //Pixel right
         hpix := pix;
         inc(hpix);
         R2 := hpix^[2];
         G2 := hpix^[1];
         B2 := hpix^[0];

         if (R1 <> R2) or (G1 <> G2) or (B1 <> B2) then
         begin
           R := R1 + (R2 - R1) * 50 div (Percent + 50);
           G := G1 + (G2 - G1) * 50 div (Percent + 50);
           B := B1 + (B2 - B1) * 50 div (Percent + 50);
           hpix^[2] := R;
           hpix^[1] := G;
           hpix^[0] := B;
         end;
       end;

       if prevscan <> nil then
       begin
         //Pixel oben
         //Pixel up
         R2 := prevscan^[2];
         G2 := prevscan^[1];
         B2 := prevscan^[0];

         if (R1 <> R2) or (G1 <> G2) or (B1 <> B2) then
         begin
           R := R1 + (R2 - R1) * 50 div (Percent + 50);
           G := G1 + (G2 - G1) * 50 div (Percent + 50);
           B := B1 + (B2 - B1) * 50 div (Percent + 50);
           prevscan^[2] := R;
           prevscan^[1] := G;
           prevscan^[0] := B;
         end;
         Inc(prevscan);
       end;

       if nextscan <> nil then
       begin
         //Pixel unten
         //Pixel down
         R2 := nextscan^[2];
         G2 := nextscan^[1];
         B2 := nextscan^[0];

         if (R1 <> R2) or (G1 <> G2) or (B1 <> B2) then
         begin
           R := R1 + (R2 - R1) * 50 div (Percent + 50);
           G := G1 + (G2 - G1) * 50 div (Percent + 50);
           B := B1 + (B2 - B1) * 50 div (Percent + 50);
           nextscan^[2] := R;
           nextscan^[1] := G;
           nextscan^[0] := B;
         end;
         Inc(nextscan);
       end;
       Inc(pix);
     end;
   end;
 end;
end;

...
  bmp.Canvas.FillRect(bmp.Canvas.ClipRect);
  bmp.Canvas.TextOut(0,0, IntToStr(Random(9999999999)));
  Antialiasing(bmp, Rect(0, 0, bmp.Width, bmp.Height), 50);
  form.Canvas.Draw(0,0, bmp);

по идее канвас я очищаю, но при многократном использовании
остаётся размытое предыдущее изображение при отрисовке на форме bmp.
Не подскажите где туплю?
и может у кого есть в загашнике какая шустрая отработка сглаживания?


 
Барковъ   (2008-01-04 15:19) [1]

блин,  Brush.Style := bsclear устанавливается :)

а насчет самого алгоритма может есть у кого пошустрей?


 
Amoeba ©   (2008-01-05 21:36) [2]

Может имеет смысл воспользоваться готовым решением (библиотекой):
http://g32.org/graphics32/index.html


 
homm ©   (2008-01-05 21:50) [3]

> [1] Барковъ   (04.01.08 15:19)
> а насчет самого алгоритма может есть у кого пошустрей?

Алгоритма чего?



Страницы: 1 вся ветка

Текущий архив: 2008.02.03;
Скачать: CL | DM;

Наверх




Память: 0.46 MB
Время: 0.045 c
15-1198438206
Andy BitOff
2007-12-23 22:30
2008.02.03
поделитесь ссылкой на старые


2-1199646349
ЗВаська
2008-01-06 22:05
2008.02.03
Интерфейс + with


2-1200055537
buka
2008-01-11 15:45
2008.02.03
О визуализации большого текста


15-1198590545
Zawibis
2007-12-25 16:49
2008.02.03
Нужно построить график


2-1199604655
Катунов Юрий
2008-01-06 10:30
2008.02.03
Игнорирование кода от совместного доступа к файлу Windows XP





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский