category
authorStefan Vogel <sv@exept.de>
Tue, 01 Feb 2005 13:39:32 +0100
changeset 2032 cf3b4dcc4ad3
parent 2031 c8527bd15f50
child 2033 a9ed3856e834
category
GIFReader.st
--- a/GIFReader.st	Thu Jan 20 16:26:36 2005 +0100
+++ b/GIFReader.st	Tue Feb 01 13:39:32 2005 +0100
@@ -568,6 +568,99 @@
     "Modified: 14.10.1997 / 18:44:27 / cg"
 !
 
+writeBitDataFor: image
+    "using modified Lempel-Ziv Welch algorithm."
+
+    | bits bitsPerPixel t1
+      maxBits maxMaxCode tSize initCodeSize ent tShift fCode pixel index disp nomatch |
+
+    outStream nextPut:ImageSeparator.
+    self writeShort:0.       "/
+    self writeShort:0.       "/
+    self writeShort:width.   "/ image size
+    self writeShort:height.
+
+    interlace == true ifTrue:[
+        t1 := 64
+    ] ifFalse:[
+        t1 := 0
+    ].
+    outStream nextPut:t1.       "/ another flag
+
+    bitsPerPixel := image bitsPerPixel.
+    bits := image bits.
+
+    pass := 0.
+    xpos := 0.
+    ypos := 0.
+    rowByteSize := image bytesPerRow. "/ width * 8 + 31 // 32 * 4.
+    remainBitCount := 0.
+    bufByte := 0.
+    bufStream := WriteStream on: (ByteArray new: 256).
+
+    maxBits := 12.
+    maxMaxCode := 1 bitShift: maxBits.
+    tSize := 5003.
+    prefixTable := Array new: tSize.
+    suffixTable := Array new: tSize.
+
+    initCodeSize := bitsPerPixel <= 1 ifTrue: [2] ifFalse: [bitsPerPixel].
+    outStream nextPut: initCodeSize.
+    self setParameters: initCodeSize.
+
+    tShift := 0.
+    fCode := tSize.
+    [fCode < 65536] whileTrue:
+            [tShift := tShift + 1.
+            fCode := fCode * 2].
+    tShift := 8 - tShift.
+    1 to: tSize do: [:i | suffixTable at: i put: -1].
+
+    self writeCodeAndCheckCodeSize: clearCode.
+    ent := self readPixelFrom: bits.
+    [(pixel := self readPixelFrom: bits) == nil] whileFalse:
+            [
+            fCode := (pixel bitShift: maxBits) + ent.
+            index := ((pixel bitShift: tShift) bitXor: ent) + 1.
+            (suffixTable at: index) = fCode
+                    ifTrue: [ent := prefixTable at: index]
+                    ifFalse:
+                            [nomatch := true.
+                            (suffixTable at: index) >= 0
+                                    ifTrue:
+                                            [disp := tSize - index + 1.
+                                            index = 1 ifTrue: [disp := 1].
+                                            "probe"
+                                            [(index := index - disp) < 1 ifTrue: [index := index + tSize].
+                                            (suffixTable at: index) = fCode
+                                                    ifTrue:
+                                                            [ent := prefixTable at: index.
+                                                            nomatch := false.
+                                                            "continue whileFalse:"].
+                                            nomatch and: [(suffixTable at: index) > 0]]
+                                                    whileTrue: ["probe"]].
+                            "nomatch"
+                            nomatch ifTrue:
+                                    [self writeCodeAndCheckCodeSize: ent.
+                                    ent := pixel.
+                                    freeCode < maxMaxCode
+                                            ifTrue:
+                                                    [prefixTable at: index put: freeCode.
+                                                    suffixTable at: index put: fCode.
+                                                    freeCode := freeCode + 1]
+                                            ifFalse:
+                                                    [self writeCodeAndCheckCodeSize: clearCode.
+                                                    1 to: tSize do: [:i | suffixTable at: i put: -1].
+                                                    self setParameters: initCodeSize]]]].
+    prefixTable := suffixTable := nil.
+    self writeCodeAndCheckCodeSize: ent.
+    self writeCodeAndCheckCodeSize: eoiCode.
+    self flushCode.
+    outStream nextPut: 0.        "zero-length packet"
+
+    "Modified: 15.10.1997 / 19:56:28 / cg"
+!
+
 writeCode: aCode 
     self nextBitsPut: aCode
 
@@ -581,6 +674,57 @@
 
     "Created: 14.10.1997 / 18:38:24 / cg"
     "Modified: 14.10.1997 / 18:40:56 / cg"
+!
+
+writeHeaderFor:image
+    "write the gif header"
+
+    |bitsPerPixel t1|
+
+    bitsPerPixel := image bitsPerPixel.
+
+    outStream nextPutAll: 'GIF89a' asByteArray.
+    self writeShort:width. "/ screen size
+    self writeShort:height.    
+    t1 := 128.
+    t1 := t1 bitOr:(bitsPerPixel - 1 bitShift:5).
+    t1 := t1 bitOr:(bitsPerPixel - 1).
+    outStream nextPut:t1.  "/ flag
+    outStream nextPut:0.   "/ background (not used)
+    outStream nextPut:0.   "/ aspect ratio
+
+    0 to:(1 bitShift:bitsPerPixel)-1 do:[:pixel |
+        |clr red green blue|
+
+        clr := image colorFromValue:pixel.
+        clr isNil ifTrue:[
+            "/ unused colorMap slot
+            red := green := blue := 0.
+        ] ifFalse:[
+            red := (clr redByte).
+            green := (clr greenByte).
+            blue := (clr blueByte).
+        ].
+        outStream
+            nextPut:red; nextPut:green; nextPut:blue.
+    ].    
+
+    "Created: / 14.10.1997 / 17:41:28 / cg"
+    "Modified: / 31.10.1997 / 16:12:13 / cg"
+!
+
+writeMaskExtensionHeaderFor:image
+    "write an extension header for the transparent pixel"
+
+    outStream nextPut:Extension.
+    outStream nextPut:16rF9.       "/ graphic control extension
+    outStream nextPut:4.           "/ subBlockSize
+
+    outStream nextPut:1.                "/ animationType
+    outStream nextPutShort:1 MSB:false. "/ animationTime
+    outStream nextPut:maskPixel.        "/ animationMask
+
+    outStream nextPut:0.
 ! !
 
 !GIFReader methodsFor:'reading'!
@@ -829,156 +973,12 @@
 
     "Created: / 14.10.1997 / 17:40:12 / cg"
     "Modified: / 27.10.1997 / 22:42:31 / cg"
-!
-
-writeBitDataFor: image
-    "using modified Lempel-Ziv Welch algorithm."
-
-    | bits bitsPerPixel t1
-      maxBits maxMaxCode tSize initCodeSize ent tShift fCode pixel index disp nomatch |
-
-    outStream nextPut:ImageSeparator.
-    self writeShort:0.       "/
-    self writeShort:0.       "/
-    self writeShort:width.   "/ image size
-    self writeShort:height.
-
-    interlace == true ifTrue:[
-        t1 := 64
-    ] ifFalse:[
-        t1 := 0
-    ].
-    outStream nextPut:t1.       "/ another flag
-
-    bitsPerPixel := image bitsPerPixel.
-    bits := image bits.
-
-    pass := 0.
-    xpos := 0.
-    ypos := 0.
-    rowByteSize := image bytesPerRow. "/ width * 8 + 31 // 32 * 4.
-    remainBitCount := 0.
-    bufByte := 0.
-    bufStream := WriteStream on: (ByteArray new: 256).
-
-    maxBits := 12.
-    maxMaxCode := 1 bitShift: maxBits.
-    tSize := 5003.
-    prefixTable := Array new: tSize.
-    suffixTable := Array new: tSize.
-
-    initCodeSize := bitsPerPixel <= 1 ifTrue: [2] ifFalse: [bitsPerPixel].
-    outStream nextPut: initCodeSize.
-    self setParameters: initCodeSize.
-
-    tShift := 0.
-    fCode := tSize.
-    [fCode < 65536] whileTrue:
-            [tShift := tShift + 1.
-            fCode := fCode * 2].
-    tShift := 8 - tShift.
-    1 to: tSize do: [:i | suffixTable at: i put: -1].
-
-    self writeCodeAndCheckCodeSize: clearCode.
-    ent := self readPixelFrom: bits.
-    [(pixel := self readPixelFrom: bits) == nil] whileFalse:
-            [
-            fCode := (pixel bitShift: maxBits) + ent.
-            index := ((pixel bitShift: tShift) bitXor: ent) + 1.
-            (suffixTable at: index) = fCode
-                    ifTrue: [ent := prefixTable at: index]
-                    ifFalse:
-                            [nomatch := true.
-                            (suffixTable at: index) >= 0
-                                    ifTrue:
-                                            [disp := tSize - index + 1.
-                                            index = 1 ifTrue: [disp := 1].
-                                            "probe"
-                                            [(index := index - disp) < 1 ifTrue: [index := index + tSize].
-                                            (suffixTable at: index) = fCode
-                                                    ifTrue:
-                                                            [ent := prefixTable at: index.
-                                                            nomatch := false.
-                                                            "continue whileFalse:"].
-                                            nomatch and: [(suffixTable at: index) > 0]]
-                                                    whileTrue: ["probe"]].
-                            "nomatch"
-                            nomatch ifTrue:
-                                    [self writeCodeAndCheckCodeSize: ent.
-                                    ent := pixel.
-                                    freeCode < maxMaxCode
-                                            ifTrue:
-                                                    [prefixTable at: index put: freeCode.
-                                                    suffixTable at: index put: fCode.
-                                                    freeCode := freeCode + 1]
-                                            ifFalse:
-                                                    [self writeCodeAndCheckCodeSize: clearCode.
-                                                    1 to: tSize do: [:i | suffixTable at: i put: -1].
-                                                    self setParameters: initCodeSize]]]].
-    prefixTable := suffixTable := nil.
-    self writeCodeAndCheckCodeSize: ent.
-    self writeCodeAndCheckCodeSize: eoiCode.
-    self flushCode.
-    outStream nextPut: 0.        "zero-length packet"
-
-    "Modified: 15.10.1997 / 19:56:28 / cg"
-!
-
-writeHeaderFor:image
-    "write the gif header"
-
-    |bitsPerPixel t1|
-
-    bitsPerPixel := image bitsPerPixel.
-
-    outStream nextPutAll: 'GIF89a' asByteArray.
-    self writeShort:width. "/ screen size
-    self writeShort:height.    
-    t1 := 128.
-    t1 := t1 bitOr:(bitsPerPixel - 1 bitShift:5).
-    t1 := t1 bitOr:(bitsPerPixel - 1).
-    outStream nextPut:t1.  "/ flag
-    outStream nextPut:0.   "/ background (not used)
-    outStream nextPut:0.   "/ aspect ratio
-
-    0 to:(1 bitShift:bitsPerPixel)-1 do:[:pixel |
-        |clr red green blue|
-
-        clr := image colorFromValue:pixel.
-        clr isNil ifTrue:[
-            "/ unused colorMap slot
-            red := green := blue := 0.
-        ] ifFalse:[
-            red := (clr redByte).
-            green := (clr greenByte).
-            blue := (clr blueByte).
-        ].
-        outStream
-            nextPut:red; nextPut:green; nextPut:blue.
-    ].    
-
-    "Created: / 14.10.1997 / 17:41:28 / cg"
-    "Modified: / 31.10.1997 / 16:12:13 / cg"
-!
-
-writeMaskExtensionHeaderFor:image
-    "write an extension header for the transparent pixel"
-
-    outStream nextPut:Extension.
-    outStream nextPut:16rF9.       "/ graphic control extension
-    outStream nextPut:4.           "/ subBlockSize
-
-    outStream nextPut:1.                "/ animationType
-    outStream nextPutShort:1 MSB:false. "/ animationTime
-    outStream nextPut:maskPixel.        "/ animationMask
-
-    outStream nextPut:0.
 ! !
 
 !GIFReader class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libview2/GIFReader.st,v 1.91 2005-01-07 14:35:42 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libview2/GIFReader.st,v 1.92 2005-02-01 12:39:32 stefan Exp $'
 ! !
 
 GIFReader initialize!