我知道必須有一種方法來獲取一個基本圖像(在我的情況下是透明的4096x4096基本層)並添加幾十個(最多100個)非常小(100x100 )圖像在不同的位置。但我無法弄清楚如何做到這一點:假設以下是imageArray
有很多元素,每個包含的NSDictionary結構如下:如何在iOS中的一個基本UIImage中添加多個UIImage
@{
@"imagename":imagename,
@"x":xYDict[@"x"],
@"y":xYDict[@"y"]
}
現在,這裏是代碼(不工作都是我。有一個透明屏幕... ...和性能仍然是可怕的......每個「圖像」的循環......和海量內存使用約1-2秒。
NSString *PNGHeatMapPath = [[myGizmoClass dataDir] stringByAppendingPathComponent:@"HeatMap.png"];
@autoreleasepool
{
CGSize theFinalImageSize = CGSizeMake(4096, 4096);
NSLog(@"populateHeatMapJSON: creating blank image");
UIGraphicsBeginImageContextWithOptions(theFinalImageSize, NO, 0.0);
UIImage *theFinalImage = UIGraphicsGetImageFromCurrentImageContext();
for (NSDictionary *theDict in imageArray)
{
NSLog(@"populateHeatMapJSON: adding: %@",theDict[@"imagename"]);
UIImage *image = [UIImage imageNamed:theDict[@"imagename"]];
[image drawInRect:CGRectMake([theDict[@"x"] doubleValue],[theDict[@"y"] doubleValue],image.size.width,image.size.height)];
}
UIGraphicsEndImageContext();
NSData *imageData = UIImagePNGRepresentation(theFinalImage);
theFinalImage = nil;
[imageData writeToFile:PNGHeatMapPath atomically:YES];
NSLog(@"populateHeatMapJSON: PNGHeatMapPath = %@",PNGHeatMapPath);
}
我知道我誤解UIGraphics
上下文...有人可以幫我嗎?我試圖在一些x,y位置的空白透明畫布上疊加一堆UIImage,得到fina l圖像並保存。
PS:這也是..如果模擬器是任何東西...泄漏就像heck。它上升到2或3演出... 在此先感謝。
編輯: 我沒有找到這個,並嘗試過它,但它需要我重寫整個圖像,將該圖像複製到一個新的圖像,並添加到新的。希望獲得「基本圖像」,「添加此圖像」,「添加該圖像」,「添加其他圖像」,並獲得新的基本圖像,而不需要全部複製:
這樣就好嗎?
+(UIImage*) drawImage:(UIImage*) fgImage
inImage:(UIImage*) bgImage
atPoint:(CGPoint) point
{
UIGraphicsBeginImageContextWithOptions(bgImage.size, FALSE, 0.0);
[bgImage drawInRect:CGRectMake(0, 0, bgImage.size.width, bgImage.size.height)];
[fgImage drawInRect:CGRectMake(point.x, point.y, fgImage.size.width, fgImage.size.height)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
在實際繪製任何東西之前,您正在獲取圖像'UIGraphicsGetImageFromCurrentImageContext()'。把這個調用移到你的循環之後,並且在'UIGraphicsEndImageContext()'之前移動。 –
有一件事我注意到了...... @ 3x位我。無論屏幕的大小如何,我都想要最終的4096畫布。但是,這是一個這樣的內存怪物的原因是,它使圖像12288x12288(我在iPhone 6加模擬器測試)... :(哦,好吧,我的壞。保羅:我會嘗試你的建議。 ! – Jann
保羅,如果你把這個問題作爲「回答」的話,我會接受它。工作!謝謝!(和我試過的'drawImage'相比,速度和記憶效率都快)〜 – Jann