Added support for converting images to raw ARGB32 bits.
This may be used with Cairo and also to set window icon undex X / Wayland
--- a/Image.st Sat Aug 15 06:40:00 2015 +0200
+++ b/Image.st Tue Sep 01 18:09:33 2015 +0100
@@ -1,5 +1,3 @@
-"{ Encoding: utf8 }"
-
"
COPYRIGHT (c) 1991 by Claus Gittinger
All Rights Reserved
@@ -2540,6 +2538,106 @@
!Image methodsFor:'accessing'!
+bitsARGB32
+ | bitsARGB32 |
+
+ bitsARGB32 := ByteArray new: width * height * 4.
+ self bitsARGB32Into: bitsARGB32.
+ ^ bitsARGB32
+
+ "Created: / 01-09-2015 / 18:02:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+bitsARGB32Into: buffer
+ self bitsARGB32Into: buffer startingAt: 1
+
+ "Created: / 01-09-2015 / 17:18:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+bitsARGB32Into: buffer startingAt: first
+ self bitsARGB32Into: buffer startingAt: first stride: width
+
+ "Created: / 01-09-2015 / 17:18:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+bitsARGB32Into: buffer startingAt: first stride: stride
+ | aOffset rOffset gOffset bOffset |
+
+ UninterpretedBytes isBigEndian ifTrue:[
+ aOffset := 1.
+ rOffset := 2.
+ gOffset := 3.
+ bOffset := 4.
+ ] ifFalse:[
+ aOffset := 4.
+ rOffset := 3.
+ gOffset := 2.
+ bOffset := 1.
+ ].
+ mask isNil ifTrue:[
+ 0 to: height - 1 do:[:y |
+ | base |
+ base := (first - 1) + (y * stride).
+ 0 to: width - 1 do:[:x |
+ | pixel color offset |
+
+ offset := base + (x * 4).
+ pixel := self pixelAtX: x y: y.
+ color := self colorFromValue: pixel.
+ buffer at: (offset + rOffset) put: color redByte.
+ buffer at: (offset + gOffset) put: color greenByte.
+ buffer at: (offset + bOffset) put: color blueByte.
+ buffer at: (offset + aOffset) put: 16rFF.
+ ]
+ ]
+ ] ifFalse:[
+ mask depth == 1 ifTrue:[
+ 0 to: height - 1 do:[:y |
+ | base |
+
+ base := (first - 1) + (y * stride).
+ 0 to: width - 1 do:[:x |
+ | pixel color offset |
+
+ offset := base + (x * 4).
+ (mask pixelAtX: x y:y) ifTrue:[
+ pixel := self pixelAtX: x y: y.
+ color := self colorFromValue: pixel.
+ buffer at: (offset + rOffset) put: color redByte.
+ buffer at: (offset + gOffset) put: color greenByte.
+ buffer at: (offset + bOffset) put: color blueByte.
+ buffer at: (offset + aOffset) put: 16rFF.
+ ] ifFalse:[
+ buffer at: (offset + rOffset) put: 0.
+ buffer at: (offset + gOffset) put: 0.
+ buffer at: (offset + bOffset) put: 0.
+ buffer at: (offset + aOffset) put: 0.
+ ].
+ ]
+ ]
+ ] ifFalse:[
+ mask depth == 8 ifTrue:[
+ 0 to: height - 1 do:[:y |
+ | base |
+
+ base := (first - 1) + (y * stride).
+ 0 to: width - 1 do:[:x |
+ | pixel color offset |
+
+ offset := base + (x * 4).
+ pixel := self pixelAtX: x y: y.
+ color := self colorFromValue: pixel.
+ buffer at: (offset + rOffset) put: color redByte.
+ buffer at: (offset + gOffset) put: color greenByte.
+ buffer at: (offset + bOffset) put: color blueByte.
+ buffer at: (offset + aOffset) put: (mask pixelAtX: x y:y)
+ ]
+ ]
+ ]]].
+
+ "Created: / 01-09-2015 / 17:16:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
bitsPerSample
"return the number of bits per sample.
The return value is an array of bits-per-plane."
@@ -12486,7 +12584,7 @@
photometric ~= self class defaultPhotometric ifTrue:[
(colorMap isNil or:[photometric ~~ #palette]) ifTrue:[
aStream nextPutAll:' photometric:('. photometric storeOn:aStream. aStream nextPutAll:')'.
- needSemi := true.
+ needSemi := false.
].
].
aStream nextPutAll:')'.
@@ -12546,7 +12644,8 @@
].
aStream nextPutAll:'; yourself'
- "Modified: / 22.8.1998 / 12:55:21 / cg"
+ "Modified: / 22-08-1998 / 12:55:21 / cg"
+ "Modified: / 01-09-2015 / 17:24:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!Image methodsFor:'private'!
@@ -14718,6 +14817,11 @@
version_CVS
^ '$Header$'
+!
+
+version_HG
+
+ ^ '$Changeset: <not expanded> $'
! !