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