1 2 3 4

Aufbau von RIFF-Dateien für .ani Cursor

In diesen Tutorial wird der Aufbau eines animierten Cursor erklärt, auch RIFF-Datei genannt, also Dateien mit der Dateiendung *.ani und *.cur.

Nicht nur Dateien mit der Endung .ani können mehrere Bilder enthalten, auch .cur Dateien können mehrere Bilder enthalten. Auf den folgenden 3 Seiten wird der Aufbau von Icon und Cursor Dateien, sowie Bitmap .bmp Dateien und .res, also Ressource-Dateien erklärt. Es ist zu empfehlen alle 4 Tutorials zu lesen, da das eine auf dem anderen aufbaut. Die Records (für Delphi) oder in (C) Strukturen BITMAPINFOHEADER, CURHEADER, CURSORDIRENTRY, usw. finden für die verschiedenen Datei-Header Verwendung. Am besten, Ihr fangt mit dem Bitmap an und geht dann zu dem Icon und Cursor Tutorial über, dann habt Ihr das nötige Grundwissen für dieses Tutorial. Falls ihr es schon habt, könnt ihr diesen Teil natürlich überspringen. Die Beschreibung ähnelt mehr einem Listenformat, also Hexe-Editor schnappen und eine .ani Datei öffnen und lesen und vergleichen, und dann sieht man schon. Die Records u. Strukturen für Delphi und C findet ihr unten. Have fun to learn :-)
Hinweis: die Zahlen-Werte zb. DWORD, die unten erwähnt werden, stehen in einem Hexe-Editor natürlich im Intell-Format, das heißt umgegehrt. ZB. Bei DWORDs, Intell CE00 0000 ist 0000 00CE, bei WORDs A900 ist 00A9.
Hinweis! Auch aus ICONs kann ein .ani Cursor gemacht werden! Gleiche Vorgehensweise.

Beschreibung der Animierten-Cursor oder .ani Datei ab Dateibeginn.

 
1. 0000. Erst RIFF: danach die Größe der Datei als DWORD, Zusammen 8 Byte. Hinweis die Länge der Datei angaben, kann unterschiedlich sein! A: die tatsächliche Länge der Datei. B: die Länge der Datei abzüglich der 8 Bytes für RIFF u. das DWORD für die Längeangabe. 2. 0008. ACON: Dieser Teil kann folgendes enthalten. Optional! LIST: Länge als DWORD bis "anih" ohne die 4 Bytes der Längenangabe von LIST. Die Daten können sein: Optional! INAM: Größe vom Titel als DWORD ohne die 4 Bytes der Längenangabe, dann Daten. Hinweis es kann "INFO" davor stehen! Optional! IART: Länge vom Autor als DWORD ohne die 4 Bytes der Längenangabe, dann Daten. anih: Größe vom Ani-Header-Struktur als DWORD maximal 36 Byte, dann die Struktur mit 36Byte. Deren erster Wert das DWORD ist mit der Größe der Struktur = 36 Byte. (Siehe Ani-Header Struktur). rate: Größe vom Rate als DWORD. Daten in DWORDs. Optional kann auch die Angabe von "rate" sein! Womit die Geschwindigkeit des Bildwechsel, feiner eingestellt werden kann, muß aber nicht sein. Da in der Ani-Header-Struktur (ANIHEADER.iDispRate) schon ein Standartwert für die Geschwindigkeit eingetragen wird! Nach der Längen Angabe. Also bei Hex 10 = 16 Byte, folgen noch 4 DWORDs = 16 Byte. Beispiel: Das Ani hat 4 Bilder, dann folgt nach "rate" ein DWORD mit einer Hex-Zahl 10 = 16 Byte, die Länge als DWORD! Nach diesen DWORD folgen für jedes Bild ein DWORD was die Geschwindigkeit des Bildwechsel angibt. Die unterschiedlich sein können. ZB. Für 4 Bilder 0000 0011, 0000 0011, 0000 0011, 0000 0011. oder: für 4 Bilder 0000 0011, 0000 0030, 0000 0050, 0000 0018. seq: Größe vom Sequenz Block als DWORD, Daten in DWORDs. Optional kann auch die Angabe von "seq" sein! Womit die Reihenfolge der Bilder angeben wird in der Animation bevor die Animation wiederholt wird. ZB. 5 Bilder sind tatsächlich in der Datei (ANIHEADER.nFrames = 5) im ANIHEADER.nSteps = 8 stehen 8 Bilder. Die Länge von "seq" wäre dann Hex 20 = 32 Byte = 8 DWORD. Die Anordnung der Bilder könnte sein Bild 1, Bild1, Bild2, Bild3, Bild4, Bild1, Bild2, Bild5 dann wird die Reihe wiederholt. Wenn die Reihenfolge der Bild 1,2,3,4,5 wäre, dann braucht man eigentlich keinen "seq" Block. Wenn im ANIHEADER.nSteps mehr Bilder stehen als im ANIHEADER.nFrames dann ist der "seq" Block zwingend erforderlich! Der dann natürlich die Größe der Anzahl der Bilder entsprechen muss, z.B. 8 Bilder * 4 Bxte(=1DWORD) = 32 Byte = Hex 20 = 8 DWORDs. Weiterhin wenn dazu noch der "rate" Block verwendet werden soll, muss der "rate" Block die gleiche Größe wie der "seq" Block haben, also auch 32 Byte = 8 DWORDs! Ein DWORD für jedes anzuzeigendes Bild. 3. LIST: Länge des Restes der Datei, als DWORD, Ab dieser Längenangabe, also nach diesem DWORD. fram: icon: Größe der Bild-Daten nach diesem DWORD, dann Daten. (Erstes Bild) Hinweis! In der Größenangabe werden die Größen der beiden Cursor-Strukturen, die BITMAPINFOHEADER-Struktur, die Farbtabelle und das XOR- so wie das AND-Bild zusammengerechnet. Also ab hier bis zum nächsten "icon" frame, oder das Ende der Datei wenn es das lezte Bild ist. Der icon Block enthält nach der Größenangabe. A: die Struktur CURHEADER mit der Größe ist 6 Byte. (siehe CURHEADER Struktur). B: die Struktur CURSORDIEENTRY mit der Größe ist 16 Byte. (siehe CURSORDIEENTRYR Struktur) C: die Struktur BITMAPINFOHEADER mit der Größe ist 40 Byte. (siehe BITMAPINFOHEADER Struktur) D: Farbtabelle (Farbenzahl * 4 Byte) E: Bilddaten des Cursors erst das XOR-Bild dann das AND-Bild ........ ........(usw.) ........ icon: Größe der Bild-Daten nach diesem DWORD, dann Daten. (Letztes Bild) Hinweis! In der Größenangabe werden die Größen der beiden Cursor-Strukturen, die BITMAPINFOHEADER-Struktur, die Farbtabelle und das XOR- so wie das AND-Bild zusammengerechnet. Also ab hier bis zum Ende der Datei. Der icon Block enthält nach der Größenangabe. A: die Struktur CURHEADER mit der Größe ist 6 Byte. (siehe CURHEADER Struktur) B: die Struktur CURSORDIEENTRY mit der Größe ist 16 Byte. (siehe CURSORDIEENTRYR Struktur) C: die Struktur BITMAPINFOHEADER mit der Größe ist 40 Byte. (siehe BITMAPINFOHEADER Struktur) D: Farbtabelle (Farbenzahl * 4 Byte) E: Bilddaten des Cursors erst das XOR-Bild dann das AND-Bild In C Struct ANIHEADER { DWORD cbSize; // Größe der Struktur in Bytes. DWORD nFrames; // Anzahl von Bildern (auch bekannt als frames)die gespeichert // sind in der Datei. DWORD nSteps; // Die Anzahl von anzuzeigenden Bildern, bevor die Animation wiederholt // wird. Die Anzahl kann durchaus größer sein als die vorhandenen Bilder. // Dann muss der "seq" Block vorhanden sein. (Siehe oben "seq") DWORD iWidth; // Breite vom Bild (in pixels) DWORD iHeight; // Höhe vom Bild (in pixels) DWORD iBitCount; // Anzahl der Bits pro Pixel( Anzahl der Farben) 1= Schwartz-Weis = 8 Byte, // 4 = 16 Farben = 64 Byte, 8 = 256 Farben = 1024 Byte, // 24 = 16 Millionen Farben (keine Farbtabelle) DWORD nPlanes; // Anzahl der Farbebenen DWORD iDispRate; // Standartwert Geschwindigkeit für Bildwechsel (gemessen in 1/60th-von- // einer Sekunde) DWORD bfAttributes; // ANI attribute bit flags Bei 1 sind die Bilder als Icon oder Cursor // gespeichert, bei 0 als Bitmap und 3 bedeutet das, daß ein "seq"- // Block im Header vorhanden ist. }; Struct CURHEADER { WORD wReserved; // Always 0 WORD wResID; // Always 2 WORD wNumImages; // Number of cursor images/directory entries }; Struct CURSORDIRENTRY { BYTE bWidth; // Breite des Bildes BYTE bHeight; // Die doppelte Höhe des Bildes in Pixeln. BYTE bColorCount; // Anzahl der Farben im Bild (2 oder 16, bzw. 0 falls mehr // als 256 Farben). BYTE bReserved; // immer 0 WORD wHotspotX; // X-Position des Hotspots. WORD wHotspotY; // Y-Position des Hotspots DWORD dwBytesInImage; // Bildgröße in Bytes ab diesem Record. Das bedeutet // BITMAPINFOHEADER, Farbtabelle, // XOR- und AND-Bild zusammen gerechnet. DWORD dwImageOffset; // Offset ab da, wo der BITMAPINFOHEADER beginnt. }; struct ICOHEADER { WORD wReserved; // Always 0 WORD wResID; // Always 1 WORD wNumImages; // Number of icon images/directory entries }; struct ICONDIRENTRY { BYTE bWidth; // Breite des Bildes BYTE bHeight; // Die doppelte Höhe des Bildes in Pixeln. BYTE bColorCount; // Anzahl der Farben im Bild (2 oder 16, bzw. 0 falls mehr als BYTE bReserved; // 256 Farben). immer 0 WORD wPlanes; // Anzahl der Farbebenen in der Regel 1 u. 0 WORD wBitCount; // Anzahl der Bits pro Pixel( Anzahl der Farben) 1= Schwarz- // Weiß = 8 Byte, 4 = 16 Farben = 64 Byte, // 8 = 256 Farben = 1024 Byte, 24 = 16 Milion // Farben (keine Farbtabelle) DWORD dwBytesInImage; // Bildgröße in Bytes ab diesem Record. Das bedeutet // BITMAPINFOHEADER, Farbtabelle, XOR- und // AND-Bild zusammen gerechnet. DWORD dwImageOffset; // Offset ab wo der BITMAPINFOHEADER beginnt. }; struct BITMAPINFOHEADER { DWORD biSize; // Länge des Info-Headers(dieser Record) = 40 Byte in Hex 28 LONG biWidth; // Breite des Bildes LONG biHeight; // Höhe des Bildes WORD biPlanes; // Anzahl der Farbebenen in der Regel 1 u. 0 WORD biBitCount; // Anzahl der Bits pro Pixel( Anzahl der Farben) 1= Schwartz- // Weiß = 8 Byte, 4 = 16 Farben = 64 Byte, // 8 = 256 Farben = 1024 Byte, 24 = 16 Milion // Farben (keine Farbtabelle) DWORD biCompression; // Komprimierungstyp, 0 = Unkomprimiert, 1 = 8-Bit // RLE =Run-Length-Encording-Verfahren, 2 = 4-Bit Run-Encording- // Verfahren DWORD biSizeImage; // Bildgröße ohne Farbtabelle. Aber XOR und AND Bild zusammen // gerechnet bei Icon u. Cursor. DWORD biXPelsPerMeter; // Horizontale Auflösung DWORD biYPelsPerMeter; // Vertikale Auflösung DWORD biClrUsed; // Die Zahl der im Bild vorkommenden Farben zB. Bei 256 Farben // müssen es nicht unbedingt 256 sein, es könne auch // zB. 206 sein. DWORD biClrImportant; // die Anzahl der wichtigen Farben } ; Ein paar Beispiele in Delphi PResourceCurHeader = ^TResourceCurHeader; RESOURCE_CURHEADER = packed record wReserved: WORD ; // Always 0 wResID: WORD ; // Always 2 wNumImages: WORD; // Anzahl der Einträge im Directory end; TResourceCurHeader = RESOURCE_CURHEADER; PCursorDirentry = ^TCursorDirentry; CURSORDIRENTRY = packed record Width: Byte; bHeight: Byte; bColorCount: Byte; bReserved: Byte; wHotspotX: WORD; wHotspotY: WORD; dwBytesInImage: DWORD; dwImageOffset: DWORD; end; TCursorDirentry = CURSORDIRENTRY; PBitmapInfoHeader = ^TBitmapInfoHeader; BITMAPINFOHEADER = packed record biSize: DWORD; biWidth: Longint; biHeight: Longint; biPlanes: Word; biBitCount: Word; biCompression: DWORD; biSizeImage: DWORD; biXPelsPerMeter: Longint; biYPelsPerMeter: Longint; biClrUsed: DWORD; biClrImportant: DWORD; end; TBitmapInfoHeader = BITMAPINFOHEADER;
1 2 3 4
Externe Registry reparieren und Windows retten?
Mit diesen Programm können Sie von einen Windows-Betriebsystem auf die Registry-Dateien eines anderen Windows-Betriebsystem zugreifen und bearbeiten(Partition oder Festplate), oder wenn Sie das Tool in Bart-PE-Builder einbinden und auf CD-brennen.

Sprache: Deutsch, Englisch
Lizenzart: Freeware
Mehr Infos hier

Registry-Tool Bild
Download Button
Icon und Cursor Maker
Ein kleines Programm, um Icons und Cursor für Euren Computer-Bildschirm selber zu gestalten oder zu erzeugen. Wollt Ihr Euren Freund, Freundin oder Partner usw. auf den Bildschirm haben, macht ein Icon aus einen Foto von Eurem Süssen oder Süsse, oder zeichnet einfach ein Icon selber. Einige kostenlose Cursor Beispiele sind hier zum Downloaden zu finden.

Sprache: Deutsch, Englisch
Lizenzart: Freeware
Mehr Infos hier

Icon Tool Bild
Download Button
Ani-Cursor Maker
Ein kleines Programm um Cursor, Animierte-Cursor oder *.ani Dateien für Euren Computer selber zu zeichnen, . Sind Euch die Cursor die Windows mitbringt nicht genug, dann könnt Ihr hier eigene Cursor erstellen, die sogar animiert seien können. Einige kostenlose Beispiele sind hier zum Downloaden zu finden.

Sprache: Deutsch, Englisch
Lizenzart: Freeware
Mehr Infos hier

Ani-Cursor Tool Bild
Download Button
Chi Gung Übungs-Programm mit Bild u.Ton.
Die Übungsfolge erleichtert das Erlernen der Tai-Chi Form, kann aber auch einzeln geübt werden, um die Gesundheit und Fitness zu erhalten oder zu verbessern. Dauer der Übungsfloge Zierka 20-25 Min.

Sprache: Deutsch, Englisch
Lizenzart: Freeware
Mehr Infos hier

Chi-Gung Programm Bild1
Chi-Gung Programm Bild2
Download Button
FTP-Programm
Ein einfach zu bedienender FTP-Cient nicht nur für Einsteiger. Um Dateien für Ihre Webseite von Ihren Computer auf Ihren Server zu übertragen. Mit ein paar Feature.

Sprache: Deutsch, Englisch
Lizenzart: Freeware
Mehr Infos hier

FTP Client Programm Bild
Download Button
.