OSDN Git Service

add function to find color on picture's edge
authorCary Clark <cary@android.com>
Thu, 28 Oct 2010 21:29:48 +0000 (17:29 -0400)
committerCary Clark <cary@android.com>
Mon, 1 Nov 2010 21:31:41 +0000 (17:31 -0400)
bug:3065048
Change-Id: I18ef06a4b9ac3bef077f08efd738958bd5abaafe

WebCore/platform/graphics/android/BaseLayerAndroid.cpp
WebCore/platform/graphics/android/BaseLayerAndroid.h

index f91a3e7..c043edb 100644 (file)
@@ -238,4 +238,30 @@ bool BaseLayerAndroid::drawGL(IntRect& viewRect, SkRect& visibleRect,
     return ret;
 }
 
+SkColor BaseLayerAndroid::getColor(const SkIRect& rect)
+{
+    SkBitmap sample, pixel;
+    SkCanvas canvas;
+    sample.setConfig(SkBitmap::kARGB_8888_Config, rect.width(), rect.height());
+    sample.allocPixels();
+    canvas.setBitmapDevice(sample);
+    canvas.save();
+    canvas.translate(-rect.fLeft, -rect.fTop);
+    draw(&canvas);
+    canvas.restore();
+    pixel.setConfig(SkBitmap::kARGB_8888_Config, 1, 1);
+    pixel.allocPixels();
+    canvas.setBitmapDevice(pixel);
+    SkPaint paint;
+    paint.setFlags(SkPaint::kFilterBitmap_Flag);
+    canvas.scale(SkScalarInvert(SkIntToScalar(rect.width())),
+        SkScalarInvert(SkIntToScalar(rect.height())));
+    canvas.drawBitmap(sample, 0, 0, &paint);
+    pixel.lockPixels();
+    uint32_t* colorAddr = pixel.getAddr32(0, 0);
+    SkColor result = (SkColor) *colorAddr;
+    pixel.unlockPixels();
+    return result;
+}
+
 } // namespace WebCore
index 73804a1..66bf119 100644 (file)
@@ -56,6 +56,8 @@ public:
     bool drawGL(IntRect& rect, SkRect& viewport,
                 float scale, SkColor color = SK_ColorWHITE);
 
+    SkColor getColor(const SkIRect& rect);
+
 private:
 #if USE(ACCELERATED_COMPOSITING)
     bool drawBasePictureInGL(SkRect& viewport, float scale);