Enlightenment CVS committal

Author  : raster
Project : e17
Module  : libs/evas

Dir     : e17/libs/evas/src/lib/canvas


Modified Files:
        evas_object_image.c 


Log Message:


colorspace stuff in cvs.

===================================================================
RCS file: /cvs/e/e17/libs/evas/src/lib/canvas/evas_object_image.c,v
retrieving revision 1.63
retrieving revision 1.64
diff -u -3 -r1.63 -r1.64
--- evas_object_image.c 1 May 2008 00:09:39 -0000       1.63
+++ evas_object_image.c 19 May 2008 03:13:16 -0000      1.64
@@ -67,6 +67,8 @@
 static int evas_object_image_was_opaque(Evas_Object *obj);
 static int evas_object_image_is_inside(Evas_Object *obj, Evas_Coord x, 
Evas_Coord y);
 
+static void *evas_object_image_data_convert_internal(Evas_Object_Image *o, 
void *data, Evas_Colorspace to_cspace);
+
 static const Evas_Object_Func object_func =
 {
    /* methods (compulsory) */
@@ -706,6 +708,46 @@
  */
 
 /**
+ * Converts the raw image data of the given image object to the
+ * specified colorspace.
+ *
+ * Note that this function does not modify the raw image data.
+ * If the requested colorspace is the same as the image colorspace
+ * nothing is done and NULL is returned. You should use
+ * evas_object_image_colorspace_get() to check the current image
+ * colorspace.
+ *
+ * See @ref evas_object_image_colorspace_get.
+ *
+ * @param obj The given image object.
+ * @param to_cspace The colorspace to which the image raw data will be 
converted.
+ * @return data A newly allocated data in the format specified by to_cspace.
+ * @ingroup Evas_Object_Image_Data
+ */
+EAPI void *
+evas_object_image_data_convert(Evas_Object *obj, Evas_Colorspace to_cspace)
+{
+   Evas_Object_Image *o;
+   DATA32 *data;
+
+   MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
+   return NULL;
+   MAGIC_CHECK_END();
+   o = (Evas_Object_Image *)(obj->object_data);
+   MAGIC_CHECK(o, Evas_Object_Image, MAGIC_OBJ_IMAGE);
+   return NULL;
+   MAGIC_CHECK_END();
+   if (!o->engine_data) return NULL;
+   if (!o->cur.cspace == to_cspace) return NULL;
+   data = NULL;
+   o->engine_data = 
obj->layer->evas->engine.func->image_data_get(obj->layer->evas->engine.data.output,
+                                                                 
o->engine_data,
+                                                                 0,
+                                                                 &data);
+   return evas_object_image_data_convert_internal(o, data, to_cspace);
+}
+
+/**
  * Sets the raw image data of the given image object.
  *
  * Note that the raw data must be of the same size and colorspace
@@ -1127,7 +1169,19 @@
                                             EVAS_COLORSPACE_ARGB8888);
    if (im)
      {
-        ok = evas_common_save_image_to_file(im, file, key, quality, compress);
+       if (o->cur.cspace == EVAS_COLORSPACE_ARGB8888)
+         im->image.data = data;
+       else
+         im->image.data = evas_object_image_data_convert_internal(o,
+                                                                  data,
+                                                                  
EVAS_COLORSPACE_ARGB8888);
+       if (im->image.data)
+         {
+            ok = evas_common_save_image_to_file(im, file, key, quality, 
compress);
+
+            if (o->cur.cspace != EVAS_COLORSPACE_ARGB8888)
+              free(im->image.data);
+         }
 
        evas_cache_image_drop(&im->cache_entry);
      }
@@ -2372,4 +2426,37 @@
      }
 
    return (a != 0);
+}
+
+static void *
+evas_object_image_data_convert_internal(Evas_Object_Image *o, void *data, 
Evas_Colorspace to_cspace)
+{
+   void *out = NULL;
+
+   if (!data)
+     return NULL;
+
+   switch (o->cur.cspace)
+     {
+       case EVAS_COLORSPACE_ARGB8888:
+         out = evas_common_convert_argb8888_to(data,
+                                               o->cur.image.w,
+                                               o->cur.image.h,
+                                               o->cur.image.stride,
+                                               o->cur.has_alpha,
+                                               to_cspace);
+         break;
+       case EVAS_COLORSPACE_RGB565_A5P:
+         out = evas_common_convert_rgb565_a5p_to(data,
+                                                 o->cur.image.w,
+                                                 o->cur.image.h,
+                                                 o->cur.image.stride,
+                                                 o->cur.has_alpha,
+                                                 to_cspace);
+         break;
+       default:
+         break;
+     }
+
+   return out;
 }



-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft 
Defy all challenges. Microsoft(R) Visual Studio 2008. 
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to