Merhaba,
Benim geliştirmesinde bulunduğum program tabletlerde çalışıyor. Bazı ekranlarında bulunan resimlerinin parmak hareketiyle kontrol edilebilmesi gerekiyor. Yani zoom yapılabilmeli ve gerektiğinde kaydırılabilmeli. Bunu yapabilmek için bir scrollbox ın içine image koyup işlem yapıyorum. Parmakla kaydırma işlemlerinde sorun olmuyor ancak büyütme işlemini yaparken büyütme yapılan nokta kayıyor. Ben ise windowsta açtığınız herhangi bir resmi büyütmekte olduğu gibi hangi noktayı büyütüyorsanız oranın büyümesini istiyorum. Bunu herhangi bir fotorafı açarak test edebilirsiniz. (Telefonlardaki resim büyütme mantığı).
Parmak hareketlerini bir unit sayesinde Delphi 7 de çalıştırabiliyorum. Bana zoom noktasının koordinatını ve zoom oranını veriyor. Orana göre resmin genişliğini ve yüksekliğini değiştiriyorum ama büyütme referansı olan noktadan kayıyor. Yani ben ekranın sağ alt köşesini büyütmek isterken scrollbox ın yeni pozisyonunu ayarlayamadığım için saçma sapan yerlere gidiyor. Bunu nasıl ayarlayabilirim . Umarım karmaşık gelmemiştir.
Geliştirme ortamı: Delphi 7
Örnek büyütme mantığı: http://www.flashandmath.com/howtos/zoom/zoom_click.html (Ctrl tuşuna basılı tutarak resimde bir yere tıklayın)
Bu işlemi nasıl bir formülle yapabilirim ?
Belirli bir noktaya göre Image zoom
Forum kuralları
Bu forum sadece yapacağınız işle alakalı doğru bileşeni bulmak içindir. Şöyle bir şey yapmam lazım, hangi bileşeni kullanıyım diyorsanız, doğru yerdesiniz.
Bu forum sadece yapacağınız işle alakalı doğru bileşeni bulmak içindir. Şöyle bir şey yapmam lazım, hangi bileşeni kullanıyım diyorsanız, doğru yerdesiniz.
- muratmutlu
- Üye
- Mesajlar: 57
- Kayıt: 02 Tem 2005 02:44
- Konum: Antalya
- muratmutlu
- Üye
- Mesajlar: 57
- Kayıt: 02 Tem 2005 02:44
- Konum: Antalya
Re: Belirli bir noktaya göre Image zoom
Sorunu bir arkadaşım çözdü. Ben de sizinle paylaşmak istedim.
Yapılması gerekenler:
1- Forma bir tane ScrollBox koyun.
2- ScrollBox ın içine bir tane Image koyun ve align özelliğini alClient yapın.
3- Image ın Autosize özelliğini "True" yapın.
4- Image içine büyük bir resim koyun (ScrollBox ın scrollbar ları çıkması için).
Ardından parmak ile yapılan zoom hareketinden gelen koordinatlara göre aşağıdaki kodu çalıştırabilirsiniz. (Dokunmatik ekrana sahip olmayanlar Image üzerinde OnMouseDown event inde deneyebilirler)
uses Math;
Oran parametresine "1.2" yazarsanız %20 oranında büyütür. "0.75" yazarsanız % 25 oranında küçültür.
Yapılması gerekenler:
1- Forma bir tane ScrollBox koyun.
2- ScrollBox ın içine bir tane Image koyun ve align özelliğini alClient yapın.
3- Image ın Autosize özelliğini "True" yapın.
4- Image içine büyük bir resim koyun (ScrollBox ın scrollbar ları çıkması için).
Ardından parmak ile yapılan zoom hareketinden gelen koordinatlara göre aşağıdaki kodu çalıştırabilirsiniz. (Dokunmatik ekrana sahip olmayanlar Image üzerinde OnMouseDown event inde deneyebilirler)
uses Math;
Kod: Tümünü seç
procedure TForm1.ResimZoom(Image: TImage; ScrollBox: TScrollBox; ReferansNoktasi: TPoint; Oran: Double);
var
Dx,Dy: Integer;
OranX ,OranY: double;
Pnt: TPoint;
begin
if (Image.Width < 400) or (Image.Height < 400) then Exit; // Resmi çok fazla küçültmemek için
Dx := ReferansNoktasi.X;
Dy := ReferansNoktasi.Y;
Pnt.X := 0;
Pnt.Y := 0;
Pnt := ScrollBox.ClientToScreen(Pnt);
Dx := Dx - Pnt.X;
Dy := Dy - Pnt.Y;
OranX := (ScrollBox.HorzScrollBar.Position + Dx) / ScrollBox.HorzScrollBar.Range;
OranY := (ScrollBox.VertScrollBar.Position + Dy) / ScrollBox.VertScrollBar.Range;
Image.Width := Round(Image.Width * Oran);
Image.Height := Round(Image.Height * Oran);
ScrollBox.HorzScrollBar.Position := Ceil((Oranx * ScrollBox.HorzScrollBar.Range)) - Dx ;
ScrollBox.VertScrollBar.Position := Ceil((Orany * ScrollBox.VertScrollBar.Range)) - Dy ;
end;