2

CGImageを取得し、後で処理するためにそのデータをバッファーにコピーしようとしています。以下のコードは私がこれまでに持っているものですが、私が気に入らないことが1つあります。それは、画像データを2回コピーすることです。imgDataの呼び出しにCGDataProviderCopyData()1回ずつ。:getBytes:length画像データをバッファに直接コピーしてステップを切り取る方法を見つけることができませんでしたがCGDataProviderCopyData()、方法が必要です...ポインタはありますか?(...しゃれftw)

NSData * imgData =(NSData *)(CGDataProviderCopyData(CGImageGetDataProvider(myCGImageRef)));

CGImageRelease(myCGImageRef);

//「mybuff」と呼ばれる使用可能なバッファへの以前に定義されたポインタを持っています
[imgData getBytes:mybuff length:[imgData length]];
4

2 に答える 2

1

この回答を参照してください: CGDataProviderCopyData()は実際にバイトをコピーしますか?それともポインタだけですか?

CGDataProviderの背後にあるバッファーへの直接アクセスはプライベートAPIに制限されているようです。

于 2010-04-30T18:07:43.560 に答える
0

計測器を使って測定するときにパフォーマンスの問題が見られない限り、2回コピーすることは大きな問題ではないと思います。mybuffの代わりに、CFDataRefimgDataをいつでも直接保存できます。

編集
私はこの種のコードについて話している:
あなたのクラスインターフェースに配列を追加する:

NSMutableArray *images;

init:メソッド:配列を作成します:

images = [[NSMutableArray alloc] init];

そしてdeallocを持っています。

-(void)dealloc{
    [images release];
}

そして、各画像を保存するコードでは、次のようになります。

CGDataRef imageDataRef = CGDataProviderCopyData(CGImageGetDataProvider(myCGImageRef)));
[images addObject: (NSData*)imageDataRef];
CGRelease(imageDataRef);
于 2010-04-29T20:53:32.327 に答える