GDI+ dpi einstellen

  • Hi,

    wieder mal eine Frage zu GDI+: Wie stelle ich die dpi ein? Immer wenn ich eine Bild erstelle erscheint es in 96dpi ich brauche aber 300. Ich habe keine Funktion dazu gefunden :/
    Ziel von dem Programm ist (vereinfacht), dass man die größe eines rechtecks eingibt (in cm) und es auch später 1:1 gedruck wird.

    Einmal editiert, zuletzt von KingLoL (5. Februar 2012 um 11:11)

  • Hier bitte:

    Bei Unklarheiten einfach fragen ;)

    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>

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

    $iMM_W = 210
    $iMM_H = 297

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

    $iDPI = 72 ;595 x 842
    ;$iDPI = 96 ;794 x 1123
    ;$iDPI = 300 ;2481 x 3508

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

    $iPX_W = Ceiling($iMM_W * $iDPI / 25.4) ;Wieviel Pixel sind $iMM_W mm bei $iDPI Auflösung
    $iPX_H = Ceiling($iMM_H * $iDPI / 25.4)

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

    _GDIPlus_Startup()
    $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromScan0", "int", $iPX_W, "int", $iPX_H, "int", 0, "int", 0x0026200A, "ptr", 0, "int*", 0)
    $hBitmap = $aResult[6]
    DllCall($ghGDIPDll, "uint", "GdipBitmapSetResolution", "hwnd", $hBitmap, "float", $iDPI, "float", $iDPI) ;Dpi setzen

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

    $hContext = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    DllCall($ghGDIPDll, "uint", "GdipSetPageUnit", "hwnd", $hContext, "int", 6) ;Graphicscontext auf mm setzen - ab jetzt wird in mm gezeichnet
    _GDIPlus_GraphicsSetSmoothingMode($hContext, 2)
    _GDIPlus_GraphicsClear($hContext, 0xFFFFFFFF)

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

    $hPen = _GDIPlus_PenCreate(0xFF00FF00, 10)
    _GDIPlus_GraphicsDrawRect($hContext, 0, 0, $iMM_W, $iMM_H, $hPen) ; Rechteck 0/0 - 210/297; Angaben in mm

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

    _GDIPlus_ImageSaveToFile($hBitmap, @ScriptDir & "\Test.bmp")

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

    _GDIPlus_PenDispose($hPen)
    _GDIPlus_GraphicsDispose($hContext)
    _GDIPlus_BitmapDispose($hBitmap)
    _GDIPlus_Shutdown()

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

    ShellExecute(@ScriptDir & "\Test.bmp")

    [/autoit]

    E

  • wow hammer danke, klappt echt super. einzige frage wäre jetzt nur, ob ich, wenn die dpi auf 300 sind, auch noch in mm zeichne. Das * $iDPI müsste es ja eigentlich ausgleichen. Und gebe ich bei $iMM_W auch in mm an?
    Danke für dein hilfe =)

    EDIT: Hat sich erledigt, die maße stimmen 1:1 danke nochmal =)

    Einmal editiert, zuletzt von KingLoL (5. Februar 2012 um 11:11)