Klaus Junge: GIF-Dateiformat (2)

Beitrag lesen

Hallo Cheatah,

so nun kommt der SCREEN DESCRIPTOR Block dran:

GENERAL FILE FORMAT

+-----------------------+
  | +-------------------+ |
  | |   GIF Signature   | |
  | +-------------------+ |
  | +-------------------+ |
  | | Screen Descriptor | |
  | +-------------------+ |
  | +-------------------+ |
  | | Global Color Map  | |
  | +-------------------+ |
  . . .       . . .

"SCREEN DESCRIPTOR
  The Screen Descriptor describes the overall parameters for all  GIF
   images  following.  It defines the overall dimensions of the image space
   or logical screen required, the existance of color mapping  information,
   background  screen color, and color depth information.  This information
   is stored in a series of 8-bit bytes as described below."

bits
   7 6 5 4 3 2 1 0  Byte #
  +---------------+
  |               |  1
  +-Screen Width -+      Raster width in pixels (LSB first)
  |               |  2
  +---------------+
  |               |  3
  +-Screen Height-+      Raster height in pixels (LSB first)
  |               |  4
  +-+-----+-+-----+      M = 1, Global color map follows Descriptor
  |M|  cr |0|pixel|  5   cr+1 = # bits of color resolution
  +-+-----+-+-----+      pixel+1 = # bits/pixel in image
  |   background  |  6   background=Color index of screen background
  +---------------+      (color is defined from the Global color
  |0 0 0 0 0 0 0 0|  7   map or default map if none specified)
  +---------------+

Dieser SCREEN DESCRIPTOR - Bereich besteht also aus 7 Byte.
Die ersten 4 Byte sind wortweise definiert nach Intelnotation,
also niederwertiger Teil zuerst, dann höherwertiger Teil.
Wenn Du daraus einen Zeiger machen willst, mußt Du umschaufeln
und anpassen. Wert = Byte2 * 256 + Byte1.
Diese beiden 16-bit-Werte beschreiben die Bildschirmgröße
für die Deine Graphik ausgelegt ist. HTML erlaubt Dir ja eine
übergeordnete Skalierung mit WIDTH und HEIGHT, diese haben dann
Vorrang, sonst sollten Browser sich nach diesen Werten richten.
Die in Browsern eingebauten Skalierungsmechanismen sind jedoch
ein Dauerthema in diesem Forum.

Nun kommt SCREEN DESCRIPTOR.Byte_5.

Dieses Byte ist bitweise auszuwerten.
Bit_7 beschreibt ob eine globale Palette Verwendung findet
oder ob das später Bild für Bild gemacht werden soll.
In Deinem Fall wirst Du Deine Palette also wohl global setzen
wollen. Sie wird dann unmittelbar hinter dem SCREEN DESCRIPTOR
Block stehen und M=1.

Bit_6..4 cr+1 = # bits of color resolution, verstehe ich als Anzahl der
Farben die für die Darstellung verwendet werden sollen.
Das hab' ich noch nicht klar drauf und muß noch nachlesen.

Bit_3 scheint immer leer zu sein.

Bit_2..0 pixel+1 = # bits/pixel in image, verstehe ich als Farbtiefenangabe,
also wie die Palette aufgebaut ist. Üblicherweise werden es wohl
3 Byte pro Farbe sein (=24 bit):
"The  number  of  color  map  entries  following  a  Screen
Descriptor  is equal to 2**(# bits per pixel), where each entry consists
of three byte values representing the relative intensities of red, green
and blue respectively."
Zum Bauen von GIFs reicht das wohl erstmal, beim Lesen muß man da wohl
noch ein paar Varianten klar haben, 16 bit etc...

Danach kommt SCREEN DESCRIPTOR.Byte_6.
Dieses ist ein Index (Zeiger) auf die Palette und beschreibt welche
der Farben für den Hintergrund verwendet werden soll.
Auch das ist mir bei GIF87a nicht ganz klar, könnte aber mit der
Kompression zusammenhängen. Bei GIF89a könnte das dann der Wert
für durchsichtige Bereiche werden.

SCREEN DESCRIPTOR.Byte_7 ist wohl immer leer und 0.

So, das war Teil 2...
Mein armer armer Hosenboden!
Frag nach wenn was nicht klar ist,
mir ist aber auch noch nicht alles klar.
Kriegen wir hoffentlich noch hin.
Korrekturen und Zurechtweisungen höchst erwünscht!

Klaus

0 50

GIF-Dateiformat (1)

Klaus Junge
  1. 0

    GIF-Dateiformat (2)

    Klaus Junge
    1. 0
      Cheatah
      1. 0
        m0b
        1. 0
          m0b
          1. 0
            Cheatah
          2. 0
            Stefan Muenz
            1. 0
              Cheatah
    2. 0
      Cheatah
      1. 0
        Klaus Junge
        1. 0
          Klaus Junge
          1. 0
            Cheatah
            1. 0
              Klaus Junge
              1. 0
                Cheatah
    3. 0

      GIF-Dateiformat (2a)

      Klaus Junge
      1. 0
        Cheatah
        1. 0
          Klaus Junge
          1. 0
            Cheatah
            1. 0
              Klaus Junge
              1. 0
                Cheatah
              2. 0
                Calocybe
                1. 0
                  Cheatah
                  1. 0
                    Calocybe
                    1. 0
                      Cheatah
                      1. 0
                        Calocybe
        2. 0
          Jörk Behrends
  2. 0
    Olaf Grönemann
  3. 0

    GIF-Dateiformat (k1)

    Klaus Junge
    1. 0

      GIF-Dateiformat (k2)

      Klaus Junge
      1. 0
        Cheatah
        1. 0
          Klaus Junge
          1. 0
            Cheatah
      2. 0

        GIF-Dateiformat (k3)

        Klaus Junge
        1. 0
          Cheatah
        2. 0

          GIF-Dateiformat (k4)

          Klaus Junge
  4. 0

    GIF-Dateiformat (3=Palette)

    Klaus Junge
    1. 0
      Cheatah
      1. 0
        Klaus Junge
        1. 0
          Cheatah
  5. 0

    Aktueller Stand der Dinge

    Cheatah
    1. 0
      Klaus Junge
      1. 0
        Cheatah
      2. 0
        Calocybe
        1. 0
          Cheatah
  6. 0

    GIF-Dateiformat (test_1)

    Klaus Junge
    1. 0
      Cheatah
      1. 0
        Klaus Junge
        1. 0
          Klaus Junge
          1. 0
            Calocybe
          2. 0
            Cheatah