Neolix: [PHP] imagecolorallocate auf 256 Werte beschränkt?

Ich hab mal ne Frage zu imagecolorallocate:
Ich möchte ein Script schreiben, dass mir eine Farbpalette anzeigt.
Jetzt könnte ich das zwar über ein Bild regeln, welches ich online
speichere und einfach nur per HTML einbinde,
aber ich möchte das ganze in PHP coden.
Jetzt berechne ich aus einem X- und einem Y-Wert ein Farbcode per
imagecolorallocate. Aber das Programm zeichnet nur ein paar Reihen nebeneinander und der Rest bleibt in der letzten Farbe.
Wenn ich mir die Werte per "print" ausgeben lasse,
dann zeigt er mir Werte von 0 - 255 und anschließend nur noch -1 an.
Wie krieg ich das hin, dass der mir immer einen neuen Farbwert ausgibt. Er kann ja alte überschreiben, oder?

mfg
Neolix

  1. Hi,

    Ich hab mal ne Frage zu imagecolorallocate:

    welches Grafikformat wird damit erzeugt; oder anders gefragt: Kann das erzeugte Grafikformat überhaupt mehr als 256 Farben annehmen?

    Cheatah

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Also, ich erzeuge ein JPEG per "imagejpeg($image);"

      Der Code sieht so aus:

      $image = imagecreate(150,150);
      $farbe_body=imagecolorallocate($image,255,255,255);

      for($x=0;$x<=150;$x++)
      {
       for($y=0;$y<=150;$y++)
       {
        $r = round($x / 150 * 255);
        $g = round(255 - ($y / 150 * 255));
        $b = round(255 - ($x / 150 * 255));
        $px_color = imagecolorallocate($image,$r,$g,$b);
                      #print $px_color;
        imagesetpixel($image, $x, $y, $px_color);
       }
      }
      imagejpeg($image,"",100);

      Und wenn ich jetzt "print $px_color;" auskommentiere,
      dann gibt er mir folgendes aus:
      0
      1
      2
      3
      .
      .
      .
      254
      255
      -1
      -1
      -1
      -1

      1. Hi

        $image = imagecreate(150,150);

        hat bei mir auch häufig Probleme gemacht versuch doch mal

        $image = imagecreatetruecolor(150,150);

        Gruß

        Manuel

        --
        mal wieder auf http://www.booklinks.de vorbeigeschaut? Mittlerweile mehr als 900! Bücher.
      2. Moin!

        $image = imagecreate(150,150);

        imagecreate() erzeugt ein 256-Farben-Bild. Und damit das mit der Palette hinkommt, erzeugst du mit

        $farbe_body=imagecolorallocate($image,255,255,255);

        jeweils einen von 256 Paletteneinträgen, in dem dann eine Farbe drinsteht.

        Wenn du aber mit

        imagejpeg($image,"",100);

        eine TrueColor-Grafik ausgeben willst, dann mußt du, wie erwähnt, die gdlib2 verwenden, imagecreatetruecolor() für ein Echtfarbenbild aufrufen, und darfst imagecolorallocate() nicht verwenden, sondern gibst die Farbe, die der Pixel haben soll, direkt als 24-Bit-RGB-Wert in imagesetpixel() direkt an.

        Also beispielsweise (mit einem konstanten Wert für weiß):
        imagesetpixel($image,$x,$y,0xFFFFFF);

        0xFFFFFF ist eine legale Zahldarstellung in PHP, stattdessen kannst du auch die dezimale Darstellung verwenden (sowas wie 0 für Schwarz, oder 255 für Blau), oder diesen Wert einer Variablen zuweisen und diese dann verwenden.

        - Sven Rautenberg

        --
        "Habe den Mut, dich deines eigenen Verstandes zu bedienen!" (Immanuel Kant)
  2. Hello Neolix,

    leider hast Du nicht dazugeschriben, welche CD-Lib Version Du benutzt.

    TrueColor-Unterstützung geht erst ab der Version 2.x. Die davor konnten TrueColor zwar lesen, aber nicht bearbeiten.

    Liebe Grüße aus http://www.braunschweig.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    1. Ich verwende die php_gd2.dll
      Damit sollte das doch laufen, oder?

      1. Hello,

        Ich verwende die php_gd2.dll
        Damit sollte das doch laufen, oder?

        Windows? Tut mir leid. Weiß ich leider nicht.

        Liebe Grüße aus http://www.braunschweig.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen