chromium中将本地方图片(比如jpg、bmp、png格式的图像)转成bitmap位图格式。此操作在图像合成时非常有用。
//具体代码实现逻辑如下:
bool LoadImageFromFile(SkBitmap &bitmap, const std::string &file_path) {
sk_sp<SkData> encData = SkData::MakeFromFileName(file_path.c_str());
if (!encData) {
return false;
}
SkCodecs::Register(SkPngDecoder::Decoder());
SkCodecs::Register(SkBmpDecoder::Decoder());
SkCodecs::Register(SkJpegDecoder::Decoder());
SkBitmap* dst = &bitmap;
std::unique_ptr<SkImageGenerator> gen(SkImageGenerators::MakeFromEncoded(std::move(encData)));
// 尝试分配像素和获取像素,如果成功则返回true
return gen && dst->tryAllocPixels(gen->getInfo()) &&
gen->getPixels(gen->getInfo().makeColorSpace(nullptr), dst->getPixels(), dst->rowBytes());
}
注释说明:
· 使用 SkData::MakeFromFileName 函数从给定的文件路径加载图像数据。
· 注册了几种常见的图像解码器(PNG、BMP、JPEG)。
· 使用 SkImageGenerators::MakeFromEncoded 创建一个图像生成器。
· 尝试分配像素并获取像素数据,如果成功则返回 true,否则返回 false。