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();
}

 

上一篇:Google 东京奥运会 Doodle


下一篇:3.5tensorflow线性回归和线性拟合