2012-03-04 31 views
9

Tôi đang cố gắng tìm hiểu xem liệu một CGPoint có nằm trong hình dạng của một hình ảnh hay không. Hình ảnh là một hình dạng màu đen đơn giản như hai hình đính kèm bên dưới. Tôi muốn tạo ra một phương pháp xác định có hay không một CGPoint nằm trong khu vực màu đen của hình dạng đó.Xác định xem CGPoint có ở trong vùng hình ảnh

Tôi nghĩ rằng điều này cần hai điều: 1) Biến hình ảnh thành một cái gì đó có thể được đọc với mã (không chắc chắn những loại xử lý hình ảnh này sẽ sử dụng hoặc làm thế nào)

2) Sử dụng đó như là một tài liệu tham khảo để xác định có hay không một CGPoint nằm bên trong nó.

Bất kỳ trợ giúp hoặc ý tưởng nào được đánh giá cao. Tôi chưa bao giờ thực hiện loại xử lý hình ảnh mã hóa trước đây. Cảm ơn!

enter image description here

+4

Bạn có thể tạo 'CGBitmapContext' được dữ liệu mà bạn kiểm soát, theo định dạng bạn chọn. Bạn có thể biến nó thành ngữ cảnh 1x1, đặt CTM sao cho điểm bạn muốn kiểm tra nằm ngay tại điểm gốc và vẽ hình ảnh của bạn vào ngữ cảnh. Sau đó kiểm tra dữ liệu của bạn để xem liệu bạn có pixel đen hay pixel trắng. –

+2

@Kevin Ballard: Tại sao không cung cấp câu trả lời đó? Âm thanh như một giải pháp. – DarkDust

+1

@DarkDust: Vì tôi không muốn dành thời gian để viết một số mã. –

Trả lời

11

Hãy xem Ole Begemann của OBShapedButton. Ở đó bạn sẽ tìm thấy một loại UIImage có chứa phương pháp ColorAtPixel. Đoán đó là những gì bạn đang tìm kiếm.

Sau đó bạn có thể nhận được UIColor của điểm ảnh nhất định với:

UIImage *image = [UIImage imageWithCGImage:yourCGImage]; 
CGPoint point = CGPointMake(pointx,pointy); 
UIColor *pixelColor = [image colorAtPixel:point]; 

Để đơn giản hóa việc các giá trị RGB bạn cũng có thể có một cái nhìn tại uicolor-utilities. Sử dụng danh mục UIColor-Expanded bạn có thể chỉ cần xác định giả sử thành phần màu đỏ và xanh dương. Nếu chúng thấp (điểm ảnh tối) thì điểm thử nghiệm là hình dạng bên trong.

CGFloat redComp = [pixelColor red]; 
CGFloat blueComp = [pixelColor blue]; 

BOOL isInsideShape = ((redComp < 0.5) && (blueComp < 0.5)); 
+1

Ồ, cảm ơn vì điều này! – Mat

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