GDI+ 制作透明图片

1:制作透明图片文件;

      GDI+ 支持32位位图文件,所以自然就支持图片透明了;

       首先:建立一个32位位图文件在内存中,将文件刷新为透明格式;

       其次:在这个内存32位位图文件上作图;

       最后:保存这个32位位图文件为指定格式的图片:

例子如下:在透明位图文件上作图,然后保存问题png格式文件:

#include <GdiPlus.h>
using namespace Gdiplus;
#pragma comment(lib, "Gdiplus")

int GetEncoderClsid(const WCHAR* format, CLSID* pClsid)
{
 UINT  num = 0;          // number of image encoders
 UINT  size = 0;         // size of the image encoder array in bytes

 ImageCodecInfo* pImageCodecInfo = NULL;

 GetImageEncodersSize(&num, &size);
 if(size == 0)
  return -1;  // Failure

 pImageCodecInfo = (ImageCodecInfo*)(malloc(size));
 if(pImageCodecInfo == NULL)
  return -1;  // Failure

 GetImageEncoders(num, size, pImageCodecInfo);

 for(UINT j = 0; j < num; ++j)
 {
  if( wcscmp(pImageCodecInfo[j].MimeType, format) == 0 )
  {
   *pClsid = pImageCodecInfo[j].Clsid;
   free(pImageCodecInfo);
   return j;  // Success
  }   
 }

 free(pImageCodecInfo);
 return -1;  // Failure
}

 

 

{

 GdiplusStartupInput gdiplusStartupInput;
 ULONG_PTR           gdiplusToken;
 GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);

//1:建立透明内存32位位图文件;
 Bitmap bmp( 1000,1000, PixelFormat32bppARGB );

 

//2:刷新32位位图文件为透明;
 Graphics g( &bmp );

 Color   myColor(0, 0,0,0 ); 
 g.Clear( myColor );  

 

//3:作图:

 g.DrawLine( &Pen(Color::Black), 0,0,100,100);

 

 //4: 显示:

Graphics gwnd(this->m_hWnd);
 gwnd.DrawImage( &bmp, 0,0);

 

//5:保存为png图片:
  CLSID pngClsid;
  GetEncoderClsid(L"image/png", &pngClsid);
  bmp.Save(L"F:\\Mosaic2.png", &pngClsid, NULL);

}

 

2:将指定位图颜色透明:

     1:建立一个32位位图文件在内存中,将指定位图刷新到32为位图文件上;

     2:获取像素点值GetPixel,如果是指定的颜色,设置为透明像素点colorPixel.SetValue( Color::MakeARGB(0,0,0,0) ); SetPixel;

     3:保存图片;

 

注:windows图片查看器,无法产看32位位图透明图片,它会将透明度值取消显示;

但GDI+可以显示32位位图文件;而且其他图片编辑软件可以查看;

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
GDI(图形设备接口)是一种用于创建和绘制二维图形的编程接口。通过使用GDI,我们可以制作简易地图。下面我将以300字回答这个问题。 首先,我们需要准备一张地图的背景图像,这可以是一个包含地理特征的图片,如山脉、河流和城市等。我们可以使用GDI的`LoadImage`函数加载这个图片,并使用`BitBlt`函数将其绘制在画布上。 接下来,我们需要在地图上添加一些标记,以表示特定的地点或信息。我们可以使用GDI的绘图函数,如`LineTo`和`Rectangle`,在指定位置绘制线段或矩形。我们还可以使用`DrawText`函数在地图上添加文字标签。这些标记可以表示城市、交通站点或其他地理信息。 除了标记,我们可能还需要在地图上绘制路径或线路。我们可以使用GDI的`Polyline`函数绘制连接多个坐标点的折线,以表示路径。我们还可以使用`SetPixel`函数在地图上绘制像素点,以表示特定的位置或地点。 最后,在地图上添加交互功能也是一种常见的需求。我们可以使用GDI的`SetWindowLongPtr`函数将地图画布与窗口关联起来,从而实现交互。例如,我们可以通过鼠标点击事件在地图上选中或高亮特定的地点或路径。 总结来说,使用GDI制作简易地图主要涉及加载背景图像、添加标记和线路、以及实现交互功能。通过调用GDI提供的绘图函数,我们可以轻松地制作出具有地理特征和标记的简易地图。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

chinabinlang

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

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

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

打赏作者

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

抵扣说明:

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

余额充值