Dikey Resmi Yatay Yapma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
kara_kule06
Üye
Mesajlar: 150
Kayıt: 18 Nis 2006 02:15
Konum: ankara/polatlı
İletişim:

Dikey Resmi Yatay Yapma

Mesaj gönderen kara_kule06 »

Herkese kolay gelsin.
Bir dizinde olan bütün dikey resimleri Delphi de yatay yapmak istiyorum. Bunu nasıl yapabilirm acaba fikri olan veya kodu olan arkadaşlar yardım etsinler Lütfen...

Kolay Gelsin...
İlim öğrenmek akıntıya karşı yüzmek gibidir. Ara verildiği zaman gerilenir...
Kullanıcı avatarı
kara_kule06
Üye
Mesajlar: 150
Kayıt: 18 Nis 2006 02:15
Konum: ankara/polatlı
İletişim:

Re: Dikey Resmi Yatay Yapma

Mesaj gönderen kara_kule06 »

Yabancı bir sitede buldum. buraya ekliyorum ihtiyacı olan arkadaşlar için.

Kod: Tümünü seç

Procedure RotateBitmap_ads(
   SourceBitmap : TBitmap;
   out DestBitmap : TBitmap;
   Center : TPoint;
   Angle : Double) ;
Var
   cosRadians : Double;
   inX : Integer;
   inXOriginal : Integer;
   inXPrime : Integer;
   inXPrimeRotated : Integer;
   inY : Integer;
   inYOriginal : Integer;
   inYPrime : Integer;
   inYPrimeRotated : Integer;
   OriginalRow : pPixelArray;
   Radians : Double;
   RotatedRow : pPixelArray;
   sinRadians : Double;
begin
   DestBitmap.Width := SourceBitmap.Width;
   DestBitmap.Height := SourceBitmap.Height;
   DestBitmap.PixelFormat := pf24bit;
   Radians := -(Angle) * PI / 180;
   sinRadians := Sin(Radians) ;
   cosRadians := Cos(Radians) ;
   For inX := DestBitmap.Height-1 Downto 0 Do
   Begin
     RotatedRow := DestBitmap.Scanline[inX];
     inXPrime := 2*(inX - Center.y) + 1;
     For inY := DestBitmap.Width-1 Downto 0 Do
     Begin
       inYPrime := 2*(inY - Center.x) + 1;
       inYPrimeRotated := Round(inYPrime * CosRadians - inXPrime * sinRadians) ;
       inXPrimeRotated := Round(inYPrime * sinRadians + inXPrime * cosRadians) ;
       inYOriginal := (inYPrimeRotated - 1) Div 2 + Center.x;
       inXOriginal := (inXPrimeRotated - 1) Div 2 + Center.y;
       If
         (inYOriginal >= 0) And
         (inYOriginal <= SourceBitmap.Width-1) And
         (inXOriginal >= 0) And
         (inXOriginal <= SourceBitmap.Height-1)
       Then
       Begin
         OriginalRow := SourceBitmap.Scanline[inXOriginal];
         RotatedRow[inY] := OriginalRow[inYOriginal]
       End
       Else
       Begin
         RotatedRow[inY].rgbtBlue := 255;
         RotatedRow[inY].rgbtGreen := 0;
         RotatedRow[inY].rgbtRed := 0
       End;
     End;
   End;
End;


//Kullanılışı
procedure TForm1.Button1Click(Sender: TObject) ;
Var
   Center : TPoint;
   Bitmap : TBitmap;
begin
   Bitmap := TBitmap.Create;
   Try
     Center.y := (Image.Height div 2)+20;
     Center.x := (Image.Width div 2)+0;
     RotateBitmap_ads(
       Image.Picture.Bitmap,
       Bitmap,
       Center,
       Angle) ;
     Angle := Angle + 15;
     Image2.Picture.Bitmap.Assign(Bitmap) ;
   Finally
     Bitmap.Free;
   End;
end;

Bu şekilde resmi istediğimiz gibi döndürebiliyoruz.
İlim öğrenmek akıntıya karşı yüzmek gibidir. Ara verildiği zaman gerilenir...
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: Dikey Resmi Yatay Yapma

Mesaj gönderen Battosai »

Bu kodda 90 derece döndürüyormuş...
Procedure TurnImage(Src, Dst: TImage);
var x,y: integer;
begin
Dst.Width:= Src.Height; Dst.Height:= Src.Width;
For x:= 0 to Src.Width-1 do begin
For y:= 0 to Src.Height-1 do begin
Dst.Canvas.Pixels[(Src.Height-1)-y,x]:= Src.Canvas.Pixels[x,y];
end;
end;
end;
ibrahimcoban
Üye
Mesajlar: 163
Kayıt: 11 Eki 2005 10:44
İletişim:

Re: Dikey Resmi Yatay Yapma

Mesaj gönderen ibrahimcoban »

Benim tavsiyem bu işler için gdiplus kullanmanızdır.
http://www.progdigy.com/modules.php?nam ... ostPopular
buradan indirip örneklere bakabilirsiniz.
http://ibrahimcoban.com/
Lazarus, Kol-Ce,Delphi ve C#
depresif
Üye
Mesajlar: 16
Kayıt: 09 Mar 2008 03:08

Re: Dikey Resmi Yatay Yapma

Mesaj gönderen depresif »

image processing / görüntü işleme diye aratırsanız benzer şekilde birçok kaynağa ulaşabilirsiniz
Kullanıcı avatarı
kara_kule06
Üye
Mesajlar: 150
Kayıt: 18 Nis 2006 02:15
Konum: ankara/polatlı
İletişim:

Re: Dikey Resmi Yatay Yapma

Mesaj gönderen kara_kule06 »

arkadaşlar bi sorunum daha var. Şimdi ben Battosai hocamın dediği gibi resmi istediğim gibi rotate edebiliyorum. fakat çok yavaş oluyor. mesela 1220x1700 pixel li bi resim için 2040000 lık bi döngü oluşuyor. buda yaklaşık 10-15 saniyede rotate ediyor. bunun için ne yapabilirim acaba.
İlim öğrenmek akıntıya karşı yüzmek gibidir. Ara verildiği zaman gerilenir...
Cevapla