Update the default force decode value, partial revert ff6b3b9bb5
Now it's will mark as false for not byte-aligned CGImage
This commit is contained in:
parent
b4559994ea
commit
06589dbcc4
|
@ -15,6 +15,12 @@
|
||||||
|
|
||||||
/**
|
/**
|
||||||
A bool value indicating whether the image has already been decoded. This can help to avoid extra force decode.
|
A bool value indicating whether the image has already been decoded. This can help to avoid extra force decode.
|
||||||
|
Force decode is used for 2 cases:
|
||||||
|
-- 1. for ImageIO created image (via `CGImageCreateWithImageSource` SPI), it's lazy and we trigger the decode before rendering
|
||||||
|
-- 2. for non-ImageIO created image (via `CGImageCreate` API), we can ensure it's alignment is suitable to render on screen without copy by CoreAnimation
|
||||||
|
@note For coder plugin developer, always use the SDImageCoderHelper's `colorSpaceGetDeviceRGB`/`preferredByteAlignment`/`preferredBitmapInfo:` to create CGImage.
|
||||||
|
@note For more information why force decode, see: https://github.com/path/FastImageCache#byte-alignment
|
||||||
|
@note The defaults value is calculated based on UIImage's CGImage status. Do not assume it's always work as expected. Set the value to `true` if you don't need force decode
|
||||||
*/
|
*/
|
||||||
@property (nonatomic, assign) BOOL sd_isDecoded;
|
@property (nonatomic, assign) BOOL sd_isDecoded;
|
||||||
|
|
||||||
|
|
|
@ -20,19 +20,26 @@
|
||||||
} else {
|
} else {
|
||||||
// Assume only CGImage based can use lazy decoding
|
// Assume only CGImage based can use lazy decoding
|
||||||
CGImageRef cgImage = self.CGImage;
|
CGImageRef cgImage = self.CGImage;
|
||||||
if (cgImage) {
|
if (!cgImage) {
|
||||||
CFStringRef uttype = CGImageGetUTType(self.CGImage);
|
// Assume others as non-decoded
|
||||||
if (uttype) {
|
return NO;
|
||||||
// Only ImageIO can set `com.apple.ImageIO.imageSourceTypeIdentifier`
|
}
|
||||||
return NO;
|
CFStringRef uttype = CGImageGetUTType(self.CGImage);
|
||||||
} else {
|
if (uttype) {
|
||||||
// Thumbnail or CGBitmapContext drawn image
|
// Only ImageIO can set `com.apple.ImageIO.imageSourceTypeIdentifier`
|
||||||
|
return NO;
|
||||||
|
} else {
|
||||||
|
// Now, let's check if the CGImage is byte-aligned (not aligned will cause extra copy)
|
||||||
|
size_t bytesPerRow = CGImageGetBytesPerRow(cgImage);
|
||||||
|
if (SDByteAlign(bytesPerRow, [SDImageCoderHelper preferredByteAlignment]) == bytesPerRow) {
|
||||||
|
// byte aligned, OK
|
||||||
return YES;
|
return YES;
|
||||||
|
} else {
|
||||||
|
// not aligned, still need force-decode
|
||||||
|
return NO;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Assume others as non-decoded
|
|
||||||
return NO;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)setSd_isDecoded:(BOOL)sd_isDecoded {
|
- (void)setSd_isDecoded:(BOOL)sd_isDecoded {
|
||||||
|
|
Loading…
Reference in New Issue