ver sesion porque mis las iniciar fototeca fotos como cargan carga apple iphone ios uiimage png jpeg

sesion - Imágenes jpg en iphone y 2x imágenes.



icloud fotos iphone (5)

Con la llegada de Xcode 6, descubrí que es posible que las imágenes JPG no se reproduzcan en ciertos dispositivos iOS7 (pueden funcionar en algunos pero no en otros, o pueden no funcionar en ninguno, y es posible que vea un resultado diferente en otro). desarrolladores de la máquina, no parece haber ninguna consistencia). Esto es independiente de si se hace referencia a la imagen en UIImageView en un XIB o mediante programación con [UIImage imageNamed:] (que devuelve nulo).

Después de rascarme la cabeza durante mucho tiempo, la solución fue cambiar el nombre de la extensión de archivo * .jpg a * .png (mientras que obviamente el contenido del archivo es JPG).

HTH

Estoy trabajando en una aplicación para iPhone y estoy apuntando a iOS 4.0 o posterior. Estoy tratando de agregar una imagen a UIImageView, y la imagen está en formato jpeg . Esto es lo que he hecho hasta ahora.

UIImageView *bgImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 246.0)]; bgImageView.image = [UIImage imageNamed:@"background"]; [self.view addSubview:bgImageView]; [bgImageView release];

He añadido dos imágenes,

  1. background.jpg (como imagen normal 1x)
  2. [email protected] (para visualización de 2x / retina).

Pero cuando construyo y ejecuto, todo funciona bien, excepto que no hay fondo. Todos mis otros widgets están ahí, pero hay un fondo blanco y la imagen no se muestra.

Luego creé dos imágenes png para mi fondo, las agregué al proyecto y las ejecuté. Esta vez se mostró mi fondo. Estaba perplejo porque, según la documentation imagen jpg se puede usar en iphone con UIImage.

Intenté nuevamente con mis imágenes jpg y cambié el código anterior a este

UIImageView *bgImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 246.0)]; bgImageView.image = [UIImage imageNamed:@"background.jpg"]; //added extension [self.view addSubview:bgImageView]; [bgImageView release];

Cuando ejecuto el código anterior, se muestra la imagen de fondo, pero no se cargan las imágenes 2x. Eso muestra que mi imagen jpg está bien, y no es la culpable. Entonces, cuando solo doy el nombre de la imagen sin extensión, los archivos png (tanto 1x como 2x) se cargan en los dispositivos respectivos, los archivos jpg no se cargan en absoluto. Parece un error (ya sea en SDK o documentación). iOS 4 está aquí por un buen año. ¿Por qué nadie lo notó? ¿También hay otra opción para mí que no sea convertir todas mis imágenes a png?

EDITAR:

Bueno, dos días en la pregunta, cero respuestas. Ya he convertido todas mis imágenes a png, y esa parte de mi proyecto está terminada (ya que mi proyecto no pudo esperar ...). Aún así, por mi propio bien y por el bien de todos los que enfrenten esto en el futuro, me gustaría saber más sobre este problema. Al menos alguien puede confirmar que esto es realmente un error de Apple. Estoy empezando una recompensa para que más personas puedan ver este hilo.

EDITAR DE NUEVO

Quedan 2 días para que termine esta recompensa. Gracias por todos los que respondieron. Pero déjame aclarar una cosa. Ya dije que convertí todas mis imágenes a png y seguí avanzando. Solo quería una confirmación de que imageNamed trata los archivos jpg y png de la misma manera. La documentación ciertamente dice que lo hará (a menos que Apple la haya escrito en otro lugar que no sea la documentación de UIImage ). Si la documentación es correcta, entonces mi código me falló por dos posibles motivos

  1. Es un error en imageNamed . Si esta es la razón, entonces no tengo demasiadas opciones aparte de presentar un informe de error, cambiar mis imágenes a png o escribir un contenedor (como lo dijo Chandan en su respuesta) y seguir adelante ...
  2. Hay un problema con la imagen jpeg que usé . Bueno, yo no soy un tipo de photoshop. Pero utilicé la imagen jpg RGBA. Si la imagen importa, estoy listo para preguntarle a mi amigo diseñador y proporcionarle más información.

Una cosa más. This publicación también habla sobre este problema. Pero él no sabe la razón detrás. Así que no estoy solo.

EDITAR: EL FIN

Bueno, es algo relacionado con la imagen en sí. Busqué en Google y descargué algunas imágenes jpeg de muestra y jugué con él. Algunos de ellos se muestran correctamente y otros no. Dado que el tiempo límite ha terminado, le doy el límite a PengOne que intentó reproducir el error y cargar correctamente la imagen jpg sin extensión, haciendo que trabaje con más imágenes. Gracias por todos los que intentaron ayudar.


Escribe una envoltura para obtener la imagen como

-(UIImage*) getImage:(NSString*)imageName{ UIImage *image; if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] == YES && [[UIScreen mainScreen] scale] == 2.00) { // RETINA DISPLAY NSString *jpegFile = [imageName stringByAppendingString:@"@2x.jpg"]; image = [UIImage imageNamed:jpegFile]; } else{ NSString *jpegFile = [imageName stringByAppendingString:@".jpg"]; image = [UIImage imageNamed:jpegFile]; } return image; }

Y desde su código de llamada

bgImageView.image = getImage(@"background");


Puedes usar jpgs, solo lo intenté y funcionó. La única sugerencia es cómo la estás instanciando. Inténtalo de esta manera:

stockImage = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"Morbo.jpg"]]; stockImage.frame = CGRectMake(0,0, self.view.bounds.size.width, self.view.bounds.size.height) ; [self.view addSubview:stockImage];

Esta es la imagen que utilicé:

http://futurama.wikia.com/wiki/File:Morbo.jpg


Según la referencia de clase UIImage :

Discusión

Este método busca en las cachés del sistema un objeto de imagen con el nombre especificado y devuelve ese objeto si existe. Si un objeto de imagen coincidente aún no está en el caché, este método carga los datos de imagen del archivo especificado, lo almacena en caché y luego devuelve el objeto resultante.

En un dispositivo que ejecuta iOS 4 o posterior, el comportamiento es idéntico si la pantalla del dispositivo tiene una escala de 1.0. Si la pantalla tiene una escala de 2.0, este método primero busca un archivo de imagen con el mismo nombre de archivo con un sufijo @ 2x adjunto. Por ejemplo, si el nombre del archivo es botón, primero busca el botón @ 2x. Si encuentra un 2x, carga esa imagen y establece la propiedad de escala del objeto UIImage devuelto a 2.0. De lo contrario, carga el nombre de archivo no modificado y establece la propiedad de escala en 1.0. Consulte la Guía de programación de aplicaciones de iOS para obtener más información sobre el soporte de imágenes con diferentes factores de escala. Especial

Consideraciones

En iOS 4 y versiones posteriores, no se requiere el nombre del archivo para especificar la extensión del nombre de archivo. Antes de iOS 4, debe especificar la extensión del nombre de archivo.

Ya que está apuntando a iOS 4.0 y posterior, no debería necesitar la extensión de nombre de archivo. Intenté reproducir este error potencial, pero funcionó como se esperaba para mí sin las extensiones de nombre de archivo.

Aquí hay algunas ideas de lo que puede haber salido mal para crear este efecto en su aplicación:

  1. Es posible que el problema provenga de la memoria caché si cambió sus imágenes en algún momento.

  2. Si elige no usar las extensiones de nombre de archivo y tiene las opciones "background.jpg" y "background.png", parece que la preferencia es usar el archivo ".png".

  3. Si configuró el objetivo en iOS 4.0 y más tarde después de ejecutar la aplicación por primera vez, entonces la extensión del nombre de archivo habría sido necesaria y la imagen podría haberse guardado en caché en blanco, lo que lleva a la teoría 1.

Eso es lo mejor que puedo hacer de esto.


Solo necesitas proporcionar el nombre completo de la imagen.

bgImageView.image = [UIImage imageNamed:@"background.jpg"];

No dejes fuera de la extensión.

En cuanto a @ 2x, no es necesario invocarlo en ninguna parte del código. Si codifica correctamente, no hay necesidad de probar una pantalla de retina como algunos han sugerido aquí.