sry ich bin zu dumm -.- ich hab ja einen Background mit dem ich den Block einfach überzeichnen kann^^
Beiträge von KingLoL
-
-
Hi,
ich hab mal wieder ein Problem in GDI+: Ich porgrammiere grade Bomberman online und muss explodierte Blöcke einmalig entfernen können...
Die komplette map bei jeder explosion neue zu laden ist zu langsam, also muss ich einzelne Blöcke (20x20 Pixel) von der bitmap entfernen können bzw. transparent erscheinen lassen. Ich hoffe ihr könnt mir helfen und danke im vorraus =)lg KingLoL
-
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 =)
-
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. -
Hi,
Ich habe neulich TCP enddeckt und hatte lust eine kleine chat-UDF zu schreiben.
Ich hoffe sie hilft den weniger erfahrenen Benutzern, ihren eigenen Chat zu gestalten...Chat UDF - Expample for the Host - Example for the Client
Have Fun with your own chat =)
xXKingLoLXx -
jetzt klappts, aber es macht nur einen rand vom Rechteck =(
EDIT: Ich hab den Fehler: PenCreate für nicht gefüllte Sachen, BrushCreate für den Rest... trotzdem danke
-
ja es muss egientlich am Pen liegen weil vorher gings ja (als ich noch keinen Pen hatte)
-
das skript ist so langsam, weil du soviele guis erstellst und auch so viele labels. Du musst eine Gui erstellen und dann die Labels auch mit hilfe von GDI+ machen dann wirds schnell sein (Ich bin an einem Spiel und es läuft mit 40FPS)
-
Hi, ich hab ein kleines Problem, denn ich möchte ein rechteck zeichnen, aber es will nicht seit ich eine stift erstellt hab:
[autoit]$Pen = _GDIPlus_PenCreate(0xFFFF0000)
[/autoit]
_GDIPlus_GraphicsFillRect($buffer, 25, 25, Round($Health * 2), 40, $Pen) -
-
-
-
-
-
-
Hab den funktionerenden Code:
Spoiler anzeigen
[autoit]#include <GuiConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GdiPlus.au3>
#include <Misc.au3>
#include <Color.au3>$file = FileOpenDialog("Compiler", @DesktopDir &"\Eigene Programme\Snake", "Bilder (*.jpg)")
[/autoit] [autoit][/autoit] [autoit]
If @error = 1 Then Exit
$iniFile = StringReplace($file, ".jpg", ".ini")ProgressOn("Compiler","Compiliere...", "0%")
[/autoit] [autoit][/autoit] [autoit]
_GDIPlus_Startup()$hBitmap = _GDIPlus_BitmapCreateFromFile($file)
[/autoit] [autoit][/autoit] [autoit]
$height = _GDIPlus_ImageGetHeight($hBitmap)
$width = _GDIPlus_ImageGetWidth($hBitmap)Local $BitmapData = _GDIPlus_BitmapLockBits($hBitmap, 0, 0, $width, $height, $GDIP_ILMREAD, $GDIP_PXF32RGB)
[/autoit] [autoit][/autoit] [autoit]
Local $Stride = DllStructGetData($BitmapData, "Stride") ; Stride ist der Offset von einer Reihe zur nächsten
Local $Scan0 = DllStructGetData($BitmapData, "Scan0") ; Die Bilddaten im Speicher
Local $PixelData
For $row = 0 To $height - 1 ; Reihe für Reihe
For $col = 0 To $width - 1 ; Spalte für Spalte
$Percent = Round((100 / $height) * $row + (100 / $height) * (((100 / $width) * $col) / 100), 1)
ProgressSet($Percent, $Percent &"%")
; lese Farbinformation des aktuellen Pixels(Spalte,Reihe) aus
$PixelData = DllStructCreate("dword", $Scan0 + ($row * $Stride) + ($col * 4))
$Color = DllStructGetData($PixelData, 1)
$Color = _ColorGetRed($Color) + _ColorGetGreen($Color) + _ColorGetBlue($Color)
If $Color = 0 Then
IniWrite($iniFile, "Pixel", $row, $col)
EndIf
Next
Next
_GDIPlus_BitmapUnlockBits($hBitmap, $BitmapData)_GDIPlus_Shutdown()
[/autoit]
ProgressOff()
MsgBox(0,"Compiler","fertig") -
-
ja damit siehts so aus aber geht halt auch nich:
Spoiler anzeigen
[autoit]#include <GuiConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GdiPlus.au3>
#include <Misc.au3>
#include <Color.au3>$file = FileOpenDialog("SnakeLvLEditor", @DesktopDir &"\Eigene Programme\Snake", "Bilder (*.jpg)")
[/autoit] [autoit][/autoit] [autoit]
$iniFile = StringReplace($file, ".jpg", ".ini")_GDIPlus_Startup()
[/autoit] [autoit][/autoit] [autoit]$hBmp = _GDIPlus_ImageLoadFromFile($file)
[/autoit] [autoit][/autoit] [autoit]
$PicWidth = _GDIPlus_ImageGetWidth($file)
$PicHeight = _GDIPlus_ImageGetWidth($file)
$hBitmap = _GDIPlus_BitmapCreateFromHBITMAP($hBmp) ; erstelle ein Bitmap aus Screenshot zur Verwendung mit GDI+
_WinAPI_DeleteObject($hBmp) ; lösche Screenshot aus Speicher_GreyScale($hBitmap, 0, 0, $PicWidth, $PicHeight) ; Bereich wird in Graustufen umberechnet
[/autoit] [autoit][/autoit] [autoit]_GDIPlus_BitmapDispose($hBitmap) ; lösche Bild aus dem Speicher
[/autoit] [autoit][/autoit] [autoit]
_GDIPlus_Shutdown()Func _GreyScale($hBitmap, $iX, $iY, $iW, $iH)
[/autoit]
Local $BitmapData = _GDIPlus_BitmapLockBits($hBitmap, $iX, $iY, $iW, $iH, BitOR($GDIP_ILMREAD, $GDIP_ILMWRITE), $GDIP_PXF32RGB)
Local $Stride = DllStructGetData($BitmapData, "Stride") ; Stride ist der Offset von einer Reihe zur nächsten
Local $Width = DllStructGetData($BitmapData, "Width") ; Anzahl der Spalten
Local $Height = DllStructGetData($BitmapData, "Height") ; Anzahl der Reihen
Local $Scan0 = DllStructGetData($BitmapData, "Scan0") ; Die Bilddaten im Speicher
Local $PixelData, $Color
For $row = 0 To $Height - 1 ; Reihe für Reihe
For $col = 0 To $Width - 1 ; Spalte für Spalte
; lese Farbinformation des aktuellen Pixels(Spalte,Reihe) aus
$PixelData = DllStructCreate("dword", $Scan0 + ($row * $Stride) + ($col * 4))
$Color = DllStructGetData($PixelData, 1)
If $Color = 0 Then
IniWrite($iniFile, "Pixel", $row, $col)
EndIf
Next
Next
_GDIPlus_BitmapUnlockBits($hBitmap, $BitmapData)
EndFunc ;==>_GreyScale -
-
ok ich habs doch noch heute gemacht
irgendwas geht nicht aber ich weiß nich was (sonst würd ichs ja nicht schrieben^^)
Spoiler anzeigen
[autoit]#include <GuiConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GdiPlus.au3>
#include <Misc.au3>
#include <Color.au3>$file = FileOpenDialog("SnakeLvLEditor", @DesktopDir &"\Eigene Programme\Snake", "Bilder (*.jpg)")
[/autoit] [autoit][/autoit] [autoit]
$iniFile = StringReplace($file, ".jpg", ".ini")_GDIPlus_Startup()
[/autoit] [autoit][/autoit] [autoit]$hBmp = _GDIPlus_ImageLoadFromFile($file)
[/autoit] [autoit][/autoit] [autoit]
$PicWidth = _GDIPlus_ImageGetWidth($file)
$PicHeight = _GDIPlus_ImageGetWidth($file)
$hBitmap = _GDIPlus_BitmapCreateFromHBITMAP($hBmp) ; erstelle ein Bitmap aus Screenshot zur Verwendung mit GDI+
_WinAPI_DeleteObject($hBmp) ; lösche Screenshot aus Speicher_GreyScale($hBitmap, 0, 0, $PicWidth, $PicHeight) ; Bereich wird in Graustufen umberechnet
[/autoit] [autoit][/autoit] [autoit]_GDIPlus_BitmapDispose($hBitmap) ; lösche Bild aus dem Speicher
[/autoit] [autoit][/autoit] [autoit]
_GDIPlus_Shutdown()Func _GreyScale($hBitmap, $iX, $iY, $iW, $iH)
[/autoit]
Local $BitmapData = _GDIPlus_BitmapLockBits($hBitmap, $iX, $iY, $iW, $iH, BitOR($GDIP_ILMREAD, $GDIP_ILMWRITE), $GDIP_PXF32RGB)
Local $Stride = DllStructGetData($BitmapData, "Stride") ; Stride ist der Offset von einer Reihe zur nächsten
Local $Width = DllStructGetData($BitmapData, "Width") ; Anzahl der Spalten
Local $Height = DllStructGetData($BitmapData, "Height") ; Anzahl der Reihen
Local $Scan0 = DllStructGetData($BitmapData, "Scan0") ; Die Bilddaten im Speicher
Local $PixelData, $Color, $Luma
For $row = 0 To $Height - 1 ; Reihe für Reihe
For $col = 0 To $Width - 1 ; Spalte für Spalte
; lese Farbinformation des aktuellen Pixels(Spalte,Reihe) aus
$PixelData = DllStructCreate("dword", $Scan0 + ($row * $Stride) + ($col * 4))
$Color = DllStructGetData($PixelData, 1)
IniWrite($iniFile, "Pixel", $row, $col)
Next
Next
_GDIPlus_BitmapUnlockBits($hBitmap, $BitmapData)
EndFunc ;==>_GreyScale