zoukankan      html  css  js  c++  java
  • VC利用GDI+显示透明的PNG图片

    GDI+ 的使用、

    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

    作者:BuildNewApp
    出处:http://syxchina.cnblogs.comBuildNewApp.com
    本文版权归作者、博客园和百度空间共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则作者会诅咒你的。
    如果您阅读了我的文章并觉得有价值请点击此处,谢谢您的肯定1。
  • 相关阅读:
    web.xml报错
    mysql字符集问题汇总
    查询所有表中的某个数存储过程脚本
    SQL Server生成数据库的数据字典存储过程
    浏览器无法访问虚拟机的服务器
    搭建lnmp环境,nginx的配置文件/etc/nginx/nginx.conf
    在centos6.5下搭建lnmp
    Linux服务器关联Git,通过执行更新脚本实现代码同步
    CentOS yum 安装时错误 Errno 14 Couldn't resolve host 解决办法
    LinqToSQL3
  • 原文地址:https://www.cnblogs.com/syxchina/p/2197400.html
Copyright © 2011-2022 走看看