Nano Hash - криптовалюты, майнинг, программирование

Два способа поместить изображение в графический контекст — какой лучше?

Я заметил примеры двух способов размещения изображений в основной графике. Одно намного проще другого. Так в чем преимущество второго, более сложного подхода? Это быстрее?

пример 1

UIImage *myImage = [UIImage imageNamed:@"picture.png"];
CGRect imageRect = CGRectMake(70, 330, 40, 40);
[myImage drawInRect:imageRect];
[myImage release];

пример 2

// Load image from application bundle
NSString* imageFileName = [[[NSBundle mainBundle] resourcePath]         stringByAppendingPathComponent:@"picture.png"];
CGDataProviderRef provider = CGDataProviderCreateWithFilename([imageFileName UTF8String]);
CGImageRef image = CGImageCreateWithPNGDataProvider(provider, NULL, true,      kCGRenderingIntentDefault);
CGDataProviderRelease(provider);

// Draw image
CGContextTranslateCTM(context, 70, 370 );
CGContextScaleCTM(context, 1.0, -1.0);
CGContextDrawImage(context, CGRectMake(0, 0, 40, 40), image);
CGImageRelease(image);

Ответы:


1

Непосредственно сравнивая два метода, преимущество второго метода заключается в том, что он не помещает изображение в кэш +[UIImage imageNamed:]. Вы не можете удалить изображения из этого кеша, поэтому вам лучше не использовать imageNamed:.

Тем не менее, вы можете получить лучшее из обоих миров.

Прежде всего, используйте -[NSBundle URLForResource:withExtension:], чтобы получить URL-адрес изображения. Это упрощает этот шаг по сравнению с получением пути или URL-адреса каталога ресурсов и добавлением к нему имени файла самостоятельно.

Во-вторых, используйте +[UIImage imageWithContentsOfURL:] для создания изображения, передав URL-адрес, полученный из NSBundle.

Оттуда продолжайте, как в первом примере. Всего будет всего пять строк (две из них заменят первую строку вашего первого примера).

22.01.2011

2

В примере 1 вы просто показываете изображение в представлении как оно есть, и также хорошо показывать статические изображения.

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

так что это зависит от вашего выбора использования. хотите ли вы просто показать изображение или хотите, чтобы оно делало что-то большее. Если вы новичок и хотите разрабатывать служебные приложения, я не думаю, что вы когда-либо будете использовать вариант 2. но если вы хотите разрабатывать игры или хотите анимировать изображение, вы должны использовать вариант 2.

Ваше здоровье

22.01.2011

3

Я не знаю никаких преимуществ для второго пути. Недостатком является наличие большего количества шагов. Если вы используете первый способ и у вас есть UIImage, и вам нужен CGImageRef, вы можете получить к нему доступ через свойство CGImage. Я чаще всего пользуюсь первым. Когда у вас есть UIImage, вы можете использовать свой собственный UIImageView, чтобы добавить его в иерархию представлений, или вы можете назначить его непосредственно некоторым объектам UIKit, таким как imageView UITableViewCell. Если вы получите CGImageRef (второй способ), вам нужно будет сначала использовать imageWithCGImage:...

22.01.2011
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..