2013-06-06 19 views
8

enter image description hereKadrowanie granice obrazu w oparciu o kolor w Windows Phone

powyżej obraz używam. To, co próbuję osiągnąć, to usunięcie czerwonej części granicy z obrazu. Jak mogę to osiągnąć programowo w telefonie z systemem Windows? Znalazłem WriteableBitmapExtensions.Crop() metoda, ale jestem mylić z argumentami

także inny problem jestem stoi to (jak mogę znaleźć x, y pozycji obrazu, a także wielkość i szerokość): Otrzymam obrazy o różnych rozmiarach, więc nie mogę zakodować wartości x lub y.
Czy ktoś może zaproponować rozwiązanie lub pomóc rozwiązać problem?

+0

to ramka zawsze wokół całego obrazu? I jest to jednokolorowa ramka tak, tak –

+0

. Obraz zawsze będzie otoczony jednolitą kolorową ramką. – StezPet

Odpowiedz

3

To nie jest takie trywialne i nie udostępniasz nam żadnego kodu, więc mogę podać kilka sugestii. Każda WriteableBitmap ma zdefiniowaną szerokość i wysokość. Powinieneś być w stanie uzyskać do niego dostęp za pośrednictwem

wb.PixelWidth; 
wb.PixelHeight; 

gdzie WB to WriteableBitmap (obraz)

Mimo, że jest to trywialne do wycięcia WriteableBitmap wykorzystaniem biblioteki WriteableBitmapEx

var croppedBmp = wb.Crop(10, 10, 300, 220); 

Jeśli urządzenie wb było 320x240, a granica miała szerokość 10, a następnie powyższe wywołanie Crop wykona lewę - weź wewnętrzny prostokąt od punktu (10,10) i kończąc na (310, 230)

Teraz do twojego drugiego numeru - nie znając szerokości granicy. To pomaga, jeśli wiesz, że

  1. Border jest tej samej grubości na każdej stronie obrazu
  2. granica jest zawsze w jednym kolorze tylko

Zakładając, że to prawda, można myśleć o prosty algorytm (które mogą nie być poprawne za każdym razem, ale można go przetestować i wyregulować), które zajęłoby kilka przypadkowych punktów, na przykład

(0, randNumber < wb.PixelHeight), (randNumber < wb.PixelWidth, 0), (wb.PixelWidth , RandNumber < wb.PixelHeight), (randNumber < wb.PixelWidth, wb.PixelHeight)

a następnie przesunąć w kierunku wewnętrznej części obrazu, o ile pikseli sąsiad jest taki sam jak kolor piksela wyjściowego. Im więcej punktów bierzesz losowo, tym większe masz szanse na uzyskanie prawidłowych wyników. Oczywistym problemem jest to, że może się zdarzyć, że coś na obrazie ma ten sam kolor co obramowanie (dokładnie to samo), co sprawi, że granica będzie szersza niż w rzeczywistości. Dlatego powinieneś zdobyć więcej punktów.

Jeśli pokazałeś jakiś kod, chętnie rozszerzę odpowiedź.

Powiązane problemy