//***************************************************************************** // 絵文字を一画面分保存 //***************************************************************************** void SaveEmoji(const int page) { CGRect ViewRect = [[UIScreen mainScreen] bounds] ; BOOL HighReso = [UIScreen mainScreen].scale == 1.f ? NO : YES ; if(!HighReso) { ViewRect.size.width /= 2.f ; ViewRect.size.height /= 2.f ; } UIGraphicsBeginImageContext(ViewRect.size) ; DrawEmoji(page) ; // 絵文字を描画 CGImageRef ImgRef = UIGraphicsGetImageFromCurrentImageContext().CGImage ; CFDataRef DataRef = CGDataProviderCopyData(CGImageGetDataProvider(ImgRef)) ; u08 *data = (u08 *)CFDataGetBytePtr(DataRef) ; // αが適用された RGB 値を元に戻す for(int j = 0 ; j < CGImageGetWidth(ImgRef) * CGImageGetHeight(ImgRef) ; ++ j) { u08 alpha = data[j * 4 + 3] ; if(alpha) { data[j * 4 + 0] = min(data[j * 4 + 0] * 255 / alpha,255) ; data[j * 4 + 1] = min(data[j * 4 + 1] * 255 / alpha,255) ; data[j * 4 + 2] = min(data[j * 4 + 2] * 255 / alpha,255) ; } } CGDataProviderRef DataProv = CGDataProviderCreateWithCFData( CFDataCreate(0,data,CFDataGetLength(DataRef)) ) ; CGImageRef NewImg = CGImageCreate( CGImageGetWidth(ImgRef), CGImageGetHeight(ImgRef), CGImageGetBitsPerComponent(ImgRef), CGImageGetBitsPerPixel(ImgRef), CGImageGetBytesPerRow(ImgRef), CGImageGetColorSpace(ImgRef), CGImageGetBitmapInfo(ImgRef), DataProv, 0, CGImageGetShouldInterpolate(ImgRef), CGImageGetRenderingIntent(ImgRef) ) ; UIImage *SnapShot = [[UIImage alloc] initWithCGImage:NewImg] ; char filename[260] ; // 画像を tga で保存 sprintf(filename,"/Documents/emoji%d_%d.tga",HighReso ? 4 : 3,page) ; ImageSaveTag(filename,SnapShot) ; [SnapShot release] ; UIGraphicsEndImageContext() ; }