Depth1Image.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Sat, 26 Nov 2016 21:09:32 +0000
branchjv
changeset 7719 c2f802dd340a
parent 7581 1551935e973f
child 7816 f818c6ba6334
permissions -rw-r--r--
XFT: Forbid XFT rendering on bitmaps (depth-1 pixmaps) In theory it could work if XFT would just turn gray into either black or white. But XFT doesn't do it and simply draw nothing without failing in any way. To prevent this silent failures, forbid drawing XFT onto bitmaps (depth-1 pixmaps). After all, the while point of XFT is to use anti-aliased fonts.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3
c0aaded4ef28 *** empty log message ***
claus
parents: 1
diff changeset
     1
"
c0aaded4ef28 *** empty log message ***
claus
parents: 1
diff changeset
     2
 COPYRIGHT (c) 1993 by Claus Gittinger
81
4ba554473294 *** empty log message ***
claus
parents: 54
diff changeset
     3
	      All Rights Reserved
3
c0aaded4ef28 *** empty log message ***
claus
parents: 1
diff changeset
     4
c0aaded4ef28 *** empty log message ***
claus
parents: 1
diff changeset
     5
 This software is furnished under a license and may be used
c0aaded4ef28 *** empty log message ***
claus
parents: 1
diff changeset
     6
 only in accordance with the terms of that license and with the
c0aaded4ef28 *** empty log message ***
claus
parents: 1
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
c0aaded4ef28 *** empty log message ***
claus
parents: 1
diff changeset
     8
 be provided or otherwise made available to, or used by, any
c0aaded4ef28 *** empty log message ***
claus
parents: 1
diff changeset
     9
 other person.  No title to or ownership of the software is
c0aaded4ef28 *** empty log message ***
claus
parents: 1
diff changeset
    10
 hereby transferred.
c0aaded4ef28 *** empty log message ***
claus
parents: 1
diff changeset
    11
"
3263
bd92a12c9316 category changes
Claus Gittinger <cg@exept.de>
parents: 3000
diff changeset
    12
"{ Package: 'stx:libview' }"
bd92a12c9316 category changes
Claus Gittinger <cg@exept.de>
parents: 3000
diff changeset
    13
7275
b6314f7c2e19 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 6495
diff changeset
    14
"{ NameSpace: Smalltalk }"
b6314f7c2e19 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 6495
diff changeset
    15
1
304f026e10cd Initial revision
claus
parents:
diff changeset
    16
Image subclass:#Depth1Image
427
746424fba14f added palette-to-form conversion
Claus Gittinger <cg@exept.de>
parents: 337
diff changeset
    17
	instanceVariableNames:''
746424fba14f added palette-to-form conversion
Claus Gittinger <cg@exept.de>
parents: 337
diff changeset
    18
	classVariableNames:''
746424fba14f added palette-to-form conversion
Claus Gittinger <cg@exept.de>
parents: 337
diff changeset
    19
	poolDictionaries:''
746424fba14f added palette-to-form conversion
Claus Gittinger <cg@exept.de>
parents: 337
diff changeset
    20
	category:'Graphics-Images'
1
304f026e10cd Initial revision
claus
parents:
diff changeset
    21
!
304f026e10cd Initial revision
claus
parents:
diff changeset
    22
46
7b331e9012fd *** empty log message ***
claus
parents: 38
diff changeset
    23
!Depth1Image class methodsFor:'documentation'!
7b331e9012fd *** empty log message ***
claus
parents: 38
diff changeset
    24
7b331e9012fd *** empty log message ***
claus
parents: 38
diff changeset
    25
copyright
7b331e9012fd *** empty log message ***
claus
parents: 38
diff changeset
    26
"
7b331e9012fd *** empty log message ***
claus
parents: 38
diff changeset
    27
 COPYRIGHT (c) 1993 by Claus Gittinger
81
4ba554473294 *** empty log message ***
claus
parents: 54
diff changeset
    28
	      All Rights Reserved
3
c0aaded4ef28 *** empty log message ***
claus
parents: 1
diff changeset
    29
46
7b331e9012fd *** empty log message ***
claus
parents: 38
diff changeset
    30
 This software is furnished under a license and may be used
7b331e9012fd *** empty log message ***
claus
parents: 38
diff changeset
    31
 only in accordance with the terms of that license and with the
7b331e9012fd *** empty log message ***
claus
parents: 38
diff changeset
    32
 inclusion of the above copyright notice.   This software may not
7b331e9012fd *** empty log message ***
claus
parents: 38
diff changeset
    33
 be provided or otherwise made available to, or used by, any
7b331e9012fd *** empty log message ***
claus
parents: 38
diff changeset
    34
 other person.  No title to or ownership of the software is
7b331e9012fd *** empty log message ***
claus
parents: 38
diff changeset
    35
 hereby transferred.
7b331e9012fd *** empty log message ***
claus
parents: 38
diff changeset
    36
"
7b331e9012fd *** empty log message ***
claus
parents: 38
diff changeset
    37
!
3
c0aaded4ef28 *** empty log message ***
claus
parents: 1
diff changeset
    38
46
7b331e9012fd *** empty log message ***
claus
parents: 38
diff changeset
    39
documentation
7b331e9012fd *** empty log message ***
claus
parents: 38
diff changeset
    40
"
7b331e9012fd *** empty log message ***
claus
parents: 38
diff changeset
    41
    this class represents bilevel (1 bit / pixel) images.
81
4ba554473294 *** empty log message ***
claus
parents: 54
diff changeset
    42
    It mainly consists of methods which are already implemented in Image,
4ba554473294 *** empty log message ***
claus
parents: 54
diff changeset
    43
    but reimplemented here for more performance. If you plan to do heavy
4ba554473294 *** empty log message ***
claus
parents: 54
diff changeset
    44
    image processing on bilevel images, you may want to add more
4ba554473294 *** empty log message ***
claus
parents: 54
diff changeset
    45
    specialized methods here.
611
e0442439a3c6 documentation
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
    46
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
    47
    #blackIs0 / #whiteIs0 and #palette formats are supported here.
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
    48
611
e0442439a3c6 documentation
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
    49
    [author:]
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
    50
	Claus Gittinger
611
e0442439a3c6 documentation
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
    51
e0442439a3c6 documentation
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
    52
    [see also:]
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
    53
	Depth2Image Depth4Image Depth8Image Depth16Image Depth24Image
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
    54
	ImageReader
46
7b331e9012fd *** empty log message ***
claus
parents: 38
diff changeset
    55
"
7b331e9012fd *** empty log message ***
claus
parents: 38
diff changeset
    56
! !
3
c0aaded4ef28 *** empty log message ***
claus
parents: 1
diff changeset
    57
89
ea2bf46eb669 *** empty log message ***
claus
parents: 82
diff changeset
    58
!Depth1Image class methodsFor:'queries'!
ea2bf46eb669 *** empty log message ***
claus
parents: 82
diff changeset
    59
ea2bf46eb669 *** empty log message ***
claus
parents: 82
diff changeset
    60
imageDepth
579
e381761190c4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 427
diff changeset
    61
    "return the depth of images represented by instances of
e381761190c4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 427
diff changeset
    62
     this class - here we return 1"
e381761190c4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 427
diff changeset
    63
89
ea2bf46eb669 *** empty log message ***
claus
parents: 82
diff changeset
    64
    ^ 1
579
e381761190c4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 427
diff changeset
    65
e381761190c4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 427
diff changeset
    66
    "Modified: 20.4.1996 / 23:40:06 / cg"
89
ea2bf46eb669 *** empty log message ***
claus
parents: 82
diff changeset
    67
! !
ea2bf46eb669 *** empty log message ***
claus
parents: 82
diff changeset
    68
3263
bd92a12c9316 category changes
Claus Gittinger <cg@exept.de>
parents: 3000
diff changeset
    69
!Depth1Image methodsFor:'accessing-pixels'!
1
304f026e10cd Initial revision
claus
parents:
diff changeset
    70
1655
eec658000092 pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1635
diff changeset
    71
pixelAtX:x y:y
7521
07fc9060713e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7498
diff changeset
    72
    "retrieve a pixelValue at x/y; return a pixel value.
279
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
    73
     The interpretation of the returned value depends on the photometric
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
    74
     and the colormap. See also Image>>atX:y:)
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
    75
     Pixels start at 0@0 for upper left pixel, end at
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
    76
     (width-1)@(height-1) for lower right pixel"
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
    77
3842
e97ae6061e75 code cleanup
Claus Gittinger <cg@exept.de>
parents: 3599
diff changeset
    78
    |index       "{Class: SmallInteger}"
279
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
    79
     byte        "{Class: SmallInteger}"
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
    80
     mask        "{Class: SmallInteger}"|
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
    81
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
    82
%{  /* NOCONTEXT */
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
    83
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
    84
    OBJ b = __INST(bytes);
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
    85
    OBJ w = __INST(width);
1
304f026e10cd Initial revision
claus
parents:
diff changeset
    86
7275
b6314f7c2e19 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 6495
diff changeset
    87
    if (__bothSmallInteger(x, y) 
b6314f7c2e19 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 6495
diff changeset
    88
     && __isSmallInteger(w)
b6314f7c2e19 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 6495
diff changeset
    89
     && __isByteArrayLike(b)
b6314f7c2e19 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 6495
diff changeset
    90
     && (__INST(pixelFunction)==nil) ) {
b6314f7c2e19 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 6495
diff changeset
    91
        int _w = __intVal(w);
b6314f7c2e19 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 6495
diff changeset
    92
        int _y = __intVal(y);
b6314f7c2e19 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 6495
diff changeset
    93
        int _x = __intVal(x);
b6314f7c2e19 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 6495
diff changeset
    94
        unsigned _byte;
b6314f7c2e19 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 6495
diff changeset
    95
        int _idx;
279
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
    96
7275
b6314f7c2e19 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 6495
diff changeset
    97
        _idx = ((_w + 7) >> 3) * _y + (_x >> 3);
b6314f7c2e19 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 6495
diff changeset
    98
        if ((unsigned)_idx < __byteArraySize(b)) {
b6314f7c2e19 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 6495
diff changeset
    99
            _byte = __ByteArrayInstPtr(b)->ba_element[_idx];
b6314f7c2e19 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 6495
diff changeset
   100
            RETURN( (_byte & (0x80 >> (_x & 7))) ? __MKSMALLINT(1) : __MKSMALLINT(0) );
6303
fe26e0d67023 pixelfunction support
Claus Gittinger <cg@exept.de>
parents: 6066
diff changeset
   101
        }
279
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   102
    }
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   103
%}.
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   104
6303
fe26e0d67023 pixelfunction support
Claus Gittinger <cg@exept.de>
parents: 6066
diff changeset
   105
    pixelFunction notNil ifTrue:[^ pixelFunction value:x value:y].
fe26e0d67023 pixelfunction support
Claus Gittinger <cg@exept.de>
parents: 6066
diff changeset
   106
3842
e97ae6061e75 code cleanup
Claus Gittinger <cg@exept.de>
parents: 3599
diff changeset
   107
    "/ the code below is only evaluated if the bytes-collection is
e97ae6061e75 code cleanup
Claus Gittinger <cg@exept.de>
parents: 3599
diff changeset
   108
    "/ not a ByteArray, or the arguments are not integers
e97ae6061e75 code cleanup
Claus Gittinger <cg@exept.de>
parents: 3599
diff changeset
   109
e97ae6061e75 code cleanup
Claus Gittinger <cg@exept.de>
parents: 3599
diff changeset
   110
    index := (self bytesPerRow * y) + 1 + (x // 8).
279
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   111
3842
e97ae6061e75 code cleanup
Claus Gittinger <cg@exept.de>
parents: 3599
diff changeset
   112
    "left pixel is in high bit"
e97ae6061e75 code cleanup
Claus Gittinger <cg@exept.de>
parents: 3599
diff changeset
   113
    byte := bytes at:index.
e97ae6061e75 code cleanup
Claus Gittinger <cg@exept.de>
parents: 3599
diff changeset
   114
    mask := 1 bitShift:(7 - (x \\ 8)).
e97ae6061e75 code cleanup
Claus Gittinger <cg@exept.de>
parents: 3599
diff changeset
   115
    (byte bitAnd:mask) == 0 ifTrue:[^ 0].
e97ae6061e75 code cleanup
Claus Gittinger <cg@exept.de>
parents: 3599
diff changeset
   116
    ^ 1
1655
eec658000092 pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1635
diff changeset
   117
!
eec658000092 pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1635
diff changeset
   118
eec658000092 pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1635
diff changeset
   119
pixelAtX:x y:y put:aPixelValue
eec658000092 pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1635
diff changeset
   120
    "set a pixels value at x/y to aPixelValue.
7521
07fc9060713e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7498
diff changeset
   121
     The interpretation of the pixelValue depends on the photometric
07fc9060713e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7498
diff changeset
   122
     and the colormap. (see also: Image>>atX:y:put:)
1655
eec658000092 pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1635
diff changeset
   123
     Pixels start at x=0 , y=0 for upper left pixel, end at
eec658000092 pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1635
diff changeset
   124
     x = width-1, y=height-1 for lower right pixel"
eec658000092 pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1635
diff changeset
   125
3842
e97ae6061e75 code cleanup
Claus Gittinger <cg@exept.de>
parents: 3599
diff changeset
   126
    |index       "{Class: SmallInteger}"
1655
eec658000092 pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1635
diff changeset
   127
     byte        "{Class: SmallInteger}"
eec658000092 pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1635
diff changeset
   128
     mask        "{Class: SmallInteger}"|
eec658000092 pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1635
diff changeset
   129
eec658000092 pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1635
diff changeset
   130
%{  /* NOCONTEXT */
eec658000092 pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1635
diff changeset
   131
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   132
    OBJ b = __INST(bytes);
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   133
    OBJ w = __INST(width);
1655
eec658000092 pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1635
diff changeset
   134
eec658000092 pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1635
diff changeset
   135
    if (__isByteArray(b) && __bothSmallInteger(x, y) && __isSmallInteger(w) ) {
7521
07fc9060713e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7498
diff changeset
   136
        int _w = __intVal(w);
07fc9060713e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7498
diff changeset
   137
        int _y = __intVal(y);
07fc9060713e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7498
diff changeset
   138
        int _x = __intVal(x);
07fc9060713e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7498
diff changeset
   139
        int _idx;
1655
eec658000092 pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1635
diff changeset
   140
7521
07fc9060713e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7498
diff changeset
   141
        _idx = ((_w + 7) >> 3) * _y + (_x >> 3);
07fc9060713e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7498
diff changeset
   142
        if ((unsigned)_idx < __byteArraySize(b)) {
07fc9060713e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7498
diff changeset
   143
            if (aPixelValue == __MKSMALLINT(0)) {
07fc9060713e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7498
diff changeset
   144
                __ByteArrayInstPtr(b)->ba_element[_idx] &= ~(0x80 >> (_x & 7));
07fc9060713e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7498
diff changeset
   145
            } else {
07fc9060713e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7498
diff changeset
   146
                __ByteArrayInstPtr(b)->ba_element[_idx] |= (0x80 >> (_x & 7));
07fc9060713e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7498
diff changeset
   147
            }
07fc9060713e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7498
diff changeset
   148
            RETURN( self );
07fc9060713e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7498
diff changeset
   149
        }
1655
eec658000092 pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1635
diff changeset
   150
    }
eec658000092 pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1635
diff changeset
   151
%}.
eec658000092 pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1635
diff changeset
   152
    "fall back code for nonByteArray or nonInteger arguments"
eec658000092 pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1635
diff changeset
   153
3842
e97ae6061e75 code cleanup
Claus Gittinger <cg@exept.de>
parents: 3599
diff changeset
   154
    index := (self bytesPerRow * y) + 1 + (x // 8).
1655
eec658000092 pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1635
diff changeset
   155
eec658000092 pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1635
diff changeset
   156
    "left pixel is in high bit"
eec658000092 pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1635
diff changeset
   157
    byte := bytes at:index.
eec658000092 pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1635
diff changeset
   158
    mask := #(16r80 16r40 16r20 16r10 16r08 16r04 16r02 16r01) at:((x \\ 8) + 1).
eec658000092 pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1635
diff changeset
   159
    aPixelValue == 0 ifTrue:[
7521
07fc9060713e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7498
diff changeset
   160
        byte := byte bitAnd:(mask bitInvert)
1655
eec658000092 pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1635
diff changeset
   161
    ] ifFalse:[
7521
07fc9060713e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7498
diff changeset
   162
        byte := byte bitOr:mask
1655
eec658000092 pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1635
diff changeset
   163
    ].
eec658000092 pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1635
diff changeset
   164
    bytes at:index put:byte
279
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   165
! !
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   166
3599
bb5474dfa1c8 Depth1Image didn't work with unavailable colors.
Stefan Vogel <sv@exept.de>
parents: 3569
diff changeset
   167
!Depth1Image methodsFor:'converting'!
279
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   168
853
93598e697248 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
   169
asFormOn:aDevice
1655
eec658000092 pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1635
diff changeset
   170
    "convert a monochrome image to a device form"
279
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   171
3599
bb5474dfa1c8 Depth1Image didn't work with unavailable colors.
Stefan Vogel <sv@exept.de>
parents: 3569
diff changeset
   172
    ^ self anyImageAsFormOn:aDevice
853
93598e697248 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
   173
!
93598e697248 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
   174
6495
17a64286fe5e class: Depth1Image
Stefan Vogel <sv@exept.de>
parents: 6482
diff changeset
   175
clearMaskedPixels
17a64286fe5e class: Depth1Image
Stefan Vogel <sv@exept.de>
parents: 6482
diff changeset
   176
    colorMap isNil ifTrue:[
17a64286fe5e class: Depth1Image
Stefan Vogel <sv@exept.de>
parents: 6482
diff changeset
   177
        "this works only for b/w images"
17a64286fe5e class: Depth1Image
Stefan Vogel <sv@exept.de>
parents: 6482
diff changeset
   178
        super clearMaskedPixels.
17a64286fe5e class: Depth1Image
Stefan Vogel <sv@exept.de>
parents: 6482
diff changeset
   179
    ].
17a64286fe5e class: Depth1Image
Stefan Vogel <sv@exept.de>
parents: 6482
diff changeset
   180
!
17a64286fe5e class: Depth1Image
Stefan Vogel <sv@exept.de>
parents: 6482
diff changeset
   181
853
93598e697248 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
   182
greyImageAsFormOn:aDevice
93598e697248 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
   183
    "convert a greyscale image to a device form"
93598e697248 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
   184
3599
bb5474dfa1c8 Depth1Image didn't work with unavailable colors.
Stefan Vogel <sv@exept.de>
parents: 3569
diff changeset
   185
    ^ self anyImageAsFormOn:aDevice
279
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   186
!
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   187
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   188
greyImageAsMonoFormOn:aDevice
7581
1551935e973f #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7521
diff changeset
   189
    "convert to a monochrome form - that's easy"
279
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   190
3599
bb5474dfa1c8 Depth1Image didn't work with unavailable colors.
Stefan Vogel <sv@exept.de>
parents: 3569
diff changeset
   191
    ^ self anyImageAsFormOn:aDevice
bb5474dfa1c8 Depth1Image didn't work with unavailable colors.
Stefan Vogel <sv@exept.de>
parents: 3569
diff changeset
   192
!
279
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   193
427
746424fba14f added palette-to-form conversion
Claus Gittinger <cg@exept.de>
parents: 337
diff changeset
   194
paletteImageAsMonoFormOn:aDevice
1655
eec658000092 pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1635
diff changeset
   195
    "convert a palette image to a b&w monochrome device form"
427
746424fba14f added palette-to-form conversion
Claus Gittinger <cg@exept.de>
parents: 337
diff changeset
   196
810
9789d836dbc4 more dithering
Claus Gittinger <cg@exept.de>
parents: 806
diff changeset
   197
    |f c0 c1|
427
746424fba14f added palette-to-form conversion
Claus Gittinger <cg@exept.de>
parents: 337
diff changeset
   198
7498
38d0cbf64cd4 #OTHER by stefan
Stefan Vogel <sv@exept.de>
parents: 7425
diff changeset
   199
    f := Form imageForm width:width height:height fromArray:self bits onDevice:aDevice.
810
9789d836dbc4 more dithering
Claus Gittinger <cg@exept.de>
parents: 806
diff changeset
   200
    c0 := self colorFromValue:0.
9789d836dbc4 more dithering
Claus Gittinger <cg@exept.de>
parents: 806
diff changeset
   201
    c1 := self colorFromValue:1.
9789d836dbc4 more dithering
Claus Gittinger <cg@exept.de>
parents: 806
diff changeset
   202
    c0 brightness > 0.5 ifTrue:[
7425
461afe8907c4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7275
diff changeset
   203
        c0 := f whiteColor.
810
9789d836dbc4 more dithering
Claus Gittinger <cg@exept.de>
parents: 806
diff changeset
   204
    ] ifFalse:[
7425
461afe8907c4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7275
diff changeset
   205
        c0 := f blackColor.
427
746424fba14f added palette-to-form conversion
Claus Gittinger <cg@exept.de>
parents: 337
diff changeset
   206
    ].
810
9789d836dbc4 more dithering
Claus Gittinger <cg@exept.de>
parents: 806
diff changeset
   207
    c1 brightness > 0.5 ifTrue:[
7425
461afe8907c4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7275
diff changeset
   208
        c1 := f whiteColor
810
9789d836dbc4 more dithering
Claus Gittinger <cg@exept.de>
parents: 806
diff changeset
   209
    ] ifFalse:[
7425
461afe8907c4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7275
diff changeset
   210
        c1 := f blackColor.
810
9789d836dbc4 more dithering
Claus Gittinger <cg@exept.de>
parents: 806
diff changeset
   211
    ].
9789d836dbc4 more dithering
Claus Gittinger <cg@exept.de>
parents: 806
diff changeset
   212
    f colorMap:(Array with:c0 with:c1).
427
746424fba14f added palette-to-form conversion
Claus Gittinger <cg@exept.de>
parents: 337
diff changeset
   213
    ^ f
746424fba14f added palette-to-form conversion
Claus Gittinger <cg@exept.de>
parents: 337
diff changeset
   214
1655
eec658000092 pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1635
diff changeset
   215
    "Modified: 24.4.1997 / 17:51:54 / cg"
427
746424fba14f added palette-to-form conversion
Claus Gittinger <cg@exept.de>
parents: 337
diff changeset
   216
!
746424fba14f added palette-to-form conversion
Claus Gittinger <cg@exept.de>
parents: 337
diff changeset
   217
279
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   218
paletteImageAsTrueColorFormOn:aDevice
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   219
    "since all devices must support monochrome images, and
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   220
     a 2-entry colormap is implemented by ST/X's drawForm methods,
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   221
     we can do this on all color devices as a palette image."
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   222
3599
bb5474dfa1c8 Depth1Image didn't work with unavailable colors.
Stefan Vogel <sv@exept.de>
parents: 3569
diff changeset
   223
    ^ self anyImageAsFormOn:aDevice
810
9789d836dbc4 more dithering
Claus Gittinger <cg@exept.de>
parents: 806
diff changeset
   224
9789d836dbc4 more dithering
Claus Gittinger <cg@exept.de>
parents: 806
diff changeset
   225
    "
9789d836dbc4 more dithering
Claus Gittinger <cg@exept.de>
parents: 806
diff changeset
   226
     |i|
9789d836dbc4 more dithering
Claus Gittinger <cg@exept.de>
parents: 806
diff changeset
   227
9789d836dbc4 more dithering
Claus Gittinger <cg@exept.de>
parents: 806
diff changeset
   228
     i := Depth1Image
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   229
		width:4
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   230
		height:4
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   231
		fromArray:#[ 2r00000000
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   232
			     2r11110000
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   233
			     2r01010000
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   234
			     2r10100000 ].
810
9789d836dbc4 more dithering
Claus Gittinger <cg@exept.de>
parents: 806
diff changeset
   235
     i photometric:#rgb.
9789d836dbc4 more dithering
Claus Gittinger <cg@exept.de>
parents: 806
diff changeset
   236
     i samplesPerPixel:3.
9789d836dbc4 more dithering
Claus Gittinger <cg@exept.de>
parents: 806
diff changeset
   237
     i bitsPerSample:#(1 0 0).
9789d836dbc4 more dithering
Claus Gittinger <cg@exept.de>
parents: 806
diff changeset
   238
9789d836dbc4 more dithering
Claus Gittinger <cg@exept.de>
parents: 806
diff changeset
   239
     i := i magnifiedBy:30.
9789d836dbc4 more dithering
Claus Gittinger <cg@exept.de>
parents: 806
diff changeset
   240
     i inspect.
9789d836dbc4 more dithering
Claus Gittinger <cg@exept.de>
parents: 806
diff changeset
   241
    "
9789d836dbc4 more dithering
Claus Gittinger <cg@exept.de>
parents: 806
diff changeset
   242
853
93598e697248 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
   243
    "Modified: 14.6.1996 / 15:21:37 / cg"
81
4ba554473294 *** empty log message ***
claus
parents: 54
diff changeset
   244
! !
4ba554473294 *** empty log message ***
claus
parents: 54
diff changeset
   245
89
ea2bf46eb669 *** empty log message ***
claus
parents: 82
diff changeset
   246
!Depth1Image methodsFor:'enumerating'!
81
4ba554473294 *** empty log message ***
claus
parents: 54
diff changeset
   247
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   248
colorsAtY:y from:xLow to:xHigh do:aBlock
1
304f026e10cd Initial revision
claus
parents:
diff changeset
   249
    "perform aBlock for each pixel from x1 to x2 in row y.
304f026e10cd Initial revision
claus
parents:
diff changeset
   250
     The block is passed the color at each pixel.
304f026e10cd Initial revision
claus
parents:
diff changeset
   251
     This method allows slighly faster processing of an
304f026e10cd Initial revision
claus
parents:
diff changeset
   252
     image than using atX:y:, since some processing can be
304f026e10cd Initial revision
claus
parents:
diff changeset
   253
     avoided when going from pixel to pixel. However, for
304f026e10cd Initial revision
claus
parents:
diff changeset
   254
     real image processing, specialized methods should be written."
304f026e10cd Initial revision
claus
parents:
diff changeset
   255
304f026e10cd Initial revision
claus
parents:
diff changeset
   256
    |srcIndex "{ Class: SmallInteger }"
304f026e10cd Initial revision
claus
parents:
diff changeset
   257
     byte     "{ Class: SmallInteger }"
304f026e10cd Initial revision
claus
parents:
diff changeset
   258
     mask     "{ Class: SmallInteger }"
304f026e10cd Initial revision
claus
parents:
diff changeset
   259
     x1       "{ Class: SmallInteger }"
304f026e10cd Initial revision
claus
parents:
diff changeset
   260
     x2       "{ Class: SmallInteger }"
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3842
diff changeset
   261
     color0 color1
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3842
diff changeset
   262
     bytes|
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3842
diff changeset
   263
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3842
diff changeset
   264
    bytes := self bits.
1
304f026e10cd Initial revision
claus
parents:
diff changeset
   265
304f026e10cd Initial revision
claus
parents:
diff changeset
   266
    x1 := xLow.
304f026e10cd Initial revision
claus
parents:
diff changeset
   267
    x2 := xHigh.
304f026e10cd Initial revision
claus
parents:
diff changeset
   268
    srcIndex := (self bytesPerRow * y) + 1.
304f026e10cd Initial revision
claus
parents:
diff changeset
   269
304f026e10cd Initial revision
claus
parents:
diff changeset
   270
    "left pixel is in high bit"
304f026e10cd Initial revision
claus
parents:
diff changeset
   271
2226
ceaba9778107 care for short colormap in #colorsAt...do:
tz
parents: 2211
diff changeset
   272
    color0 := self colorFromValue:0.
ceaba9778107 care for short colormap in #colorsAt...do:
tz
parents: 2211
diff changeset
   273
    color1 := self colorFromValue:1.
1
304f026e10cd Initial revision
claus
parents:
diff changeset
   274
304f026e10cd Initial revision
claus
parents:
diff changeset
   275
    srcIndex := srcIndex + (x1 // 8).
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   276
    mask := #[2r10000000
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   277
	      2r01000000
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   278
	      2r00100000
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   279
	      2r00010000
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   280
	      2r00001000
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   281
	      2r00000100
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   282
	      2r00000010
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   283
	      2r00000001] at:((x1 \\ 8) + 1).
1
304f026e10cd Initial revision
claus
parents:
diff changeset
   284
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   285
    byte := bytes at:srcIndex.
1
304f026e10cd Initial revision
claus
parents:
diff changeset
   286
    x1 to:x2 do:[:x |
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   287
	(byte bitAnd:mask) == 0 ifTrue:[
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   288
	    aBlock value:x value:color0
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   289
	] ifFalse:[
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   290
	    aBlock value:x value:color1
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   291
	].
1
304f026e10cd Initial revision
claus
parents:
diff changeset
   292
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   293
	mask := mask bitShift:-1.
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   294
	mask == 0 ifTrue:[
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   295
	    mask := 2r10000000.
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   296
	    srcIndex := srcIndex + 1.
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   297
	    x < x2 ifTrue:[
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   298
		byte := bytes at:srcIndex.
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   299
	    ]
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   300
	]
1
304f026e10cd Initial revision
claus
parents:
diff changeset
   301
    ]
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   302
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   303
    "Created: 7.6.1996 / 19:12:26 / cg"
810
9789d836dbc4 more dithering
Claus Gittinger <cg@exept.de>
parents: 806
diff changeset
   304
    "Modified: 10.6.1996 / 10:33:06 / cg"
46
7b331e9012fd *** empty log message ***
claus
parents: 38
diff changeset
   305
!
7b331e9012fd *** empty log message ***
claus
parents: 38
diff changeset
   306
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   307
valuesAtY:y from:xLow to:xHigh do:aBlock
279
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   308
    "perform aBlock for each pixelValue from x1 to x2 in row y.
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   309
     The block is passed the color at each pixel.
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   310
     This method allows slighly faster processing of an
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   311
     image than using atX:y:, since some processing can be
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   312
     avoided when going from pixel to pixel. However, for
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   313
     real image processing, specialized methods should be written."
1
304f026e10cd Initial revision
claus
parents:
diff changeset
   314
279
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   315
    |srcIndex "{ Class: SmallInteger }"
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   316
     byte     "{ Class: SmallInteger }"
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   317
     mask     "{ Class: SmallInteger }"
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   318
     x1       "{ Class: SmallInteger }"
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   319
     x2       "{ Class: SmallInteger }"
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3842
diff changeset
   320
     bytes|
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3842
diff changeset
   321
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3842
diff changeset
   322
    bytes := self bits.
82
98a70bce6d51 *** empty log message ***
claus
parents: 81
diff changeset
   323
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   324
    "this method needs more tuning, if used heavily
279
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   325
     (fetch 8 bits at once, unroll the loop over these 8 pixels)"
82
98a70bce6d51 *** empty log message ***
claus
parents: 81
diff changeset
   326
279
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   327
    x1 := xLow.
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   328
    x2 := xHigh.
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   329
    srcIndex := (self bytesPerRow * y) + 1.
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   330
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   331
    "left pixel is in high bit"
82
98a70bce6d51 *** empty log message ***
claus
parents: 81
diff changeset
   332
279
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   333
    srcIndex := srcIndex + (x1 // 8).
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   334
    mask := #[2r10000000
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   335
	      2r01000000
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   336
	      2r00100000
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   337
	      2r00010000
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   338
	      2r00001000
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   339
	      2r00000100
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   340
	      2r00000010
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   341
	      2r00000001] at:((x1 \\ 8) + 1).
193
Claus Gittinger <cg@exept.de>
parents: 118
diff changeset
   342
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   343
    byte := bytes at:srcIndex.
279
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   344
    x1 to:x2 do:[:x |
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   345
	(byte bitAnd:mask) == 0 ifTrue:[
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   346
	    aBlock value:x value:0
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   347
	] ifFalse:[
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   348
	    aBlock value:x value:1
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   349
	].
193
Claus Gittinger <cg@exept.de>
parents: 118
diff changeset
   350
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   351
	mask := mask bitShift:-1.
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   352
	mask == 0 ifTrue:[
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   353
	    mask := 2r10000000.
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   354
	    srcIndex := srcIndex + 1.
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   355
	    x < x2 ifTrue:[
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   356
		byte := bytes at:srcIndex.
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   357
	    ]
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   358
	]
279
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   359
    ]
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   360
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   361
    "Created: 7.6.1996 / 19:09:38 / cg"
806
8d8a58e12c08 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 805
diff changeset
   362
    "Modified: 8.6.1996 / 13:36:37 / cg"
82
98a70bce6d51 *** empty log message ***
claus
parents: 81
diff changeset
   363
! !
98a70bce6d51 *** empty log message ***
claus
parents: 81
diff changeset
   364
1
304f026e10cd Initial revision
claus
parents:
diff changeset
   365
!Depth1Image methodsFor:'magnification'!
304f026e10cd Initial revision
claus
parents:
diff changeset
   366
886
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   367
hardMagnifiedBy:scalePoint
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   368
    "return a new image magnified by scalePoint, aPoint.
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   369
     This is the general magnification method, handling non-integral values.
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   370
     It is slower than the integral magnification method."
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   371
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   372
    |mX
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   373
     mY
886
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   374
     newWidth  "{ Class: SmallInteger }"
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   375
     newHeight "{ Class: SmallInteger }"
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   376
     newImage newBits bitsPerPixel newBytesPerRow
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3842
diff changeset
   377
     newMask
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3842
diff changeset
   378
     bytes|
886
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   379
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3842
diff changeset
   380
    bytes := self bits.
2988
e90b0ada0843 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2269
diff changeset
   381
    bytes isNil ifTrue:[
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   382
	self error:'cannot magnify image without bits'.
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   383
	^ self
2988
e90b0ada0843 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2269
diff changeset
   384
    ].
e90b0ada0843 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2269
diff changeset
   385
886
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   386
    mX := scalePoint x.
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   387
    mY := scalePoint y.
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   388
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   389
    newWidth := (width * mX) truncated.
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   390
    newHeight := (height * mY) truncated.
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   391
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   392
    bitsPerPixel := self depth.
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   393
    newBytesPerRow := ((newWidth * bitsPerPixel) + 7) // 8.
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   394
    newBits := ByteArray new:(newBytesPerRow * newHeight).
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   395
1577
3d8eedcc0ad8 magnify mask as well.
Claus Gittinger <cg@exept.de>
parents: 886
diff changeset
   396
    mask notNil ifTrue:[
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   397
	newMask := (mask magnifiedBy:scalePoint)
1577
3d8eedcc0ad8 magnify mask as well.
Claus Gittinger <cg@exept.de>
parents: 886
diff changeset
   398
    ].
3d8eedcc0ad8 magnify mask as well.
Claus Gittinger <cg@exept.de>
parents: 886
diff changeset
   399
886
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   400
    newImage := self species new.
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   401
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   402
    newImage
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   403
	width:newWidth
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   404
	height:newHeight
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   405
	photometric:photometric
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   406
	samplesPerPixel:samplesPerPixel
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   407
	bitsPerSample:bitsPerSample
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   408
	colorMap:colorMap copy
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   409
	bits:newBits
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   410
	mask:newMask.
886
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   411
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   412
    "walk over destination image fetching pixels from source image"
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   413
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   414
    mX := mX asFloat.
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   415
    mY := mY asFloat.
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   416
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   417
%{
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   418
{
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3842
diff changeset
   419
    OBJ b1 = bytes;
886
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   420
    int _w1 = __intVal(__INST(width));
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   421
    int _y1, _y2;
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   422
    OBJ b2 = newBits;
2044
9ea84b4ba249 more single-underline macros
Claus Gittinger <cg@exept.de>
parents: 2042
diff changeset
   423
    int _w2 = __intVal(newWidth);
9ea84b4ba249 more single-underline macros
Claus Gittinger <cg@exept.de>
parents: 2042
diff changeset
   424
    int _h2 = __intVal(newHeight);
886
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   425
    int _x2, _x1;
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   426
    int _idx2;
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   427
    unsigned _byte;
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   428
    double _mY = __floatVal(mY);
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   429
    double _mX = __floatVal(mX);
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   430
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   431
    for (_y2 = 0; _y2 < _h2; _y2++) {
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   432
	_y1 = (int)( (double)_y2 / _mY);
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   433
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   434
	for (_x2 = 0; _x2 < _w2; _x2++) {
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   435
	    _x1 = (int)( (double)_x2 / _mX);
886
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   436
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   437
	    _byte = __ByteArrayInstPtr(b1)->ba_element[(_w1 + 7) / 8 * _y1 + (_x1 / 8)];
886
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   438
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   439
	    if ((_byte & (0x80 >> (_x1 % 8)))) {
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   440
		_idx2 = (_w2 + 7) / 8 * _y2 + (_x2 / 8);
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   441
		__ByteArrayInstPtr(b2)->ba_element[_idx2] |= (0x80 >> (_x2 % 8));
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   442
	    }
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   443
	}
886
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   444
    }
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   445
}
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   446
%}.
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   447
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   448
"/    w := newWidth - 1.
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   449
"/    h := newHeight - 1.
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   450
"/
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   451
"/    0 to:h do:[:row |
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   452
"/        dstRow := row.
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   453
"/        srcRow := (row // mY).
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   454
"/        0 to:w do:[:col |
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   455
"/
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   456
"/            dstCol := col.
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   457
"/            srcCol := col // mX.
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   458
"/            value := self valueAtX:(col // mX) y:srcRow.
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   459
"/            newImage atX:col y:row putValue:value.
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   460
"/        ]
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   461
"/    ].
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   462
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   463
    ^ newImage
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   464
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   465
    "((Image fromFile:'bitmaps/claus.gif') magnifiedBy:0.5@0.5)"
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   466
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   467
    "Created: 18.6.1996 / 16:04:26 / cg"
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   468
!
04b88b61c640 tuned hardMagnify (there is more to tune there ...)
Claus Gittinger <cg@exept.de>
parents: 862
diff changeset
   469
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   470
magnifyRowFrom:srcBytes offset:srcStart
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   471
	  into:dstBytes offset:dstStart factor:mX
1
304f026e10cd Initial revision
claus
parents:
diff changeset
   472
81
4ba554473294 *** empty log message ***
claus
parents: 54
diff changeset
   473
    "magnify a single pixel row - can only magnify by integer factors.
4ba554473294 *** empty log message ***
claus
parents: 54
diff changeset
   474
     This method has been specially tuned for magnification by 2 and 4."
1
304f026e10cd Initial revision
claus
parents:
diff changeset
   475
304f026e10cd Initial revision
claus
parents:
diff changeset
   476
%{
304f026e10cd Initial revision
claus
parents:
diff changeset
   477
    unsigned char *srcP, *dstP;
304f026e10cd Initial revision
claus
parents:
diff changeset
   478
    int _mag;
304f026e10cd Initial revision
claus
parents:
diff changeset
   479
    REGISTER int i;
304f026e10cd Initial revision
claus
parents:
diff changeset
   480
    REGISTER unsigned char _byte;
304f026e10cd Initial revision
claus
parents:
diff changeset
   481
    int _pixels, bpr;
304f026e10cd Initial revision
claus
parents:
diff changeset
   482
    REGISTER int outcnt, bits, bit, mask, incnt;
304f026e10cd Initial revision
claus
parents:
diff changeset
   483
    int shift;
304f026e10cd Initial revision
claus
parents:
diff changeset
   484
    unsigned char byte1, byte2, byte3, byte4;
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   485
    OBJ w = __INST(width);
1
304f026e10cd Initial revision
claus
parents:
diff changeset
   486
304f026e10cd Initial revision
claus
parents:
diff changeset
   487
    /* helper for monochrome magnification by 2 */
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   488
    static unsigned char mag1[16] = {0x00, 0x03, 0x0c, 0x0f, 0x30, 0x33, 0x3c, 0x3f,
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   489
				     0xc0, 0xc3, 0xcc, 0xcf, 0xf0, 0xf3, 0xfc, 0xff};
1
304f026e10cd Initial revision
claus
parents:
diff changeset
   490
97
dd6116883ac0 *** empty log message ***
claus
parents: 89
diff changeset
   491
    if (__bothSmallInteger(srcStart, dstStart)
dd6116883ac0 *** empty log message ***
claus
parents: 89
diff changeset
   492
     && __bothSmallInteger(w, mX)
5482
d81219e58155 __isByteArray() to __isByteArrayLike() in primitive code
Stefan Vogel <sv@exept.de>
parents: 4773
diff changeset
   493
     && __isByteArrayLike(srcBytes) && __isByteArray(dstBytes)) {
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   494
	_mag = __intVal(mX);
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   495
	srcP = __ByteArrayInstPtr(srcBytes)->ba_element - 1 + __intVal(srcStart);
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   496
	dstP = __ByteArrayInstPtr(dstBytes)->ba_element - 1 + __intVal(dstStart);
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   497
	_pixels = __intVal(w);
1
304f026e10cd Initial revision
claus
parents:
diff changeset
   498
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   499
	switch (_mag) {
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   500
	    case 1:
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   501
		break;
1
304f026e10cd Initial revision
claus
parents:
diff changeset
   502
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   503
	    case 2:
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   504
		/* tuned for this common case */
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   505
		while (_pixels > 4) {
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   506
		    _byte = *srcP++;
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   507
		    *dstP++ = mag1[ _byte >> 4 ];
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   508
		    *dstP++ = mag1[ _byte & 0x0F ];
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   509
		    _pixels -= 8;
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   510
		}
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   511
		while (_pixels > 0) {
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   512
		    _byte = *srcP++;
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   513
		    *dstP++ = mag1[ _byte >> 4 ];
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   514
		    _pixels -= 8;
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   515
		}
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   516
		break;
1
304f026e10cd Initial revision
claus
parents:
diff changeset
   517
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   518
	    case 4:
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   519
		/* tuned for this common case */
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   520
		while (_pixels > 6) {
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   521
		    _byte = *srcP++;
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   522
		    byte1 = mag1[_byte >> 4];
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   523
		    byte2 = mag1[byte1 & 0xF];
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   524
		    byte1 = mag1[byte1 >> 4];
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   525
		    byte3 = mag1[ _byte & 0x0F ];
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   526
		    byte4 = mag1[byte3 & 0xF];
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   527
		    byte3 = mag1[byte3 >> 4];
3842
e97ae6061e75 code cleanup
Claus Gittinger <cg@exept.de>
parents: 3599
diff changeset
   528
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   529
		    *dstP++ = byte1;
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   530
		    *dstP++ = byte2;
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   531
		    *dstP++ = byte3;
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   532
		    *dstP++ = byte4;
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   533
		    _pixels -= 8;
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   534
		}
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   535
		while (_pixels > 0) {
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   536
		    _byte = *srcP++;
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   537
		    byte1 = mag1[_byte >> 4];
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   538
		    byte2 = mag1[byte1 & 0xF];
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   539
		    byte1 = mag1[byte1 >> 4];
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   540
		    byte3 = mag1[_byte & 0x0F ];
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   541
		    byte4 = mag1[byte3 & 0xF];
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   542
		    byte3 = mag1[byte3 >> 4];
1
304f026e10cd Initial revision
claus
parents:
diff changeset
   543
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   544
		    *dstP++ = byte1;
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   545
		    if (_pixels > 2) {
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   546
			*dstP++ = byte2;
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   547
			if (_pixels > 4) {
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   548
			    *dstP++ = byte3;
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   549
			    if (_pixels > 6) {
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   550
				*dstP++ = byte4;
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   551
			    }
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   552
			}
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   553
		    }
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   554
		    _pixels -= 8;
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   555
		}
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   556
		break;
1
304f026e10cd Initial revision
claus
parents:
diff changeset
   557
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   558
	    default:
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   559
		bits = 0, incnt = 0, outcnt = 0;
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   560
		mask = 0x80;
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   561
		_byte = *srcP++;
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   562
		while (_pixels--) {
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   563
		    if (_byte & mask)
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   564
			bit = 1;
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   565
		    else
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   566
			bit = 0;
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   567
		    incnt++;
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   568
		    if (incnt == 8) {
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   569
			incnt = 0;
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   570
			mask = 0x80;
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   571
			_byte = *srcP++;
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   572
		    } else {
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   573
			mask >>= 1;
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   574
		    }
1
304f026e10cd Initial revision
claus
parents:
diff changeset
   575
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   576
		    for (i=_mag; i>0; i--) {
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   577
			bits = (bits << 1) | bit;
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   578
			outcnt++;
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   579
			if (outcnt == 8) {
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   580
			    *dstP++ = bits;
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   581
			    bits = 0;
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   582
			    outcnt = 0;
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   583
			}
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   584
		    }
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   585
		}
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   586
		if (outcnt) {
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   587
		    *dstP = bits << (8-outcnt);
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   588
		}
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   589
		break;
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   590
	}
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   591
	RETURN (self);
1
304f026e10cd Initial revision
claus
parents:
diff changeset
   592
    }
81
4ba554473294 *** empty log message ***
claus
parents: 54
diff changeset
   593
%}.
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   594
    super
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   595
	magnifyRowFrom:srcBytes offset:srcStart
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   596
	into:dstBytes offset:dstStart factor:mX
1
304f026e10cd Initial revision
claus
parents:
diff changeset
   597
! !
279
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   598
3599
bb5474dfa1c8 Depth1Image didn't work with unavailable colors.
Stefan Vogel <sv@exept.de>
parents: 3569
diff changeset
   599
!Depth1Image methodsFor:'private'!
bb5474dfa1c8 Depth1Image didn't work with unavailable colors.
Stefan Vogel <sv@exept.de>
parents: 3569
diff changeset
   600
bb5474dfa1c8 Depth1Image didn't work with unavailable colors.
Stefan Vogel <sv@exept.de>
parents: 3569
diff changeset
   601
anyImageAsFormOn:aDevice
6380
816c489b5e41 class: Depth1Image
Stefan Vogel <sv@exept.de>
parents: 6303
diff changeset
   602
    "convert a 1-bit (possibly monochrome) image to a device form"
3599
bb5474dfa1c8 Depth1Image didn't work with unavailable colors.
Stefan Vogel <sv@exept.de>
parents: 3569
diff changeset
   603
6482
71fc96c9e5e3 class: Depth1Image
Stefan Vogel <sv@exept.de>
parents: 6478
diff changeset
   604
    |form color0 color1|
3599
bb5474dfa1c8 Depth1Image didn't work with unavailable colors.
Stefan Vogel <sv@exept.de>
parents: 3569
diff changeset
   605
bb5474dfa1c8 Depth1Image didn't work with unavailable colors.
Stefan Vogel <sv@exept.de>
parents: 3569
diff changeset
   606
    ((aDevice == device) and:[deviceForm notNil]) ifTrue:[^ deviceForm].
bb5474dfa1c8 Depth1Image didn't work with unavailable colors.
Stefan Vogel <sv@exept.de>
parents: 3569
diff changeset
   607
bb5474dfa1c8 Depth1Image didn't work with unavailable colors.
Stefan Vogel <sv@exept.de>
parents: 3569
diff changeset
   608
    color0 := (self colorFromValue:0) exactOn:aDevice.
bb5474dfa1c8 Depth1Image didn't work with unavailable colors.
Stefan Vogel <sv@exept.de>
parents: 3569
diff changeset
   609
    color1 := (self colorFromValue:1) exactOn:aDevice.
6380
816c489b5e41 class: Depth1Image
Stefan Vogel <sv@exept.de>
parents: 6303
diff changeset
   610
    (color0 isNil or:[color1 isNil]) ifTrue:[
816c489b5e41 class: Depth1Image
Stefan Vogel <sv@exept.de>
parents: 6303
diff changeset
   611
        "could not allocate colors, do it the hard way ..."
816c489b5e41 class: Depth1Image
Stefan Vogel <sv@exept.de>
parents: 6303
diff changeset
   612
        ^ self paletteImageAsFormOn:aDevice.
3599
bb5474dfa1c8 Depth1Image didn't work with unavailable colors.
Stefan Vogel <sv@exept.de>
parents: 3569
diff changeset
   613
    ].
bb5474dfa1c8 Depth1Image didn't work with unavailable colors.
Stefan Vogel <sv@exept.de>
parents: 3569
diff changeset
   614
bb5474dfa1c8 Depth1Image didn't work with unavailable colors.
Stefan Vogel <sv@exept.de>
parents: 3569
diff changeset
   615
    "all colors are available, this is easy now"
bb5474dfa1c8 Depth1Image didn't work with unavailable colors.
Stefan Vogel <sv@exept.de>
parents: 3569
diff changeset
   616
7498
38d0cbf64cd4 #OTHER by stefan
Stefan Vogel <sv@exept.de>
parents: 7425
diff changeset
   617
    form := Form imageForm onDevice:aDevice.
6482
71fc96c9e5e3 class: Depth1Image
Stefan Vogel <sv@exept.de>
parents: 6478
diff changeset
   618
    form notNil ifTrue:[
71fc96c9e5e3 class: Depth1Image
Stefan Vogel <sv@exept.de>
parents: 6478
diff changeset
   619
        form
71fc96c9e5e3 class: Depth1Image
Stefan Vogel <sv@exept.de>
parents: 6478
diff changeset
   620
            colorMap:(Array with:color0 with:color1);
7498
38d0cbf64cd4 #OTHER by stefan
Stefan Vogel <sv@exept.de>
parents: 7425
diff changeset
   621
            width:width height:height fromArray:self bits;
38d0cbf64cd4 #OTHER by stefan
Stefan Vogel <sv@exept.de>
parents: 7425
diff changeset
   622
            forgetBits.
3599
bb5474dfa1c8 Depth1Image didn't work with unavailable colors.
Stefan Vogel <sv@exept.de>
parents: 3569
diff changeset
   623
6380
816c489b5e41 class: Depth1Image
Stefan Vogel <sv@exept.de>
parents: 6303
diff changeset
   624
        "/ remember deviceForm
816c489b5e41 class: Depth1Image
Stefan Vogel <sv@exept.de>
parents: 6303
diff changeset
   625
        (device isNil or:[deviceForm isNil]) ifTrue:[
816c489b5e41 class: Depth1Image
Stefan Vogel <sv@exept.de>
parents: 6303
diff changeset
   626
            device := aDevice.
6482
71fc96c9e5e3 class: Depth1Image
Stefan Vogel <sv@exept.de>
parents: 6478
diff changeset
   627
            deviceForm := form.
6380
816c489b5e41 class: Depth1Image
Stefan Vogel <sv@exept.de>
parents: 6303
diff changeset
   628
            maskedPixelsAre0 := nil.
6381
d4b8689fbe90 class: Depth1Image
Stefan Vogel <sv@exept.de>
parents: 6380
diff changeset
   629
        ].
3599
bb5474dfa1c8 Depth1Image didn't work with unavailable colors.
Stefan Vogel <sv@exept.de>
parents: 3569
diff changeset
   630
    ].
6482
71fc96c9e5e3 class: Depth1Image
Stefan Vogel <sv@exept.de>
parents: 6478
diff changeset
   631
    ^ form
4767
61d7b2ee4939 ...:on: -> ...:onDevice:
Claus Gittinger <cg@exept.de>
parents: 4419
diff changeset
   632
61d7b2ee4939 ...:on: -> ...:onDevice:
Claus Gittinger <cg@exept.de>
parents: 4419
diff changeset
   633
    "Modified: / 29-05-2007 / 19:32:09 / cg"
3599
bb5474dfa1c8 Depth1Image didn't work with unavailable colors.
Stefan Vogel <sv@exept.de>
parents: 3569
diff changeset
   634
! !
bb5474dfa1c8 Depth1Image didn't work with unavailable colors.
Stefan Vogel <sv@exept.de>
parents: 3569
diff changeset
   635
279
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   636
!Depth1Image methodsFor:'queries'!
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   637
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   638
bitsPerPixel
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   639
    "return the number of bits per pixel"
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   640
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   641
    ^ 1
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   642
!
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   643
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   644
bitsPerRow
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   645
    "return the number of bits in one scanline of the image"
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   646
3868
e47cf114c824 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3867
diff changeset
   647
    ^ width
279
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   648
!
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   649
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   650
bytesPerRow
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   651
    "return the number of bytes in one scanline of the image"
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   652
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   653
    |nbytes|
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   654
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   655
    nbytes := width // 8.
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   656
    ((width \\ 8) ~~ 0) ifTrue:[
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   657
	^ nbytes + 1
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   658
    ].
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   659
    ^ nbytes
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   660
!
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   661
3869
cd40d1912c03 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3868
diff changeset
   662
colorFromValue:pixelValue
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3842
diff changeset
   663
    "given a pixel value, return the corresponding color.
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3842
diff changeset
   664
     Pixel values start with 0."
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3842
diff changeset
   665
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3842
diff changeset
   666
    photometric == #blackIs0 ifTrue:[
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   667
	(pixelValue == 0) ifTrue:[
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   668
	    ^ Color black
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   669
	].
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   670
	^ Color white
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3842
diff changeset
   671
    ].
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3842
diff changeset
   672
    photometric == #whiteIs0 ifTrue:[
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   673
	(pixelValue == 0) ifTrue:[
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   674
	    ^ Color white
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   675
	].
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   676
	^ Color black
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3842
diff changeset
   677
    ].
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3842
diff changeset
   678
    photometric == #palette ifTrue:[
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   679
	pixelValue < colorMap size ifTrue:[
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   680
	    ^ colorMap at:(pixelValue+1).
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   681
	]
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3842
diff changeset
   682
    ].
3869
cd40d1912c03 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3868
diff changeset
   683
    ^ super colorFromValue:pixelValue.
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3842
diff changeset
   684
!
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3842
diff changeset
   685
4117
Claus Gittinger <cg@exept.de>
parents: 3869
diff changeset
   686
rgbFromValue:pixelValue
Claus Gittinger <cg@exept.de>
parents: 3869
diff changeset
   687
    "given a pixel value, return the corresponding 24bit rgbValue (rrggbb, red is MSB).
Claus Gittinger <cg@exept.de>
parents: 3869
diff changeset
   688
     Pixel values start with 0."
Claus Gittinger <cg@exept.de>
parents: 3869
diff changeset
   689
Claus Gittinger <cg@exept.de>
parents: 3869
diff changeset
   690
    photometric == #blackIs0 ifTrue:[
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   691
	(pixelValue == 0) ifTrue:[
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   692
	    ^ 0
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   693
	].
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   694
	^ 16rFFFFFF
4117
Claus Gittinger <cg@exept.de>
parents: 3869
diff changeset
   695
    ].
Claus Gittinger <cg@exept.de>
parents: 3869
diff changeset
   696
    photometric == #whiteIs0 ifTrue:[
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   697
	(pixelValue == 0) ifTrue:[
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   698
	    ^ 16rFFFFFF
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   699
	].
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   700
	^ 0
4117
Claus Gittinger <cg@exept.de>
parents: 3869
diff changeset
   701
    ].
Claus Gittinger <cg@exept.de>
parents: 3869
diff changeset
   702
    photometric == #palette ifTrue:[
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   703
	pixelValue < colorMap size ifTrue:[
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   704
	    ^ (colorMap at:(pixelValue+1)) rgbValue
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   705
	]
4117
Claus Gittinger <cg@exept.de>
parents: 3869
diff changeset
   706
    ].
Claus Gittinger <cg@exept.de>
parents: 3869
diff changeset
   707
    ^ super rgbFromValue:pixelValue.
Claus Gittinger <cg@exept.de>
parents: 3869
diff changeset
   708
!
Claus Gittinger <cg@exept.de>
parents: 3869
diff changeset
   709
279
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   710
usedColors
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   711
    "return a collection of colors used in the receiver.
2201
7272763312a0 comments
Claus Gittinger <cg@exept.de>
parents: 2179
diff changeset
   712
     For depth1 images, we return the colorMap here, assuming all
7272763312a0 comments
Claus Gittinger <cg@exept.de>
parents: 2179
diff changeset
   713
     pixels are used ...
7272763312a0 comments
Claus Gittinger <cg@exept.de>
parents: 2179
diff changeset
   714
     ... which is not really true - it could be all-white or all-black"
279
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   715
3867
2a620c958987 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3866
diff changeset
   716
    (photometric == #whiteIs0 or:[photometric == #blackIs0]) ifTrue:[
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   717
	^ Array
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   718
	    with:(Color black)
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   719
	    with:(Color white).
279
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   720
    ].
3867
2a620c958987 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3866
diff changeset
   721
    photometric == #palette ifTrue:[
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   722
	^ colorMap
3867
2a620c958987 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3866
diff changeset
   723
    ].
2a620c958987 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3866
diff changeset
   724
    ^ super usedColors
279
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   725
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   726
    "
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   727
     (Image fromFile:'bitmaps/garfield.gif') usedColors
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   728
     (Image fromFile:'bitmaps/SBrowser.xbm') usedColors
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   729
    "
2201
7272763312a0 comments
Claus Gittinger <cg@exept.de>
parents: 2179
diff changeset
   730
7272763312a0 comments
Claus Gittinger <cg@exept.de>
parents: 2179
diff changeset
   731
    "Modified: / 28.7.1998 / 22:21:29 / cg"
279
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   732
!
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   733
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   734
usedValues
4419
a7b3e60e4f0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4117
diff changeset
   735
    "return a collection of color values used in the receiver."
a7b3e60e4f0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4117
diff changeset
   736
a7b3e60e4f0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4117
diff changeset
   737
    |bits first|
a7b3e60e4f0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4117
diff changeset
   738
a7b3e60e4f0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4117
diff changeset
   739
    bits := self bits.
a7b3e60e4f0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4117
diff changeset
   740
    bits isEmptyOrNil ifTrue:[^ #() ].
279
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   741
4419
a7b3e60e4f0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4117
diff changeset
   742
    first := bits at:1.
a7b3e60e4f0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4117
diff changeset
   743
    ((first == 0) or:[(first == 2r11111111)]) ifFalse:[ ^ #(0 1) ].
2201
7272763312a0 comments
Claus Gittinger <cg@exept.de>
parents: 2179
diff changeset
   744
4419
a7b3e60e4f0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4117
diff changeset
   745
    bits do:[:eachByte |
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   746
	(first bitXor:eachByte) ~~ 0 ifTrue:[
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   747
	    ^ #(0 1)
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   748
	].
4419
a7b3e60e4f0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4117
diff changeset
   749
    ].
a7b3e60e4f0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4117
diff changeset
   750
    ^ first == 0 ifTrue:[ #(0) ] ifFalse:[ #(1) ].
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3842
diff changeset
   751
!
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3842
diff changeset
   752
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3842
diff changeset
   753
valueFromColor:aColor
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3842
diff changeset
   754
    "given a color, return the corresponding pixel value.
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3842
diff changeset
   755
     Non-representable colors return nil."
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3842
diff changeset
   756
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3842
diff changeset
   757
    |clr0 clr1|
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3842
diff changeset
   758
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3842
diff changeset
   759
    photometric == #whiteIs0 ifTrue:[
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   760
	clr0 := Color white.
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   761
	clr1 := Color black.
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3842
diff changeset
   762
    ] ifFalse:[
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   763
	photometric == #blackIs0 ifTrue:[
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   764
	    clr0 := Color black.
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   765
	    clr1 := Color white.
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   766
	] ifFalse:[
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   767
	    photometric ~~ #palette ifTrue:[
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   768
		^ super valueFromColor:aColor
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   769
	    ].
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   770
	    clr0 := colorMap at:1.
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   771
	    clr1 := colorMap at:2 ifAbsent:nil.
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   772
	]
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3842
diff changeset
   773
    ].
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3842
diff changeset
   774
    aColor = clr0 ifTrue:[
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   775
	^ 0.
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3842
diff changeset
   776
    ].
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3842
diff changeset
   777
    aColor = clr1 ifTrue:[
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 5482
diff changeset
   778
	^ 1
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3842
diff changeset
   779
    ].
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3842
diff changeset
   780
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3842
diff changeset
   781
    "
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3842
diff changeset
   782
     the color is not in the images colormap
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3842
diff changeset
   783
    "
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3842
diff changeset
   784
    ^ nil
279
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   785
! !
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   786
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   787
!Depth1Image class methodsFor:'documentation'!
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   788
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   789
version
7275
b6314f7c2e19 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 6495
diff changeset
   790
    ^ '$Header$'
5482
d81219e58155 __isByteArray() to __isByteArrayLike() in primitive code
Stefan Vogel <sv@exept.de>
parents: 4773
diff changeset
   791
!
d81219e58155 __isByteArray() to __isByteArrayLike() in primitive code
Stefan Vogel <sv@exept.de>
parents: 4773
diff changeset
   792
d81219e58155 __isByteArray() to __isByteArrayLike() in primitive code
Stefan Vogel <sv@exept.de>
parents: 4773
diff changeset
   793
version_CVS
7275
b6314f7c2e19 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 6495
diff changeset
   794
    ^ '$Header$'
279
2751e757e228 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   795
! !
6303
fe26e0d67023 pixelfunction support
Claus Gittinger <cg@exept.de>
parents: 6066
diff changeset
   796