Hi,
also GIF ist recht einfach. Infos von
www.wotsit.org. Erst einmal der allgemeine Aufbau
Code:
+-----------------------+
| +-------------------+ |
| | GIF Signature | |
| +-------------------+ |
| +-------------------+ |
| | Screen Descriptor | |
| +-------------------+ |
| +-------------------+ |
| | Global Color Map | |
| +-------------------+ |
. . . . . .
| +-------------------+ | ---+
| | Image Descriptor | | |
| +-------------------+ | |
| +-------------------+ | |
| | Local Color Map | | |- Repeated 1 to n times
| +-------------------+ | |
| +-------------------+ | |
| | Raster Data | | |
| +-------------------+ | ---+
. . . . . .
|- GIF Terminator -|
+-----------------------+
Die GIF Signatur ist immer folgender Aufbau:
GIF87a, also drei Bytes für "GIF" und drei für die Version. Anschließend kommt der "Screen Discriptor"
Code:
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)
+---------------+
Da stehen sofort Breite und Höhe des Bildes. Kurz, die Bytes 6 und 7 (0-basiert zählend) speichern die Breite, die Bytes 8 und 9 die Höhe. Wenn Du diese einfach mittles AssignFile, und Read ausließt, dann hasst Du die Ausmaße des GIF Bildes. Für JPEGs würde ich Dir dringend empfehlend diese in ein TBitmap zu laden (Keine Komponente!) und Dir die Werte für Breite und Höhe zurückgeben zu lassen, da es bei diesem Typ
ungleich schwerer wird. Bedenke, JPEG können auch im Video-Stream Format (JFIF) kommen.