Inferno #10
30 апреля 2007 |
|
Opportunities Spectrum - The format ani-files on the ZX.
Ani-format files on the ZX (Program JpeGif Laboratory (GFXcon), Little Viewer, Ani Editor) Sam Style +00 "GIF animation": the signature +13 = 0 14 Size of X in familiarity (1-32) 15 the size of the Y in pixels (1-192) +16 ... Data animation (frames) Animation is a sequence sequence of frames. For each frame on beginning of the next two bytes: 0 frame duration of 1 / 50 sec A type of packaging frame If the duration = 255 or the type of packaging player is not recognized, then the cartoon Returning is the very first frame. And the converter, and a beta editor chooses the best method of packing of the 9 available (By the method of image compression). ---- Type 0 This neupakovany sprite in a linear form mate. It happens that in any frame of any one another method is not clinging. In the presence of colored string attribute is after every 8 lines of the image. ---- Type 1 Taken from the article "Compressing Graphics Institute formation and that this can be obtained "by Vitamin/CAIG/2001. Frame is divided into familiarity (size on Y increases to the nearest multiple 8 numbers). Consider the packaging of the mark Attraction: # 55, # ff, # 55, # ff, # ff, # ff, # 50, # 05 Starting from the second byte of doing XOR'ing with the previous: # 55, # aa, # aa, # aa, # 00, # 00, # af, # 55 We will create a flag byte - note the zero vym bit bytes that are equal to the previous one, and single bit, which is not equal. For 1 byte of the previous is 0. Only bits in reverse order - the right bits correspond denotes the first byte. Obtain: 1,1,0,1,0,0,1,1 = # D3 Now we derive the flow initially a flag bytes, and then - those bytes XOR'inga for which ryh bit set in the flag byte: # D3, # 55, # AA, # 00, # AF, # 1955 As a result, instead of 8 bytes of familiarity floor Chile 6 byte packed format. Unpacking is the following algorithm Therefore: byte = 0 xorbyte = 0 flag = flag byte Cycle 8 RR flag if carry = 1 then take from the stream of new xorbyte byte = byte xor xorbyte output byte on the screen KC The number of packed blocks, natural but equal to that of familiarity in the frame. Familiar hundred packed left to right, top to bottom (Ie first series of the top, then the next series, and so to the bottom). ---- Type 2 Very similar to type 1, but in a byte of flags reset bits corresponding to zeros in XOR'inge. Ie As an example of the type 1 flags will: 1,1,0,0,1,1,1,1 = # CF And the stream will give # CF, # 55, # AA, # AA, # AA, # AF, # 1955 There turned out that the gain is minimal, but This does not mean he is worse than type 1. Here unpacking this: byte = 0 flag = flag byte Cycle 8 RR flag if carry = 1 then byte = byte xor (byte from the stream) output byte on the screen KC ---- Type 3 This is the same type 1, but In the name of location does not appear directly on the screen, and the imposes to XOR the corresponding values COMEST previous frame. ---- Type 4 Similarly: the frame is packed type 2 and XOR is applied to the previous one. If the frame does not change much, in Achiev ltate his XOR'inga the previous frame get a lot of empty familiarity that packaged the best, and in this case the type of 3 and type 4 is a cut above other types of packaging. Now on new types: ---- Types 5.9 This type of compressed 1-4.Vvoditsya that some notion of how to flag the 2 nd urovnya.Bity it determine the state of the flag byte flag gov for 8 following behind him familiarity. If bit = 0 then flag = 0 (in this case, the flow written only color, and even then, if it exists) and if = 1, then the flag is not zero, and the unit goes into flow for the full program (flag, data, and could, color). An example: Assume packed frame (for the latitude outlook will be unpacked with color) begins ... DB% 10010000 DB 1 DB 2 DB 3 DB 4 DB% 00100001, # FF, # 55,5 DB 6 DB 7 DB% 10000000, # 77.1 The first byte - indicates level 2. Enjoying the state of the bits, starting from zero (Right): 0 - block is empty (types 5,6) or unchanged (Types 7,8). From the data block in the flow only the color (= 1) 0 - the same (color 2) 0 - the same (color 3) 0 - the same (color 4) 1 - Aha! Block in the flow is fully lined. Take the flag of the block (% 00100001) and according to the type extract block. 5 Color 0 - block is empty. 6 Color 0 - block is empty. Color 7 1 - a full block. (Flag% 10000000, data # 77, color 1.) All you have finished with 8 blocks ... Then you need the same thing - a flag 2-nd level, and all that attached to it. Of course, the total number of blocks in the frame is not necessarily a multiple of 8. In such cases, unnecessary bits of the last flag Tier 2 are not counted. What we get from this? Each zero byte flags shrinks to 1-bit flag 2-nd level, but every non-zero decay Hayot to 9 bits. For example, a completely blank frame without color uzhmetsya the terrible 64 times (First, empty familiarity huddle in Zero the flags byte, and secondly, each Zero the flags byte clinging to the 1-bit flag 2-Tier). ---- Now about the color Information on the availability of color and packed VKY (yes, it is also there!) to senior bits of the frame type. b7 = 0 if no color flow (ie, it completely identical to the flow previous frame) = 1 if it is b6 = 0, if the color is not encoded (ie each packed with familiarity comes 1 byte color) = 1 if the coded (passed familiarity with the unchanging color) And now I say a piece of paper ... When packing the color entered and controlled more flax bytes for color. Very, very similar the flag of the Level 2 - if it bit = 0, the color of familiarity is not changed with respect to Niya to the previous frame and the flow otsuts tvuet. If bit = 1, then follow the sign place is its color. As the flag 2 nd UB vnya, coat color occurs every 8 characters places. If both of these flags are present (in For example, type 5 with a packed color: # C5), then always comes first flag level 2, but for it - the flag colors. Gross flow diagram of the frame as you like looks like this: [Duration] [Type] b0 .. 5 - Packaging Type b6 - color pressed b7 - color is present [Flag Level 2] only for types 09.05 (Detects the presence of steam [Flag] [block]) [Flag color] only for compressed color (detects component [color]) [Flag 1] [block 1] [color 1] [Flag 2] [Unit 2] [color 2] [Flag 3] [Unit 3] [color 3] [Flag 4] [Unit 4] [4 color] [Flag 5] [Unit 5] [5 color] [Flag 6] [Unit 6] [color 6] [Flag 7], [Block 7] [color 7] [Flag 8] [Box 8] [color 8] [Flag Level 2] ... Well, as always, the priority in choosing T na package (and images, and colors) - again measures ...
Other articles:
Similar articles:
В этот день... 23 November