2009-09-28 1 views
1

Я в основном хочу автоматически создать черепичное изображение из кучи исходных изображений, а затем сохранить его в фотоальбом пользователя. У меня нет никакого успеха, рисуя кучу маленьких UIImage в один большой UIImage. Каков наилучший способ сделать это? В настоящее время я использую UIGraphicsBeginImageContext() и [UIImage drawAtPoint] и т. Д. Все, что мне когда-либо закончилось, это черный квадрат 512x512. Как я должен это делать? Я ищу CGLayer и т. Д., Похоже, есть много вариантов, но никто из них не работает особенно легко.Вычисление UIImage для сохранения в фотоальбом

Позвольте мне на самом деле положил мой код:

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.

ответ

0

Чтобы сделать то, что я хотел сделать ...

Сделайте GLView как большой, как общая вещь, которую вы хотите. Также убедитесь, что glOrtho и ваш viewport имеют нужный размер. Затем просто рисуйте все, что угодно, где бы вы ни захотели, и сделайте один снимок экрана OpenGL. Тогда вам не нужно беспокоиться о объединении с одним UIImage над несколькими проходами рендеринга OpenGL, что, без сомнения, является причиной моей проблемы.

1

О, тогда вы можете просто сохранить экранный вид после того, как оно было вынесено на экране:

UIGraphicsBeginImageContext(myBigView.bounds.size); 
    [view drawRect:myBigView.bounds]; 
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

вы хранящей его обратно к изображению?

UIImage *myBigImage = UIGraphicsGetImageFromCurrentImageContext(); 
+0

Да, я ввел код, чтобы вы могли точно видеть, что я сделал. – Eli

+0

Хорошо, попробуйте избавиться от строк: UIGraphicsPushContext (UIGraphicsGetCurrentContext()); и UIGraphicsPopContext(); –

+0

Нет, у меня есть представление OpenGL, которое является текущим графическим контекстом и никаким другим UIView нигде не существует. Я просматриваю снимки OpenGL и пытаюсь сфокусировать его на совершенно другом UIImage. Цель этого в основном состоит в том, чтобы получить 3D-модели с нескольких углов в одном листе спрайта. – Eli