seguridad - restaurar whatsapp desde google drive en iphone
Crear UiImage desde NSData (1)
imageWithData: no toma algunos datos arbitrarios e interpreta como una textura sin comprimir RGBA. Toma datos que contienen bytes de un formato de imagen reconocido (como JPG, PNG o TIFF), analiza y descomprime las imágenes de manera apropiada.
Para hacer lo que necesita, necesita crear un CGContext que esté configurado apropiadamente (bytes de fila, formato de píxel, etc.), ya sea usando la memoria que ya ha asignado como almacenamiento de respaldo, o pidiéndole su almacenamiento y luego copiando tus bytes en esto. Una vez que lo haga, puede usar toda la funcionalidad relacionada con CGContext, incluida la capacidad de crear un UIImage desde ese contexto.
Debajo está el código I copiado (de este sitio) y modificado solo levemente ya que el código original no se compilaría. Quiero manipular la matriz de bytes para la detección de bordes y, finalmente, simples cambios en los colores, pero primero quería que el código básico funcionara. Actualmente, el sistema se compila y ejecuta. Muestra un elefante mal dibujado en la pantalla. Cuando toco la imagen, desaparece. El paso muestra el resultado de imageWithData como 0x0. He intentado esto con un png y un bmp y el mismo resultado
¿Alguna pista de lo que estoy haciendo mal?
ImageViewDrawable se define como:
@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 ];
}