Подтвердить что ты не робот

Jpg изображения в iphone и 2x изображения

Я работаю над приложением iphone и настраиваю iOS 4.0 или позже. Я пытаюсь добавить изображение в UIImageView, а изображение находится в формате jpeg. Это то, что я сделал до сих пор.

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];

Я добавил два изображения,

  • background.jpg(как нормальное изображение 1x)
  • [email protected](для 2x/сетчатки дисплей).

Но когда я строю и запускаю, все работает нормально, за исключением фона. Все мои другие виджеты есть, но есть белый фон, и изображение не отображается.

Затем я создал два png-изображения для своего фона, добавил его в проект и побежал. На этот раз мой фон был показан. Я был озадачен, потому что согласно documentation jpg-изображение можно использовать в iphone с UIImage.

Я снова попытался с помощью jpg-изображений и изменил код выше на

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];

Когда я запускаю приведенный выше код, отображается фоновое изображение, но 2 изображения не загружаются. Это показывает, что мой jpg-образ в порядке, и это не преступник. Поэтому, когда я просто указываю имя изображения без расширения, файлы png (как 1x, так и 2x) загружаются на соответствующие устройства, файлы jpg вообще не загружаются. Похож на ошибку (либо в sdk, либо в документации). iOS 4 находится здесь в течение хорошего года. почему никто этого не заметил? Также есть ли какой-либо вариант для меня, кроме как преобразовать все мои изображения в png?

EDIT:

Хорошо, два дня на вопрос, нулевые ответы. Я уже преобразовал все мои изображения в png, и эта часть моего проекта выполнена (так как мой проект не мог дождаться..). Тем не менее, ради меня самого и ради всех, кто сталкивается с этим в будущем, я хотел бы узнать больше об этой проблеме. По крайней мере, кто-то может подтвердить, что это действительно яблочная ошибка. Я начинаю щедрость, чтобы больше людей могли видеть эту тему.

ИЗМЕНИТЬ СНОВА

2 дня, оставшиеся для завершения этой награды. Спасибо всем, кто ответил. Но позвольте мне прояснить одно. Я уже сказал, что все мои образы преобразовал в png, и я двинулся вперед. Я просто хотел получить подтверждение, что imageNamed обрабатывает файлы jpg и png одинаково. Документация, безусловно, говорит, что это будет (если Apple не написала ее где-то кроме документации UIImage). Если документация правильная, мой код мне не удалось из-за двух возможных причин.

  • Это ошибка в imageNamed. Если это причина, то у меня нет слишком много опций, кроме файла, отчета об ошибке, изменения моих изображений в png или записи обертки (как сказал Чандан в его ответе) и двигаться дальше.
  • Есть некоторая проблема с изображением jpeg, которое я использовал. Ну, я не парень из фотошопа. Но я использовал Изображение RGBA jpg. Если изображение имеет значение, я готов спросить моего дизайнера друг и предоставить дополнительную информацию.

Еще одна вещь. Это сообщение также просто рассказывает об этой проблеме. Но он не знает причины. Поэтому я не одинок.

EDIT: END

Ну, это связано с самим изображением. Я googled и скачал некоторые образцы jpeg изображений и играл с ним. Некоторые из них показываются правильно, а некоторые нет. Поскольку время ограничено, я даю ограниченность PengOne, который пытался воспроизвести ошибку и успешно загрузил jpg-изображение без расширения, заставив меня работать с большим количеством изображений. Спасибо всем, кто пытался помочь.

4b9b3361

Ответ 1

Согласно UIImage Ссылка на класс:

Обсуждение

Этот метод просматривает системные кэши для объекта изображения с помощью указанное имя и возвращает этот объект, если он существует. Если совпадение объект изображения еще не находится в кеше, этот метод загружает изображение данных из указанного файла, кэширует его, а затем возвращает результирующий объект.

На устройстве под управлением iOS 4 или более поздней версии поведение идентично, если экран устройств имеет масштаб 1,0. Если экран имеет шкалу 2,0, этот метод сначала ищет файл изображения с тем же именем файла с добавленным к нему суффиксом @2x. Например, если имя файла, он сначала ищет кнопку @2x. Если он находит 2x, он загружает это изображение и задает свойство scale возвращаемого объекта UIImage до 2.0. В противном случае он загружает немодифицированное имя файла и устанавливает масштаб свойство 1.0. См. Руководство по программированию приложений iOS для получения дополнительной информации. информация о поддержке изображений с различными масштабными коэффициентами. Специальный

Вопросы

В iOS 4 и более поздних версиях имя файла не требуется указывать расширение имени файла. Перед iOS 4 вы должны указать имя файла расширение.

Поскольку вы ориентируетесь на iOS 4.0 и более поздние версии, вам нужно не расширять имя файла. Я попытался воспроизвести эту потенциальную ошибку, но она работала как ожидалось для меня без расширений имени файла.

Вот некоторые идеи о том, что, возможно, пошло не так, чтобы создать этот эффект в вашем приложении:

  • Возможно, проблема возникает из кеша, если вы изменили свои изображения в какой-то момент.

  • Если вы предпочитаете не использовать расширения имени файла, и у вас есть как "background.jpg", так и "background.png" в качестве параметров, предпочтение, похоже, заключается в использовании файла ".png".

  • Если вы установите цель на iOS 4.0 и позже после первого запуска приложения, тогда потребуется расширение имени файла, и изображение может быть кэшировано пустым, что приводит к теории 1.

Это лучшее, что я могу сделать из этого.

Ответ 2

Напишите оболочку, чтобы получить изображение, подобное

-(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;
}

И из вашего кодового вызова

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

Ответ 3

С рассветом Xcode 6 я обнаружил, что изображения JPG могут вообще не отображаться на некоторых устройствах iOS7 (они могут работать на некоторых, но не на других, или они могут не работать ни на одном, и вы можете видеть другой результат на другой машине разработчика, похоже, нет никакой последовательности). Это независимо от того, ссылается ли изображение только на UIImageView в XIB или программно с помощью [UIImage imageNamed:] (который возвращает нуль).

После долгое время царапая мою голову, решение заключалось в том, чтобы переименовать расширение *.jpg в файл *.png(в то время как явно оставляя содержимое файла как данные JPG).

НТН

Ответ 4

Вам просто нужно предоставить полное имя изображения.

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

не оставляйте расширение.

Что касается @2x, нет необходимости вызывать его в любом месте кода. Если вы правильно закодировали, нет необходимости тестировать дисплей сетчатки, как некоторые из них предложили.

Ответ 5

Вы можете использовать jpgs, просто попробовали это самостоятельно, и это сработало. Только предложение заключается в том, как вы его создаете. Попробуйте это так:

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];

Это изображение, которое я использовал:

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