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
- Border jest tej samej grubości na każdej stronie obrazu
- 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ź.
to ramka zawsze wokół całego obrazu? I jest to jednokolorowa ramka tak, tak –
. Obraz zawsze będzie otoczony jednolitą kolorową ramką. – StezPet