zoukankan      html  css  js  c++  java
  • 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();
    }
  • 相关阅读:
    2.操作系统基础
    6.Linux基础3
    DRAM 内存介绍(一)
    131127新的一天
    Java中的super关键字何时使用
    JAVA的引用类型变量(C/C++中叫指针)
    System.out.println()的含义
    Java面试题
    HTML基础知识
    子域名查找
  • 原文地址:https://www.cnblogs.com/luoyinjie/p/15359051.html
Copyright © 2011-2022 走看看