文字列をアルファ付きの画像として保持する
文字列をキャッシュしたい場合なんかに有効かも。
UIImage* CreateImageFromString(NSString* str) { // この辺は引数にするなり何なりで適当に。 UIFont* font = [UIFont systemFontOfSize:12]; float r, g, b, a; r = g = b = a = 1.0; CGSize size = [str sizeWithFont:font]; int width = size.width; int height = size.height; int pitch = width * 4; CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); // 第一引数を NULL にすると、適切なサイズの内部イメージを自動で作ってくれる CGContextRef context = CGBitmapContextCreate( NULL, width, height, 8, pitch, colorSpace, kCGImageAlphaPremultipliedLast); CGColorSpaceRelease(colorSpace); // 文字列を描画 UIGraphicsPushContext(context); CGContextSetRGBFillColor(context, r, g, b, a); [str drawAtPoint:CGPointMake(0, 0) withFont:font]; UIGraphicsPopContext(); // イメージを取り出す CGImageRef image = CGBitmapContextCreateImage(context); CGContextRelease(context); // CGImage だけあればいいならここで image を返せばいい //(呼び出し側が解放の責任を持つことになるけど) // 今回は UIImage を生成して返す UIImage* uiImage = [UIImage imageWithCGImage:image]; CGImageRelease(image); return uiImage; }
作るコストはかなり高い(3個ぐらいイメージを作ってる)ので注意。
ただ、画像の描画は文字描画に比べて遥かに速いので、文字列やフォント、色が決まっていて、なおかつメモリに余裕があるなら描画時にキャッシュしてやると幸せになれるかもしれません。