`

VC利用GDI+显示透明的PNG图片

    博客分类:
  • VC
阅读更多

1.在你将要使用GDI+的工程中,完成初始化工作,将以下代码加入StdAfx.h头文件中:

//加入的头文件
#include <comdef.h>//初始化一下com口
#ifndef ULONG_PTR
#define ULONG_PTR unsigned long*
#include "GdiPlus.h"
using namespace Gdiplus;
#endif
#pragma comment(lib,"gdiplus.lib")

2.在程序初始化部分加入

//gdi+用到的两个变量   装载gdi+
    GdiplusStartupInput m_gdiplusStartupInput;
    ULONG_PTR m_pGdiToken;
    GdiplusStartup(&m_pGdiToken,&m_gdiplusStartupInput,NULL);

3.在程序退出部分前加入
    //卸载gdi+
    GdiplusShutdown(m_pGdiToken);

5在Project->stting->Link->Object/libary中加入gdiplus.lib

这样你的工程就可以使用GDI+了:

void CPNGDlg::OnButton1() 
{
pDC =GetDC();
Graphics graphics( pDC->m_hDC);
Image image(L"walkman.png", FALSE);
graphics.DrawImage(&image, 10,10);
}

 


GDI+是Windows XP中的一个子系统,它主要负责在显示屏幕和打印设备输出有关信息,它是一组通过C++类实现的应用程序编程接口。顾名思义,GDI+是以前版本GDI的继承者,出于兼容性考虑,Windows XP仍然支持以前版本的GDI,但是在开发新应用程序的时候,开发人员为了满足图形输出需要应该使用GDI+,因为GDI+对以前的Windows版本中GDI进行了优化,并添加了许多新的功能。

     遗憾的是,VC6.0并不能直接使用GDI+,下面介绍一种很方便的在VC6.0中使用GDI+的方法。步骤如下:

1.将GDI+.rar将其中的Includes和Lib中的文件拷到vc目录下的Includes和Lib文件夹中;

GDI+ for VC6.0 SDK下载地址:

http://www.codeguru.com/code/legacy/gdi/GDIPlus.zip

2.在你将要使用GDI+的工程中,完成初始化工作:

将以下代码加入StdAfx.h头文件中:

//加入的头文件
#include <comdef.h>//初始化一下com口
#ifndef ULONG_PTR
#define ULONG_PTR unsigned long*
#include "GdiPlus.h"
using namespace Gdiplus;
#endif
#pragma comment(lib,"gdiplus.lib")

3.在程序初始化部分加入

//gdi+用到的两个变量   装载gdi+
    GdiplusStartupInput m_gdiplusStartupInput;
    ULONG_PTR m_pGdiToken;
    GdiplusStartup(&m_pGdiToken,&m_gdiplusStartupInput,NULL);

4在程序退出部分前加入
    //卸载gdi+
    GdiplusShutdown(m_pGdiToken);

5在Project->stting->Link->Object/libary中加入gdiplus.lib

这样你的工程就可以使用GDI+了:

void CPNGDlg::OnButton1() 
{
pDC =GetDC();
Graphics graphics( pDC->m_hDC);
Image image(L"walkman.png", FALSE);
graphics.DrawImage(&image, 10,10);
}

 


用GDI+如何显示透明背景的PNG文件?楼主ruchimy(泥秋)2005-05-26 17:16:14 在 VC/MFC / 图形处理/算法 提问
我使用如下代码:   
ImageAttributes imAtt;
imAtt.SetColorKey(Color(0,0,0),Color(10,10,10),ColorAdjustTypeDefault);
graphics.SetSmoothingMode(SmoothingModeAntiAlias);
Image imageBlue(TEXT(".\\res\\NumbersBlue.png"));
graphics.DrawImage (&imageYear,Rect(cx,0,iYearWidth,iYearHeight),0,iYearHeight,iYearWidth,iYearHeight,UnitPixel,&imAtt);
    
显示的图片虽然是透明的,但边边有黑点.哪位高手能指点一下?

直接显示就可以了,   透明是GDI+自己处理的,

 


在VC6.0时边要加入以下三句到stdafx.h里边

#define ULONG_PTR ULONG
#include <gdiplus.h>
using namespace Gdiplus;
#pragma comment(lib,"gdiplus.lib")

 

不要再使用OleLoadPicture了,那会让你看起来很愚蠢。同样功能的函数,你看看GDI+会有几行:

HRESULT ShowPic(const TCHAR* lpstrFile, HDC hDC, int X, int Y, int iWidth, int iHeight)
{
_ASSERT(lpstrFile);
USES_CONVERSION;

// Create bitmap object and load image
auto_ptr<Bitmap> pBmp(new Bitmap(CT2CW(lpstrFile)));
if(!pBmp.get() || Ok != pBmp->LastStatus())
return E_FAILED;

// Draw bitmap on DC
Graphic grp(hDC);
if(Ok != grp.DrawImage(pBmp.get(), X, Y, iWidth, iHeight))
return E_FAILED;
return S_OK;
}

 

 

 

 

 

 

在vc6.0中使用GDI+图形函数
作者:radcat    文章来源:本站原创    点击数:3422    更新时间:2007-3-10 15:42:48

原帖及讨论:http://bbs.bc-cn.net/dispbbs.asp?BoardID=55&ID=102037

进来总看到一些网友提出一些关于图形处理方面的问题.

例如怎样使一个字符串透明输出,怎样放大,缩小或旋转一幅图片,或将一幅bmp图片保存为jpg格式,我总是回答使用GDI+图形函数,那么怎样使用呢?

下面是我写的一个简易教程,第一次写教程,难免有疏漏还请各位网友指正批评.

GDI+图形函数,一个组在.net环境下提供的以取代GDI图形函数的类,将来会逐渐取代GDI图形函数.

如果在vc6.0中使用gdi+图形函数,那么请按以下步骤操作:

1.下载下面的rar文件将其中的Includes和Lib中的文件拷到vc目录下的Includes和Lib文件夹中.

点击下载该文件

2新建一个工程(以winsdk框架为例mfc也相同)

将以下代码加入StdAfx.h头文件中

//加入的头文件
#include <comdef.h>//初始化一下com口

#ifndef ULONG_PTR
#define ULONG_PTR unsigned long*
#include "GdiPlus.h"
using namespace Gdiplus;
#endif
//结束

3在程序初始化部分加入

//gdi+用到的两个变量
    GdiplusStartupInput m_gdiplusStartupInput;
    ULONG_PTR m_pGdiToken;
    //装载gdi+
    GdiplusStartup(&m_pGdiToken,&m_gdiplusStartupInput,NULL);

4在程序退出部分前加入

    //卸载gdi+
            GdiplusShutdown(m_pGdiToken);

5在Project->stting->Link->Object/libary中加入gdiplus.lib

好了经过上面几步我们就可以在程序中使用GDI+了,先试一下吧!

显示一个透明字符串

    Graphics mygraphics(hdc);//创建一个Graphics对象
    SolidBrush brush(Color(100,0,0,255));//创建一个笔刷 第一项是透明度 后三项是RGB值
    FontFamily fontFamily(L"Latha");选择一种字体
    Font font(&fontFamily,1,FontStyleRegular,UnitInch);
    PointF pointF(5,5);

    mygraphics.DrawString(L"Hello Word!",-1,&font,pointF,&brush);

或显示一幅jpg图像

Graphics imgraphics(hdc);
Image image(L"001.jpg");
imgraphics.DrawImage(&image,0,0);

注意要把001.jpg考到工程目录下

下面是一个例子有兴趣的可以下载


http://bbs.bc-cn.net/viewFile.asp?BoardID=55&ID=13660

以上是我写的,请望能给大家一些帮助

分享到:
评论

相关推荐

    VC利用GDI+采用分层窗体实现PNG透明窗体

    本主题将深入探讨如何使用Visual C++ (VC++) 和GDI+库来实现一个基于分层窗体(Layered Window)的PNG透明窗体。这在需要在视频或其他背景上显示具有自定义透明度的窗口时非常有用,例如制作桌面小工具或软件界面。 ...

    VC6GDI+ PNG 透明边缘窗口

    这个项目的核心在于利用GDI+的特性来处理PNG图片的Alpha通道,从而创建出具有透明效果的窗口。 首先,让我们了解什么是GDI+。GDI+是Windows图形设备接口的一个扩展,它提供了比传统GDI更丰富的绘图功能,包括对矢量...

    VC6使用GDI+

    在本文中,我们将深入探讨如何在VC6中有效地利用GDI+进行编程。 首先,让我们了解GDI+的基本概念。GDI+(Graphics Device Interface Plus)是微软推出的一种面向对象的图形库,它在原有的GDI(Graphics Device ...

    VC6下的GDI+双缓冲 解决闪烁问题

    通过学习这个例子,开发者可以更好地理解和掌握如何在VC6环境下利用GDI+双缓冲技术来优化图形更新,提升程序的视觉效果。 总的来说,GDI+双缓冲技术在解决Windows应用程序中的闪烁问题上发挥了重要作用。对于开发者...

    在VC6.0中用GDI+调用png图片实现半透明渐变的特效窗口源码

    在VC6.0环境下,利用GDI+库来实现PNG图片的半透明渐变特效窗口是一种常见的技术。GDI+是Microsoft提供的一种图形设备接口,它扩展了传统的GDI(Graphics Device Interface)功能,增加了对矢量图形、位图操作以及更...

    在VC6.0中用GDI+调用png图片实现半透明渐变的特效窗口

    在VC6.0环境下,利用GDI+技术可以创建出具有高级视觉效果的应用程序,比如半透明渐变的特效窗口。GDI+是Microsoft提供的一个图形设备接口的增强版本,它扩展了GDI的功能,提供了更强大的绘图、字体渲染和图像处理...

    gdi+ 绘制半透明 窗口

    在本文中,我们将深入探讨如何利用GDI+来创建和绘制半透明窗口,并特别关注如何处理PNG图像。这在现代应用程序设计中是非常重要的,因为半透明效果可以极大地提升用户体验。 首先,我们要理解半透明窗口的工作原理...

    使用vc和gdi+开发图形界面

    例如,你可以创建一个派生自`CButton`的类,并重写`OnPaint`方法,利用GDI+进行绘制: ```cpp class CMyButton : public CButton { public: afx_msg void OnPaint() { CPaintDC dc(this); // 创建设备上下文 ...

    VC中GDI+特效绘制

    通过熟练掌握以上知识点,开发者可以在VC中利用GDI+创建出具有专业视觉效果的应用程序,为用户提供更优质的用户体验。在实际项目中,结合MFC或WinAPI框架,GDI+能够发挥更大的作用,实现各种复杂的界面设计和动画...

    GDI+ PNG 动态时钟 带特效

    在VC++中,我们可以利用GDI+提供的类库来实现复杂的图形绘制。 2. **PNG图像处理**: PNG是一种无损压缩的位图格式,支持透明度和Alpha通道。在GDI+中,我们可以使用`Gdiplus::Bitmap`类来加载和处理PNG图片。这...

    VC6.0_GDIP.rar_GDI+ 半透明

    描述提到"在VC6.0中用GDI+调用png图片实现半透明渐变的特效窗口",这表明我们将探讨如何利用GDI+处理PNG图像的透明度信息,并将其应用到窗口上创建一个具有半透明渐变效果的特效。这通常涉及到设置窗口的阿尔法通道...

    使用GDI++绘制透明贴图

    本篇文章将详细探讨如何使用GDI++来绘制透明贴图,并实现窗口置顶显示。 首先,透明贴图是指图像的一部分或全部具有不同程度的透明度,可以与背景或其他元素融合,产生出丰富的视觉效果。在GDI+中,我们可以利用`...

    GDI+开发包

    这个“GDI+开发包”提供了开发者所需要的所有资源,包括库文件、头文件以及可能的示例代码和文档,使得在Visual C++(VC)环境中利用GDI+进行开发变得更加便捷。 GDI+的主要功能包括: 1. **图形绘制**:GDI+提供...

    GDI+做不规则窗体(上面贴.png图片)

    3. **绘制图像**:利用GDI+的绘图功能将PNG图像绘制到内存DC中。 4. **实现透明效果**:使用`UpdateLayeredWindow`函数更新窗口层次结构,实现透明效果。 5. **释放资源**:在项目退出前调用`GdiplusShutdown`函数...

    vc6下的GDI+透明时钟

    在VC6环境下,开发一个利用GDI+技术实现的透明时钟程序,是一个结合MFC框架与图形界面设计的典型示例。这个项目涉及到的主要知识点包括GDI+库的使用、MFC应用基础、异形窗体的创建以及透明效果的实现。 首先,GDI+...

    gdi+运行库的所有文件

    GDI+(Graphics Device Interface Plus)是微软推出的一种图形设备接口的增强版本,主要用于Windows应用程序中的图形绘制...通过合理利用这些文件,开发者可以充分利用GDI+的强大功能,实现丰富的图形和图像处理效果。

    GDI+程序设计实例VC源代码

    MFC库也提供了对GDI+的支持,使得开发者可以利用GDI+的功能进行图形编程。 本压缩包中的“GDI+程序设计实例VC源代码”包含了多个示例项目,这些示例覆盖了GDI+的多种核心概念和技术。通过分析和学习这些源代码,...

    VC6.0用GDI+重绘透明按钮

    在本主题中,我们将深入探讨如何在VC6.0环境下利用GDI+实现透明按钮的自绘。 首先,让我们了解什么是自绘按钮。在Windows应用程序中,标准的按钮控件通常由系统自动绘制,但其样式有限且不支持透明效果。为了创建...

    vc++2010GDI+

    在本文中,我们将深入探讨如何使用VC++ 2010和GDI+技术来处理图像,特别是关于图片的透明度、对比度和亮度的调整,以及如何将修改后的图像保存为PNG格式。GDI+(Graphics Device Interface Plus)是微软提供的一种...

Global site tag (gtag.js) - Google Analytics