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. UEZ

Beiträge von UEZ

  • HILFE GESUCHT: Bild in Format X in Icon-Datei (*.ico) umwandeln/konvertieren/abspeichern

    • UEZ
    • 13. Mai 2012 um 22:15

    Du musst die Hex() Funktion anpassen, da in den älteren AutoIt Versionen die Hex() Länge Standard 8 ist.

    Beispiel:

    Spoiler anzeigen
    [autoit]


    #include <GDIPlus.au3>
    #include <WinAPI.au3>
    $file = FileOpenDialog("Ein Bild auswählen", "", "Bilder (*.jpg;*.bmp;*.png)")
    If @error Then Exit

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

    _GDIPlus_Startup ()
    $bild = Resize($file)
    $hIcon = _GDIPlus_BitmapCreateHICONFromBitmap($bild)
    _CreateIconFileFromHICON($hIcon, @ScriptDir & "\Test.ico")
    _WinAPI_DestroyIcon($hIcon)
    _GDIPlus_BitmapDispose($bild)
    Exit

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

    Func Resize($sFilename, $width = 64, $height = 64) ; code by UEZ 2011
    Local $hBitmap = _GDIPlus_BitmapCreateFromFile($sFilename)
    Local $iH = _GDIPlus_ImageGetHeight($hBitmap)
    Local $iW = _GDIPlus_ImageGetWidth($hBitmap)
    Local $hImage = _GDIPlus_BitmapCreateFromScan0($width, $height)
    Local $hContext = _GDIPlus_ImageGetGraphicsContext($hImage)
    If $iW < $width And $iH < $height Then
    $w = $width / 2 - $iW / 2
    $h = $height / 2 - $iH / 2
    _GDIPlus_GraphicsDrawImageRect($hContext, $hBitmap, $width / 2 - $iW / 2, $height / 2 - $iH / 2, $iW, $iH)
    Else
    If $iW > $iH Then
    $f = $iW / $width
    Else
    $f = $iH / $height
    EndIf
    $w = $iW / $f
    $h = $iH / $f
    _GDIPlus_GraphicsDrawImageRect($hContext, $hBitmap, $width / 2 - $w / 2, $height / 2 - $h / 2, $w, $h)
    EndIf
    _GDIPlus_GraphicsDispose($hContext)
    _GDIPlus_BitmapDispose($hBitmap)
    Return $hImage
    EndFunc

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

    Func _CreateIconFileFromHICON($hIcon, $sOutIcon) ;code by smashly
    Local $aInfo, $sIco, $sBmp, $hCDC, $tBI, $tBits, $iSz, $sBD, $FO

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

    ; Start of single Icon Header 3 x 2 bytes = 6 bytes: 0000 Reserved / 0100 Icon / 0100 Numer of icons, total length will be 22 bytes for a single icon when finished
    $sIco = "0x000001000100"

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

    ; Start of the Bitmap data header 1 x 4bytes: length of the header will be 40 bytes when finished. Will be appended to the end of the icon header when finished
    $sBmp = "28000000"

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

    ; Get info about the HICON, this is mainly to get the pointers to the Color/Mask bitmaps data
    $aInfo = _WinAPI_GetIconInfo($hIcon)

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

    ; Create a memory Compatable DC
    $hCDC = _WinAPI_CreateCompatibleDC(0)

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

    ; Create a BITMAPINFO Struct to store the Bitmap Info, it needs to be inilialized by setting the struct size.
    $tBI = DllStructCreate($tagBITMAPINFO)
    DllStructSetData($tBI, "Size", DllStructGetSize($tBI))

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

    ; Pass a bitmap data pointer to the BITMAPINFO struct so we can recieve the details of the color bitmap data, we use it to write the headers
    _WinAPI_GetDIBits($hCDC, $aInfo[5], 0, 0, 0, DllStructGetPtr($tBI), 0)

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

    ; Now we have some the basic info to add to the Icon & Bitmap header so we'll add that to the headers.
    $sIco &= Hex(DllStructGetData($tBI, "Width"), 2) & Hex(DllStructGetData($tBI, "Height"), 2) & "00000100" & _RB(Hex(DllStructGetData($tBI, "BitCount"), 4))
    $sBmp &= _RB(Hex(DllStructGetData($tBI, "Width"), 8)) & _RB(Hex(DllStructGetData($tBI, "Height") * 2, 8)) & "0100" & _RB(Hex(DllStructGetData($tBI, "BitCount"), 4)) & "00000000"

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

    ; Get the size of the Bitmap data from the BITMAPINFO Struct, we'll use this in the headers further on.
    $iSz = DllStructGetData($tBI, "SizeImage")

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

    ; Create a struct to store the Bitmap data Bits of the first bitmap, reset the BITMAPINFO struct
    $tBits = DllStructCreate("byte[" & DllStructGetData($tBI, "SizeImage") & "]")

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

    ; Get the color bitmap dib bits into the $tBits struct.
    DllCall('gdi32.dll', 'int', 'GetBitmapBits', 'ptr', $aInfo[5], 'int', $iSz, 'ptr', DllStructGetPtr($tBits))

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

    ; Get GetBitmapBits returns Bottom to Top dib, so I turn it to Top to Bottom dib ;)
    ; ATM I'm only assuming that GetBitmapBits returns a Bottom to Top dib, maybe the bitmap bits you use could be Top Down already?.
    For $i = DllStructGetData($tBI, "SizeImage") + 1 To 0 Step -(DllStructGetData($tBI, "SizeImage") / DllStructGetData($tBI, "Height"))
    $sBD &= StringTrimLeft(BinaryMid(DllStructGetData($tBits, 1), $i, (DllStructGetData($tBI, "SizeImage") / DllStructGetData($tBI, "Height"))), 2)
    Next

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

    ;Clear the BITMAPINFO & $tBits Struct as we'll use the same variables again for the mask bitmap data
    $tBits = 0
    $tBI = 0

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

    ; Create a BITMAPINFO Struct to store the Bitmap Info again, it needs to be inilialized by setting the struct size.
    $tBI = DllStructCreate($tagBITMAPINFO)
    DllStructSetData($tBI, "Size", DllStructGetSize($tBI))

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

    ; Pass a bitmap data pointer to the BITMAPINFO struct so we can recieve the details of the bitmask bitmap data
    _WinAPI_GetDIBits($hCDC, $aInfo[4], 0, 0, 0, DllStructGetPtr($tBI), 0)

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

    ; We've finished with the Compatable DC, delete it.
    _WinAPI_DeleteDC($hCDC)

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

    ; Add the size of the of the color + bitmask bitmap data as we need this for both the Icon & Bitmap header
    $iSz += DllStructGetData($tBI, "SizeImage")

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

    ; combine the bitmap data size with the bitmap header, I'm padding the rest of the 40 byte bitmap header with 0's., that's the Bitmap header done
    $sBmp &= _RB(Hex($iSz, 8)) & "00000000000000000000000000000000"

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

    ; Now add the size of the Bitmap data + bitmap header size and combine the icon header together with the bitmap header and color bitmap data
    $sIco &= _RB(Hex($iSz + 40, 8)) & _RB(Hex("22", 8)) & $sBmp & $sBD

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

    ; Create a struct to store the Bitmap dib Bits of the mask bitmap
    $tBits = DllStructCreate("byte[" & DllStructGetData($tBI, "SizeImage") & "]")

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

    ; Get the mask bitmap dib bits into the $tBits struct.
    DllCall('gdi32.dll', 'int', 'GetBitmapBits', 'ptr', $aInfo[4], 'int', DllStructGetData($tBI, "SizeImage"), 'ptr', DllStructGetPtr($tBits))

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

    ; Get GetBitmapBits returns Bottom to Top dib, so I turn it to a Top to Bottom dib and append the mask bitmap data to the icon
    For $i = DllStructGetData($tBI, "SizeImage") + 1 To 0 Step -(DllStructGetData($tBI, "SizeImage") / DllStructGetData($tBI, "Height"))
    $sIco &= StringTrimLeft(BinaryMid(DllStructGetData($tBits, 1), $i, (DllStructGetData($tBI, "SizeImage") / DllStructGetData($tBI, "Height"))), 2)
    Next

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

    ; Write the icon to a file.
    $FO = FileOpen($sOutIcon, 18)
    FileWrite($sOutIcon, Binary($sIco))
    FileClose($FO)

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

    ; Clear the structs
    $tBits = 0
    $tBI = 0
    EndFunc ;==>_CreateIconFileFromHICON

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

    Func _GDIPlus_BitmapCreateFromScan0($iWidth, $iHeight, $iStride = 0, $iPixelFormat = 0x0026200A, $pScan0 = 0)
    Local $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromScan0", "int", $iWidth, "int", $iHeight, "int", $iStride, "int", $iPixelFormat, "ptr", $pScan0, "int*", 0)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aResult[6]
    EndFunc ;==>_GDIPlus_BitmapCreateFromScan0

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

    Func _GDIPlus_BitmapCreateHICONFromBitmap($hBitmap)
    Local $hIcon
    $hIcon = DllCall($ghGDIPDll, "int", "GdipCreateHICONFromBitmap", "hwnd", $hBitmap, "int*", 0)
    If @error Then Return SetError(@error, 0, -1)
    Return SetError($hIcon[0], 0, $hIcon[2])
    EndFunc ;==>_GDIPlus_BitmapCreateHICONFromBitmap

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

    ; Reverse Byte String
    Func _RB($sByte)
    Local $aX = StringRegExp($sByte, "(.{2})", 3), $sX = ''
    For $i = UBound($aX) - 1 To 0 Step -1
    $sX &= $aX[$i]
    Next
    Return $sX
    EndFunc ;==>_RB

    [/autoit]

    Gruß,
    UEZ

  • HILFE GESUCHT: Bild in Format X in Icon-Datei (*.ico) umwandeln/konvertieren/abspeichern

    • UEZ
    • 13. Mai 2012 um 15:52

    Schaue mal hier nach: http://www.autoitscript.com/forum/index.php?showtopic=101305

    Gruß,
    UEZ

  • AutoIt Windows Screenshooter v1.84 Build 2019-08-18

    • UEZ
    • 2. Mai 2012 um 21:37

    Könnt ihr bitte mal testen, ob der Image Editor "buggy" ist (markieren, Reckteck, Kreis, Pfeil zeichnen, Text positionieren bzw. rotieren, Gfx FX testen, etc.)?

    VIELEN DANK!

    Gruß,
    UEZ

  • Wer steigt auf Windows 8 um?

    • UEZ
    • 2. Mai 2012 um 17:31

    Danke für den Tipp - werde ich testen.

    Nichts desto trotz, wenn die Shell auch schneller ist als Win7 und kleiner, kann ich nicht sagen, bitte die Shell installieren, damit ihr mit dem Windows Screenshooter einigermaßen performante Videos machen könnt.

    Gruß,
    UEZ

  • Wer steigt auf Windows 8 um?

    • UEZ
    • 2. Mai 2012 um 16:19

    Ich habe Win8 (Consumer Preview) in Oracle VM VirtualBox installiert und mit dem Windows Screenshooter ein Video mit 5 FPS erstellt -> kein ruckeln der Maus, keine Hänger generell - krass. 8o

    Scheint richtig gut optimiert zu sein.

    Wenn man noch den Metro $hit abstellen kann, ist das Ding echt top!

    Gruß,
    UEZ

  • Bild in gui

    • UEZ
    • 1. Mai 2012 um 22:21

    Du kannst auch sogenannte "Binärstrings" verwenden und Daten, wie z.B. Bilder in dein Script (Exe) einbetten.

    Beispiele hier: File to Base64 String Code Generator v1.07 Build 2012-04-24 (Beispiele im Post #6)

    Gruß,
    UEZ

  • Grafik Engine Erstellen

    • UEZ
    • 26. April 2012 um 09:24

    Sieht gut aus!

    Was macht eigentlich der ASM Code genau?

    Gruß,
    UEZ

  • Ressourcen (Bilder, etc.) in Script einbinden

    • UEZ
    • 25. April 2012 um 21:40

    Die bessere Variante -> File to Base64 String Code Generator v1.07 Build 2012-04-24

    Gruß,
    UEZ

  • AutoIt Windows Screenshooter v1.84 Build 2019-08-18

    • UEZ
    • 19. April 2012 um 19:50

    Danke für dein Feedback! 8o

    Ich arbeite grundsätzlich auch auf Win7 x64 und ich bekomme keine Fehlermeldung! ?(

    Opt("MustDeclareVars", 1) sollte genau diese FM eigentlich vermeiden!


    Das mit dem Video ist leider AutoIt bedingt und ich habe alles versucht, um die max. Geschwindigkeit rauszuholen. Hier stößt AutoIt wohl an seine Grenzen!

    Kannst du das Skript bitte mal starten mit "Ausführen als Administrator" und die Invert Funktion nochmals testen?

    Neue Version hochgeladen.

    Gruß,
    UEZ

  • AutoIt Windows Screenshooter v1.84 Build 2019-08-18

    • UEZ
    • 19. April 2012 um 09:02

    Update auf v1.45 Build 2012-04-18.

    Ich habe ein kleines Bildbearbeitungstool eingebaut.

    Gruß,
    UEZ

  • Happy Birthday i2c

    • UEZ
    • 18. April 2012 um 09:22

    Herzlichen Glückwunsch zum Geburtstag und alles Gute!

    Feier schön...

    Gruß,
    UEZ

  • GDIPlus gebürstetes Aluminium ;)

    • UEZ
    • 17. April 2012 um 21:41

    Schöner Effekt! :thumbup:

    Du überraschst mich immer wieder mit neuen Idee und vor allen Dingen, wie du deine Ideen umsetzt! :thumbup:

    WEITER SO!


    Wenn die Bauphase sich ein wenig gelegt hat, werde ich mich auch wieder um die "brotlose Kunst" kümmern...


    Gruß,
    UEZ

  • Koordinaten von Eckpunkten mit Rotation berechnen (Rechteck)

    • UEZ
    • 11. April 2012 um 15:58

    Ich würde es mit Vektoren lösen, wobei ich persönlich erst mal ein "Refresh" bzgl. Vektorrechnung benötige und das kann dauern...

    Vielleicht sind die Schüler und Studenten hier Up2Date.

    Gruß,
    UEZ

  • Koordinaten von Eckpunkten mit Rotation berechnen (Rechteck)

    • UEZ
    • 11. April 2012 um 15:52
    Zitat von V8II


    ...
    http://www.imagebanana.com/view/jqfckqvm/rechteck.png
    ...

    Irgendwie sehe ich nur Banane...

    Ok, jetzt kann ich es sehen.

    Gruß,
    UEZ

  • Koordinaten von Eckpunkten mit Rotation berechnen (Rechteck)

    • UEZ
    • 11. April 2012 um 15:47

    Wie wäre es, wenn du mal mit ein paar konkreten Zahlen rausrückst, die du hast. Ansonsten ist es ohne Glaskugel schwer zu erraten, was du genau willst.

    Gruß,
    UEZ

  • Koordinaten von Eckpunkten mit Rotation berechnen (Rechteck)

    • UEZ
    • 11. April 2012 um 15:39

    Kannst du näher definieren, was ein Rechteck mit einer bestimmten Rotation und Position ist?

    Denn, wenn du die Rotation und auch die Position kennst, solltest du doch die Eckpunkte auch kennen!

    Gruß,
    UEZ

  • Random() mit Tendenz

    • UEZ
    • 11. April 2012 um 11:04
    Zitat von SEuBo

    Nur mal für mich selbst gefragt:
    Würde das hier nicht das selbe machen, oder habe ich da einen logischen Denkfehler?

    [autoit]

    Local $iZahl

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

    Switch Random(1, 110, 1)
    Case 1 To 100
    $iZahl = Random(1,5,1)
    Case 101 To 110
    $iZahl = Random(1,3,1)
    EndSwitch

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

    MsgBox(0,'',$iZahl)

    [/autoit]
    Alles anzeigen

    Das sollte auch funzen, nur musst du viele Switch Case Anweisungen hard coden, wenn du n Zahlen hast mit m Tendenzen haben willst.

    Gruß,
    UEZ

  • Random() mit Tendenz

    • UEZ
    • 10. April 2012 um 17:25

    Hier meine Version:

    [autoit]


    #include <Array.au3>
    Global $aZahlen[5][3] = [[1, 10, 0], [2, 10, 0], [3, 30, 0], [4, 40, 0], [5, 10, 0]] ; -> Array besteht aus Zahl, Wahrscheinlichkeit [0-100], Häufigkeit
    ; in diesem Beispiel soll die 4 am häufigsten vorkommen, dann die 3 und zu letzt der Rest.

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

    Random_Tendenz($aZahlen)

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

    _ArrayDisplay($aZahlen, "Wahrscheinlichkeit mit Tendenz", -1, 0, "", "|", "|Zahl|Wahrscheinlichkeit (%)|Häufigkeit")

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

    Func Random_Tendenz(ByRef $aZahlen, $loops = 10000)
    Local $i, $j, $k = 1
    Local $aRange[101]
    For $i = 0 To UBound($aZahlen) - 1
    For $j = 1 To $aZahlen[$i][1]
    $aRange[$k] = $i
    $k += 1
    Next
    Next
    For $i = 1 To $loops
    $aZahlen[$aRange[Random(1, 100, 1)]][2] += 1
    Next
    $aRange = 0
    EndFunc

    [/autoit]


    Passt das soweit?

    Gruß,
    UEZ

  • Zeile in 2D Array schreiben

    • UEZ
    • 6. April 2012 um 14:11

    Da ich deinen Fall nicht verstehe, habe ich mir gedacht, dass du vllt. sowas suchst - war ein Versuch wert.

    Versuche konkret zu beschreiben, was du willst, ansonsten raten wir nur rum!

    Gruß,
    UEZ

  • Zeile in 2D Array schreiben

    • UEZ
    • 6. April 2012 um 12:52

    Meinst du vielleicht so was? -> http://autoitscript.com/forum/topic/12…528#entry896528

    Gruß,
    UEZ

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™