libwebp 解码 webp格式的图片或者动画【源码】

复制代码
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <fstream>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <webp/decode.h>
#include <webp/demux.h>
using namespace cv;
using namespace std;

#pragma comment( lib, "..\\3rd_party\\libwebp-master\\build\\Debug\\webp.lib" )
#pragma comment( lib, "..\\3rd_party\\libwebp-master\\build\\Debug\\webpdemux.lib" )

static std::vector<uchar> readFile(const char* filename)
{
    std::vector<uchar> bytes;
    std::ifstream input_file(filename, ios::binary);
    if (!input_file.is_open()) {
        return bytes;
    }
    //input_file.read()
    char byte;
    while (input_file.read(&byte, 1)) {
        bytes.push_back(byte);
    }
    return bytes;
}

int main()
{
    int ret = 0;
    int w, h;
    std::vector<uchar> bytes = readFile("./aaa.webp");
    //std::vector<uchar> bytes = readFile("./0.webp")
    WebPData wd = { bytes.data() , bytes.size()};
    struct WebPDemuxer* dmuxer = WebPDemux(&wd);
    int frame_idx = 0;
    WebPIterator iter;
    while (1) {
        
        ret = WebPDemuxGetFrame(dmuxer, frame_idx, &iter);
        uchar * decode_data = WebPDecodeBGRA(iter.fragment.bytes, iter.fragment.size, &w, &h);
        if (decode_data == NULL)
            break;
        cv::Mat src(h, w, CV_8UC4, decode_data);
        cv::imshow("dst", src);
        cv::waitKey(100);
        frame_idx++;
    }
    cv::waitKey(0);

    WebPDemuxDelete(dmuxer);
    getchar();
}
复制代码

 

posted @   洛笔达  阅读(709)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示