CFRelease(data);
CFRelease(source);
- return status==kCGImageStatusIncomplete;
+ return status==kCGImageStatusIncomplete || status==kCGImageStatusReadingHeader;
}
void QuartzLoader::load(Image::Data &data)
{
CGImageRef image = CGImageSourceCreateImageAtIndex(priv->source, 0, 0);
+ if(!image)
+ throw bad_image_data("null image");
try
{
{
if(alpha==kCGImageAlphaLast)
data.fmt = RGBA;
- else if(alpha==kCGImageAlphaNone || alpha==kCGImageAlphaNoneSkipFirst || alpha==kCGImageAlphaNoneSkipLast)
+ else if(alpha==kCGImageAlphaNoneSkipLast)
+ data.fmt = RGBX;
+ else if(alpha==kCGImageAlphaNone || alpha==kCGImageAlphaNoneSkipFirst)
data.fmt = RGB;
else
throw unsupported_image_format("unknown alpha mode");
CFRelease(image);
- if(alpha==kCGImageAlphaNoneSkipFirst || alpha==kCGImageAlphaNoneSkipLast)
+ if(alpha==kCGImageAlphaNoneSkipFirst)
{
const char *src = data.data;
if(alpha==kCGImageAlphaNoneSkipFirst)