1*1-Bildpunkte

  • Hallo allerseits,

    wie schon in der Shoutbox angekündigt, öffne ich jetzt einen neuen Threat :D

    Also ich habe (gekürzt) folgendes geschrieben:

    Code
    [autoit]

    Local $grenze = 11
    $gui = GUICreate("GDI+-Test", $grenze, $grenze, -1, -1, -1, $WS_EX_TOOLWINDOW)
    $hwnd = WinGetHandle("GDI+-Test")
    GUISetState()
    _GDIPlus_Startup()
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hwnd)
    $hBrush = _GDIPlus_BrushCreateSolid(0xFF0000FF)
    $hBrush2 = _GDIPlus_BrushCreateSolid(0xFFFFFF00)
    _GDIPlus_GraphicsFillRect($hGraphic, 0, 0, $grenze, $grenze, $hBrush)
    _GDIPlus_BrushDispose($hBrush)

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

    Do
    Sleep(10)
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

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

    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_Shutdown()

    [/autoit]

    Wie kann ich nun mit $hBrush2 einzelne Punkte malen, und zwar 1*1 Pixel groß? Mit Rechtecken muss das mindestens 2*2 groß sein...

    Danke schonmal im Voraus!

    • Offizieller Beitrag

    Also bei mir ist das hier ein einzelner Bildpunkt:

    Spoiler anzeigen
    [autoit]


    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    Local $grenze = 11
    $gui = GUICreate("GDI+-Test", $grenze, $grenze, -1, -1, $WS_POPUP, $WS_EX_TOOLWINDOW)
    $hwnd = WinGetHandle("GDI+-Test")
    GUISetState()
    _GDIPlus_Startup()
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hwnd)
    $hBrush = _GDIPlus_BrushCreateSolid(0xFF0000FF)
    $hBrush2 = _GDIPlus_BrushCreateSolid(0xFFFFFF00)
    _GDIPlus_GraphicsFillRect($hGraphic, 5, 5, 1, 1, $hBrush)
    _GDIPlus_BrushDispose($hBrush)

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

    Do
    Sleep(10)
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

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

    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_Shutdown()

    [/autoit]

    Habe extra die Bildschirmlupe gestartet (1920x1200).

  • In Ordnung, da habe ich mich wohl ein bisschen blöd angestellt... Sorry... Aber ein Problem habe ich immer noch (bzw. 2):
    Hier der ganze Code:

    Spoiler anzeigen
    [autoit]

    #include <Misc.au3>
    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <MathEx.au3>

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

    If Not _Singleton("Singelton_Check", 1) Then Exit

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

    Global $grenze = InputBox("Primzahlspirale von Ulam", "Bitte geben Sie den Spalten- bzw. Reihen-Wert ein:" & @CRLF & @CRLF & "(Achtung! Ab ca. 100 sehr Ressourcenlastig!)", "", " M", "-1", "-1", "-1", "-1")
    If @error = 1 Then
    Exit
    ElseIf @error = 2 Then
    MsgBox(16, "Primzahlspirale von Ulam", "Das Programm kann nicht ausgeführt werden!")
    Exit
    EndIf
    Global $aNumbers[$grenze][$grenze]

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

    ;GUICreate("Primzahlspirale von Ulam - Lade")
    For $n = 0 To ($grenze - 1) / 2
    $aNumbers[5 - $n][5 - $n] = 4 * $n ^ 2 + 1
    $aNumbers[5 - $n][5 + $n] = 4 * $n ^ 2 - 2 * $n + 1
    $aNumbers[5 + $n][5 - $n] = 4 * $n ^ 2 + 2 * $n + 1
    $aNumbers[5 + $n][5 + $n] = 4 * $n ^ 2 + 4 * $n + 1
    If $n Then
    For $i = 1 To $n * 2 - 1
    $aNumbers[5 - $n + $i][5 - $n] = $aNumbers[5 - $n][5 - $n] + $i
    $aNumbers[5 - $n + $i][5 + $n] = $aNumbers[5 - $n][5 + $n] - $i
    $aNumbers[5 + $n][5 - $n + $i] = $aNumbers[5 + $n][5 - $n] + $i
    $aNumbers[5 - $n][5 - $n + $i] = $aNumbers[5 - $n][5 - $n] - $i
    Next
    EndIf
    Next

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

    $gui = GUICreate("Primzahlspirale von Ulam", $grenze, $grenze, -1, -1, -1, $WS_EX_TOOLWINDOW)
    $hwnd = WinGetHandle("Primzahlspirale von Ulam")
    GUISetState()
    _GDIPlus_Startup()
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hwnd)
    $hBrush = _GDIPlus_BrushCreateSolid(0xFF0000FF)
    $hBrush2 = _GDIPlus_BrushCreateSolid(0xFFFFFF00)
    _GDIPlus_GraphicsFillRect($hGraphic, 0, 0, $grenze, $grenze, $hBrush)
    _GDIPlus_BrushDispose($hBrush)
    For $x = 0 To $grenze - 1
    For $y = 0 To $grenze - 1
    If _MathEx_IsPrime($aNumbers[$x][$y]) Then
    _GDIPlus_GraphicsFillRect($hGraphic, $x, $y, 1, 1, $hBrush2)
    EndIf
    Next
    Next
    _GDIPlus_BrushDispose($hBrush2)
    Do
    Sleep(10)
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

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

    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_Shutdown()

    [/autoit]

    Ich bin ja der mathematisch begeisterste hier :rofl: , also wollte ich die Primzahlspirale von Ulam nachstellen, doch leider kann ich 1. keine andere Zahl als 11 eingeben und 2. liegen die gelben Punkte falsch! Die sollen eigentlich auf dern Primzahlen drauf liegen...