Android SKIA 图像解码

Posted

技术标签:

【中文标题】Android SKIA 图像解码【英文标题】:Android SKIA Image Decoding 【发布时间】:2011-04-22 02:26:54 【问题描述】:

嗨,

我目前正在研究android如何解码和图像文件。当我检查代码时,它似乎正在调用 SKIA 库。但是,根据源码我怎么知道android/skia支持的图片文件格式是什么?

我不是编程专家,所以我仍在努力理解 C++ 和 Java 语言。

我现在迷失在 BitmapFactory.cpp(JNI 文件)中的SkImageDecoder* decoder = SkImageDecoder::Factory(stream);SkImageDecoder::Factory(stream) 好像是一个模板。

谁能解释一下SKImageDecoder::Factory()里面发生了什么?任何反馈将不胜感激。

谢谢, 艺人

【问题讨论】:

【参考方案1】:

在skia/include/images/SkImageDecoder.h文件中,有Skia支持的图片列表解码:

enum Format 
    kUnknown_Format,
    kBMP_Format,
    kGIF_Format,
    kICO_Format,
    kJPEG_Format,
    kPNG_Format,
    kWBMP_Format,
    kWEBP_Format,

    kLastKnownFormat = kWEBP_Format
;

在 SkImageDecoder::Factory(stream) 函数中,它会根据 Stream 的 header 分析,新建一个解码器实例。

【讨论】:

【参考方案2】:

通过查看Android的源代码,我认为支持以下图像格式。 ICO(Windows ICON 图像格式)、BMP、JPEG、WBMP、GIF 和 PNG。

如果我错了,请纠正我。谢谢你。

【讨论】:

【参考方案3】:

PNG、JPEG 和 GIF 是支持的格式。 Android 上使用的主要格式是 PNG 和 JPEG。

【讨论】:

感谢您的回复。你知道android在源代码中的哪里检查文件格式是否受支持吗?我认为这是在'SkImageDecoder::Factory(stream);'中完成的在 BitmapFactory.cpp(JNI) 中。但我还是想不出具体是在哪里做的。 我在 SKIA 库中找到了 ff 类 SkFPDFEMBImageDecoder // FPDFEMB SkBMPImageDecoder // BMP 文件 SkGIFImageDecoder // GIF 文件 SkICOImageDecoder // ICO 文件? SkJPEGImageDecoder // 基线 JPEG 格式 SkPNGImageDecoder // PNG SkPVJPEGImageDecoder // 渐进式 JPEG 格式 ? SkWBMPImageDecoder //无线应用协议位图格式 只是为了确认android是否使用上面的类,我试图显示一个有效的ICO文件('Bitmap bmap = BitmapFactory.decodeFile("/sdcard/vlc.ico");')和它在模拟器中正确显示。

以上是关于Android SKIA 图像解码的主要内容,如果未能解决你的问题,请参考以下文章

Android 图形系统(Graphics)

编译skia静态库时,图片解码库无法注册的问题

D/skia: --- 无法创建带有消息“未实现”的图像解码器

Skia图片解码模块流程分析

Skia 解码器无法解码远程流

为啥 SKIA 不使用自定义 FilterInputStream?