Home | History | Annotate | Download | only in image
      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
      3 // found in the LICENSE file.
      4 
      5 #import <CoreGraphics/CoreGraphics.h>
      6 #import <UIKit/UIKit.h>
      7 
      8 #include "base/mac/scoped_cftyperef.h"
      9 #include "skia/ext/skia_utils_ios.h"
     10 #include "ui/gfx/image/image_unittest_util.h"
     11 
     12 namespace gfx {
     13 namespace test {
     14 
     15 SkColor GetPlatformImageColor(PlatformImage image, int x, int y) {
     16   // Start by extracting the target pixel into a 1x1 CGImage.
     17   base::ScopedCFTypeRef<CGImageRef> pixel_image(
     18       CGImageCreateWithImageInRect(image.CGImage, CGRectMake(x, y, 1, 1)));
     19 
     20   // Draw that pixel into a 1x1 bitmap context.
     21   base::ScopedCFTypeRef<CGColorSpaceRef> color_space(
     22       CGColorSpaceCreateDeviceRGB());
     23   base::ScopedCFTypeRef<CGContextRef> bitmap_context(CGBitmapContextCreate(
     24       /*data=*/ NULL,
     25       /*width=*/ 1,
     26       /*height=*/ 1,
     27       /*bitsPerComponent=*/ 8,
     28       /*bytesPerRow=*/ 4,
     29       color_space,
     30       kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Host));
     31   CGContextDrawImage(bitmap_context, CGRectMake(0, 0, 1, 1), pixel_image);
     32 
     33   // The CGBitmapContext has the same memory layout as SkColor, so we can just
     34   // read an SkColor straight out of the context.
     35   SkColor* data =
     36       reinterpret_cast<SkColor*>(CGBitmapContextGetData(bitmap_context));
     37   return *data;
     38 }
     39 
     40 }  // namespace test
     41 }  // namespace gfx
     42