[squeak-dev] The Trunk: Graphics-pre.404.mcz

commits at source.squeak.org commits at source.squeak.org
Mon Oct 15 08:57:53 UTC 2018


Patrick Rein uploaded a new version of Graphics to project The Trunk:
http://source.squeak.org/trunk/Graphics-pre.404.mcz

==================== Summary ====================

Name: Graphics-pre.404
Author: pre
Time: 15 October 2018, 9:57:15.384742 am
UUID: a816199d-b2b6-7247-a8f8-898c605829df
Ancestors: Graphics-pre.403

Removes odd behavior of colorFromPixelValue:depth: which returns transparent instead of 32bit rgb black

=============== Diff against Graphics-pre.403 ===============

Item was changed:
  ----- Method: Color class>>colorFromPixelValue:depth: (in category 'instance creation') -----
  colorFromPixelValue: p depth: d
  	"Convert a pixel value for the given display depth into a color."
  	"Details: For depths of 8 or less, the pixel value is simply looked up in a table. For greater depths, the color components are extracted and converted into a color."
  
  	| r g b alpha |
  	d = 8 ifTrue: [^ IndexedColors at: (p bitAnd: 16rFF) + 1].
  	d = 4 ifTrue: [^ IndexedColors at: (p bitAnd: 16r0F) + 1].
  	d = 2 ifTrue: [^ IndexedColors at: (p bitAnd: 16r03) + 1].
  	d = 1 ifTrue: [^ IndexedColors at: (p bitAnd: 16r01) + 1].
  
  	(d = 16) | (d = 15) ifTrue: [
  		"five bits per component"
  		r := (p bitShift: -10) bitAnd: 16r1F.
  		g := (p bitShift: -5) bitAnd: 16r1F.
  		b := p bitAnd: 16r1F.
  		(r = 0 and: [g = 0]) ifTrue: [
  			b = 0 ifTrue: [^Color transparent].
  			b = 1 ifTrue: [^Color black]].
  		^ Color r: r g: g b: b range: 31].
  
  	d = 32 ifTrue: [
  		"eight bits per component; 8 bits of alpha"
  		r := (p bitShift: -16) bitAnd: 16rFF.
  		g := (p bitShift: -8) bitAnd: 16rFF.
  		b := p bitAnd: 16rFF.
  		alpha := p bitShift: -24.
  		alpha = 0 ifTrue: [^Color transparent].
- 		(r = 0 and: [g = 0 and: [b = 0]])  ifTrue: [^Color transparent].
  		alpha < 255
  			ifTrue: [^ (Color r: r g: g b: b range: 255) alpha: (alpha asFloat / 255.0)]
  			ifFalse: [^ (Color r: r g: g b: b range: 255)]].
  
  	d = 12 ifTrue: [
  		"four bits per component"
  		r := (p bitShift: -8) bitAnd: 16rF.
  		g := (p bitShift: -4) bitAnd: 16rF.
  		b := p bitAnd: 16rF.
  		^ Color r: r g: g b: b range: 15].
  
  	d = 9 ifTrue: [
  		"three bits per component"
  		r := (p bitShift: -6) bitAnd: 16r7.
  		g := (p bitShift: -3) bitAnd: 16r7.
  		b := p bitAnd: 16r7.
  		^ Color r: r g: g b: b range: 7].
  
  	self error: 'unknown pixel depth: ', d printString
  !



More information about the Squeak-dev mailing list