- (void)makeImage:(NSMutableData *)rdata{
if(multiFlg){
UIImage *img=[UIImage imageWithData:rdata];
[imgArr addObject:img];
[imgArr addObject:nwf(img.size.width)];[imgArr addObject:nwf(img.size.height)];[imgArr addObject:nwf(img.size.width/img.size.height)];
if([imgArr count]/4<[photourl count]){
imgnum++;[self loadPhoto];
}
else{ //tiling routine
int curx=0,cury=0,k=0;
for(int j=0;j<[imgArr count]/4;j++){
if([[imgArr objectAtIndex:j*4+3]floatValue]<sr&&[imgArr count]/4>j+1){
int over3=2;
CGFloat firstw=ofv(imgArr, j*4+1),firsth=ofv(imgArr, j*4+2),firstr=firsth/firstw;
CGFloat nextw=ofv(imgArr, (j+1)*4+1),nexth=ofv(imgArr, (j+1)*4+2);
CGFloat newh=firstr*((sw*nexth)/(nextw*firstr+nexth));
while (sw/newhj+over3) {
nextw=ofv(imgArr, (j+over3)*4+1),nexth=ofv(imgArr, (j+over3)*4+2);
newh=(newh/sw)*((sw*nexth)/(nextw*(newh/sw)+nexth));
over3++;
}
j+=1+(over3-2);
UIGraphicsBeginImageContext(CGSizeMake(sw,cury+newh));
if(mixedimg){[mixedimg drawAtPoint:CGPointMake(0, 0)];}
while(k<j+1){
CGFloat neww=newh*[[imgArr objectAtIndex:k*4]size].width/[[imgArr objectAtIndex:k*4]size].height;
[[imgArr objectAtIndex:k*4]drawInRect:(CGRectMake(curx,cury,neww,newh))];
curx+=neww;k++;
}
cury+=newh;curx=0;
mixedimg=UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
}else{
UIGraphicsBeginImageContext(CGSizeMake(sw,cury+sw*[[imgArr objectAtIndex:j*4]size].height/[[imgArr objectAtIndex:j*4]size].width));
if(mixedimg) [mixedimg drawAtPoint:CGPointMake(0, 0)];
CGFloat newh=sw*[[imgArr objectAtIndex:j*4]size].height/[[imgArr objectAtIndex:j*4]size].width;
[[imgArr objectAtIndex:j*4]drawInRect:(CGRectMake(0,cury,sw,newh))];
mixedimg=UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
cury+=sw*[[imgArr objectAtIndex:j*4]size].height/[[imgArr objectAtIndex:j*4]size].width;
}
}
[ai removeFromSuperview];
self.image=mixedimg;
[self abort];
}
}
else{
[ai removeFromSuperview];
if([[photourl objectAtIndex:0]hasSuffix:@"gif"]){
CGImageSourceRef src=CGImageSourceCreateWithData((__bridge CFDataRef)rdata,NULL);
NSDictionary *prop=[(__bridge NSDictionary*)CGImageSourceCopyProperties(src,NULL) objectForKey:(NSString*)kCGImagePropertyGIFDictionary];
size_t count=CGImageSourceGetCount(src);
NSMutableArray *GIFimages=[NSMutableArray array];
for(size_t i=0; i<count; i++){
CGImageRef image=CGImageSourceCreateImageAtIndex(src,i,NULL);
[GIFimages addObject:[UIImage imageWithCGImage:image]];
CGImageRelease(image);
}
NSTimeInterval delay=[[prop objectForKey:(NSString*)kCGImagePropertyGIFDelayTime] doubleValue];
if (!delay) delay=1.2;
CFRelease(src);
self.image=[UIImage animatedImageWithImages:GIFimages duration:delay];
}else self.image=[UIImage imageWithData:data];
[self abort];
}
}
できた。
これでgif以外なら何枚でもタイリングしてself.imageにセットし、gifでも1枚ならImageIO使ってアニメーションするUIImageをself.imageにセットされる。gifを含んだ複数画像のpostはこいつ経由で1枚1枚親UIViewControllerにaddSubViewしていけばいけるんじゃないかな。本当かな。
0 件のコメント:
コメントを投稿