C++ Win32中的动画图像
如何将动画GIF放入本机Win32应用程序中的对话框 我有一个加载指示器和一个加载过程C++ Win32中的动画图像,c++,winapi,loading,animated-gif,C++,Winapi,Loading,Animated Gif,如何将动画GIF放入本机Win32应用程序中的对话框 我有一个加载指示器和一个加载过程 谢谢:-)您可以使用。不过,您必须将.gif转换为.avi。因为您在这方面的时间很紧,我搜索了一个在win32上制作gif动画的工作示例,并在上找到了一个很好的实现 Juan Soulie称之为[直接链接]。不确定GDI+是否可以被视为本机win32。如果您可以使用它,请检查以下示例:实现计时器来更改显示内容相当简单。您可以设置一个文本块,其中没有文本,使用背景色,只需更改大小。它看起来像一个扩展的彩色条,开
谢谢:-)您可以使用。不过,您必须将.gif转换为.avi。因为您在这方面的时间很紧,我搜索了一个在win32上制作gif动画的工作示例,并在上找到了一个很好的实现
Juan Soulie称之为[直接链接]。不确定GDI+是否可以被视为本机win32。如果您可以使用它,请检查以下示例:实现计时器来更改显示内容相当简单。您可以设置一个文本块,其中没有文本,使用背景色,只需更改大小。它看起来像一个扩展的彩色条,开销很小。使用GdiPlus加载各种图像格式非常容易,包括jpeg、gif(动画)、png等 此代码演示如何将图像的单个帧快速加载到HBITMAP中:-
#include <gdiplus.h>
#pragma comment(lib,"gdiplus.lib")
using namespace Gdiplus;
HBITMAP LoadImageWithGdiPlus(LPCTSTR pszPngPath)
{
Image image(pszPngPath);
int width = image.GetWidth();
int height = image.GetHeight();
BITMAPINFO bmi;
bmi.bmiHeader.biBitCount = 32;
bmi.bmiHeader.biClrImportant = 0;
bmi.bmiHeader.biClrUsed = 0;
bmi.bmiHeader.biCompression = BI_RGB;
bmi.bmiHeader.biHeight = height;
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biSize = sizeof (bmi.bmiHeader);
bmi.bmiHeader.biSizeImage = 0; //calc later
bmi.bmiHeader.biWidth = width;
bmi.bmiHeader.biXPelsPerMeter = 0;
bmi.bmiHeader.biYPelsPerMeter = 0;
BYTE* pBmp = NULL;
HBITMAP hbm = CreateDIBSection(NULL,&bmi,DIB_RGB_COLORS,(void**)&pBmp,NULL,0);
HDC hdc = CreateCompatibleDC(NULL);
HGDIOBJ hobj = SelectObject(hdc,hbm);
Graphics graphics(hdc);
graphics.DrawImage(&image,0,0);
SelectObject(hdc,hobj);
DeleteDC(hdc);
return hbm;
}
#包括
#pragma注释(lib,“gdiplus.lib”)
使用名称空间Gdiplus;
HBITMAP加载带有GDIPlus的图像(LPCTSTR pszPngPath)
{
图像(pszPngPath);
int width=image.GetWidth();
int height=image.GetHeight();
BITMAPINFO bmi;
bmi.bmiHeader.biBitCount=32;
bmi.bmiHeader.biClrImportant=0;
bmi.bmiHeader.biClrUsed=0;
bmi.bmiHeader.biCompression=BI_RGB;
bmi.bmiHeader.biHeight=身高;
bmi.bmiHeader.biPlanes=1;
bmi.bmiHeader.biSize=sizeof(bmi.bmiHeader);
bmi.bmiHeader.biSizeImage=0;//稍后计算
bmi.bmiHeader.biWidth=宽度;
bmi.bmiHeader.biXPelsPerMeter=0;
bmi.bmiHeader.biYPelsPerMeter=0;
字节*pBmp=NULL;
HBITMAP hbm=CreateDIBSection(空,和bmi,DIB_RGB_颜色,(空**)和pBmp,空,0);
HDC HDC=CreateCompatibleDC(空);
hgdobj hobj=SelectObject(hdc,hbm);
图形(hdc);
graphics.DrawImage(&image,0,0);
选择对象(hdc、hobj);
DeleteDC(hdc);
返回hbm;
}
接下来的问题是“如何将.gif转换为.avi?”将其包含在您的答案中,这将是完美的。由于Imagemagick失败,我所能提供的只是谷歌提出的内容。(这还不错-我搜索了将gif转换为avi
)也许其他人有好主意?对于UNICODE项目,请更改为“HBITMAP LoadImageWithGdiPlus(LPWSTR pszPngPath)”。此外,您还缺少:。