FaceReader.st
author claus
Sun, 27 Aug 1995 16:41:00 +0200
changeset 92 18d1136ad2e0
parent 43 e85c7d392833
child 96 948318b2fbd4
permissions -rw-r--r--
.

"
 COPYRIGHT (c) 1993 by Claus Gittinger
	      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.
"

ImageReader subclass:#FaceReader
	 instanceVariableNames:''
	 classVariableNames:''
	 poolDictionaries:''
	 category:'Graphics-Images support'
!

FaceReader comment:'
COPYRIGHT (c) 1993 by Claus Gittinger
	      All Rights Reserved

$Header: /cvs/stx/stx/libview2/FaceReader.st,v 1.10 1995-02-18 15:56:56 claus Exp $
'!

!FaceReader class methodsFor:'documentation'!

copyright
"
 COPYRIGHT (c) 1993 by Claus Gittinger
	      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.
"
!

version
"
$Header: /cvs/stx/stx/libview2/FaceReader.st,v 1.10 1995-02-18 15:56:56 claus Exp $
"
!

documentation
"
    this class knows how to read face files.
    (this format is used for peoples faces - which can be optained from some
     ftp-servers, to improve mail- and/or newsreaders :-)
"
! !

!FaceReader class methodsFor:'initialization'!

initialize
    Image fileFormats at:'.face'  put:self.
! !

!FaceReader methodsFor:'reading from file'!

fromStream:aStream
    |line 
     dstIndex "{ Class: SmallInteger }"
     bytesPerRow
     lo       "{ Class: SmallInteger }"
     hi       "{ Class: SmallInteger }"
     val      "{ Class: SmallInteger }"
     inHeader s depth|

    inStream := aStream.

    line := aStream nextLine.
    line isNil ifTrue:[
	^ nil
    ].

    inHeader := true.
    [inHeader] whileTrue:[
	(line startsWith:'Image:') ifTrue:[
	    s := ReadStream on:line.
	    s position:7.
	    width := Number readFrom:s.
	    height := Number readFrom:s.
	    depth := Number readFrom:s.
	    inHeader := false.
	].
	line := aStream nextLine
    ].

    depth == 8 ifFalse:[
	self error:'only depth 8 supported'
    ].

    [line isEmpty] whileTrue:[
	line := aStream nextLine.
    ].

    bytesPerRow := width * depth // 8.
    ((width * depth \\ 8) ~~ 0) ifTrue:[
	bytesPerRow := bytesPerRow + 1
    ].

    data := ByteArray uninitializedNew:(bytesPerRow * height).
    dstIndex := data size.

    [line notNil] whileTrue:[
	1 to:(line size) by:2 do:[:cI |
	    hi := (line at:cI) digitValue.
	    lo := (line at:(cI + 1)) digitValue.
	    val := (hi bitShift:4) bitOr:lo.
	    data at:dstIndex put:val.
	    dstIndex := dstIndex - 1
	].
	line := aStream nextLine
    ].
    photometric := #whiteIs0.
    samplesPerPixel := 1.
    bitsPerSample := #(8)

    "FaceReader fromFile:'../goodies/faces/next.com/steve.face'"
    "this is NOT steve jobs :-)"
! !