2012-04-29 5 views
0

CGContextDrawImageは非常に高価になる可能性があるので、私はピクセルデータを調べている間に与えているデータ量を最小限に抑えようとしています。私は2つの画像と交差点のCGRectを持っている場合、CGContextDrawImageをそれぞれ独立して描画することができますか?その結果、画像の1つの交差を含む2つのCGContextRefが生成されます。ここで2つの画像の交点のみを含むCGContextDrawImage

はあなたが本当にCGBitmapContextをしたい場合を除きさて、あなたがそれらを描画する必要はありません動作しないいくつかのコードですが、私は1枚の画像のために必要なものに近いものでなければならない...

CGImageRef imageRef = [image CGImage]; 
    NSUInteger width = rectIntersect.size.width; 
    NSUInteger height = rectIntersect.size.height; 

    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
    unsigned char *rawData = (unsigned char*) calloc(height * width * 4, sizeof(unsigned char)); 
    NSUInteger bytesPerPixel = 4; 
    NSUInteger bytesPerRow = bytesPerPixel * width; 
    NSUInteger bitsPerComponent = 8; 
    CGContextRef context = CGBitmapContextCreate(rawData, width, height, 
               bitsPerComponent, bytesPerRow, colorSpace, 
               kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big); 
    CGColorSpaceRelease(colorSpace); 

    // rectIntersect down here contains the intersection of the two images... 
    CGContextDrawImage(context, rectIntersect, imageRef); 

答えて

2

それらと一緒に。サブ画像を作成するには、CGImageCreateWithImageInRect()を使用します。これは必ずしもフレームワークに画像データをコピーする必要はありません。元の画像データを参照するだけの場合もあります。だから、それは非常に効率的なことができます。

実際に画像をコンテキストに描画する必要がある場合は、もちろんサブ画像を描画することができます。

+0

私はそれらをCGBitmapContextに描画する理由は、特定の色またはアルファピクセルの座標を保存する必要があるためです。私は実際に描画された結果を画面に表示する必要はありません。 CGBitmapContextなしで元のピクセルデータにアクセスする方法はありますか? –

+2

[テクニカルQ&A QA1509:CGImageオブジェクトからピクセルデータを取得する](https://developer.apple.com/library/mac/#qa/qa1509/_index.html) –

+0

CGImageCreateWithImageInRectは、私が探していたものです。あなたが提供した追加のリンクも私のコードを簡素化するのに役立ちました。ありがとう! –

関連する問題