Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Win32中的动画图像_C++_Winapi_Loading_Animated Gif - Fatal编程技术网

C++ Win32中的动画图像

C++ Win32中的动画图像,c++,winapi,loading,animated-gif,C++,Winapi,Loading,Animated Gif,如何将动画GIF放入本机Win32应用程序中的对话框 我有一个加载指示器和一个加载过程 谢谢:-)您可以使用。不过,您必须将.gif转换为.avi。因为您在这方面的时间很紧,我搜索了一个在win32上制作gif动画的工作示例,并在上找到了一个很好的实现 Juan Soulie称之为[直接链接]。不确定GDI+是否可以被视为本机win32。如果您可以使用它,请检查以下示例:实现计时器来更改显示内容相当简单。您可以设置一个文本块,其中没有文本,使用背景色,只需更改大小。它看起来像一个扩展的彩色条,开

如何将动画GIF放入本机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)”。此外,您还缺少:。