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...
Dikey Resmi Yatay Yapma
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
- kara_kule06
- Üye
- Mesajlar: 150
- Kayıt: 18 Nis 2006 02:15
- Konum: ankara/polatlı
- İletişim:
Dikey Resmi Yatay Yapma
İlim öğrenmek akıntıya karşı yüzmek gibidir. Ara verildiği zaman gerilenir...
- kara_kule06
- Üye
- Mesajlar: 150
- Kayıt: 18 Nis 2006 02:15
- Konum: ankara/polatlı
- İletişim:
Re: Dikey Resmi Yatay Yapma
Yabancı bir sitede buldum. buraya ekliyorum ihtiyacı olan arkadaşlar için.
Bu şekilde resmi istediğimiz gibi döndürebiliyoruz.
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...
Re: Dikey Resmi Yatay Yapma
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;
-
- Üye
- Mesajlar: 163
- Kayıt: 11 Eki 2005 10:44
- İletişim:
Re: Dikey Resmi Yatay Yapma
Benim tavsiyem bu işler için gdiplus kullanmanızdır.
http://www.progdigy.com/modules.php?nam ... ostPopular
buradan indirip örneklere bakabilirsiniz.
http://www.progdigy.com/modules.php?nam ... ostPopular
buradan indirip örneklere bakabilirsiniz.
http://ibrahimcoban.com/
Lazarus, Kol-Ce,Delphi ve C#
Lazarus, Kol-Ce,Delphi ve C#
Re: Dikey Resmi Yatay Yapma
image processing / görüntü işleme diye aratırsanız benzer şekilde birçok kaynağa ulaşabilirsiniz
- kara_kule06
- Üye
- Mesajlar: 150
- Kayıt: 18 Nis 2006 02:15
- Konum: ankara/polatlı
- İletişim:
Re: Dikey Resmi Yatay Yapma
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...