1

当我以这种方式加载 BMP 图像时:

NSData * pImageData = [[NSData alloc] initWithBytesNoCopy:pBuffer length:dwSize freeWhenDone:NO];
UIImage * pLoaded = [[UIImage alloc] initWithData:pImageData];
[pImageData release];

并尝试使用 Quartz2D 显示该图像:

CGImageRef cgImage = [pLoaded CGImage];
CGContextSaveGState(context);
CGContextTranslateCTM(context, x, y*2 + h);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextDrawImage(context, CGRectMake(x, y, w, h), cgImage);
CGContextRestoreGState(context);

图像显示为黑色矩形,或者有时显示但不完全。当我在 initWithData 后睡眠 1 秒时,图像正确显示。

是否有 UIKit/Quartz2D API 方法来等待图像初始化完成?

4

2 回答 2

0

您可以使用@synchronizationdispatch排队等待图像下载完成。

于 2012-07-09T17:41:43.283 回答
0

当我使用时一切正常:

NSData * pImageData = [[NSData alloc] initWithBytes:pBuffer length:dwSize];

代替:

NSData * pImageData = [[NSData alloc] initWithBytesNoCopy:pBuffer length:dwSize freeWhenDone:NO];

感谢 phix23。

于 2012-07-10T08:55:33.450 回答