本文针对如何使用Skia库进行JPEG解码做以简单介绍。 一、Skia介绍 Skia 是 Google一个底层的图形、图像、动画、SVG、文本等多方面的图形库,是 Android 中图形系统的引擎。Skia 作为第三方软件放在 external 目录下: external/skia/ 。 如果想对Skia有更深入的了解,可参考如下网址: http://blog.csdn.net/cuiyan0214/archive/2010/10/25/5964689.aspx http://blog.csdn.net/wxzking/archive/2011/05/14/6419219.aspx
二、使用Skia库进行JPEG图片解码 调用Skia库对JPEG图片解码,需要包含三个头文件,分别为:SkStream.h, SkImageDecoder.h和SkBitmap.h。 具体的实现代码如下: SkBitmap bp; SkImageDecoder::Format fmt; property_set("hw.jpeg.path", "/data/test.jpg"); //此处的property_set应该在别的地方进行set。 char propBuf[PROPERTY_VALUE_MAX]; property_get("hw.jpeg.path ", propBuf, ""); LOGI("property_get: %s.", propBuf); Bool result = SkImageDecoder::DecodeFile(propBuf, &bp,SkBitmap::kRGB_565_Config, SkImageDecoder::kDecodePixels_Mode, &fmt); if(!result){ LOGI("decoder file fail!"); }else{ if(fmt!= SkImageDecoder::kJPEG_Format){ LOGI("decoder file not jpeg!"); }else{ LOGI("width %d,height %d,rowBytesAsPixels %d,config %d, bytesPerPixel %d",bp.width(),bp.height(),bp.rowBytesAsPixels(),bp.config(),bp.bytesPerPixel()); FILE *f_rgb=fopen("/data/test_rgb565.raw","wb"); short *pixl = (short *) bp.getPixels(); for(int j=0;j<bp.height();j++){ fwrite(pixl,1,bp.width()*bp.bytesPerPixel(),f_rgb); pixl += bp.rowBytesAsPixels(); } fclose(f_rgb); } } 需要说明的是: Fmt:获取的图片的格式; bp.width():图片的宽度; bp.height():图片的高度; bp.rowBytesAsPixels():一行的pixel数,有pitch问题; bp.config():图片被解码后的文件格式; bp.bytesPerPixel():每个pixel占用的byte数; Bool result = SkImageDecoder::DecodeFile(propBuf, &bp,SkBitmap::kRGB_565_Config, SkImageDecoder::kDecodePixels_Mode, &fmt); 将propBuf中存储的JPEG图片解码成rgb565文件。
三、编译问题 在编译的时候,需要在Android.mk文件中加入libskia库,同时需要引入如下路径: external/skia/include/images external/skia/include/core
对于property_set/ property_get的使用需要注意一些问题。这个可以参考如下文章: Android平台上使用属性系统(property system) http://blog.csdn.net/wxzking/archive/2011/05/14/6419404.aspx
E-mail:wxiaozhe@163.com QQ:1226062415 欢迎交流,欢迎转载,转载时请保留以上信息。 |
|