Показать сообщение отдельно
  #2  
Старый 10.01.2008, 18:30
Аватар для The Shadow
The Shadow The Shadow вне форума
Продвинутый
 
Регистрация: 11.06.2007
Адрес: Уфа, Россия
Сообщения: 793
Репутация: 35
По умолчанию

У меня есть код сглаживания:
Код:
procedure AntiAliasRect(clip: tbitmap; XOrigin, YOrigin, XFinal, YFinal: Integer);
var
  Memo, x, y : Integer; (* Composantes primaires des points environnants *)
  p0, p1, p2 : pbytearray;
  SL : TScanlines;
begin
   if XFinal<XOrigin then begin Memo := XOrigin; XOrigin := XFinal; XFinal := Memo; end;  (* Inversion des valeurs   *)
   if YFinal<YOrigin then begin Memo := YOrigin; YOrigin := YFinal; YFinal := Memo; end;  (* si diff,rence n,gative*)
   XOrigin := max(1,XOrigin);
   YOrigin := max(1,YOrigin);
   XFinal := min(clip.width-2,XFinal);
   YFinal := min(clip.height-2,YFinal);
   clip.PixelFormat := pf24bit;
   SL := TScanlines.Create(clip);
   try
     for y := YOrigin to YFinal do begin
      //p0 := clip.ScanLine [y-1];
      //p1 := clip.scanline [y];
      //p2 := clip.ScanLine [y+1];
      p0 := PByteArray(SL[y-1]);
      p1 := PByteArray(SL[y]);
      p2 := PByteArray(SL[y+1]);
      for x := XOrigin to XFinal do begin
        p1[x*3]   := (p0[x*3]+p2[x*3]+p1[(x-1)*3]+p1[(x+1)*3])div 4;
        p1[x*3+1] := (p0[x*3+1]+p2[x*3+1]+p1[(x-1)*3+1]+p1[(x+1)*3+1])div 4;
        p1[x*3+2] := (p0[x*3+2]+p2[x*3+2]+p1[(x-1)*3+2]+p1[(x+1)*3+2])div 4;
        end;
     end;
   finally
     SL.Free;
   end;
end;
Думаю, должно подойти.
__________________
Что делать, когда сломался комп:
1. Если вы юзер - делать ноги.
2. Если ремонтник - делать деньги.
3. Если вы программист - делать вид, что так было задумано.
Ответить с цитированием