Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Ustawianie pixeli w GUI?


Rekomendowane odpowiedzi

Opublikowano

Chciałbym mieć mw. takie GUI:

lsnx.png

Chodzi o to, że tam gdzie jest czerwone pole powinna być masa pixeli. Chodzi o to, aby wyglądało to tak:

x x x x x

x x x x x

x x x x x

x x x x x

i abym każdemu X mógł ustawić osobny pixel. W teorii jakoś to mógł bym tworzyć obrazek tak z pixeli i potem go ustawiać ale ma on być wymiarów 192 x 108 a potrzebuję uzyskać czas zmiany wszystkich pixeli max. 0,2s

 

Z góry dzięki za pomoc

/ GA-970A-UD3 / FX-6300 / Sapphire Xtreme 5830 / OCZ ZS 550W / Brutus M23 /

| MPC Coders Team | MPC Gold Member | C#, C++, PHP, (N)ASM, AutoIT, Python, Java |

Opublikowano
obrazek tak z pixeli i potem go ustawiać

najlepsza metoda.

 

Jednak w autoit pewnie każdy sposób będzie cholernie mulić i nie da rady tego w żadem optymalny sposób zrobić...

Opublikowano

Ile by mogło trwać zbudowanie obrazka z 20736 pixeli (no i jak) oraz ustawienie go?

/ GA-970A-UD3 / FX-6300 / Sapphire Xtreme 5830 / OCZ ZS 550W / Brutus M23 /

| MPC Coders Team | MPC Gold Member | C#, C++, PHP, (N)ASM, AutoIT, Python, Java |

Opublikowano

przetestuj

 

func GDIPlus_BitmapSetPixel($hBitmap, $iX, $iY, $iArgb)
return DllCall($ghGDIPDll, "int", "GdipBitmapSetPixel", "hwnd", $hBitmap, "int", $iX, "int", $iY, "dword", $iArgb)  
endfunc;==>GDIPlus_BitmapSetPixel

kod z autoitscripts.com

Opublikowano

Próbuję tak:

_GDIPlus_Startup()
   $img = 'C:\Users\Henryk\Pictures\aha.gif'
   $hImage = _GDIPlus_ImageLoadFromFile($img)
   For $iX = 1 To 192
       For $iY = 1 To 102
           $hex = '0x' & Random(0, 9) & Random(0, 9) & Random(0, 9) & Random(0, 9) & Random(0, 9) & Random(0, 9)
           DllCall($ghGDIPDll, "int", "GdipBitmapSetPixel", "hwnd", $hImage, "int", $iX, "int", $iY, "dword", $hex)
       Next
   Next
   _GDIPlus_ImageSaveToFile($hImage, $img)
   _GDIPlus_Shutdown()

Ale obrazek pozostaje bez zmian :(

(jak na razie chcę ustawić dla każdego pixela losowy kolorek)

/ GA-970A-UD3 / FX-6300 / Sapphire Xtreme 5830 / OCZ ZS 550W / Brutus M23 /

| MPC Coders Team | MPC Gold Member | C#, C++, PHP, (N)ASM, AutoIT, Python, Java |

Opublikowano

_GDIPlus_Startup()
   $img = 'C:\Users\Henryk\Pictures\aha.gif'
   $hImage = _GDIPlus_BitmapCreateFromFile ($img)
   For $x = 1 To 192
       For $y = 1 To 102
           $hex = '0x' & Random(0, 9, 1) & Random(0, 9, 1) & Random(0, 9, 1) & Random(0, 9, 1) & Random(0, 9, 1) & Random(0, 9, 1) & Random(0, 9, 1) & Random(0, 9, 1)
           DllCall($ghGDIPDll, "int", "GdipBitmapSetPixel", "hwnd", $hImage, "int", $x, "int", $y, "dword", $hex)
       Next
   Next
   _GDIPlus_ImageSaveToFile($hImage, $img)
   _GDIPlus_Shutdown()

Nadal obrazek pozostaje bez zmian ;/

/ GA-970A-UD3 / FX-6300 / Sapphire Xtreme 5830 / OCZ ZS 550W / Brutus M23 /

| MPC Coders Team | MPC Gold Member | C#, C++, PHP, (N)ASM, AutoIT, Python, Java |

Opublikowano

#include <GDIPLUS.au3>
#include <ScreenCapture.au3>
_GDIPlus_Startup()
$hGFX = _GDIPlus_GraphicsCreateFromHWND(guicreate("", 192, 102))
guisetstate()
$img = @DesktopDir & "\lol.bmp"
$hImage = _ScreenCapture_Capture ("")
$hImage = _GDIPlus_BitmapCreateFromHBITMAP ($hImage)
For $x = 1 To 192
   For $y = 1 To 102
       $hex = random(0, 16777215, 1)
       DllCall($ghGDIPDll, "int", "GdipBitmapSetPixel", "hwnd", $hImage, "int", $x, "int", $y, "dword", $hex)
   Next
Next
_GDIPlus_GraphicsDrawImage ($hGFX, $hImage, 0, 0)
_GDIPlus_Shutdown()
Do
until guigetmsg() = -3

Takie coś u mnie działa, zmieniłem wczytanie z pliku na screena. Kombinowałem, żeby było wczytywane z pliku, aleniestety przy prawie zerowej znajomości GDI+ ciężko cokolwiek zrobić...

Opublikowano

Sopel właśnie miałem coś takiego mu zapodać ... jasna cholerka ...mysle ze to co mu dales bedzie ddobre;)

Dodaj jeszcze zapis screenu okna do pliku

Opublikowano

Dzięki pokombinowałem i działa <3

_GDIPlus_Startup()
$img = 'C:\Users\Henryk\Pictures\aha.gif'
$hImage = _ScreenCapture_Capture("", 0, 0, 192, 102)
$hImage = _GDIPlus_BitmapCreateFromHBITMAP($hImage)
For $x = 1 To 192
 For $y = 1 To 102
  $hex = Random(0, 9, 1) & Random(0, 9, 1) & Random(0, 9, 1) & Random(0, 9, 1) & Random(0, 9, 1) & Random(0, 9, 1) & Random(0, 9, 1) & Random(0, 9, 1)
  DllCall($ghGDIPDll, "int", "GdipBitmapSetPixel", "hwnd", $hImage, "int", $x, "int", $y, "dword", $hex)
 Next
Next
_GDIPlus_ImageSaveToFile($hImage, $img)
_GDIPlus_Shutdown()

Teraz jeszcze tylko sprawdzę jaki jest czas wykonywania @edit ok. 0,6s :(

Źle nie jest ale na pewno może być lepiej. Wydaje mi się, że to tworzenie ss'a zabiera dużo czasu

/ GA-970A-UD3 / FX-6300 / Sapphire Xtreme 5830 / OCZ ZS 550W / Brutus M23 /

| MPC Coders Team | MPC Gold Member | C#, C++, PHP, (N)ASM, AutoIT, Python, Java |

Opublikowano

_GDIPlus_Startup()
$img = 'C:\Users\Henryk\Pictures\aha.gif'
$hImage = _ScreenCapture_Capture("", 0, 0, 192, 102)
$hImage = _GDIPlus_BitmapCreateFromHBITMAP($hImage)
$timer = timerinit()
For $x = 1 To 192
 For $y = 1 To 102 ;Jeszcze raz... to niżej można krócej. Dzięki temu działa 2 razy szybciej
  $hex = random(0, 16777215, 1)
  DllCall($ghGDIPDll, "int", "GdipBitmapSetPixel", "hwnd", $hImage, "int", $x, "int", $y, "dword", $hex)
 Next
Next
msgbox(64, '', timerdiff($timer))
_GDIPlus_ImageSaveToFile($hImage, $img)
_GDIPlus_Shutdown()

u mnie wychodzi koło 350ms z

$hex = random(0, 16777215, 1)

i 650ms z

$hex = Random(0, 9, 1) & Random(0, 9, 1) & Random(0, 9, 1) & Random(0, 9, 1) & Random(0, 9, 1) & Random(0, 9, 1) & Random(0, 9, 1) & Random(0, 9, 1)

Opublikowano

Fakt. Dzięki.

Ale nadal myślę, że przez robienie SS'a zwalnia program. Nie da się utworzyć takiej pustej grafiki 192x108?

/ GA-970A-UD3 / FX-6300 / Sapphire Xtreme 5830 / OCZ ZS 550W / Brutus M23 /

| MPC Coders Team | MPC Gold Member | C#, C++, PHP, (N)ASM, AutoIT, Python, Java |

Opublikowano

O mój boże, oczywiście, że się da, na co po co komu tam SSy?

 

http://www.autoitscr...tibleBitmap.htm

albo CreateSolidBitmap

 

Jednak muszę zauważyc, że AutoIt generalnie do takich rozwiązań ( zmienia każdego piksela ) się bardzo średnio nadaje.

KONIECZNIE skorzystaj z podwójnego buforowania ( google it up ).

 

 

@DOWN

Poszukaj w tematach stworzonych przeze mnie...

Ta sygnatura jest pusta.

Opublikowano

@up kiedys wrzuciłeś kod ktory pobierał kazdy pixel obrazka i zaznaczal w gui

Do
$wiek+=1
Until ŻycieGetMsg() = -3

zbieram +

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...