Вычисление UIImage для сохранения в фотоальбоме
-
18-09-2019 - |
Вопрос
По сути, я хочу автоматически создать мозаичное изображение из набора исходных изображений, а затем сохранить его в фотоальбоме пользователя.Мне не удалось нарисовать кучу маленьких UIImage в один большой UIImage.Как лучше всего это сделать?В настоящее время я использую UIGraphicsBeginImageContext() и [UIImage drawAtPoint] и т. д.Все, что я получаю, это черный квадрат размером 512x512.Как мне следует это делать?Я ищу CGLayer и т. д.кажется, есть много вариантов, но ни один из них не работает особенно легко.
Позвольте мне действительно вставить свой код:
CGSize size = CGSizeMake(512, 512);
UIGraphicsBeginImageContext(size);
UIGraphicsPushContext(UIGraphicsGetCurrentContext());
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
UIImage *image = [self getImageAt:i:j];
[image drawAtPoint:CGPointMake(i*128,j*128)];
}
}
UIGraphicsPopContext();
UIImage *result = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImageWriteToSavedPhotosAlbum(result, nil, nil, nil);
Должен отметить, что на самом деле вышеизложенное нет что именно происходит в моем коде.Что на самом деле происходит, так это то, что я вызываю каждую строку до и включительно в UIGraphicsPushContext, затем в таймере анимации я медленно увеличиваю отрисовку и рисую ее в контексте.Затем, после того, как все будет готово, я вызываю все, начиная с UIGraphicsPopContext.
Решение 2
Сделать именно то, что я хотел сделать...
Сделайте свой GLView таким же большим, как и все, что вам нужно.Также убедитесь, что glOrtho и область просмотра имеют правильный размер.Затем просто нарисуйте все, что хотите, где хотите, и сделайте один снимок экрана OpenGL.Тогда вам не нужно беспокоиться о объединении в один UIImage за несколько проходов рендеринга OpenGL, что, несомненно, и стало причиной моей проблемы.
Другие советы
О, тогда вы можете просто сохранить экранное представление после того, как оно было отображено на экране:
UIGraphicsBeginImageContext(myBigView.bounds.size);
[view drawRect:myBigView.bounds];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
вы сохраняете его обратно в изображение?
UIImage *myBigImage = UIGraphicsGetImageFromCurrentImageContext();