Depth64Image.st
author Stefan Vogel <sv@exept.de>
Fri, 15 Jul 2016 13:57:43 +0200
branchdelegated_gc
changeset 7412 d4b5f3114373
parent 6297 ea0fe952c3a5
child 7211 1e72cd273ab3
permissions -rw-r--r--
Need device instvar CVS ----------------------------------------------------------------------

"
 COPYRIGHT (c) 2009 by eXept Software AG
              All Rights Reserved

 This software is furnished under a license and may be used
 only in accordance with the terms of that license and with the
 inclusion of the above copyright notice.   This software may not
 be provided or otherwise made available to, or used by, any
 other person.  No title to or ownership of the software is
 hereby transferred.
"
"{ Package: 'stx:libview' }"

Image subclass:#Depth64Image
	instanceVariableNames:''
	classVariableNames:''
	poolDictionaries:''
	category:'Graphics-Images'
!

!Depth64Image class methodsFor:'documentation'!

copyright
"
 COPYRIGHT (c) 2009 by eXept Software AG
              All Rights Reserved

 This software is furnished under a license and may be used
 only in accordance with the terms of that license and with the
 inclusion of the above copyright notice.   This software may not
 be provided or otherwise made available to, or used by, any
 other person.  No title to or ownership of the software is
 hereby transferred.
"
!

documentation
"
    this class represents 64 bit images as possibly provided by png 4x16bit rgba images.
    Such images are normally not used in real world applications, as humans cannot differentiate 
    more than roughly 200 distinct color tone values. However, in image processing (false-color) applications,
    such a fine grain image makes sense and is sometimes used.

    [author:]
        Claus Gittinger

    [see also:]
        Depth1Image Depth2Image Depth4Image Depth8Image Depth16Image Depth24Image Depth32Image
        ImageReader
"
! !

!Depth64Image class methodsFor:'queries'!

defaultPhotometric
    "return the default photometric pixel interpretation"

    ^ #rgb
!

imageDepth
    "return the depth of images represented by instances of
     this class - here we return 64"

    ^ 64
! !

!Depth64Image methodsFor:'accessing-pixels'!

pixelAtX:x y:y
    "retrieve a pixel at x/y; return a pixelValue.
     Pixels start at x=0 , y=0 for upper left pixel, end at
     x = width-1, y=height-1 for lower right pixel"

    |pixelIndex "{ Class: SmallInteger }"|

    pixelFunction notNil ifTrue:[^ pixelFunction value:x value:y].

    pixelIndex := (width * 8 * y) + 1 + (x * 8).

    ^ ((bytes wordAt:pixelIndex MSB:true) bitShift:48)
    + ((bytes wordAt:pixelIndex+2 MSB:true) bitShift:32)
    + ((bytes wordAt:pixelIndex+4 MSB:true) bitShift:16)
    + (bytes wordAt:pixelIndex+6 MSB:true).
!

pixelAtX:x y:y put:aPixelValue
    "set the pixel at x/y to aPixelValue.
     Pixels start at x=0 , y=0 for upper left pixel, end at
     x = width-1, y=height-1 for lower right pixel"

    |pixelIndex "{ Class: SmallInteger }"|

    pixelIndex := (width * 8 * y) + 1 + (x * 8).
    bytes isNil ifTrue:[
        self createPixelStore
    ].
    bytes wordAt:pixelIndex put:((aPixelValue bitShift:-48) bitAnd:16rFFFF) MSB:true.
    bytes wordAt:pixelIndex+2 put:((aPixelValue bitShift:-32) bitAnd:16rFFFF) MSB:true.
    bytes wordAt:pixelIndex+4 put:((aPixelValue bitShift:-16) bitAnd:16rFFFF) MSB:true.
    bytes wordAt:pixelIndex+6 put:(aPixelValue bitAnd:16rFFFF) MSB:true.
! !

!Depth64Image methodsFor:'initialization'!

initialize
    super initialize.
    samplesPerPixel := 4. 
    bitsPerSample := #(16 16 16 16).
! !

!Depth64Image methodsFor:'queries'!

bitsPerPixel
    "return the number of bits per pixel"

    ^ 64
!

bitsPerRow
    "return the number of bits in one scanline of the image"

    ^ width * 64
!

bytesPerRow
    "return the number of bytes in one scanline of the image"

    ^ width * 8.
!

hasAlphaChannel
    ^ true
! !

!Depth64Image class methodsFor:'documentation'!

version
    ^ '$Header: /cvs/stx/stx/libview/Depth64Image.st,v 1.4 2014-03-02 13:59:31 cg Exp $'
! !