找回密码
 加入
搜索
查看: 5043|回复: 12

[图形处理] GDI绘制动态频谱,API可以做到这样的效果吗?

 火.. [复制链接]
发表于 2011-6-20 15:28:20 | 显示全部楼层 |阅读模式
本帖最后由 qq342252004 于 2011-6-20 15:30 编辑

GDI绘制动态频谱,API可以做到这样的效果吗?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2011-6-20 16:32:47 | 显示全部楼层
http://www.autoitx.com/thread-14110-1-1.html
这种柱形图的不清楚,那个是官网的,可以参考下
 楼主| 发表于 2011-6-20 18:28:51 | 显示全部楼层
这种柱形图的不清楚,那个是官网的,可以参考下
netegg 发表于 2011-6-20 16:32

你给的连接我看过了,也是GDI。 用API可以做到这样的效果吗?
发表于 2011-6-20 18:57:57 | 显示全部楼层
本帖最后由 netegg 于 2011-6-20 18:59 编辑

回复 3# qq342252004
api好像一般不用来处理图像,不过看你怎么定义了,如果把gdi划到api范畴,个人认为也没什么不妥
发表于 2011-6-20 20:49:46 | 显示全部楼层
路过。。。
 楼主| 发表于 2011-6-20 22:06:08 | 显示全部楼层
听说GDI绘制图CPU占用高,API绘制图CPU占用低。
发表于 2011-6-20 23:48:28 | 显示全部楼层
回复 6# qq342252004
大概知道lz的意思了,你指的是gdi+,不是gdi,gdi的东西都在api里,gdi+确实比gdi占资源
发表于 2011-7-1 23:30:58 | 显示全部楼层
本质上GDI也调用了API
发表于 2011-7-2 07:02:33 | 显示全部楼层
GDI+学习起来有点难度。

搭车问下下面的问题:

#include <GuiConstantsEx.au3>
#include <GDIPlus.au3>

Opt('MustDeclareVars', 1)

_Main()

Func _Main()
        Local $hGUI, $hGraphic, $hPen
        $hGUI = GUICreate("GDI+", 400, 300)
        GUISetState()

        _GDIPlus_Startup ()
        $hGraphic = _GDIPlus_GraphicsCreateFromHWND ($hGUI)
        $hPen = _GDIPlus_PenCreate ()
        _GDIPlus_GraphicsDrawLine ($hGraphic, 10, 150, 390, 150, $hPen)
        _GDIPlus_GraphicsDrawLine ($hGraphic, 50, 50, 390, 390, $hPen)
        ;这时怎么删掉前面画的那条直线(就是水平的那条)?而后面那条保留(也就保留斜线)
        Do
        Until GUIGetMsg() = $GUI_EVENT_CLOSE

        _GDIPlus_PenDispose ($hPen)
        _GDIPlus_GraphicsDispose ($hGraphic)
        _GDIPlus_Shutdown ()

EndFunc

发表于 2011-7-2 07:19:12 | 显示全部楼层
一直在问个最简单的GDI+的问题,就是如画图里(mspaint.exe)那样,点了画“直线后,按下左键拖动鼠标,那条直线就跟着鼠标动,但始终只有一条直线,而不象下面的代码那样:鼠标一动,画了无数直线

#Include <ScreenCapture.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>


Global Const $CursorID = MouseGetCursor()
Global $hGUI, $hpen, $hGraphicBg

WhiteBoard()

Func WhiteBoard()
        Local $HBITMAP, $hBmp, $PenSize, $ColorValue
        Opt("GUIOnEventMode", 1)

        _GDIPlus_Startup()

        $HBITMAP = _ScreenCapture_Capture("", 0, 0, @DesktopWidth - 2, @DesktopHeight - 2, 0)
        $hGUI = GUICreate("WhiteBoard-LiveCapture", @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUP)

        GUISetState(@SW_SHOW, $hGUI)
        $hGraphicBg = _GDIPlus_GraphicsCreateFromHWND($hGUI)
        $hBmp = _GDIPlus_BitmapCreateFromHBITMAP($HBITMAP)
        _GDIPlus_GraphicsDrawImage($hGraphicBg, $hBmp, 0, 0)
        _WinAPI_DeleteObject($HBITMAP)

        $PenSize = 1
        $hPen = _GDIPlus_PenCreate(0xA0FFFF00, $PenSize)

        GUISetOnEvent(-3, "_Exit")
        OnAutoItExitRegister("_Exit")
        GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, "Draw", $hGUI)

        While True
                Sleep(2000)
        WEnd
EndFunc




Func Draw()
    Local $MousePos, $MouseXOri, $MouseYOri
        GUISetCursor(0, 1, $hGUI)
    $MousePos = GUIGetCursorInfo($hGUI)
        $MouseXOri = $MousePos[0]
        $MouseYOri = $MousePos[1]
    Sleep(50)
    Do
        $MousePos = GUIGetCursorInfo($hGUI)
        If $MouseXOri <> $MousePos[0] Or $MouseYOri <> $MousePos[1] Then
            _GDIPlus_GraphicsDrawLine($hGraphicBg, $MousePos[0], $MousePos[1], $MouseXOri, $MouseYOri, $hPen)
;这里该如何写?才能不会搞动如下图那样的“刷子”样的无数直线?
        EndIf
    Until Not $MousePos[2]
EndFunc

Func _Exit()
    GUISetCursor($CursorID, 1, $hGUI)
    GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, "")
    _GDIPlus_PenDispose($hPen)
    _GDIPlus_GraphicsDispose($hGraphicBg)
    _GDIPlus_Shutdown()
    GUIDelete($hGUI)
    Exit
EndFunc

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2011-7-2 14:45:29 | 显示全部楼层
回复 9# happytc
#include <GuiConstantsEx.au3>
#include <GDIPlus.au3>
 
Opt('MustDeclareVars', 1)
 
_Main()
 
Func _Main()
        Local $hGUI, $hGraphic, $hPen,$hPen1
        $hGUI = GUICreate("GDI+", 400, 300)
        GUISetState()
 
        _GDIPlus_Startup ()
        $hGraphic = _GDIPlus_GraphicsCreateFromHWND ($hGUI)
        $hPen = _GDIPlus_PenCreate ()
        _GDIPlus_GraphicsDrawLine ($hGraphic, 10, 150, 390, 150, $hPen)
                _GDIPlus_PenDispose ($hPen)
                $hPen1=_GDIPlus_PenCreate ()
                _GDIPlus_GraphicsDrawLine ($hGraphic, 50, 50, 390, 390, $hPen)
        Sleep(1000)
                _WinAPI_RedrawWindow($hGUI)
        ;这时怎么删掉前面画的那条直线(就是水平的那条)?而后面那条保留(也就保留斜线)
        Do
                        _GDIPlus_GraphicsDrawLine ($hGraphic, 50, 50, 390, 390, $hPen)
        Until GUIGetMsg() = $GUI_EVENT_CLOSE
 
        _GDIPlus_PenDispose ($hPen1)
        _GDIPlus_GraphicsDispose ($hGraphic)
        _GDIPlus_Shutdown ()
 
EndFunc
发表于 2011-7-3 21:31:12 | 显示全部楼层
回复 11# 3mile

谢了,但用_WinAPI_RedrawWindow($hGUI),对十楼的代码不灵了
虽然可以一直是一条直线,但背景图没有了,并且这条直线会不停地闪烁呀
发表于 2011-7-9 16:52:43 | 显示全部楼层
gdi比较难 看来要继续学习
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-14 14:10 , Processed in 0.080184 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表