ver notes las fototeca fotos descargar como apple app iphone uiimageview uiimage

iphone - notes - Combinando varios UIImageViews y conserva la resolución



itunes (1)

Estoy diseñando una aplicación donde un usuario coloca múltiples UIImageView uno sobre otro. Cuando el usuario decide guardar esto en el álbum de fotos, tengo que combinar todos estos UIImageViews y guardarlo en Photo Library. Mientras los combino necesito preservar sus posiciones, resoluciones, zorder. El enfoque que probé fue tener un UIView padre que actúa como un contenedor. El usuario coloca todos los UIImageViews dentro de esta UIView. Mientras guardo, tomo una captura de pantalla de UIView y la guardo. Aunque este enfoque funciona, no conserva la resolución. La resolución de la imagen final es la misma que la resolución del tamaño UIView principal (el ancho y la altura son 300 píxeles). ¿Hay forma de preservar la resolución? o al menos tener una resolución más alta como hasta 1024 x 768 píxeles? ¡Cualquier ejemplo de punteros / código sería apreciado!


Lo que está haciendo, guardar UIView, es una muy buena idea si el tamaño de UIView es más alto que el tamaño de la imagen más grande que tiene, pero eso casi nunca es el caso. Lo que tiene que hacer es crear un contexto gráfico (CGContextRef), tan grande como la más grande de sus imágenes, ordenar sus imágenes por orden zy comenzar a dibujar esas imágenes allí. Trataré de ayudarte con algún pseudo código:

-(UIImage *)mergeFlag{ UIImage * mergedImage = nil; //In some pace you need to fill these values with the biggest width of all your images and the biggest height; int Max_Width; int Max_Height; //Use here your image with the biggest Z-order. CGImageRef image; size_t cWitdh = Max_Width; size_t cHeight = Max_Height; size_t bitsPerComponent = 8;//If 8 isn''t right you should use CGImageGetBitsPerComponent(image) with some image. size_t bytesPerRow = 4 * Max_Width;// I use 4 assuming you have 8 Bits per component and you have 4 components (R,G,B,A) , if you have an image specifically, you can use CGImageGetBytesPerRow(image) //Now we build a Context with those dimensions. CGContextRef context = CGBitmapContextCreate(nil, cWitdh, cHeight, bitsPerComponent, bytesPerRow, CGColorSpaceCreateDeviceRGB(), CGImageGetBitmapInfo(image)); //The code of this cycle is to ilustrate what you have to do: for(image in your Images ordered by z-Order) { //The location where you draw your image on the context is not always the same location you have in your UIView, //this could change and you need to calculate that position according to the scale between you images real size, and the size of the UIImage being show on the UIView. CGContextDrawImage(context, CGRectMake(currentImage.frame.origin.x, currentImage.frame.origin.y, CGImageGetWidth(currentImage), CGImageGetHeight(currentImage), currentImage); } CGImageRef mergeResult = CGBitmapContextCreateImage(context); mergedImage = [[UIImage alloc] initWithCGImage:tmp]; CGContextRelease(context); CGImageRelease(mergeResult); return mergedImage;}

Espero eso ayude.