]> git.tdb.fi Git - libs/gui.git/blobdiff - source/graphics/quartz/quartzloader.cpp
Add pixel formats with a padding component
[libs/gui.git] / source / graphics / quartz / quartzloader.cpp
index 23f7abbed319031ff0e3b23f99b096bf9159174d..aa11daaedff1fe6def85092da71a16501f55b272 100644 (file)
@@ -93,6 +93,7 @@ void QuartzLoader::load(Image::Data &data)
        {
                data.width = CGImageGetWidth(image);
                data.height = CGImageGetHeight(image);
+               data.stride = CGImageGetBytesPerRow(image);
 
                CGColorSpaceRef color = CGImageGetColorSpace(image);
                CGColorSpaceModel model = CGColorSpaceGetModel(color);
@@ -101,7 +102,9 @@ void QuartzLoader::load(Image::Data &data)
                {
                        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");
@@ -109,17 +112,15 @@ void QuartzLoader::load(Image::Data &data)
                else
                        throw unsupported_image_format("unknown colorspace");
 
-               unsigned bytes_per_pixel = (CGImageGetBitsPerPixel(image)+7)/8;
-
                CGDataProviderRef dp = CGImageGetDataProvider(image);
                CFDataRef image_data = CGDataProviderCopyData(dp);
-               data.data = new char[data.width*data.height*bytes_per_pixel];
+               data.data = new char[data.height*data.stride];
                CFDataGetBytes(image_data, CFRangeMake(0, CFDataGetLength(image_data)), reinterpret_cast<UInt8 *>(data.data));
                CFRelease(image_data);
 
                CFRelease(image);
 
-               if(alpha==kCGImageAlphaNoneSkipFirst || alpha==kCGImageAlphaNoneSkipLast)
+               if(alpha==kCGImageAlphaNoneSkipFirst)
                {
                        const char *src = data.data;
                        if(alpha==kCGImageAlphaNoneSkipFirst)