绿色风's Blog
专注AutoIT(Au3)
  • 首页
  • 流●年
  • 笔●记
    • 学习随记
    • 源码示例
  • 脚●本
    • UDF(收集)
    • 工作室UDF
    • 工具●教程
    • 教程之GDI
  • 作●品
  • 下●载
  • 情怀ExcelTip
1月202015

[教程]第十四讲 GDI+图像之图元文件

作者:绿色风   发布:2015-1-20 0:44 Tuesday   分类:   阅读:13900次   评论:0条  

ACN论坛.讲师:seniors   转载请说明此文出处所在:<<简易工作室>>,谢谢!

GDI+图像

一、图像有三类

Image、Bitmap、Metafile

Image类是一个抽象类,不能直接实例化。Bitmap 类和Metafile 类是从Image类继承的。
Bitmap 类是光栅图像,我的理解就是点阵图像。Metafile 类是矢量图像。



1、Image类是一个抽象类,不能直接实例化。

也就是Image分成两大类(Bitmap和Metafile),Image不能新建只能从文件读取

$hImage = _GDIPlus_ImageLoadFromFile($sFileName)

其实读取出来后,$hImage要么是Bitmap要么是MetaFile,是根据文件$sFileName是什么图像决定的


2、Bitmap类是光栅图像,能实例化

也就是我们能创建Bitmap,如一系列的_GDIPlus_BitmapCreateFrom函数

$hBitmap = _GDIPlus_BitmapCreateFromFile($sFileName)

是从文件$sFileName建立Bitmap图像,即便$sFileName是Metafile矢量图像也会生成光栅图像。


3、Metafile类矢量图像

这类图像的介绍相应较少,这讲先讲他

metafile的图像文件叫做图元文件,后缀为wmf(图元文件)或者emf(增强型图元文件)

WMF:Windows 图元文件
“Windows 图元文件”是 16 位图元文件格式,可以同时包含矢量信息和位图信息。它针对 Windows 操作系统进行了优化。
EMF:增强型图元文件
“增强型图元文件”是 32 位格式,可以同时包含矢量信息和位图信息。此格式是对“Windows 图元文件格式”的改进,包含了一些扩展功能,例如,下面的功能:内置的缩放比例信息 · 与文件一起保存的内置说明 调色板和设备独立性方面的改进EMF 格式是可扩展的格式,这意味着程序员可以修改原始规范以添加功能或满足特定的需要



例子中有建立和显示

;=============建立开始==========

$hMeta = _GDIPlus_MetafileRecordFileName($myMetafile, $hDC)

$hGraphics = _GDIPlus_ImageGetGraphicsContext($hMeta)

在$hGraphics中做各种你要画的图

_GDIPlus_GraphicsDispose($hGraphics)

当_GDIPlus_GraphicsDispose($hGraphics)时图元文件建立好了

;=============建立结束==========



例子中已经有GDI中显示图元文件,GDI+中显示图元文件很简单

$hImage = _GDIPlus_ImageLoadFromFile($sFileName)

_GDIPlus_GraphicsDrawImageRect($hGraphics, $hImage , 区域)

就行了

NewImage.png

#include <APIConstants.au3>
#include <WinAPIEx.au3>
#include <GDIPlus.au3>
#include <GDIPlusEx.au3>

Global $myMetafile = @ScriptDir & "\my.emf"
Global $hWnd = GUICreate("第十四讲 GDI+图元文件", 500, 200)
GUICtrlCreatePic("", 0, 0, 500, 200)
$hPicWnd = GUICtrlGetHandle(-1)
GUISetState()

createMetafile()
MsgBox(0, "消息", "Emf图元文件,已经创建好!" & @CR & "按确定显示图元文件!")
showMetafile()
While 1
        $Msg = GUIGetMsg()
        Switch $Msg
                Case -3
                        ExitLoop
        EndSwitch
WEnd
GUIDelete()
Exit

Func createMetafile()
        Local $x, $y, $w, $h, $t
        Local $hDC = _WinAPI_GetWindowDC($hWnd)
        _GDIPlus_Startup()
        $hMeta = _GDIPlus_MetafileRecordFileName($myMetafile, $hDC);获取图元文件句柄
        $hGraphics = _GDIPlus_ImageGetGraphicsContext($hMeta);建立图元文件图像的画布
        _GDIPlus_GraphicsSetSmoothingMode($hGraphics, 2)
        For $deg = 0 To 100
                $x = Random(0, 500, 1)
                $y = Random(0, 200, 1)
                $w = Random(0, 100, 1)
                $h = Random(0, 50, 1)
                $t = Random(0, 1, 1)
                $rgb = String("FF" & Hex(Random(0, 255, 1), 2) & Hex(Random(0, 255, 1), 2) & Hex(Random(0, 255, 1), 2))
                $hPen = _GDIPlus_PenCreate("0x" & $rgb)
                _GDIPlus_GraphicsDrawRect($hGraphics, $x, $y, $w, $h, $hPen)
                _GDIPlus_PenDispose($hPen)
        Next
        _GDIPlus_GraphicsDispose($hGraphics);图元文件建立结束
        _GDIPlus_Shutdown()
        _WinAPI_ReleaseDC($hWnd, $hDC)
EndFunc   ;==>createMetafile

Func showMetafile()
        Local $HWND_CX = _WinAPI_GetWindowWidth($hPicWnd)
        Local $HWND_CY = _WinAPI_GetWindowHeight($hPicWnd)
        Local $hDC = _WinAPI_GetWindowDC($hPicWnd)
        $tRect = _WinAPI_CreateRectEx(0, 0, $HWND_CX, $HWND_CY)
        $hEmf = _WinAPI_GetEnhMetaFile($myMetafile);获取图元文件句柄
        _WinAPI_PlayEnhMetaFile($hDC, $hEmf, $tRect);在矩形区域画出图元文件,按比例放大缩小的,因为是矢量图形
        _WinAPI_DeleteEnhMetaFile($hEmf);不要需要时释放
        _WinAPI_ReleaseDC($hPicWnd, $hDC)
EndFunc   ;==>showMetafile```





本文固定链接: http://www.jianyiit.com/post-62.html

blogger
该日志由 绿色风 于2015-1-20 0:44 Tuesday发表在 分类下。
版权所有:《绿色风's Blog》 → 《[教程]第十四讲 GDI+图像之图元文件》;
除特别标注,本博客很多文章均为原创. 互联分享,尊重版权,转载请以链接形式标明本文地址;
本文标签:

扫描二维码,在手机上阅读
上一篇::万网免费虚拟主机空间
下一篇:[教程]第十三讲 GDI+区域及剪切区域

热门文章

相关文章

  • [教程]第十二讲 GDI+路径
  • [教程]第十讲之分解1-渐变画刷
  • [教程]第十讲 GDI+文字,附发光字,阴影字
  • [教程]第十讲之分解2-多色渐变画刷
  • [教程]第九讲 GDI+画刷
取消回复

发表评论

亲,头像对么?

91 + 89 =

提交中,请稍候……


木有头像就木JJ啦!还木有头像吗?点这里申请属于你的个性Gravatar头像吧!


    站点统计
    • 运行时间: 20254 天
    • 日志总数: 365 篇
    • 评论数量: 7238 条
    • 微语数量: 6 条
    • 附件总量: 388 件
  • 逝出的青春

  • 打赏"绿色风"



      扫码关注本站公众号 可搜本站内容

  • Autoit V3 脚本交流群

      常驻群1:905774875
      常驻群2:40672266


  • 链接

    • AU3中文论坛
    • Excel资料库
    • 完美者博客
    • 顺网小哥'S Blog
    • 猛牛哥的博客
    • 网吧系统下载
  • 分类

    • 流●年(66)
    • 笔●记(0)
    • 脚●本(0)
    • 作品(21)
    • 学习随记(51)
    • 源码示例(68)
    • UDF(收集)(26)
    • 工作室UDF(30)
    • 工具●教程(62)
    • 教程之GDI(24)
Copyright © 2013 绿色风's Blog. Powered by emlog. Theme by 射雕天龙. 鄂ICP备2021011689号-1 鄂公网安备42102302000078号 sitemap