Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(48)

Side by Side Diff: skia/ext/skia_utils_ios.mm

Issue 16917011: mac: Replace base::mac::ScopedCFTypeRef with base::ScopedCFTypeRef. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: with fixed off-by-1 in git-clang-format Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « rlz/mac/lib/machine_id_mac.cc ('k') | skia/ext/skia_utils_mac.mm » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "skia/ext/skia_utils_ios.h" 5 #include "skia/ext/skia_utils_ios.h"
6 6
7 #import <ImageIO/ImageIO.h> 7 #import <ImageIO/ImageIO.h>
8 #import <UIKit/UIKit.h> 8 #import <UIKit/UIKit.h>
9 9
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 13 matching lines...) Expand all
24 24
25 bitmap.setIsOpaque(is_opaque); 25 bitmap.setIsOpaque(is_opaque);
26 void* data = bitmap.getPixels(); 26 void* data = bitmap.getPixels();
27 27
28 // Allocate a bitmap context with 4 components per pixel (BGRA). Apple 28 // Allocate a bitmap context with 4 components per pixel (BGRA). Apple
29 // recommends these flags for improved CG performance. 29 // recommends these flags for improved CG performance.
30 #define HAS_ARGB_SHIFTS(a, r, g, b) \ 30 #define HAS_ARGB_SHIFTS(a, r, g, b) \
31 (SK_A32_SHIFT == (a) && SK_R32_SHIFT == (r) \ 31 (SK_A32_SHIFT == (a) && SK_R32_SHIFT == (r) \
32 && SK_G32_SHIFT == (g) && SK_B32_SHIFT == (b)) 32 && SK_G32_SHIFT == (g) && SK_B32_SHIFT == (b))
33 #if defined(SK_CPU_LENDIAN) && HAS_ARGB_SHIFTS(24, 16, 8, 0) 33 #if defined(SK_CPU_LENDIAN) && HAS_ARGB_SHIFTS(24, 16, 8, 0)
34 base::mac::ScopedCFTypeRef<CGColorSpaceRef> color_space( 34 base::ScopedCFTypeRef<CGColorSpaceRef> color_space(
35 CGColorSpaceCreateDeviceRGB()); 35 CGColorSpaceCreateDeviceRGB());
36 base::mac::ScopedCFTypeRef<CGContextRef> context( 36 base::ScopedCFTypeRef<CGContextRef> context(CGBitmapContextCreate(
37 CGBitmapContextCreate(data, size.width, size.height, 8, size.width*4, 37 data,
38 color_space, 38 size.width,
39 kCGImageAlphaPremultipliedFirst | 39 size.height,
40 kCGBitmapByteOrder32Host)); 40 8,
41 size.width * 4,
42 color_space,
43 kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Host));
41 #else 44 #else
42 #error We require that Skia's and CoreGraphics's recommended \ 45 #error We require that Skia's and CoreGraphics's recommended \
43 image memory layout match. 46 image memory layout match.
44 #endif 47 #endif
45 #undef HAS_ARGB_SHIFTS 48 #undef HAS_ARGB_SHIFTS
46 49
47 DCHECK(context); 50 DCHECK(context);
48 if (!context) 51 if (!context)
49 return bitmap; 52 return bitmap;
50 53
51 CGRect imageRect = CGRectMake(0.0, 0.0, size.width, size.height); 54 CGRect imageRect = CGRectMake(0.0, 0.0, size.width, size.height);
52 CGContextSetBlendMode(context, kCGBlendModeCopy); 55 CGContextSetBlendMode(context, kCGBlendModeCopy);
53 CGContextDrawImage(context, imageRect, image); 56 CGContextDrawImage(context, imageRect, image);
54 57
55 return bitmap; 58 return bitmap;
56 } 59 }
57 60
58 UIImage* SkBitmapToUIImageWithColorSpace(const SkBitmap& skia_bitmap, 61 UIImage* SkBitmapToUIImageWithColorSpace(const SkBitmap& skia_bitmap,
59 CGFloat scale, 62 CGFloat scale,
60 CGColorSpaceRef color_space) { 63 CGColorSpaceRef color_space) {
61 if (skia_bitmap.isNull()) 64 if (skia_bitmap.isNull())
62 return nil; 65 return nil;
63 66
64 // First convert SkBitmap to CGImageRef. 67 // First convert SkBitmap to CGImageRef.
65 base::mac::ScopedCFTypeRef<CGImageRef> cg_image( 68 base::ScopedCFTypeRef<CGImageRef> cg_image(
66 SkCreateCGImageRefWithColorspace(skia_bitmap, color_space)); 69 SkCreateCGImageRefWithColorspace(skia_bitmap, color_space));
67 70
68 // Now convert to UIImage. 71 // Now convert to UIImage.
69 return [UIImage imageWithCGImage:cg_image.get() 72 return [UIImage imageWithCGImage:cg_image.get()
70 scale:scale 73 scale:scale
71 orientation:UIImageOrientationUp]; 74 orientation:UIImageOrientationUp];
72 } 75 }
73 76
74 std::vector<SkBitmap> ImageDataToSkBitmaps(NSData* image_data) { 77 std::vector<SkBitmap> ImageDataToSkBitmaps(NSData* image_data) {
75 DCHECK(image_data); 78 DCHECK(image_data);
76 base::mac::ScopedCFTypeRef<CFDictionaryRef> empty_dictionary( 79 base::ScopedCFTypeRef<CFDictionaryRef> empty_dictionary(
77 CFDictionaryCreate(NULL, NULL, NULL, 0, NULL, NULL)); 80 CFDictionaryCreate(NULL, NULL, NULL, 0, NULL, NULL));
78 std::vector<SkBitmap> frames; 81 std::vector<SkBitmap> frames;
79 82
80 base::mac::ScopedCFTypeRef<CGImageSourceRef> source( 83 base::ScopedCFTypeRef<CGImageSourceRef> source(
81 CGImageSourceCreateWithData((CFDataRef)image_data, empty_dictionary)); 84 CGImageSourceCreateWithData((CFDataRef)image_data, empty_dictionary));
82 85
83 size_t count = CGImageSourceGetCount(source); 86 size_t count = CGImageSourceGetCount(source);
84 for (size_t index = 0; index < count; ++index) { 87 for (size_t index = 0; index < count; ++index) {
85 base::mac::ScopedCFTypeRef<CGImageRef> cg_image( 88 base::ScopedCFTypeRef<CGImageRef> cg_image(
86 CGImageSourceCreateImageAtIndex(source, index, empty_dictionary)); 89 CGImageSourceCreateImageAtIndex(source, index, empty_dictionary));
87 90
88 CGSize size = CGSizeMake(CGImageGetWidth(cg_image), 91 CGSize size = CGSizeMake(CGImageGetWidth(cg_image),
89 CGImageGetHeight(cg_image)); 92 CGImageGetHeight(cg_image));
90 const SkBitmap bitmap = CGImageToSkBitmap(cg_image, size, false); 93 const SkBitmap bitmap = CGImageToSkBitmap(cg_image, size, false);
91 if (!bitmap.empty()) 94 if (!bitmap.empty())
92 frames.push_back(bitmap); 95 frames.push_back(bitmap);
93 } 96 }
94 97
95 DLOG_IF(WARNING, frames.size() != count) << "Only decoded " << frames.size() 98 DLOG_IF(WARNING, frames.size() != count) << "Only decoded " << frames.size()
96 << " frames for " << count << " expected."; 99 << " frames for " << count << " expected.";
97 return frames; 100 return frames;
98 } 101 }
99 102
100 } // namespace gfx 103 } // namespace gfx
OLDNEW
« no previous file with comments | « rlz/mac/lib/machine_id_mac.cc ('k') | skia/ext/skia_utils_mac.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698