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