本文针对如何使用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:[email protected]
QQ:1226062415
Date:2011/5/14
Blog:http://blog.csdn.net/wxzking
欢迎交流,欢迎转载,转载时请保留以上信息。