《GDI+系列教程》的作者:空
前6章里,我们把 GDI+ 中最常用的绘画工具都演示了一遍。此时就有一个疑问了,我想保存画好的东西该怎么办呢?
本章,我们会将两张图片内容合并在一起,并保存为一个新文件。
1.使用定式直接创建出画布
#SingleInstance, Force #NoEnv SetBatchLines, -1 ; Uncomment if Gdip.ahk is not in your standard library #Include, Gdip_All.ahk ; 初始化 gdi+ 需要的一切 gosub, init
2.将背景画为绿色
; Create a green brush (this will be used to fill the background with green). The brush is fully opaque (ARGB) ; Filll the entire graphics of the bitmap with the green brush (this will be out background colour) ; Delete the brush created to save memory as we don't need the same brush anymore ; 使用画刷将背景画为绿色 pBrush := Gdip_BrushCreateSolid(0xff00ff00) Gdip_FillRectangle(G, pBrush, 0, 0, 600, 600) Gdip_DeleteBrush(pBrush)
3.载入两张素材
; Get bitmaps for both the files we are going to be working with ; 从本地图片文件创建两个 pBitmap pBitmapFile1 := Gdip_CreateBitmapFromFile(File1), pBitmapFile2 := Gdip_CreateBitmapFromFile(File2)
4.把素材贴画布上
; Get the width and height of the 1st bitmap ; Draw the 1st bitmap (1st image) onto our "canvas" (the graphics of the original bitmap we created) with the same height and same width ; at coordinates (100,160).....We will be ignoring the matrix parameter for now. This can be used to change opacity and colours when drawing ; 把图1画上来 Width := Gdip_GetImageWidth(pBitmapFile1), Height := Gdip_GetImageHeight(pBitmapFile1) Gdip_DrawImage(G, pBitmapFile1, 100, 160, Width, Height, 0, 0, Width, Height) ; Do the same again for the 2nd file, but change the coordinates to (220,100)..... ; 把图2也画上来 Width := Gdip_GetImageWidth(pBitmapFile2), Height := Gdip_GetImageHeight(pBitmapFile2) Gdip_DrawImage(G, pBitmapFile2, 220, 100, Width, Height, 0, 0, Width, Height) ; Dispose of both of these bitmaps we created from the images on disk, as they are now been used...They are on ; the graphics of the bitmap of our created "canvas" ; 释放两张图片的资源 Gdip_DisposeImage(pBitmapFile1), Gdip_DisposeImage(pBitmapFile2)
5.保存为文件,并打开
; Save the bitmap to file "File.png" (extension can be .png,.bmp,.jpg,.tiff,.gif) ; Bear in mind transparencies may be lost with some image formats and will appear black ; 将画好的图保存为文件并打开 Gdip_SaveBitmapToFile(pBitmap, "FinalImage.png") Run, FinalImage.png Return
6.收工善后
ExitGdip: ; The bitmap can be deleted Gdip_DisposeImage(pBitmap) ; The graphics may now be deleted Gdip_DeleteGraphics(G) ; ...and gdi+ may now be shutdown Gdip_Shutdown(pToken) ExitApp Return
0.定式
init: ; Specify both of the files we are going to use File1 = mario.png File2 = site_logo.gif ; If the images we want to work with do not exist on disk, then download them... If !(FileExist(File1) && FileExist(File2)) { MsgBox, 缺少文件 mario.png 与 site_logo.gif 。`r`n重新去教程里下载,或者也可以随便找两张背景透明的png图片改名替代看效果! ExitApp } ; Start gdi+ If !pToken := Gdip_Startup() { MsgBox, 48, gdiplus error!, Gdiplus failed to start. Please ensure you have gdiplus on your system ExitApp } OnExit, ExitGdip ; Create a 500x500 pixel gdi+ bitmap (this will be the entire drawing area we have to play with) ; 用指定的宽高创建一个 pBitmap pBitmap := Gdip_CreateBitmap(600, 600) ; Get a pointer to the graphics of the bitmap, for use with drawing functions ; 创建画布 G := Gdip_GraphicsFromImage(pBitmap) Return
本章习题:使用 Gdip_BitmapFromHWND(hwnd),将记事本窗口内容截图并保存为文件。
全部代码与库文件下载地址:
https://ahk.lanzoux.com/b01nypnuh
密码:1234
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。
评论(0)