关于#VC++ & MFC#的问题,如何解决?

有一张7060的bmp图,如何略缩为4040的小图?(VC++ & MFC中设置大图标与小图标)

该回答引用ChatGPT

在 MFC 中,可以使用 CImage 类来加载和处理图像。要将 7060 的 BMP 图像缩小为 4040 的小图像,可以使用 CImage::Stretch 方法。

以下是示例代码:


// 加载原始图像
CImage srcImage;
srcImage.Load(_T("path/to/7060.bmp"));

// 创建目标图像
CImage destImage;
destImage.Create(4040, 4040, srcImage.GetBPP());

// 将原始图像缩小到目标图像大小
srcImage.Stretch(destImage.GetDC(), destImage.GetWidth(), destImage.GetHeight(), SRCCOPY);

// 释放目标图像 DC
destImage.ReleaseDC();

// 设置大图标和小图标
SetIcon(destImage.Detach(), TRUE);  // 大图标
SetIcon(destImage.Detach(), FALSE); // 小图标

在此示例代码中,我们首先使用 CImage::Load 方法加载 7060 的 BMP 图像。然后,我们使用 CImage::Create 方法创建一个新的图像,大小为 4040x4040,并与原始图像使用相同的颜色深度。接下来,我们使用 CImage::Stretch 方法将原始图像缩小到目标图像大小。最后,我们使用 SetIcon 方法将目标图像设置为大图标和小图标。

请注意,这里的 SetIcon 方法是在 CWnd(或其派生类)中调用的。如果您正在编写一个窗口类(如 CFrameWnd 或 CDialog),则可以直接使用 SetIcon 方法。如果您正在编写一个自定义控件类,则需要覆盖 OnPaint 方法,并在其中绘制图标。

你是要用程序显示形变的图片吗?可以用StretchBlt函数拉升图片

  • 参考GPT的内容和自己的思路:

  • 在 VC++ & MFC 中设置大图标与小图标可以通过以下步骤实现:

1、使用 CImage 类加载 bmp 图片文件。

CImage image;
image.Load(_T("image.bmp"));

2、使用 CImage::GetThumbnail 方法生成缩略图。

CImage thumbnail;
HRESULT hr = image.GetThumbnail(40, 40, &thumbnail);

其中,第一个参数是缩略图的宽度,第二个参数是缩略图的高度,第三个参数是用于存储缩略图的 CImage 对象。

3、使用 CBitmap 类将缩略图转换为位图对象。

CBitmap bitmap;
bitmap.Attach(thumbnail.Detach());


4、设置窗口的大图标和小图标。

SetIcon(bitmap, TRUE);  // 设置大图标
SetIcon(bitmap, FALSE); // 设置小图标


  • 完整的代码示例如下:
CImage image;
image.Load(_T("image.bmp"));

CImage thumbnail;
HRESULT hr = image.GetThumbnail(40, 40, &thumbnail);

CBitmap bitmap;
bitmap.Attach(thumbnail.Detach());

SetIcon(bitmap, TRUE);  // 设置大图标
SetIcon(bitmap, FALSE); // 设置小图标


注意:该方法会改变原始图像对象,如果需要保留原始图像,请在生成缩略图之前先对原始图像进行备份。