aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/utils
diff options
context:
space:
mode:
authorGravatar reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2011-01-05 15:49:43 +0000
committerGravatar reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2011-01-05 15:49:43 +0000
commit62f465940d57139dfd83e2aef67081017a232417 (patch)
tree9beabfd256193b0a4ab694eb4ac265ecc942ad37 /src/utils
parent4f809514799ef2e160b4f03944e0fb6d278f7547 (diff)
rev. 637 changed the settings for premultiplied on the info parameter. This
change incorrectly assumed that all cases wanted premultipled-last, which was incorrect. Reverting to the previous values. git-svn-id: http://skia.googlecode.com/svn/trunk@673 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/utils')
-rw-r--r--src/utils/mac/SkCreateCGImageRef.cpp18
1 files changed, 7 insertions, 11 deletions
diff --git a/src/utils/mac/SkCreateCGImageRef.cpp b/src/utils/mac/SkCreateCGImageRef.cpp
index dea443c13c..a1d7cc4eef 100644
--- a/src/utils/mac/SkCreateCGImageRef.cpp
+++ b/src/utils/mac/SkCreateCGImageRef.cpp
@@ -24,19 +24,19 @@ static SkBitmap* prepareForImageRef(const SkBitmap& bm,
*bitsPerComponent = 8;
#if defined(SK_CPU_LENDIAN) && HAS_ARGB_SHIFTS(24, 0, 8, 16) \
|| defined(SK_CPU_BENDIAN) && HAS_ARGB_SHIFTS(0, 24, 16, 8)
- *info = kCGBitmapByteOrder32Big;
+ *info = kCGBitmapByteOrder32Big | kCGImageAlphaPremultipliedLast;
#elif defined(SK_CPU_LENDIAN) && HAS_ARGB_SHIFTS(24, 16, 8, 0) \
|| defined(SK_CPU_BENDIAN) && HAS_ARGB_SHIFTS(24, 16, 8, 0)
// Matches the CGBitmapInfo that Apple recommends for best
// performance, used by google chrome.
- *info = kCGBitmapByteOrder32Little;
+ *info = kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst;
#else
// ...add more formats as required...
#warning Cannot convert SkBitmap to CGImageRef with these shiftmasks. \
This will probably not work.
// Legacy behavior. Perhaps turn this into an error at some
// point.
- *info = kCGBitmapByteOrder32Big;
+ *info = kCGBitmapByteOrder32Big | kCGImageAlphaPremultipliedLast;
#endif
break;
#if 0
@@ -54,10 +54,6 @@ static SkBitmap* prepareForImageRef(const SkBitmap& bm,
return NULL;
}
- if (!bm.isOpaque()) {
- *info |= kCGImageAlphaPremultipliedLast;
- }
-
SkBitmap* copy;
if (upscaleTo32) {
copy = new SkBitmap;
@@ -116,15 +112,15 @@ void SkCGDrawBitmap(CGContextRef cg, const SkBitmap& bm, float x, float y) {
if (img) {
CGRect r = CGRectMake(0, 0, bm.width(), bm.height());
-
+
CGContextSaveGState(cg);
CGContextTranslateCTM(cg, x, r.size.height + y);
CGContextScaleCTM(cg, 1, -1);
-
+
CGContextDrawImage(cg, r, img);
-
+
CGContextRestoreGState(cg);
-
+
CGImageRelease(img);
}
}