0

とを使用しRGBAて画面にデータを描画しています。すでに'を作成してそこにデータを配置した場所で(、...)を使用して作成しようとすると、これは問題なく機能します。CGBitmapContextCreateCGContextDrawImagebitmapcontextCGBitmapContextCreatepixelBuffermallocpixelBuffer

ただし、Core Graphicsで独自のメモリを管理したいので、に渡しNULLてからCGBitmapContextCreate、を呼び出して使用するメモリブロックへのポインタを取得し、を使用してバッファを前述のブロックにCGBitmapContextGetDataコピーします。しかし、私は失敗します。以下の私のコードをご覧ください。私が間違っていることについて何か考えはありますか?RGBAmemcpymemcpy

gtx = CGBitmapContextCreate(NULL, screenWidth, screenHeight, bitsPerComponent, bytesPerRow, colorSpace, kCGImageAlphaNoneSkipLast);
void *data = CGBitmapContextGetData(gtx);
memcpy(data, pixelBuffer, area*componentsPerPixel);
CGContextRef currentContext = UIGraphicsGetCurrentContext();
CGImageRef image = CGBitmapContextCreateImage(gtx);
CGContextTranslateCTM(currentContext, 0, screenHeight);
CGContextScaleCTM(currentContext, 1.0, -1.0);
CGContextDrawImage(currentContext, currentSubrect, image);
4

1 に答える 1

0

私のすべての調査に基づいて、 drawrect を使用して頻繁に/繰り返し描画することは悪い考えであるため、この他のSOの質問への回答で提案されているように、UIImageViewベースの描画に移行することにしました

UIImageView が drawrect よりも効率的である理由についての別の SO 回答を次に示します。

上記に基づいて、現在 drawrect の代わりに UIImageView を使用しており、描画パフォーマンスが向上しています。

于 2012-10-05T17:44:15.477 に答える