2013-06-06 40 views
8

enter image description hereCắt đường viền của hình ảnh dựa trên màu sắc trong cửa sổ điện thoại

Phía trên là hình ảnh tôi đang sử dụng. Những gì tôi đang cố gắng để đạt được là loại bỏ phần màu đỏ của biên giới khỏi hình ảnh. Làm thế nào tôi có thể đạt được điều này lập trình trong điện thoại cửa sổ? Tôi thấy phương pháp WriteableBitmapExtensions.Crop(), nhưng tôi bị nhầm lẫn với các đối số

Ngoài ra một vấn đề tôi phải đối mặt là (làm thế nào tôi có thể tìm ra x, y vị trí của hình ảnh, cũng như kích thước và chiều rộng?): Tôi sẽ nhận được hình ảnh với các đường viền có kích thước khác nhau, vì vậy tôi không thể mã hóa các giá trị x hoặc y.
Có ai có thể đề xuất giải pháp hoặc hướng dẫn tôi giải quyết vấn đề không?

+0

là khung luôn quanh toàn bộ hình ảnh? Và nó là một khung màu đơn sắc –

+0

có. Hình ảnh sẽ luôn được bao quanh bởi một đường viền màu uni. – StezPet

Trả lời

3

Đây không phải là điều nhỏ nhặt và bạn chưa chia sẻ bất kỳ mã nào với chúng tôi, vì vậy tôi có thể cung cấp cho bạn một số đề xuất. Mỗi WriteableBitmap có chiều rộng và chiều cao được xác định. Bạn sẽ có thể truy cập nó qua

wb.PixelWidth; 
wb.PixelHeight; 

nơi wb là WriteableBitmap của bạn (hình ảnh)

Có nói rằng, đó là tầm thường để cắt một WriteableBitmap sử dụng thư viện WriteableBitmapEx

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

Nếu bạn wb là 320x240 và đường viền có chiều rộng 10, sau đó cuộc gọi Crop ở trên sẽ thực hiện thủ thuật - bạn sẽ lấy hình chữ nhật bên trong bắt đầu từ điểm (10,10) và kết thúc tại (310, 230)

Bây giờ đến vấn đề thứ hai của bạn - không biết chiều rộng của biên giới. Nó sẽ giúp đỡ nếu bạn biết rằng

  1. Border là độ dày giống nhau trên mỗi bên của bức tranh
  2. Border luôn là một màu duy nhất

Giả sử đó là sự thật, bạn có thể nghĩ đến một thuật toán đơn giản (có thể không chính xác mọi thời gian, nhưng bạn có thể kiểm tra nó và điều chỉnh) mà sẽ mất một vài điểm ngẫu nhiên, ví dụ

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

và sau đó di chuyển về phía phần bên trong của hình ảnh càng lâu càng pixel láng giềng là màu giống như pixel khởi đầu. Bạn càng nhận được nhiều điểm ngẫu nhiên, bạn càng có nhiều cơ hội nhận được đúng. Vấn đề rõ ràng với điều này là nó có thể xảy ra rằng một cái gì đó trên hình ảnh là cùng một màu sắc như biên giới (chính xác như nhau) mà sẽ làm cho nó có vẻ như biên giới là rộng hơn nó thực sự là. Đó là lý do tại sao bạn nên dành nhiều điểm hơn.

Nếu bạn đã hiển thị một số mã, tôi rất sẵn lòng mở rộng câu trả lời.

Các vấn đề liên quan