1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. eukalyptus

Beiträge von eukalyptus

  • GDI+ Bitmap speichern...

    • eukalyptus
    • 30. September 2009 um 10:25

    So wie beim ersten Beispiel sollte das auch beim zweiten funktionieren.

    Zuerst auf DC_mem zeichnen (zum speichern) und erst dann auf DC_dest (zum anzeigen)

    mfgE

  • GDI+ Bitmap speichern...

    • eukalyptus
    • 29. September 2009 um 16:12

    Am besten direkt ins Bitmap zeichnen:

    Spoiler anzeigen
    [autoit]

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

    [/autoit] [autoit][/autoit] [autoit]

    Opt('MustDeclareVars', 1)

    [/autoit] [autoit][/autoit] [autoit]

    _Main()

    [/autoit] [autoit][/autoit] [autoit]

    Func _Main()
    Local $hGUI, $hWnd, $hGraphic, $hBrush, $hFormat, $hFamily, $hFont, $tLayout, $hImage, $hGraphic_hWnd

    [/autoit] [autoit][/autoit] [autoit]

    ; Create GUI
    $hGUI = GUICreate("GDI+", 400, 300)
    $hWnd = WinGetHandle("GDI+")
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    ; Draw a string
    _GDIPlus_Startup()
    $hGraphic_hWnd = _GDIPlus_GraphicsCreateFromHWND($hWnd)
    $hImage = _GDIPlus_BitmapCreateFromGraphics(400, 300, $hGraphic_hWnd)
    $hGraphic = _GDIPlus_ImageGetGraphicsContext($hImage)
    $hBrush = _GDIPlus_BrushCreateSolid(0x7F00007F)
    $hFormat = _GDIPlus_StringFormatCreate()
    $hFamily = _GDIPlus_FontFamilyCreate("Arial")
    $hFont = _GDIPlus_FontCreate($hFamily, 12, 2)
    $tLayout = _GDIPlus_RectFCreate(140, 110, 100, 20)
    _GDIPlus_GraphicsDrawStringEx($hGraphic, "Hello world", $hFont, $tLayout, $hFormat, $hBrush)
    _GDIPlus_GraphicsDrawImage($hGraphic_hWnd, $hImage, 0, 0)

    [/autoit] [autoit][/autoit] [autoit]

    ;*********************Bitmap soll gespeichert werden********************

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ; Loop until user exits
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_ImageSaveToFile($hImage, "Test.bmp")
    _GDIPlus_ImageDispose($hImage)

    [/autoit] [autoit][/autoit] [autoit]

    ; Clean up resources
    _GDIPlus_FontDispose($hFont)
    _GDIPlus_FontFamilyDispose($hFamily)
    _GDIPlus_StringFormatDispose($hFormat)
    _GDIPlus_BrushDispose($hBrush)
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_Shutdown()

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>_Main

    [/autoit]

    bzw.: direkt DC speichern:

    Spoiler anzeigen
    [autoit]

    #include <WinAPI.au3>
    #include <WindowsConstants.au3>
    #include <GDIPlus.au3>

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Opt('MustDeclareVars', 1)

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_Startup()

    [/autoit] [autoit][/autoit] [autoit]

    local $hfile_Source = _GDIPlus_ImageLoadFromFile(@WindowsDir & "\web\wallpaper\Tulpen.jpg")
    local $hfile_dest = _GDIPlus_ImageLoadFromFile(@WindowsDir & "\web\wallpaper\Mondkrater.jpg")
    local $iX1 = 300;_GDIPlus_ImageGetWidth($hSource1)
    local $iY1 = 400;_GDIPlus_ImageGetHeight($hSource1)
    local $iX2 = 300;_GDIPlus_ImageGetWidth($hSource2)
    local $iY2 = 400;_GDIPlus_ImageGetHeight($hSource2)

    [/autoit] [autoit][/autoit] [autoit]

    ;****************GUI DEST*******************
    local $hGui_dest = GUICreate("DEST", $iX1 , $iY1)
    local $hPic_dest = GUICtrlCreatePic('', 0,0, $iX1 , $iY1)
    local $hWnd_dest = WinGetHandle($hGui_dest)
    GUISetState(@sw_show,$hgui_dest)

    [/autoit] [autoit][/autoit] [autoit]

    local $hGraphic_dest = _GDIPlus_GraphicsCreateFromHWND($hWnd_dest)
    local $hDestination_dest = _GDIPlus_BitmapCreateFromGraphics($iX1, $iY1, $hGraphic_dest)
    local $hGraphiccontext_dest = _GDIPlus_ImageGetGraphicsContext($hDestination_dest)
    _GDIPlus_GraphicsDrawImage($hGraphiccontext_dest, $hfile_dest, 0, 0) ;ziel in context schreiben
    _GDIPlus_GraphicsDrawImage($hGraphic_dest, $hfile_dest, 0, 0); ziel ist fenster

    [/autoit] [autoit][/autoit] [autoit]

    ;****************GUI source*******************
    local $hGui_source = GUICreate("SOURCE", $iX2 , $iY2,10,10)
    local $hPic_source = GUICtrlCreatePic('', 0,0, $iX2 , $iY2)
    local $hWnd_source = WinGetHandle($hGui_source)
    GUISetState(@sw_show,$hgui_source)

    [/autoit] [autoit][/autoit] [autoit]

    local $hGraphic_source = _GDIPlus_GraphicsCreateFromHWND($hWnd_source)
    local $hDestination_source = _GDIPlus_BitmapCreateFromGraphics($iX2, $iY2, $hGraphic_source)
    local $hGraphiccontext_source = _GDIPlus_ImageGetGraphicsContext($hDestination_source)
    _GDIPlus_GraphicsDrawImage($hGraphiccontext_source, $hfile_Source, 0, 0) ;wenn man das bild in den Context schreibt, kann man es speichern
    _GDIPlus_GraphicsDrawImage($hGraphic_source, $hfile_Source, 0, 0) ;bild in das Fenster zeichnen

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;*************BITBLT*****************
    local $verfahren=$mergepaint
    local $hdc_dest = _WinAPI_GetDC($hgui_dest)
    local $hdc_source = _WinAPI_GetDC($hgui_source)
    sleep(1000)
    _WinAPI_BitBlt($hDC_dest, 0, 0, $ix1, $iy1, $hDC_source, 0,0, $verfahren)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;**************BITMAP aus Fenster DEST soll gespeichert werden**************

    [/autoit] [autoit][/autoit] [autoit]

    Local $hBitmap=_WinAPI_CreateCompatibleBitmap($hdc_dest, $iX1, $iY1)
    Local $hdc_mem=_WinAPI_CreateCompatibleDC($hdc_dest)
    _WinAPI_SelectObject($hdc_mem, $hBitmap)
    _WinAPI_BitBlt($hdc_mem, 0, 0, $iX1, $iY1, $hDC_dest, 0,0, $SRCCOPY)

    [/autoit] [autoit][/autoit] [autoit]

    Local $hImage=_GDIPlus_BitmapCreateFromHBITMAP($hBitmap)
    _GDIPlus_ImageSaveToFile($hImage, "Test1.bmp")

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Do
    Until GUIGetMsg() = -3

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_Shutdown()

    [/autoit]
  • Speicherleck in GDI+ _GDIPlus_BitmapLockBits() ?

    • eukalyptus
    • 25. September 2009 um 19:36

    Das sollte man vielleicht als Bug melden!?

    Spoiler anzeigen
    [autoit]

    #include <ScreenCapture.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $hScreen, $hBitmap, $aMem, $tData

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_Startup()
    $hScreen=_ScreenCapture_Capture("", 0, 0, -1, -1, False)
    $hBitmap = _GDIPlus_BitmapCreateFromHBITMAP($hScreen)

    [/autoit] [autoit][/autoit] [autoit]

    For $i=1 To 100
    $tData = _GDIPlus_BitmapLockBits($hBitmap, 0, 0, _GDIPlus_ImageGetWidth($hBitmap), _GDIPlus_ImageGetHeight($hBitmap), $GDIP_ILMREAD, $GDIP_PXF24RGB)
    _GDIPlus_BitmapUnlockBits($hBitmap, $tData)
    Sleep(50)
    $aMem = MemGetStats()
    ConsoleWrite("original function; step " & $i & "; mem usage: " & $aMem[0] & @LF)
    Next

    [/autoit] [autoit][/autoit] [autoit]

    ConsoleWrite(@LF)

    [/autoit] [autoit][/autoit] [autoit]

    For $i=1 To 100
    $tData = _GDIPlus_BitmapLockBits($hBitmap, 0, 0, _GDIPlus_ImageGetWidth($hBitmap), _GDIPlus_ImageGetHeight($hBitmap), $GDIP_ILMREAD, $GDIP_PXF24RGB)
    _GDIPlus_BitmapUnlockBits_($hBitmap, $tData)
    Sleep(50)
    $aMem = MemGetStats()
    ConsoleWrite("test function; step " & $i & "; mem usage: " & $aMem[0] & @LF)
    Next

    [/autoit] [autoit][/autoit] [autoit]

    Func _GDIPlus_BitmapUnlockBits_($hBitmap, $tBitmapData)
    Local $aResult

    [/autoit] [autoit][/autoit] [autoit]

    $aResult = DllCall($ghGDIPDll, "int", "GdipBitmapUnlockBits", "hwnd", $hBitmap, "ptr", DllStructGetPtr($tBitmapData)) ;Type ptr instead of int*
    If @error Then Return SetError(@error, @extended, False)
    Return SetError($aResult[0], 0, $aResult[0] = 0)
    EndFunc ;==>_GDIPlus_BitmapUnlockBits

    [/autoit]
  • Speicherleck in GDI+ _GDIPlus_BitmapLockBits() ?

    • eukalyptus
    • 25. September 2009 um 01:43

    Wenn man _GDIPlus_BitmapUnlockBits Type "int*" auf "ptr" ändert, dann gehts:

    [autoit]

    DllCall($ghGDIPDll, "int", "GdipBitmapUnlockBits", "hwnd", $hBitmap, "int*", DllStructGetPtr($tBitmapData))

    [/autoit][autoit]

    DllCall($ghGDIPDll, "int", "GdipBitmapUnlockBits", "hwnd", $hBitmap, "ptr", DllStructGetPtr($tBitmapData))

    [/autoit]

    Wie werden eigentlich die beiden DllStructs $tRect und $tData (_GDIPlus_BitmapLockBits) wieder freigegeben?
    Sollte das bei $tData($tBitmapData) eben durch "int*" erreicht werden und muß man nun noch extra $tBitmapData=0 schreiben?

  • SuperMario Gameplay und Download

    • eukalyptus
    • 23. September 2009 um 18:57

    Nun wird das Spiel schön langsam fertig :)

    download im ersten Post

    Die Geschwndigkeit wurde sehr optimiert - sollte nun auch auf älteren Modellen flüssig laufen.
    Design geändert
    Startmenü hinzugefügt

    Neue Levels gibts noch nicht
    Gummibaer hat z.Z. etwas Streß, aber der Leveleditor wird auch bald soweit sein

    viel Spaß!

    lgE

  • [spiel] Wünsch dir was !

    • eukalyptus
    • 16. September 2009 um 11:26

    Deine Brüder machen eine Geschlechtsumwandlung! :D

    -----

    Ich wünsch mir eine schönere Wohnung!

  • Level erditor geht net richtig

    • eukalyptus
    • 15. September 2009 um 15:41

    Hi

    Deine Version des Leveleditors ist nicht aktuell!
    Auch die letzte Version 7.3 ist nur bedingt zum aktuellen Spiel kompatibel.

    Das wird noch ein paar Tage dauern, bis es einen neuen Leveleditor gibt.
    Wir hoffen, Ihr könnt noch etwas warten ;)

    lgE

  • Bilder aneinander reien

    • eukalyptus
    • 15. September 2009 um 00:42

    Vielleicht hilft dir das
    [ gelöst ] DLL-Download Seite / Suche DLL um aus JPG's ein Panoramabild zu machen

    lgE

  • GDIPlus Bildgröße veränder + verschieben

    • eukalyptus
    • 14. September 2009 um 15:49
    [autoit]

    $hGui=GUICreate("",640,520)
    GUISetState()
    $hGraphics=_GDIPlus_GraphicsCreateFromHWND($hGui)
    $hBitmap=_GDIPlus_BitmapCreateFromGraphics(320,260,$hGraphics)
    $hGraphicsBMP=_GDIPlus_ImageGetGraphicsContext($hBitmap)

    [/autoit]

    Und dann alle Bilder 20px tiefer zeichnen:

    [autoit]

    _GDIPlus_GraphicsDrawImage($hGraphicsBMP,$hBMP_Backround,0,20)

    [/autoit]

    Und letztendlich auch noch korrekt vergrößert aufs Fenster:

    [autoit]

    _GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap, 0,0,640,520)

    [/autoit]

    lgE

  • SuperMario Gameplay und Download

    • eukalyptus
    • 13. September 2009 um 16:41

    Bei mir läuft es unter Ubuntu / WINE problemlos - sogar mit Sound!
    Allerdings muß man die GDIplus.dll ins Mario-Verzeichnis kopieren

    Auf ReactOS läuft es nicht! Aber da bin ich sowieso etwas skeptisch, ob das jemals ein vernünftiges Betriebssystem werden wird...


    AWSD find ich gut.
    Ich werd das gleich mal einbauen, daß man entweder AWSD oder die Cursortasten verwenden kann.
    Und auch Leertaste oder STRG zum schießen.

    lgE

  • Checkboxen abgleich über Progressbar

    • eukalyptus
    • 12. September 2009 um 21:45

    Ich wollte auch nur zeigen, wie die Berechnung in etwa funktioniert.
    Probier mal dein Script dementsprechend anzupassen.
    Wenn du es nicht schaffst, dann melde dich einfach wieder ;)

  • SuperMario Gameplay und Download

    • eukalyptus
    • 12. September 2009 um 21:38

    @xXTobi93Xx: Wenn man sich duckt und dann wegspringt, kann man höher und weiter springen. So schafft man es auch über den Abgrund, wenn alle Steine weg sind.
    Das sollte aber dennoch eine Falle sein ;)

    Hab wieder ein paar Änderungen vorgenommen:
    1) Zeitlimit von 300 Sek. (Sollte das Spiel auf einem Rechner langsamer laufen als geplant, dann vergeht auch die Zeit langsamer)
    @Gummibaer: Im Level kann man die Zeit übergeben "TIME=300" zum Beispiel.

    2) Musik wird in den letzten 60 Sek immer schneller
    (passt das so, oder sollen es mehr oder weniger sein?)

    3) Bug beim schießen: manchmal konnte man durch Wände schießen und somit auch Pflanzen töten, welche noch im Rohr waren - fixed


    Wie funktioniert das eigenltich mit den Punkten und den Goldstücken?
    Ab wieviel erhält man ein Leben bzw. was gibt es da sonst noch?
    Werden die Werte zurückgesetzt, wenn man ein Leben erhält oder wenn man stirbt usw...?

    thx

  • Checkboxen abgleich über Progressbar

    • eukalyptus
    • 12. September 2009 um 08:59

    Sowas ?

    Spoiler anzeigen
    [autoit]

    Global $iMaxCheckBox=14
    Global $iChecked=0

    [/autoit] [autoit][/autoit] [autoit]

    Global $hCheckBox[$iMaxCheckBox+1]
    $hGui=GUICreate("Gui 1",240,$iMaxCheckBox*15+50)
    For $i= 1 To $iMaxCheckBox
    $hCheckBox[$i]=GUICtrlCreateCheckbox("CheckBox " & $i,20,$i*15,200,15)
    Next
    Global $hButton=GUICtrlCreateButton("Start",20,$iMaxCheckBox*15+20,200,20)
    GUISetState(@SW_SHOW, $hGui)

    [/autoit] [autoit][/autoit] [autoit]

    Global $hChild=GUICreate("Gui 2",400,200)
    Global $hProgress1=GUICtrlCreateProgress(10,10,380,10)
    Global $hProgress2=GUICtrlCreateProgress(10,30,380,10)
    Global $hProgress3=GUICtrlCreateProgress(10,50,380,10)
    Global $hLabel1=GUICtrlCreateLabel("",10,70,380,20)
    Global $hLabel2=GUICtrlCreateLabel("",10,100,380,20)
    GUISetState(@SW_HIDE, $hChild)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While 1
    Switch GUIGetMsg()
    Case -3
    Exit
    Case $hButton
    ExitLoop
    EndSwitch
    Sleep(10)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState(@SW_HIDE, $hGui)
    GUISetState(@SW_SHOW, $hChild)

    [/autoit] [autoit][/autoit] [autoit]

    For $i=1 To $iMaxCheckBox
    If GUICtrlRead($hCheckBox[$i]) = 1 Then $iChecked+=1
    Next

    [/autoit] [autoit][/autoit] [autoit]

    For $iInstallationsSchritt=1 To $iChecked
    For $iEinzelneInstallationsSchritt=1 To 100 Step 5
    GUICtrlSetData($hProgress1, ($iInstallationsSchritt * 100) / $iChecked)
    GUICtrlSetData($hProgress2, (($iInstallationsSchritt-1) * 100 / $iChecked) + (100 / $iChecked) / 100 * $iEinzelneInstallationsSchritt)
    GUICtrlSetData($hProgress3, $iEinzelneInstallationsSchritt)
    GUICtrlSetData($hLabel1,"Gesammte Installation " & $iInstallationsSchritt & " / " & $iChecked & " - " & Round((($iInstallationsSchritt-1) * 100 / $iChecked) + (100 / $iChecked) / 100 * $iEinzelneInstallationsSchritt) & "%")
    GUICtrlSetData($hLabel2,"Aktuelle Installation " & $iEinzelneInstallationsSchritt & "%")
    Sleep(100)
    If GUIGetMsg() = -3 Then Exit
    Next
    Next

    [/autoit]
  • SuperMario Gameplay und Download

    • eukalyptus
    • 11. September 2009 um 11:48

    Es gibt eine komplett neue Version!

    Die Grafik wird nun mit GDI+ erstellt (alte Version: IconDrawEx) und sollte etwas schneller laufen, als die alte Version. (besonders bei vergrößertem Fenster)
    Des weiteren gibt es nun einige neue Elemente und Soundeffekte.

    Download ist im ersten Post zu finden.

    Viel Spaß

    Eukalyptus

  • SuperMario ToDo

    • eukalyptus
    • 6. September 2009 um 17:52

    Hi

    Danke für diesen Report :)
    Allerdings wird das Spiel im Moment von Grund auf neu geschrieben und hat dann mit dieser Version nicht mehr viel zu tun...

    ps.: die neue Version kommt bald

  • BIOS mag keine Bootmediumsauswahl mehr anbieten!?

    • eukalyptus
    • 6. September 2009 um 16:07

    Entferne mal kurz die Batterie, dann solltest du doch wieder Werkseinstellungen haben!?

    Dazu mußt du natürlich den Laptop aufschrauben, evtl. gibt es bei Medion auch eine andere Hardware-reset Option...
    (z.b. Fujitsu Siemens: Akku raus und 15 Sek Powerbutton drücken)

    lgE

  • Deutsche Hilfe - was gibts zu optimieren?

    • eukalyptus
    • 6. September 2009 um 15:47

    Hi

    Mir gefällt auch die Liste von Peethebee ganz gut.
    Allerdings würde ich Parent und Child mit Haupt und Unter(element) übersetzen.

    Der größte Vorteil der deutschen Hilfe könnte auch sein, daß mehr Funktionen mit Beispielscripten versehen sind.
    Wir sollten uns aufmachen um Beispielscripte für _WinAPI_BitBlt & Co zu schreiben.

    lgE

  • Deutsche Hilfe - was gibts zu optimieren?

    • eukalyptus
    • 5. September 2009 um 11:19

    Deutsche Syncro von Futurama:

    Wenn der Computer abstürzt, dann probieren Sie die alternative Kontroll-Löschung! (Alt-Ctrl-Del) :D

  • Undeclared Variable auf Line -1?

    • eukalyptus
    • 26. August 2009 um 10:11

    Hi

    Hier gibts ein geniales Script von BugFix, welches alle nicht deklarierten Variablen findet und automatisch anlegt:
    Variablendeklaration automatisiert - Opt("MustDeclareVars", 1)

    lgE

  • Bei Run Eingabeaufforderung nicht schließen

    • eukalyptus
    • 26. August 2009 um 09:49

    So:

    [autoit]


    RunWait(@COMSPEC & " /k " & @ScriptDir & "\wake.exe " & $mac & " 193.196.108.255")

    [/autoit]

    lgE

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™