Poniżej znajduje się kod skopiowany (z tej strony) i zmodyfikowany tylko nieznacznie, ponieważ oryginalny kod nie zostałby skompilowany. Chcę manipulować tablicą bajtów w celu wykrycia krawędzi i ewentualnie prostych zmian kolorów, ale najpierw chciałem uzyskać podstawowy kod działający. Obecnie system kompiluje i uruchamia. Wyświetla źle rysowane słonia na ekranie. Kiedy dotknę obrazu, znika. Krok po kroku pokazuje wynik imageWithData jako 0x0. Próbowałem tego zarówno z png i bmp i tym samym wynikiemUtwórz UiImage z NSData
Wszelkie wskazówki, co robię źle!
ImageViewDrawable jest zdefiniowany jako:
@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 ];
}
Czy to nie ma znaczenia, że dane, które karmię w istocie pochodzą z istniejącego UIImage? –
Widzę mój problem. Ten zagnieżdżony zestaw wywołań - CGDataProviderCopyData (CGImageGetDataProvider()) - pobiera dostawcę danych, a następnie JUST kopiuje dane. Co oznacza, że właśnie odbieram piksele, a nie resztę konfiguracji z oryginalnego obrazu. Muszę więc odtworzyć obraz, używając tych pikseli i informacji CG, o których wspomniałeś. Jeszcze raz dziękuję za pomoc –