+static VALUE c_data_get (int argc, VALUE *argv, VALUE self)
+{
+ VALUE read_write = Qfalse;
+ void *data;
+ int w = 0, h = 0;
+
+ GET_OBJ (self, RbEvasObject, e);
+
+ rb_scan_args (argc, argv, "01", &read_write);
+
+ if (NIL_P (read_write))
+ read_write = Qfalse;
+
+ data = evas_object_image_data_get (e->real, read_write == Qtrue);
+ evas_object_image_size_get (e->real, &w, &h);
+
+ return rb_str_new (data, h * w * 4);
+}
+
+static VALUE c_data_set (VALUE self, VALUE data)
+{
+ GET_OBJ (self, RbEvasObject, e);
+
+ evas_object_image_data_set (e->real, StringValuePtr (data));
+
+ return Qnil;
+}
+
+static VALUE c_data_update_add (VALUE self, VALUE x, VALUE y,
+ VALUE w, VALUE h)
+{
+ GET_OBJ (self, RbEvasObject, e);
+
+ evas_object_image_data_update_add (e->real,
+ FIX2INT (x), FIX2INT (y),
+ FIX2INT (w), FIX2INT (h));
+
+ return Qnil;
+}
+