я масштабирую и обрезаю UIImage
, и я хочу иметь возможность делать это в блоке, который является потокобезопасным. Я не смог найти в документации, является ли UIImageJPEGRepresentation
потокобезопасным.
В следующем коде я обрезаю и масштабирую CGImage
, затем создаю UIImage
] и получите UIImageJPEGRepresentation
. Конечная цель этого блока - получить NSData *
из масштабированной / обрезанной версии.
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
CGImageRef imageRef = photo.CGImage;
CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(imageRef);
CGColorSpaceRef colorSpaceInfo = CGImageGetColorSpace(imageRef);
CGContextRef bitmap;
if (photo.imageOrientation == UIImageOrientationUp || photo.imageOrientation == UIImageOrientationDown) {
bitmap = CGBitmapContextCreate(NULL, kFINAL_WIDTH, kFINAL_HEIGHT, CGImageGetBitsPerComponent(imageRef), 0, colorSpaceInfo, bitmapInfo);
} else {
bitmap = CGBitmapContextCreate(NULL, kFINAL_HEIGHT, kFINAL_WIDTH, CGImageGetBitsPerComponent(imageRef), 0, colorSpaceInfo, bitmapInfo);
}
CGContextSetInterpolationQuality(bitmap, kCGInterpolationHigh);
CGContextDrawImage(bitmap, drawRect, imageRef);
CGImageRef ref = CGBitmapContextCreateImage(bitmap);
NSData *finalData = UIImageJPEGRepresentation([UIImage imageWithCGImage:ref], 1.0);
CGContextRelease(bitmap);
CGImageRelease(ref);
dispatch_async(dispatch_get_main_queue(), ^{
[self.delegate sendNSDataBack:finalData];
});
});
Я попытался получить NSData с помощью CGDataProviderRef, но когда я наконец получил NSData, поместил его в UIImage в UIImageView ничего не отображал.
Итак, нижний вопрос. Могу ли я выполнить [UIImage imageWithData:]
и UIImageJPEGRepresentation
в другом потоке в блоке, использующем GCD?