2011-09-28 11 views
5

TłoJak uzyskać wymiary ImageRectangle w PictureBox?

Chcę być w stanie uzyskać wyciągniętych wymiary powiększonego obrazu wewnątrz picturebox (wytłumaczę poniżej).

Właściwość PictureBox.ImageRectangle wydaje się być dokładnie tym, czego szukam, ponieważ pokazuje wysokość i szerokość obrazu o zmienionym rozmiarze, a także względną górną, lewą pozycję wewnątrz kontrolki.

Problem polega na tym, że PictureBox.ImageRectangle jest prywatny i dlatego nie mogę odczytać wartości bez użycia odbicia (co oczywiście nie jest idealne).

Rzeczywista Pytanie

Moje pytanie brzmi, czy istnieje inny sposób, że można łatwo dostać się do tych wartości bez pisania metodę obliczania wartości co „powinien” być? Mogę to zrobić dość łatwo, ale wydaje mi się, że wymyślę nowe koło.


Kontekst:

Piszę prostą aplikację przetwarzania obrazu w C# i jedną z rzeczy, to musi zrobić, to pozwolić użytkownikowi narysować zaznaczenie wokół części obrazu (bardzo podobne do narzędzia Marquee w Photoshopie).

Potrzebuję znać wymiary renderowanego obrazu, więc wiem, gdzie ustawić granice mojego narzędzia zaznaczania, a także tłumaczyć wartości narysowanego prostokąta do punktów na skalowanej bitmapie wewnątrz kontrolki.

Odpowiedz

2

Moja odpowiedź wygląda na prostą, więc może brakuje mi czegoś, ale myślę, że Control.DisplayRectangle pasuje do twoich potrzeb.

EDYTOWANIE

OK, brakowało punktu; jednak zobaczyć How to get the value of non- public members of picturebox?

+0

Dziękuję za opiekę w tym CharlesB. Miałem nadzieję, że znajdę rozwiązanie, które nie wymaga refleksji, więc zamierzam dalej próbować. Jeszcze raz dziękuję :) –

+0

Nie ma za co; nie zapomnij zagłosować na [wydanie na MS Connect] (http://connect.microsoft.com/VisualStudio/feedback/details/115469/make-pictureboxs-imagerectangle-property-public) – CharlesB

0

jeśli chcesz uzyskać dostęp do wymiaru obrazu w oknie obrazu można użyć

GraphicsUnit units = GraphicsUnit.Point; 

RectangleF imgRectangleF = pictureBox1.Image.GetBounds(ref units); 
Rectangle imgRectangle = Rectangle.Round(imgRectangleF); 
Powiązane problemy