koordinatları ekran alanı WinForms PictureBox görüntü alanı koordinatlarından nasıl tercüme gerekir?

oy
13

Bir Windows Forms içine resim görüntüleyen bir uygulama var PictureBoxkontrol. SizeModeKontrol olarak ayarlanır Zoombulunan görüntü ve böylece PictureBoxbağımsız olarak boyutlarının boy olarak doğru bir şekilde gösterilecektir PictureBox.

Eğer boyut penceresi Ancak istiyorum, çünkü bu uygulamanın görsel görünüm için mükemmeldir ve görüntü her zaman en uygun kullanılarak görüntülenir. Ne yazık ki, ben de resim kutuyu fare tıklaması olaylarını işlemek gerekir ve ekran-uzay görüntüsü uzay koordinatlarının dan çevirmek gerekiyor.

o mekânı kontrol etmek ekranı uzaydan çevirmek kolay, ama ben görüntü uzaya kontrol uzaydan çevirecek hiçbir bariz bir şekilde (yani piksel görüntü kutusunda ölçekli edilmiş kaynak görüntüde koordinat) görmüyorum gibi görünüyor.

Bunu yapmanın kolay bir yolu var mı, yoksa sadece onlar kendim görüntüyü konumlandırmak ve çeviriyi yapmak için dahili olarak kullanmakta olduğunuz ölçeklendirme matematik çoğaltmak gerekir?

Oluştur 05/08/2008 saat 21:28
kaynak kullanıcı
Diğer dillerde...                            


2 cevaplar

oy
6

Sadece elle çeviri uygulanması sarılır. Kod çok kötü değil, ama doğrudan bunun için destek sağladığını isteyen beni terk etti. Böyle bir yöntem, farklı koşullar bir çok yararlı olduğu gördü.

Onların uzantısı yöntemleri eklendi yüzden sanırım :)

pseudocode:

// Recompute the image scaling the zoom mode uses to fit the image on screen
imageScale ::= min(pictureBox.width / image.width, pictureBox.height / image.height)

scaledWidth  ::= image.width * imageScale
scaledHeight ::= image.height * imageScale

// Compute the offset of the image to center it in the picture box
imageX ::= (pictureBox.width - scaledWidth) / 2
imageY ::= (pictureBox.height - scaledHeight) / 2

// Test the coordinate in the picture box against the image bounds
if pos.x < imageX or imageX + scaledWidth < pos.x then return null
if pos.y < imageY or imageY + scaledHeight < pos.y then return null

// Compute the normalized (0..1) coordinates in image space
u ::= (pos.x - imageX) / imageScale
v ::= (pos.y - imageY) / imageScale
return (u, v)

Görüntüdeki piksel konumunu elde etmek için, sadece gerçek resim piksel boyutları ile çarpın istiyorum, ama normal koordinatlar Eğer bir vaka ile ayrı ayrı belirsizliği çözme konusunda özgün cevapçiler noktasını ele verir.

Cevap 06/08/2008 saat 05:25
kaynak kullanıcı

oy
1

ölçeklendirme bağlı olarak, göreceli görüntü piksel piksel bir dizi yerde olabilir. görüntü önemli ölçüde küçültülmüş Örneğin, piksel 2, 10, 20, 100) kadar 2, 10 tüm yol temsil edebilir, bu nedenle matematiği geri kendin yap ve herhangi bir yanlışlıktan dolayı tüm sorumluluğunu almak gerekecek! :-)

Cevap 05/08/2008 saat 21:33
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more