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(); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 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】