Kurze Fragen zu Array und draw_getpixel(x,y)

  • Kurze Fragen zu Array und draw_getpixel(x,y)


    Ist das normal, dass man ein Array nur bin 32000 erstellen kann? Aber warum? Ist doch nur Text. Aber vielleicht ist es auch gut so. Wenn es keine Grenze gäbe, würde der Ram überlasten.


    Wichtiger: Der Code draw_getpixel(x,y) ist angeblich sehr langsam. Also sollte man Ihn nicht in einer for ()-Schleife einbinden, oder?

    Ich wollte versuchen, Bilder in text umzuwandeln. Mit den x und y und color Werte.
    Es geht auch. Aber der color-Wert ist immer bei 0 (draw_getpixel(x,y)!
    Ich weiß noch nicht ganz, ob Bilder als Text (x,y,c) weniger Speicherplatz decken.
    Aber wie sind eigendlich bmp oder JPGs gespeichert?
    Diese müssten doch auch so sein, oder?
    Aber was ist mit JPG? Wenn man diese zB als Qualität 80% abspeicher, wirkt das Bild schlecht.
    Wenn man zum beispiel ein dunkler kreis zechnet und als JPG abspeichert, hat es nacher einen unschönen Rand. Denn kann man am besten sehen, wenn man den Hintergrund versucht zu wechseln.

    ...

    Ist zwar jetzt nicht so ein wichtiges Thema, aber ich werde eure Antworten lesen. Und jetzt schonmal dafür bedanken.
    57 6F 77 2C 20 64 61 73 20 68 61 73 74 20 64 75 20 67 61 6E 7A 20 61 6C 6C 65 69 6E 20 67 65 73 63 68 61 66 66 74 2E 20

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von DanielGM61 ()

  • RE: Kurze Fragen zu Array und draw_getpixel(x,y)

    Original von DanielGM61
    Ist das normal, dass man ein Array nur bin 32000 erstellen kann? Aber warum? Ist doch nur Text. Aber vielleicht ist es auch gut so. Wenn es keine Grenze gäbe, würde der Ram überlasten.


    Das trifft nur für eindimensionale Arrays zu, bei zweidimensionalen Arrays darf jede Dimension 32000 Indizes besitzen aber auch insgesamt nur 1000000 Elemente, d.h. für das einlesen eines Bildes kann es reichen, ansonsten einfach ds_list oder ds_grid nehmen.

    Original von DanielGM61
    Wichtiger: Der Code draw_getpixel(x,y) ist angeblich sehr langsam. Also sollte man Ihn nicht in einer for ()-Schleife einbinden, oder?


    Jap, das solltest du wirklich nicht tun, das einlesen mit einer solchen Methode kann schon mal einige Minuten dauern, abhängig von der Größe des Bildes.

    Original von DanielGM61
    Ich weiß noch nicht ganz, ob Bilder als Text (x,y,c) weniger Speicherplatz decken.


    Nein, sie verbrauchen sogar mehr Speicherplatz, zumindest im GM weil der nur als numerischen Datentyp "real" kennt. Wenn wir davon ausgehen, dass wir ein Bild mit 24 Bit Farbtiefe haben also jeweils 8 Bit für RGB, verbrauchen wir also pro Pixel 24 Bit. Wenn du das Bild in einem Array speicherst wird jede Farbe als real Wert gespeichert und der benötigt im GM soweit ich weiß entweder 32 oder 64 Bit, keine Ahnung wie viel genau. Denn im GM kann man schließlich auch gebrochene und negative Zahlen verwenden, was aber für einen Farbwert nicht notwendig ist und deshalb verschwendeter Arbeitsspeicher bedeutet. In anderen Programmiersprachen kann man sowas optimieren indem man Datentypen erstellt die genau die Werte tragen können die sie sollen.

    Soweit die Theorie, in der Praxis sollte es aber dennoch kein Problem sein, das Bild in ein Array zu werfen vorausgesetzt das Bild hat keine utopischen Ausmaße und du verwendest keinen PC von vor 10 Jahren ;)

    Original von DanielGM61
    Aber wie sind eigendlich bmp oder JPGs gespeichert?
    Diese müssten doch auch so sein, oder?


    Es ist immer ein Unterschied ob Bilder auf der Festplatte sind oder in den Arbeitsspeicher geladen wurden. Auf der Festplatte liegen sie immer komprimiert und sind so optimiert den wenigsten Speicherplatz wegzunehmen. Im Arbeitsspeicher hingegen nehmen alle Bilder, mal abgesehen von unterschiedlichen Farbtiefen und Kanälen immer genauso viel weg und auch wesentlich mehr als sie auf der festplatte verbrauchen. Denn stell dir mal vor ein JPG Bild soll im Spiel 60 mal pro Sekunde auf den Bildschirm gezeichnet werden und es müsste bei jedem Zeichnen erstmal das Bild decodiert werden, das würde viel zu lange dauern, deshalb liegt es schon fix und fertig im Arbeitsspeicher.

    Hoffe ich konnte dich etwas aufklären...
  • Benutzer online 1

    1 Besucher