Datakent Ana Sayfa
Anasayfa Anasayfa > Diğer bölümler > Borland Delphi
  Aktif Konular Aktif Konular RSS: Bitmap SmoothResize
  Yardım Yardım  Hızlı Ara   Kayıt Ol Kayıt Ol  Giriş Giriş

Bitmap SmoothResize

 Yanıt Yaz Yanıt Yaz
Yazar
Mesaj
murat turan Açılır Menü Göster
Admin Group
Admin Group
Simge
Datakent

Kayıt Tarihi: 01.Ekim.2003
Bulundugu Yer: Turkey
Online: Sitede Değil
Gönderilenler: 1765
  Alıntı murat turan Alıntı  Yanıt YazCevapla Mesajın Direkt Linki Konu: Bitmap SmoothResize
    Gönderim Zamanı: 31.Ekim.2009 Saat 10:24

procedure JxSmoothResize(NewWidth, NewHeight: Cardinal; var Src: TBitmap);
var
  x, y, xP, yP, yP2, xP2: integer;
  Read, Read2: PByteArray;
  t, z, z2, iz2: integer;
  pc: PBytearray;
  w1, w2, w3, w4: integer;
  Col1r, col1g, col1b, Col2r, col2g, col2b: byte;
  Dst:TBitmap;
begin
  Dst := TBitmap.Create;
  Dst.PixelFormat := pf24Bit;
  Dst.Width  := NewWidth;
  Dst.Height := NewHeight;

  xP2 := ((src.Width - 1) shl 15) div Dst.Width;
  yP2 := ((src.Height - 1) shl 15) div Dst.Height;
  yP := 0;
  for y := 0 to Dst.Height - 1 do
  begin
    xP := 0;
    Read := src.ScanLine[yP shr 15];
    if yP shr 16 < src.Height - 1 then
      Read2 := src.ScanLine[yP shr 15 + 1]
    else
      Read2 := src.ScanLine[yP shr 15];
    pc := Dst.scanline[y];
    z2 := yP and $7FFF;
    iz2 := $8000 - z2;
    for x := 0 to Dst.Width - 1 do
    begin
      t := xP shr 15;
      Col1r := Read[t * 3];
      Col1g := Read[t * 3 + 1];
      Col1b := Read[t * 3 + 2];
      Col2r := Read2[t * 3];
      Col2g := Read2[t * 3 + 1];
      Col2b := Read2[t * 3 + 2];
      z := xP and $7FFF;
      w2 := (z * iz2) shr 15;
      w1 := iz2 - w2;
      w4 := (z * z2) shr 15;
      w3 := z2 - w4;
      pc[x * 3 + 2] :=
        (Col1b * w1 + Read[(t + 1) * 3 + 2] * w2 +
        Col2b * w3 + Read2[(t + 1) * 3 + 2] * w4) shr 15;
      pc[x * 3 + 1] :=
        (Col1g * w1 + Read[(t + 1) * 3 + 1] * w2 +
        Col2g * w3 + Read2[(t + 1) * 3 + 1] * w4) shr 15;
      pc[x * 3] :=
        (Col1r * w1 + Read2[(t + 1) * 3] * w2 +
        Col2r * w3 + Read2[(t + 1) * 3] * w4) shr 15;
      Inc(xP, xP2);
    end;
    Inc(yP, yP2);
  end;

  try
    Src.Assign(Dst);
  finally
    Dst.Free;
  end;
end;

Yukarı Dön
 Yanıt Yaz Yanıt Yaz

Forum Atla Forum İzinleri Açılır Menü Göster



Bu Sayfa 0,094 Saniyede Yüklendi. [power by : WebWiz]