C语言播放视频

想必大家都想用C语言进行简单的视频播放,感觉貌似很难的样子,现在告诉大家既不用C++也不用MFC,只需要一个API函数MCIWndCreate()即可,具体参数内容参考MSDN。下面给出简单的例子,想必看完谁都会了。

#include<graphics.h>
#include<stdlib.h>
#include "Vfw.h"
#pragma comment (lib, "Vfw32.lib")
int main()
{
 initgraph(720,576);

 HWND hwnd = MCIWndCreate(GetHWnd(),NULL,WS_CHILD|WS_VISIBLE|MCIWNDF_NOMENU |MCIWNDF_NOPLAYBAR, NULL);
 SetWindowPos(hwnd, HWND_TOP , 0 , 0 , 0 , 0, SWP_SHOWWINDOW);
 MCIWndOpen(hwnd, "仙四外传-回到起点.wmv",NULL);
 MCIWndPlay(hwnd);
 while(1)
 {
  ;
 }
 return 0;
}

简单吧,运行一下试试吧。

注意,老规矩应该安装了EasyX。程序中一定要添加Vfw.h的头文件和Vfw32.lib库。

效果如下:

图片不好,这是截图的问题哈。

C语言本身没有直接播放视频或动图的功能,需要通过调用其他库或工具来实现。以下是使用SDL库播放视频和动图的示例代码: 播放视频: ```c #include <stdio.h> #include <SDL2/SDL.h> int main(int argc, char *argv[]) { if (SDL_Init(SDL_INIT_VIDEO) < 0) { printf("SDL_Init failed: %s\n", SDL_GetError()); return -1; } SDL_Window *window = SDL_CreateWindow("Video Player", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, SDL_WINDOW_OPENGL); if (!window) { printf("SDL_CreateWindow failed: %s\n", SDL_GetError()); SDL_Quit(); return -1; } SDL_Renderer *renderer = SDL_CreateRenderer(window, -1, 0); if (!renderer) { printf("SDL_CreateRenderer failed: %s\n", SDL_GetError()); SDL_DestroyWindow(window); SDL_Quit(); return -1; } SDL_Surface *surface = SDL_LoadBMP("video.bmp"); if (!surface) { printf("SDL_LoadBMP failed: %s\n", SDL_GetError()); SDL_DestroyRenderer(renderer); SDL_DestroyWindow(window); SDL_Quit(); return -1; } SDL_Texture *texture = SDL_CreateTextureFromSurface(renderer, surface); if (!texture) { printf("SDL_CreateTextureFromSurface failed: %s\n", SDL_GetError()); SDL_FreeSurface(surface); SDL_DestroyRenderer(renderer); SDL_DestroyWindow(window); SDL_Quit(); return -1; } SDL_FreeSurface(surface); SDL_Rect rect; rect.x = 0; rect.y = 0; rect.w = 640; rect.h = 480; SDL_Event event; int quit = 0; while (!quit) { while (SDL_PollEvent(&event)) { if (event.type == SDL_QUIT) { quit = 1; break; } } SDL_RenderClear(renderer); SDL_RenderCopy(renderer, texture, NULL, &rect); SDL_RenderPresent(renderer); } SDL_DestroyTexture(texture); SDL_DestroyRenderer(renderer); SDL_DestroyWindow(window); SDL_Quit(); return 0; } ``` 播放动图: ```c #include <stdio.h> #include <SDL2/SDL.h> int main(int argc, char *argv[]) { if (SDL_Init(SDL_INIT_VIDEO) < 0) { printf("SDL_Init failed: %s\n", SDL_GetError()); return -1; } SDL_Window *window = SDL_CreateWindow("GIF Player", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, SDL_WINDOW_OPENGL); if (!window) { printf("SDL_CreateWindow failed: %s\n", SDL_GetError()); SDL_Quit(); return -1; } SDL_Renderer *renderer = SDL_CreateRenderer(window, -1, 0); if (!renderer) { printf("SDL_CreateRenderer failed: %s\n", SDL_GetError()); SDL_DestroyWindow(window); SDL_Quit(); return -1; } SDL_Surface *surface = SDL_LoadBMP("animation.bmp"); if (!surface) { printf("SDL_LoadBMP failed: %s\n", SDL_GetError()); SDL_DestroyRenderer(renderer); SDL_DestroyWindow(window); SDL_Quit(); return -1; } SDL_Rect rect; rect.x = 0; rect.y = 0; rect.w = 640; rect.h = 480; SDL_Event event; int quit = 0; int frame = 0; while (!quit) { while (SDL_PollEvent(&event)) { if (event.type == SDL_QUIT) { quit = 1; break; } } SDL_Rect clip; clip.x = (frame % 10) * 64; clip.y = (frame / 10) * 64; clip.w = 64; clip.h = 64; SDL_Texture *texture = SDL_CreateTextureFromSurface(renderer, surface); if (!texture) { printf("SDL_CreateTextureFromSurface failed: %s\n", SDL_GetError()); SDL_FreeSurface(surface); SDL_DestroyRenderer(renderer); SDL_DestroyWindow(window); SDL_Quit(); return -1; } SDL_RenderClear(renderer); SDL_RenderCopy(renderer, texture, &clip, &rect); SDL_RenderPresent(renderer); SDL_DestroyTexture(texture); frame++; if (frame >= 64) { frame = 0; } SDL_Delay(100); } SDL_FreeSurface(surface); SDL_DestroyRenderer(renderer); SDL_DestroyWindow(window); SDL_Quit(); return 0; } ``` 需要注意的是,这里的示例代码仅供参考,实际使用时需要根据具体情况进行修改和调整。
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

干了这一碗BUG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值