Nicolas Cellier uploaded a new version of Graphics to project The Trunk: http://source.squeak.org/trunk/Graphics-nice.536.mcz
==================== Summary ====================
Name: Graphics-nice.536 Author: nice Time: 21 August 2022, 5:36:40.736262 pm UUID: a4930d0f-a408-724e-b9e0-4eb4841607e3 Ancestors: Graphics-nice.535
Further accelerate Color creation from 8 bits components.
For this we pre-multiply the constants by the destination shift - 8, so as to omit the right shift >> 8 followed by the left shift << Red/GreenShift. - RedShift = 20 bits, 16r403 >> (20-8) = 16r403000 - GreenShift = 10 bits, 16r403 >> (10-8) = 16r100C
=============== Diff against Graphics-nice.535 ===============
Item was changed: ----- Method: Color>>setRed8:green8:blue8: (in category 'private') ----- setRed8: r green8: g blue8: b "Initialize this color's r, g, and b components to the given values in the range [0..255]. Use an optimized operation rather than a slow division" " self assert: ((0 to: 255) allSatisfy: [:e | (e*1023/255) rounded = (e * 16r403 + 16r81 >> 8)]). "
ComponentMax = 1023 ifFalse: [^self setRed: r / 255 green: g / 255 blue: b / 255]. rgb == nil ifFalse: [self attemptToMutateError]. + rgb := (r* 16r403000 + 16r81000 bitAnd: 16r3FF00000 "ComponentMask << RedShift" ) + + (g* 16r100C + 16r204 bitAnd: 16rFFC00 "ComponentMask << GreenShift" ) + + (b* 16r403 + 16r81 >> 8). - rgb := ((r* 16r403 + 16r81 >> 8) bitShift: RedShift) - + ((g* 16r403 + 16r81 >> 8) bitShift: GreenShift) - + ((b* 16r403 + 16r81 >> 8)). cachedDepth := nil. cachedBitPattern := nil.!
Item was changed: ----- Method: Color>>setRed:green:blue:range: (in category 'private') ----- setRed: r green: g blue: b range: range "Initialize this color's r, g, and b components to the given values in the range [0..r]."
+ range = ComponentMax ifTrue: [^self setPrivateRed: r green: g blue: b]. range = 255 ifTrue: [^self setRed8: r green8: g blue8: b]. ^ self setRed: r / range green: g / range blue: b / range!
Item was changed: DisplayMedium subclass: #Form instanceVariableNames: 'bits width height depth offset' classVariableNames: 'CompressOnSnapshot' poolDictionaries: '' category: 'Graphics-Display Objects'!
+ !Form commentStamp: 'nice 5/3/2020 18:04' prior: 0! - !Form commentStamp: 'cbc 5/5/2017 10:07' prior: 0! A rectangular array of pixels, used for holding images. All pictures, including character images are Forms. The depth of a Form is how many bits are used to specify the color at each pixel. The actual bits are held in a Bitmap, whose internal structure is different at each depth. Class Color allows you to deal with colors without knowing how they are actually encoded inside a Bitmap. The supported depths (in bits) are 1, 2, 4, 8, 16, and 32. The number of actual colors at these depths are: 2, 4, 16, 256, 32768, and 16 million. Forms are indexed starting at 0 instead of 1; thus, the top-left pixel of a Form has coordinates 0@0. Forms are combined using BitBlt. See the comment in class BitBlt. Forms that repeat many times to fill a large destination are InfiniteForms.
colorAt: x@y Returns the abstract Color at this location displayAt: x@y shows this form on the screen displayOn: aMedium at: x@y shows this form in a Window, a Form, or other DisplayMedium fillColor: aColor Set all the pixels to the color. edit launch an editor to change the bits of this form. pixelValueAt: x@y The encoded color. The encoding depends on the depth.
+ Details about internal format for Bitmap: + Pixels are organised left to right, top to bottom, that is as a contiguous serie of lines. + Each pixel is made of a fixed quantity of bits (depth). + Thus a Bitmap can be viewed as a rectangular area of size (width*depth x height) in bits. + However, the beginning of each line in the bitmap must fall on a 32-bit word boundary. + Thus the actual bitSize of a line is rounded up to next multiple of 32. + The Bitmap may somehow have unsued bits near the end of each line. + + Note: If you want to hook up other external forms/displayScreens, please look at the (successful) Graphics-External package in http://www.squeaksource.com/Balloon3D. + + ! - Note: If you want to hook up other external forms/displayScreens, please look at the (successful) Graphics-External package in http://www.squeaksource.com/Balloon3D.!
packages@lists.squeakfoundation.org