Dưới đây là mã tôi đã sao chép (từ trang này) và được sửa đổi chỉ một chút vì mã gốc sẽ không biên dịch. Tôi muốn thao tác mảng byte để phát hiện cạnh và cuối cùng là những thay đổi đơn giản đối với màu sắc, nhưng trước tiên tôi muốn lấy mã cơ bản hoạt động. Hiện tại, hệ thống đã biên dịch và chạy. Nó hiển thị một con voi được vẽ kém trên màn hình. Khi tôi chạm vào hình ảnh, nó biến mất. Bước qua cho thấy kết quả của imageWithData là 0x0. Tôi đã thử điều này với cả png và bmp và cùng một kết quảTạo UiImage từ NSData
Bất kỳ manh mối nào cho những gì tôi đang làm sai?
ImageViewDrawable được định nghĩa là:
@interface ImageViewDrawable : UIImageView
// I am using the following code to initialize this ImageView
ImageViewDrawable * uiv = [[ImageViewDrawable alloc] initWithImage:[UIImage imageNamed:@"ele.png"] ];
-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
// get and work on pixel data
NSData* pixelData = (NSData*) CGDataProviderCopyData(CGImageGetDataProvider(self.image.CGImage));
char* bytes =[pixelData bytes];
// Take away the red pixel, assuming 32-bit RGBA
for(int i = 0; i < [pixelData length]; i += 4) {
bytes[i] = bytes[i]; // red
bytes[i+1] = bytes[i+1]; // green
bytes[i+2] = bytes[i+2]; // blue
bytes[i+3] = bytes[i+3]; // alpha
}
// convert pixel back to uiiimage
NSData* newPixelData = [NSData dataWithBytes:bytes length:[pixelData length]];
char * bytes2 =[pixelData bytes];
UIImage * newImage = [UIImage imageWithData:newPixelData] ;
[self setImage: newImage ];
}
Vì vậy, không quan trọng là dữ liệu tôi cung cấp về cơ bản đến từ một UIImage hiện có? –
Tôi thấy vấn đề của mình. Tập hợp các cuộc gọi lồng nhau này - CGDataProviderCopyData (CGImageGetDataProvider()) - nhận được nhà cung cấp dữ liệu, và sau đó JUST sao chép dữ liệu. Điều đó có nghĩa là tôi chỉ nhận được pixel và không phải phần còn lại của cấu hình từ hình ảnh gốc. Vì vậy, tôi phải tạo lại một hình ảnh bằng cách sử dụng các pixel đó và thông tin CG mà bạn đã đề cập đến. Cảm ơn một lần nữa để được giúp đỡ –