Có một số câu hỏi/câu trả lời về cách để có được những màu điểm ảnh của hình ảnh cho một điểm nhất định. Tuy nhiên, tất cả các câu trả lời là thực sự chậm (100-500ms) cho hình ảnh lớn (thậm chí nhỏ như 1000 x 1300, ví dụ).iOS Performance Tuning: cách nhanh nhất để có được màu pixel camera cho hình ảnh lớn
Hầu hết các mẫu mã ra có vẽ một bối cảnh hình ảnh. Tất cả trong số họ mất nhiều thời gian khi bốc thăm thực tế diễn ra:
CGContextDrawImage(context, CGRectMake(0.0f, 0.0f, (CGFloat)width, (CGFloat)height), cgImage)
Kiểm tra này trong Instruments cho thấy rằng hòa đang được thực hiện bằng cách sao chép dữ liệu từ hình ảnh nguồn:
Tôi có thậm chí đã thử một phương tiện khác nhau để lấy dữ liệu, hy vọng rằng việc nhận được các byte sẽ thực sự chứng minh hiệu quả hơn nhiều.
NSInteger pointX = trunc(point.x);
NSInteger pointY = trunc(point.y);
CGImageRef cgImage = CGImageCreateWithImageInRect(self.CGImage,
CGRectMake(pointX * self.scale,
pointY * self.scale,
1.0f,
1.0f));
CGDataProviderRef provider = CGImageGetDataProvider(cgImage);
CFDataRef data = CGDataProviderCopyData(provider);
CGImageRelease(cgImage);
UInt8* buffer = (UInt8*)CFDataGetBytePtr(data);
CGFloat red = (float)buffer[0]/255.0f;
CGFloat green = (float)buffer[1]/255.0f;
CGFloat blue = (float)buffer[2]/255.0f;
CGFloat alpha = (float)buffer[3]/255.0f;
CFRelease(data);
UIColor *pixelColor = [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
return pixelColor;
phương pháp này có đó là thời gian trên các dữ liệu sao chép:
CFDataRef data = CGDataProviderCopyData(provider);
Nó sẽ xuất hiện mà nó quá là đọc dữ liệu từ đĩa, thay vì CGImage
dụ tôi đang tạo ra:
Bây giờ, phương pháp này, trong một số thử nghiệm không chính thức hoạt động tốt hơn, nhưng nó vẫn không nhanh như tôi muốn. Có ai biết cách nhanh hơn để lấy dữ liệu pixel cơ bản không ???
Hình ảnh đã được vẽ trên màn hình, tôi sẽ chỉ ra rằng dữ liệu pixel của nó đã ở đâu đó trong bộ nhớ. –
Bộ nhớ đồ họa/GPU/hiển thị không giống như bộ nhớ CPU. Bạn không thể đọc bộ nhớ của màn hình. Nó mờ đục và bên ngoài sandbox của ứng dụng. – hotpaw2