Получение пиксельной альфы оценивает за UIImage

Пройдя еще один шаг, загрузите в iTunesConnect через командную строку с Xcode 7 ! (Предполагая, что вы начинаете с .ipa, который был подписан с правильным профилем выпуска и подписью.)

Введите altool, интерфейс CLI для загрузчика приложений ( docs , стр. 38). Скрытая глубоко в структуре Xcode.app, это удобная функция, позволяющая загружать файлы непосредственно в ItunesConnect.

/Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/altool

Просто запустите $ altool --upload-app -f file -u username [-p password], чтобы выгрузить своего новоиспеченного .ipa прямо в Apple. Пароль не является обязательным, и он будет запрашивать его, если вы не указали его в команде.

Если на этапе проверки возникнут проблемы с приложением, консоль распечатает их.

Вам, вероятно, придется экспортировать путь в altool, если вы не хотите сохранять его местоположение.

export PATH=$PATH:/Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/

Вот и все! Просто войдите на iTunesConnect.com и выберите новую сборку для тестирования с помощью testflight.

Заключительное примечание: Если вы получаете сообщение «Exception while launching iTunesTransporter: Transporter not found at path: /usr/local/itms/bin/iTMSTransporter. You should reinstall the application», вы можете следовать предложению этого ответа SO , чтобы запустить символическую ссылку на правильное местоположение:

ln -s /Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/itms /usr/local/itms

35
задан teabot 28 June 2009 в 18:53
поделиться

3 ответа

Да, ось Y CGContexts направлена ​​вверх, а в UIKit - вниз. См. Документы .

Редактировать после прочтения кода:

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

CGContextSetBlendMode(context, kCGBlendModeCopy);

Отредактируйте, подумав:

Вы могли бы сделать поиск намного более эффективным, построив минимально возможный CGBitmapContext (1x1 пиксель? Может быть, 8x8? попробуйте) и переведя контекст в ваше желаемое положение перед рисованием:

CGContextTranslateCTM(context, xOffset, yOffset);
10
ответ дан 27 November 2019 в 07:15
поделиться

Нужно ли мне переводить координаты между UIKit и Core Graphics - то есть: инвертирована ли ось Y?

Это возможно. В CGImage, данные пикселей находятся в порядке чтения на английском языке: слева направо, сверху вниз. Итак, первый пиксель в массиве находится в верхнем левом углу; второй пиксель - один слева в верхнем ряду; и т. д.

Если у вас есть такое право, вы также должны убедиться, что смотрите на правильный компонент в пикселе. Возможно, вы ожидаете RGBA, но просите ARGB, или наоборот. Или, может быть, у вас неправильный порядок байтов (я не знаю, каков порядок байтов в iPhone).

Или я неправильно понял предварительно умноженные альфа-значения?

Это не похоже.

Для тех, кто не знаю: Предварительное умножение означает, что компоненты цвета предварительно умножаются на альфа; альфа-компонент остается неизменным вне зависимости от того, умножены на него компоненты цвета или нет. Вы можете отменить это (без предварительного умножения), разделив компоненты цвета на альфа.

3
ответ дан 27 November 2019 в 07:15
поделиться

Я нашел этот вопрос / ответ во время исследования того, как выполнять обнаружение столкновений между спрайтами, используя альфа-значение данных изображения, а не прямоугольную ограничивающую рамку. Контекст - это приложение для iPhone ... Я пытаюсь выполнить предложенное выше рисование в 1 пиксель, и у меня все еще возникают проблемы с получением этого работают, но я нашел более простой способ создания CGContextRef, используя данные из самого изображения и вспомогательные функции здесь:

CGContextRef context = CGBitmapContextCreate(
                 rawData, 
                 CGImageGetWidth(cgiRef), 
                 CGImageGetHeight(cgiRef), 
                 CGImageGetBitsPerComponent(cgiRef), 
                 CGImageGetBytesPerRow(cgiRef), 
                 CGImageGetColorSpace(cgiRef),
                 kCGImageAlphaPremultipliedLast     
    );

Это обходит все уродливое жесткое кодирование в приведенном выше примере. Последнее значение можно получить, вызвав CGImageGetBitmapInfo () но в моем случае он возвращает значение из изображения, которое вызвало ошибку в функции ContextCreate. Действительны только определенные комбинации, как описано здесь: http://developer.apple.com/qa/qa2001/qa1037.html

Надеюсь, это будет полезно!

3
ответ дан 27 November 2019 в 07:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: