2009-08-11 5 views
2

たとえば、私はUIImage(必要に応じてCGImage、CGLayerなどを取得できます)を持っています。赤いピクセル(1,0,0)をすべて青(0、0 、1)。UIImage(またはその派生物)では、どのように1つの色を別の色に置き換えることができますか?

私はどのピクセルがターゲットカラー(this SO question & answer参照)であるかを知るコードを持っていますが、rawDataで適切な値を代用できますが、(a)rawDataバッファからUIImageを取得する方法がわかりません。 (b)私は自動的に私のためにこのすべてを行う内蔵機能が不足しているように思えます。

ありがとうございます!

答えて

9

私たちはrawBitsバッファー(元の質問のリンクを参照)に入れてから、バッファー内のデータを好きなように並べ替えました(つまり、すべての4番目のバイトをすべて0に設定します) 、テストとして)、今やtwiddledデータを表す新しいUIImageを入手する必要があります。

答えはErica Sudan's iPhone Cookbook、第7章(画像)、例12(ビットマップ)で見つかりました。今後のサイトspelunkersに便利です

+ (UIImage *) imageWithBits: (unsigned char *) bits withSize: (CGSize) 
size 
{ 
    // Create a color space 
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
    if (colorSpace == NULL) 
    { 
     fprintf(stderr, "Error allocating color space\n"); 
     free(bits); 
     return nil; 
    } 

    CGContextRef context = CGBitmapContextCreate (bits, size.width, 
size.height, 8, size.width * 4, colorSpace, 
kCGImageAlphaPremultipliedFirst); 
    if (context == NULL) 
    { 
     fprintf (stderr, "Error: Context not created!"); 
     free (bits); 
     CGColorSpaceRelease(colorSpace); 
     return nil; 
    } 

    CGColorSpaceRelease(colorSpace); 
    CGImageRef ref = CGBitmapContextCreateImage(context); 
    free(CGBitmapContextGetData(context)); 
    CGContextRelease(context); 

    UIImage *img = [UIImage imageWithCGImage:ref]; 
    CFRelease(ref); 
    return img; 
} 

希望:関連呼び出しがCGBitmapContextCreate()、および関連するコードがありました!

+1

多くの人がこの種の機能を使用しているわけではありません。 –

関連する問題