diff --git a/gm/cgm.c b/gm/cgm.c
index cddb2c1..5a20a7d 100644
--- a/gm/cgm.c
+++ b/gm/cgm.c
@@ -9,6 +9,8 @@
 // DO NOT USE -- FOR INTERNAL TESTING ONLY
 
 #include "sk_canvas.h"
+#include "sk_data.h"
+#include "sk_image.h"
 #include "sk_paint.h"
 #include "sk_shader.h"
 #include "sk_surface.h"
@@ -24,25 +26,49 @@
     return sk_shader_new_linear_gradient(pts, colors, NULL, 2, CLAMP_SK_SHADER_TILEMODE, NULL);
 }
 
-void sk_test_c_api(sk_canvas_t* canvas) {
+static void do_draw(sk_canvas_t* canvas) {
     sk_paint_t* paint = sk_paint_new();
     sk_paint_set_antialias(paint, true);
-
+    
     sk_paint_set_color(paint, 0xFFFFFFFF);
     sk_canvas_draw_paint(canvas, paint);
-
+    
     sk_rect_t r = { 10, 10, W - 10, H - 10 };
-
+    
     sk_paint_set_color(paint, 0xFFFF0000);
     sk_canvas_draw_rect(canvas, &r, paint);
-
+    
     sk_shader_t* shader = make_shader();
     sk_paint_set_shader(paint, shader);
     sk_shader_unref(shader);
-
+    
     sk_canvas_draw_oval(canvas, &r, paint);
-
+    
     sk_paint_delete(paint);
 }
 
+void sk_test_c_api(sk_canvas_t* canvas) {
+    do_draw(canvas);
+
+    sk_imageinfo_t info = {
+        W, H, sk_colortype_get_default_8888(), OPAQUE_SK_ALPHATYPE
+    };
+    sk_surface_t* surf = sk_surface_new_raster(&info);
+    do_draw(sk_surface_get_canvas(surf));
+
+    sk_image_t* img0 = sk_surface_new_image_snapshot(surf);
+    sk_surface_unref(surf);
+
+    sk_canvas_draw_image(canvas, img0, W + 10, 10, NULL);
+
+    sk_data_t* data = sk_image_encode(img0);
+    sk_image_unref(img0);
+
+    sk_image_t* img1 = sk_image_new_from_data(data);
+    sk_data_unref(data);
+
+    sk_canvas_draw_image(canvas, img1, W/2, H/2, NULL);
+    sk_image_unref(img1);
+}
+
 
diff --git a/include/c/sk_data.h b/include/c/sk_data.h
new file mode 100644
index 0000000..90863ee
--- /dev/null
+++ b/include/c/sk_data.h
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2014 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+// EXPERIMENTAL EXPERIMENTAL EXPERIMENTAL EXPERIMENTAL
+// DO NOT USE -- FOR INTERNAL TESTING ONLY
+
+#ifndef sk_data_DEFINED
+#define sk_data_DEFINED
+
+#include "sk_types.h"
+
+SK_C_PLUS_PLUS_BEGIN_GUARD
+
+sk_data_t* sk_data_new_empty();
+sk_data_t* sk_data_new_with_copy(const void* src, size_t length);
+sk_data_t* sk_data_new_from_malloc(const void* memory, size_t length);
+sk_data_t* sk_data_new_subset(const sk_data_t* src, size_t offset, size_t length);
+
+void sk_data_ref(const sk_data_t*);
+void sk_data_unref(const sk_data_t*);
+
+size_t sk_data_get_size(const sk_data_t*);
+const void* sk_data_get_data(const sk_data_t*);
+
+SK_C_PLUS_PLUS_END_GUARD
+
+#endif
diff --git a/include/c/sk_image.h b/include/c/sk_image.h
index 2449563..34682c7 100644
--- a/include/c/sk_image.h
+++ b/include/c/sk_image.h
@@ -20,6 +20,18 @@
  *  Balance with a call to sk_image_unref().
  */
 sk_image_t* sk_image_new_raster_copy(const sk_imageinfo_t*, const void* pixels, size_t rowBytes);
+
+/**
+ *  If the specified data can be interpreted as a compressed image (e.g. PNG or JPEG) then this
+ *  returns an image. If the encoded data is not supported, returns NULL.
+ *
+ *  On success, the encoded data may be processed immediately, or it may be ref()'d for later
+ *  use.
+ */
+sk_image_t* sk_image_new_from_data(const sk_data_t* encoded);
+
+sk_data_t* sk_image_encode(const sk_image_t*);
+
 void sk_image_ref(const sk_image_t*);
 void sk_image_unref(const sk_image_t*);
 int sk_image_get_width(const sk_image_t*);
diff --git a/include/c/sk_types.h b/include/c/sk_types.h
index 67a29dc..dc530f3 100644
--- a/include/c/sk_types.h
+++ b/include/c/sk_types.h
@@ -79,12 +79,13 @@
 } sk_matrix_t;
 
 typedef struct sk_canvas_t sk_canvas_t;
+typedef struct sk_data_t sk_data_t;
 typedef struct sk_image_t sk_image_t;
 typedef struct sk_maskfilter_t sk_maskfilter_t;
 typedef struct sk_paint_t sk_paint_t;
+typedef struct sk_path_t sk_path_t;
 typedef struct sk_picture_t sk_picture_t;
 typedef struct sk_picture_recorder_t sk_picture_recorder_t;
-typedef struct sk_path_t sk_path_t;
 typedef struct sk_shader_t sk_shader_t;
 typedef struct sk_surface_t sk_surface_t;
 
diff --git a/src/c/sk_surface.cpp b/src/c/sk_surface.cpp
index 6653a29..59c810a 100644
--- a/src/c/sk_surface.cpp
+++ b/src/c/sk_surface.cpp
@@ -6,12 +6,14 @@
  */
 
 #include "sk_canvas.h"
+#include "sk_data.h"
 #include "sk_image.h"
 #include "sk_paint.h"
 #include "sk_path.h"
 #include "sk_surface.h"
 
 #include "SkCanvas.h"
+#include "SkData.h"
 #include "SkImage.h"
 #include "SkMaskFilter.h"
 #include "SkMatrix.h"
@@ -119,6 +121,14 @@
     return false;
 }
 
+static SkData* AsData(const sk_data_t* cdata) {
+    return reinterpret_cast<SkData*>(const_cast<sk_data_t*>(cdata));
+}
+
+static sk_data_t* ToData(SkData* data) {
+    return reinterpret_cast<sk_data_t*>(data);
+}
+
 static sk_rect_t ToRect(const SkRect& rect) {
     return reinterpret_cast<const sk_rect_t&>(rect);
 }
@@ -143,6 +153,10 @@
     return reinterpret_cast<const SkImage*>(cimage);
 }
 
+static sk_image_t* ToImage(SkImage* cimage) {
+    return reinterpret_cast<sk_image_t*>(cimage);
+}
+
 static const SkPaint& AsPaint(const sk_paint_t& cpaint) {
     return reinterpret_cast<const SkPaint&>(cpaint);
 }
@@ -216,6 +230,21 @@
     return (sk_image_t*)SkImage::NewRasterCopy(info, pixels, rowBytes);
 }
 
+#include "SkDecodingImageGenerator.h"
+
+sk_image_t* sk_image_new_from_data(const sk_data_t* cdata) {
+    SkImageGenerator* gen = SkDecodingImageGenerator::Create(AsData(cdata),
+                                                             SkDecodingImageGenerator::Options());
+    if (NULL == gen) {
+        return NULL;
+    }
+    return ToImage(SkImage::NewFromGenerator(gen));
+}
+
+sk_data_t* sk_image_encode(const sk_image_t* cimage) {
+    return ToData(AsImage(cimage)->encode());
+}
+
 void sk_image_ref(const sk_image_t* cimage) {
     AsImage(cimage)->ref();
 }
@@ -591,6 +620,36 @@
 }
 
 ///////////////////////////////////////////////////////////////////////////////////////////
+
+sk_data_t* sk_data_new_with_copy(const void* src, size_t length) {
+    return ToData(SkData::NewWithCopy(src, length));
+}
+
+sk_data_t* sk_data_new_from_malloc(const void* memory, size_t length) {
+    return ToData(SkData::NewFromMalloc(memory, length));
+}
+
+sk_data_t* sk_data_new_subset(const sk_data_t* csrc, size_t offset, size_t length) {
+    return ToData(SkData::NewSubset(AsData(csrc), offset, length));
+}
+
+void sk_data_ref(const sk_data_t* cdata) {
+    SkSafeRef(AsData(cdata));
+}
+
+void sk_data_unref(const sk_data_t* cdata) {
+    SkSafeUnref(AsData(cdata));
+}
+
+size_t sk_data_get_size(const sk_data_t* cdata) {
+    return AsData(cdata)->size();
+}
+
+const void* sk_data_get_data(const sk_data_t* cdata) {
+    return AsData(cdata)->data();
+}
+
+///////////////////////////////////////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////////////////////////////////////
 
 void sk_test_capi(SkCanvas* canvas) {
