Image.st
author matilk
Wed, 13 Sep 2017 09:40:34 +0200
changeset 8174 2704c965b97b
parent 8169 a1c4f7d8acad
child 8175 a6bf93e434e4
permissions -rw-r--r--
#BUGFIX by Maren class: DeviceGraphicsContext changed: #displayDeviceOpaqueForm:x:y: nil check
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
48194c26a46c Initial revision
claus
parents:
diff changeset
     1
"
6
7ee0cfde237d *** empty log message ***
claus
parents: 5
diff changeset
     2
 COPYRIGHT (c) 1991 by Claus Gittinger
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
     3
              All Rights Reserved
0
48194c26a46c Initial revision
claus
parents:
diff changeset
     4
48194c26a46c Initial revision
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
48194c26a46c Initial revision
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
48194c26a46c Initial revision
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
48194c26a46c Initial revision
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
48194c26a46c Initial revision
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
48194c26a46c Initial revision
claus
parents:
diff changeset
    10
 hereby transferred.
48194c26a46c Initial revision
claus
parents:
diff changeset
    11
"
3256
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
    12
"{ Package: 'stx:libview' }"
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
    13
6755
cee1206f74db class: Image
Claus Gittinger <cg@exept.de>
parents: 6653
diff changeset
    14
"{ NameSpace: Smalltalk }"
cee1206f74db class: Image
Claus Gittinger <cg@exept.de>
parents: 6653
diff changeset
    15
0
48194c26a46c Initial revision
claus
parents:
diff changeset
    16
Object subclass:#Image
7529
5f77a718b7bd #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7523
diff changeset
    17
	instanceVariableNames:'pixelFunction bytes width height bitsPerPixel depth colorMap
5f77a718b7bd #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7523
diff changeset
    18
		maxPixelValue rowByteSize bitsPerSample samplesPerPixel
5f77a718b7bd #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7523
diff changeset
    19
		photometric device deviceForm monoDeviceForm fullColorDeviceForm
5f77a718b7bd #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7523
diff changeset
    20
		mask maskedPixelsAre0 fileName imageSequence metaData'
7834
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
    21
	classVariableNames:'BadImageFormatQuerySignal CannotRepresentImageSignal
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
    22
		CollectGarbageWhenRunningOutOfColors DitherAlgorithm
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
    23
		FileCreationErrorSignal ImageErrorSignal ImageLoadErrorSignal
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
    24
		ImageNotFoundQuerySignal ImageSaveErrorSignal
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
    25
		InformationLostQuerySignal Lobby NumberOfDitherColors
7529
5f77a718b7bd #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7523
diff changeset
    26
		UnrepresentableColorSignal'
5f77a718b7bd #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7523
diff changeset
    27
	poolDictionaries:''
5f77a718b7bd #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7523
diff changeset
    28
	category:'Graphics-Images'
0
48194c26a46c Initial revision
claus
parents:
diff changeset
    29
!
48194c26a46c Initial revision
claus
parents:
diff changeset
    30
1086
269243c32f69 added displayOpaque, for protocol completeness
Claus Gittinger <cg@exept.de>
parents: 1070
diff changeset
    31
!Image class methodsFor:'documentation'!
0
48194c26a46c Initial revision
claus
parents:
diff changeset
    32
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    33
copyright
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    34
"
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    35
 COPYRIGHT (c) 1991 by Claus Gittinger
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
    36
              All Rights Reserved
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    37
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    38
 This software is furnished under a license and may be used
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    39
 only in accordance with the terms of that license and with the
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    40
 inclusion of the above copyright notice.   This software may not
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    41
 be provided or otherwise made available to, or used by, any
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    42
 other person.  No title to or ownership of the software is
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    43
 hereby transferred.
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    44
"
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    45
!
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    46
0
48194c26a46c Initial revision
claus
parents:
diff changeset
    47
documentation
48194c26a46c Initial revision
claus
parents:
diff changeset
    48
"
6284
ebd0dfb1322c cleanup - removed unused instvars
Claus Gittinger <cg@exept.de>
parents: 6256
diff changeset
    49
    this class provides representation for all kinds of images
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
    50
    (monochrome, greyscale and color) and may finally replace Form.
6166
87e576aea243 class: Image
Claus Gittinger <cg@exept.de>
parents: 6066
diff changeset
    51
    Depths of 1, 2, 4, 8, 16, 24 and 32 are supported.
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
    52
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
    53
    An Image keeps all of its information in a device independent way,
6166
87e576aea243 class: Image
Claus Gittinger <cg@exept.de>
parents: 6066
diff changeset
    54
    but may be associated to a device (i.e. getting a device-specific version of it).
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
    55
    The data held keeps all information which was originally present,
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
    56
    even if the display-device has lower resolution.
8100
b5b682da20c5 #DOCUMENTATION by mawalch
mawalch
parents: 8099
diff changeset
    57
    Therefore, it is possible to process and manipulate images without losing
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
    58
    color information.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
    59
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
    60
    Images may be created manually (by providing a pixel array),
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
    61
    by screen capture, by reading a file (using an ImageReader) or
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
    62
    dynamically computed by a pixelFunction (functional image).
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
    63
6166
87e576aea243 class: Image
Claus Gittinger <cg@exept.de>
parents: 6066
diff changeset
    64
    This gives you a device independent image.
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
    65
    For display, a device representation is required, which can be
7404
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
    66
    acquired by sending the 'onDevice:aDevice' message to the image.
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
    67
    This creates a (possibly dithered) device-form,
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
    68
    representing the image using the currently available colors.
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    69
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
    70
    In rare cases, an explicit monochrome representation of the image is needed
6166
87e576aea243 class: Image
Claus Gittinger <cg@exept.de>
parents: 6066
diff changeset
    71
    (some older X servers take monochrome icons only), this can be created by sending
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
    72
    it the message
7404
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
    73
        'monochromeOn:aDevice'.
6284
ebd0dfb1322c cleanup - removed unused instvars
Claus Gittinger <cg@exept.de>
parents: 6256
diff changeset
    74
ebd0dfb1322c cleanup - removed unused instvars
Claus Gittinger <cg@exept.de>
parents: 6256
diff changeset
    75
    As this class is very old and originated at times when typical graphic diplays only
8100
b5b682da20c5 #DOCUMENTATION by mawalch
mawalch
parents: 8099
diff changeset
    76
    supported a limited number of colors (16 or 256), or were even monochrome b&w or grayscale
7904
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
    77
    (NeXTCube or 4-plane NeXTStation).
8100
b5b682da20c5 #DOCUMENTATION by mawalch
mawalch
parents: 8099
diff changeset
    78
    You will find a lot of code which deals with color allocation optimizations and dithering.
b5b682da20c5 #DOCUMENTATION by mawalch
mawalch
parents: 8099
diff changeset
    79
    Nowadays, these are hardly ever needed, and most of the time,
7989
7f0a9dbd256e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7968
diff changeset
    80
    images will be converted to 24bit (8x8x8) or 16bit (5x5x6) truecolor, when converted to a device representation.
7904
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
    81
    (see examples_dithering for this old code in action)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
    82
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
    83
    An image's pixel interpretation is controlled by the photometric instance variable
286
39ca471bfaf9 commentary
Claus Gittinger <cg@exept.de>
parents: 284
diff changeset
    84
    and (if that is #palette) a colorMap.
39ca471bfaf9 commentary
Claus Gittinger <cg@exept.de>
parents: 284
diff changeset
    85
    This is in contrast to the ST-80 way, where all of this info is in the colorMap
39ca471bfaf9 commentary
Claus Gittinger <cg@exept.de>
parents: 284
diff changeset
    86
    (and using specialized colorMaps for b&w / greyScale images).
39ca471bfaf9 commentary
Claus Gittinger <cg@exept.de>
parents: 284
diff changeset
    87
    This may change in future versions for more application compatibility.
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
    88
8100
b5b682da20c5 #DOCUMENTATION by mawalch
mawalch
parents: 8099
diff changeset
    89
    To convert pictures from/to external file formats, image readers are used
b5b682da20c5 #DOCUMENTATION by mawalch
mawalch
parents: 8099
diff changeset
    90
    which have the file format knowledge built in.
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
    91
    There are readers for most common formats available
286
39ca471bfaf9 commentary
Claus Gittinger <cg@exept.de>
parents: 284
diff changeset
    92
    (see ImageReader and especially subclasses such as TIFFReader, GIFReader etc.).
39ca471bfaf9 commentary
Claus Gittinger <cg@exept.de>
parents: 284
diff changeset
    93
39ca471bfaf9 commentary
Claus Gittinger <cg@exept.de>
parents: 284
diff changeset
    94
    File formats are handled by subclasses of ImageReader, which understand
39ca471bfaf9 commentary
Claus Gittinger <cg@exept.de>
parents: 284
diff changeset
    95
    a specific format. You can add more readers, by adding an association
6166
87e576aea243 class: Image
Claus Gittinger <cg@exept.de>
parents: 6066
diff changeset
    96
    to the mapping maintained in the MIMETypes class.
87e576aea243 class: Image
Claus Gittinger <cg@exept.de>
parents: 6066
diff changeset
    97
    (see the MIMETypes>>initialize and possibly the display.rc file, where this is done).
286
39ca471bfaf9 commentary
Claus Gittinger <cg@exept.de>
parents: 284
diff changeset
    98
39ca471bfaf9 commentary
Claus Gittinger <cg@exept.de>
parents: 284
diff changeset
    99
    Some algorithms used here (especially dithering & color allocation) are
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
   100
    experimental and far from being perfect (some are very slow).
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
   101
    For now, the most common cases have been optimized and perform reasonably
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
   102
    fast - however, with uncommon depth/visualType combinations, you may
6166
87e576aea243 class: Image
Claus Gittinger <cg@exept.de>
parents: 6066
diff changeset
   103
    run into very slow fallback methods. If this leads to problems, you may have to
87e576aea243 class: Image
Claus Gittinger <cg@exept.de>
parents: 6066
diff changeset
   104
    write a specially tuned (inline-C) version for that case.
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
   105
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
   106
    The pixelFunction enables dynamically computed functional images: instead of
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
   107
    providing a byteArray containing pixel data, a function is used which maps
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
   108
    x/y coordinates to a pixel value (see examples).
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
   109
    For display, the bits array is used internally and filled by the function.
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
   110
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
   111
    Much more work is needed if you plan to do heavy image processing and will
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
   112
    (may) be done in the future if there is a demand for it ...
6166
87e576aea243 class: Image
Claus Gittinger <cg@exept.de>
parents: 6066
diff changeset
   113
8100
b5b682da20c5 #DOCUMENTATION by mawalch
mawalch
parents: 8099
diff changeset
   114
    Dithering (read section above) can be controlled by the DitherAlgorithm classVariable:
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
   115
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
   116
       DitherAlgorithm:
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   117
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
   118
       nil                  a simple threshold algorithm
7404
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   119
                            (i.e. for mono, p<0.5 -> black, p>=0.5 -> white)
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   120
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
   121
       #pattern             patterned dither
7404
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   122
                            (for p, take dithered color to fill pixel;
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   123
                             uses dithering in color-class)
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   124
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
   125
       #error               error diffusion dither (Floyd-Steinberg)
7404
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   126
                            planned - not yet implemented.
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
   127
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
   128
6862
e9bd4dc536a4 class: Image
Claus Gittinger <cg@exept.de>
parents: 6840
diff changeset
   129
    Notice:
7404
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   130
        the set of attributes and the way they are stored originated initially
8100
b5b682da20c5 #DOCUMENTATION by mawalch
mawalch
parents: 8099
diff changeset
   131
        from the need to represent tiff images.
b5b682da20c5 #DOCUMENTATION by mawalch
mawalch
parents: 8099
diff changeset
   132
        These turned out to use a relatively large set of attributes,
7904
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   133
        of which many are unused in other image formats. (so it was sufficient).
7404
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   134
        Later, some VisualWorks compatibility protocol was added (mapped palettes, for
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   135
        example), and some stuff could well be redefined in simpler ways.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   136
        We may do that, if we are bored and there is nothing else to improve... ;-)
6862
e9bd4dc536a4 class: Image
Claus Gittinger <cg@exept.de>
parents: 6840
diff changeset
   137
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
   138
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
   139
    [instance variables:]
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
   140
7404
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   141
        width               <Integer>       the width in pixels
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   142
        height              <Integer>       the height in pixels
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   143
        bytes               <ByteArray>     the full image information
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   144
        photometric         <Symbol>        #rgb, #palette, #blackIs0 or #whiteIs0
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   145
        samplesPerPixel     <Integer>       the number of planes
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   146
        bitsPerSample       <Array>         the number of bits per plane
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   147
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   148
        colorMap            <Array>         only if photometric is #palette;
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   149
                                            maps pixel values to r/g/b values.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   150
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   151
        device              <Workstation>   the device on which deviceForm,
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   152
                                            monoDeviceForm and lowResDeviceForm are
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   153
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   154
        deviceForm          <Form>          the device form which gives the best
7621
e6755d298330 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7596
diff changeset
   155
                                            possible approximation of the image on
7404
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   156
                                            device using standard colors.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   157
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   158
        monoDeviceForm      <Form>          the device form which gives a monochrome
8100
b5b682da20c5 #DOCUMENTATION by mawalch
mawalch
parents: 8099
diff changeset
   159
                                            approximation of the image on device.
7404
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   160
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   161
        fullColorDeviceForm <Form>          the device form which gives the best
8100
b5b682da20c5 #DOCUMENTATION by mawalch
mawalch
parents: 8099
diff changeset
   162
                                            possible approximation of the image on
7404
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   163
                                            device using private colors.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   164
                                            (not yet implemented)
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   165
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   166
        mask                <ImageMask>     an optional mask;
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   167
                                            if non-nil, only pixels for which the
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   168
                                            corresponding mask bit is non-zero
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   169
                                            are drawn.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   170
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   171
        maskedPixelsAre0    <Boolean>       a hint for image processors and drawers
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   172
                                            if true, masked pixels are known to be
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   173
                                            zero in the pixel bytes.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   174
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   175
        fileName            <String>        the name of the file from which the
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   176
                                            image was loaded - nil otherwise.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   177
                                            Useful for image save functions
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   178
                                            and for the UIPainter utility.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   179
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   180
        imageSequence                       the imageSequence, of which the
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   181
                                            instance is a frame or nil,
7887
3d7974ef8414 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7878
diff changeset
   182
                                            if it's not part of a sequence.
7404
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   183
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   184
        bitsPerPixel                        obsolete - not used in ST/X (kept for a while for subclasses)
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   185
        depth                               - these have been added in instVar-slots
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   186
        maxPixelValue                       - according to the ST-80's image class.
8100
b5b682da20c5 #DOCUMENTATION by mawalch
mawalch
parents: 8099
diff changeset
   187
        rowByteSize                         - to allow loading of ST-80 images
7404
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   188
                                            - (which are stored as instVarAt:put: expressions)
1288
9af08a658acc added ST-80 dummy instVars - allows ST-80 images stored via #storeOn:
Claus Gittinger <cg@exept.de>
parents: 1279
diff changeset
   189
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
   190
    [class variables:]
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
   191
7404
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   192
        Lobby               <Registry>      keeps track of known images
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   193
                                            (for resource freeing with garbage collector)
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   194
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   195
        DitherAlgorithm     <Symbol>        defines how to dither
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   196
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   197
        NumberOfDitherColors <Integer>      defines, how many dither colors to use
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   198
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   199
        FileFormats         <Dictionary>    associates filename extensions to
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   200
                                            image reader classes (now set-up in startup-file)
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   201
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   202
        CollectGarbageWhenRunningOutOfColors
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   203
                            <Boolean>       if true, and we run out of available
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   204
                                            device colors during creation of a
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   205
                                            device image, collect garbage for
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   206
                                            possible image reclamation.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   207
                                            If false, proceed immediately.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   208
                                            Default is true.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   209
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   210
        ImageNotFoundQuerySignal
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   211
                            <QuerySignal>   raised, if an image could not be loaded
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   212
                                            from a file. The parameter is the images
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   213
                                            fileName.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   214
                                            A handler may return a replacement
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   215
                                            image or proceed with nil.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   216
                                            If unhandled, a nil is returned from the
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   217
                                            image creation.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   218
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   219
        BadImageFormatQuerySignal
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   220
                            <QuerySignal>   raised, if an image could not be loaded
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   221
                                            from a file due to a file error or
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   222
                                            unsupported format.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   223
                                            A handler may return a replacement
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   224
                                            image or proceed with nil.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   225
                                            If unhandled, a nil is returned from the
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   226
                                            image creation.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   227
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   228
        ImageSaveErrorSignal
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   229
                            <Signal>        parent of errors below.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   230
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   231
        FileCreationErrorSignal
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   232
                            <Signal>        file could not be created when saving an
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   233
                                            image.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   234
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   235
        CannotRepresentImageSignal
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   236
                            <Signal>        the specified ImageReader cannot represent
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   237
                                            the given image.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   238
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   239
        InformationLostQuerySignal
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   240
                            <Signal>        the specified ImageReader can represent
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   241
                                            the given image, but some information
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   242
                                            (typically color resolution) is lost.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   243
                                            If unhandled, the save proceeds as usual.
3872
390fabbc3036 comments and slight cleanup
Claus Gittinger <cg@exept.de>
parents: 3871
diff changeset
   244
390fabbc3036 comments and slight cleanup
Claus Gittinger <cg@exept.de>
parents: 3871
diff changeset
   245
390fabbc3036 comments and slight cleanup
Claus Gittinger <cg@exept.de>
parents: 3871
diff changeset
   246
    caveat:
7404
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   247
        the information in
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   248
            photometric, bitsPerPixel, bitsPerSample, samplesPerPixel, depth , colorMap and maxPixelValue
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   249
        is partially redundant and its handling stupid (not to say: braindamaged ;-).
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   250
        The only excuse is that it grew over time, had to incorporate various alien/older schemes for
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   251
        compatibility reasons (mostly coming from tiff format, which was the very first supported format).
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   252
        All of the above belongs into the single colorMap which must migrate from
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   253
        a stupid seqColl to a color-aware real colorMap.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   254
        (we are in the process of doing so...)
1156
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
   255
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
   256
    todo:
7404
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   257
        support alpha masks
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   258
        cleanup the dithering & conversion code
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   259
        cleanup the color/photometric mess
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
   260
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
   261
    [See also:]
7404
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   262
        Form Icon ImageReader
611
e0442439a3c6 documentation
Claus Gittinger <cg@exept.de>
parents: 592
diff changeset
   263
e0442439a3c6 documentation
Claus Gittinger <cg@exept.de>
parents: 592
diff changeset
   264
    [author:]
7404
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   265
        Claus Gittinger
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   266
"
649
38e6d0015137 examples
Claus Gittinger <cg@exept.de>
parents: 622
diff changeset
   267
!
38e6d0015137 examples
Claus Gittinger <cg@exept.de>
parents: 622
diff changeset
   268
38e6d0015137 examples
Claus Gittinger <cg@exept.de>
parents: 622
diff changeset
   269
examples
38e6d0015137 examples
Claus Gittinger <cg@exept.de>
parents: 622
diff changeset
   270
"
38e6d0015137 examples
Claus Gittinger <cg@exept.de>
parents: 622
diff changeset
   271
    reading from a file (many formats are supported):
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   272
    (notice that the bitmaps directory is searched for along
2645
a82f50c19af1 comment
Claus Gittinger <cg@exept.de>
parents: 2534
diff changeset
   273
     the system path - therefore, you may add your own bitmap
a82f50c19af1 comment
Claus Gittinger <cg@exept.de>
parents: 2534
diff changeset
   274
     directory to the beginning of the path and thus override
a82f50c19af1 comment
Claus Gittinger <cg@exept.de>
parents: 2534
diff changeset
   275
     any default bitmaps, or make certain that your application
a82f50c19af1 comment
Claus Gittinger <cg@exept.de>
parents: 2534
diff changeset
   276
     finds its bitmaps - even if they are in a separate directory)
a82f50c19af1 comment
Claus Gittinger <cg@exept.de>
parents: 2534
diff changeset
   277
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   278
                                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   279
        (Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif') inspect
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   280
                                                                                        [exEnd]
7523
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
   281
    Boy, was I young, when writing ST/X... ;-)                                                                                                 
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
   282
                                                                                        [exBegin]
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
   283
        (Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif') inspect
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
   284
        ((Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif') rotated:90) inspect
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
   285
        ((Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif') rotated:45) inspect
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
   286
        ((Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif') rotated:25) inspect
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
   287
                                                                                        [exEnd]
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
   288
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
   289
                                                                                        
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
   290
    better use package relative file names:
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   291
                                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   292
        (Image fromFile:'bitmaps/gifImages/garfield.gif' inPackage:'stx:goodies') inspect
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   293
                                                                                        [exEnd]
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
   294
    various file formats are supported:
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   295
                                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   296
        (Image fromFile:'bitmaps/xpmBitmaps/misc_icons/SmalltalkX_clr.xpm' inPackage:'stx:goodies') inspect
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   297
                                                                                        [exEnd]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   298
                                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   299
        (Image fromFile:'bitmaps/winBitmaps/okSmily_up.bmp' inPackage:'stx:goodies') inspect
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   300
                                                                                        [exEnd]
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
   301
7222
matilk
parents: 7210
diff changeset
   302
    drawing
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   303
                                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   304
        |imageClass image|
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   305
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   306
        imageClass := Image implementorForDepth:24.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   307
        image      := imageClass width: 100 height: 50.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   308
        image bits:(ByteArray new:(image bytesPerRow*50)).
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   309
        image fillRectangle:(0@0 extent:100@50) withColor:Color yellow.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   310
        image drawRectangle:(10@10 extent:20@20) withColor:Color red.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   311
        image fillRectangle:(40@20 extent:20@20) withColor:Color green.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   312
                                                                                        [exEnd]
7222
matilk
parents: 7210
diff changeset
   313
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
   314
    The following examples demonstrate various depth and colorMap variations ...
1774
4241f730e0a6 fixed gunzipped image reading;
Claus Gittinger <cg@exept.de>
parents: 1771
diff changeset
   315
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   316
    inline image:
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   317
      default: depth=1 & #blackIs0
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   318
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   319
        (Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   320
            width:8 height:8
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   321
            fromArray:#( 2r11111111
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   322
                         2r10000001
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   323
                         2r10000001
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   324
                         2r10000001
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   325
                         2r10000001
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   326
                         2r10000001
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   327
                         2r10000001
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   328
                         2r11111111 )
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   329
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   330
                                                                        [exEnd]
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   331
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   332
      with #whiteIs0 photometric
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   333
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   334
        ((Image width:8 height:8
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   335
               fromArray:#( 2r11111111
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   336
                            2r10000001
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   337
                            2r10000001
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   338
                            2r10000001
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   339
                            2r10000001
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   340
                            2r10000001
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   341
                            2r10000001
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   342
                            2r11111111 ))
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   343
            photometric:#whiteIs0
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   344
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   345
                                                                        [exEnd]
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   346
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   347
      with a colorMap
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   348
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   349
        ((Image width:8 height:8
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   350
               fromArray:#( 2r11111111
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   351
                            2r10000001
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   352
                            2r10000001
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   353
                            2r10000001
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   354
                            2r10000001
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   355
                            2r10000001
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   356
                            2r10000001
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   357
                            2r11111111 ))
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   358
            colorMap:(Array with:(Color red)
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   359
                            with:(Color yellow))
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   360
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   361
                                                                        [exEnd]
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   362
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   363
      a depth4 greyScale image:
1774
4241f730e0a6 fixed gunzipped image reading;
Claus Gittinger <cg@exept.de>
parents: 1771
diff changeset
   364
      (default photometric is #blackIs0)
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   365
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   366
        (Depth4Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   367
             width:8
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   368
             height:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   369
             fromArray:#[
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   370
                            16r00 16r11 16r22 16r33
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   371
                            16r44 16r55 16r66 16r77
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   372
                            16r88 16r99 16raa 16rbb
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   373
                            16rcc 16rdd 16ree 16rff
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   374
                        ]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   375
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   376
                                                                        [exEnd]
2645
a82f50c19af1 comment
Claus Gittinger <cg@exept.de>
parents: 2534
diff changeset
   377
      the same, magnified:
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   378
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   379
        ((Depth4Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   380
             width:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   381
             height:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   382
             fromArray:#[
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   383
                            16r01 16r23
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   384
                            16r45 16r67
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   385
                            16r89 16rab
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   386
                            16rcd 16ref
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   387
                        ])
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   388
            magnifiedBy:30
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   389
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   390
                                                                        [exEnd]
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   391
      the following has the same effect:
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   392
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   393
        ((Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   394
             width:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   395
             height:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   396
             depth:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   397
             fromArray:#[
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   398
                            16r01 16r23
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   399
                            16r45 16r67
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   400
                            16r89 16rab
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   401
                            16rcd 16ref
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   402
                        ])
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   403
            magnifiedBy:30
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   404
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   405
                                                                        [exEnd]
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   406
      with reverse grey-interpretation:
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   407
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   408
        ((Depth4Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   409
             width:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   410
             height:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   411
             fromArray:#[
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   412
                            16r01 16r23
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   413
                            16r45 16r67
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   414
                            16r89 16rab
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   415
                            16rcd 16ref
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   416
                        ])
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   417
            photometric:#whiteIs0;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   418
            magnifiedBy:30
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   419
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   420
                                                                        [exEnd]
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   421
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   422
      with 1-bit-per-pixel rgb interpretation:
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   423
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   424
        ((Depth4Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   425
             width:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   426
             height:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   427
             fromArray:#[
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   428
                            16r01 16r23
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   429
                            16r45 16r67
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   430
                            16r89 16rab
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   431
                            16rcd 16ref
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   432
                        ])
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   433
            photometric:#rgb;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   434
            samplesPerPixel:3;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   435
            bitsPerSample:#(1 1 1);
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   436
            magnifiedBy:30
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   437
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   438
                                                                        [exEnd]
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   439
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   440
      with 1/2/1 rgb interpretation:
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   441
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   442
        ((Depth4Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   443
             width:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   444
             height:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   445
             fromArray:#[
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   446
                            16r01 16r23
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   447
                            16r45 16r67
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   448
                            16r89 16rab
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   449
                            16rcd 16ref
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   450
                        ])
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   451
            photometric:#rgb;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   452
            samplesPerPixel:3;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   453
            bitsPerSample:#(1 2 1);
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   454
            magnifiedBy:30
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   455
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   456
                                                                        [exEnd]
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   457
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
   458
      a 2/2/0 rgb image (i.e. no blue):
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   459
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   460
         |i|
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   461
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   462
         i := Depth4Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   463
                    width:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   464
                    height:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   465
                    fromArray:#[ 16r01 16r23
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   466
                                 16r45 16r67
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   467
                                 16r89 16rab
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   468
                                 16rcd 16ref ].
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   469
         i photometric:#rgb.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   470
         i samplesPerPixel:3.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   471
         i bitsPerSample:#(2 2 0).
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   472
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   473
         i := i magnifiedBy:30.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   474
         i edit.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   475
                                                                        [exEnd]
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
   476
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
   477
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
   478
      a 0/0/4 rgb image (i.e. no red or green):
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   479
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   480
         |i|
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   481
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   482
         i := Depth4Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   483
                    width:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   484
                    height:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   485
                    fromArray:#[ 16r01 16r23
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   486
                                 16r45 16r67
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   487
                                 16r89 16rab
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   488
                                 16rcd 16ref ].
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   489
         i photometric:#rgb.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   490
         i samplesPerPixel:3.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   491
         i bitsPerSample:#(0 0 4).
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   492
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   493
         i := i magnifiedBy:30.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   494
         i edit.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   495
                                                                        [exEnd]
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
   496
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
   497
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   498
      a 2plane greyscale image:
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   499
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   500
        ((Depth2Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   501
             width:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   502
             height:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   503
             fromArray:#[
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   504
                            4r0123
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   505
                            4r1230
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   506
                            4r2301
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   507
                            4r3012
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   508
                        ])
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   509
            magnifiedBy:30
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   510
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   511
                                                                        [exEnd]
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   512
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   513
      with colors:
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   514
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   515
        ((Depth2Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   516
             width:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   517
             height:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   518
             fromArray:#[
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   519
                            4r0123
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   520
                            4r1230
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   521
                            4r2301
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   522
                            4r3012
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   523
                        ])
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   524
            colorMap:(Array with:(Color black)
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   525
                            with:(Color red)
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   526
                            with:(Color green)
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   527
                            with:(Color blue));
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   528
            magnifiedBy:30
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   529
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   530
                                                                        [exEnd]
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   531
8088
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   532
      depth4 image with 1/1/1 rgb interpretation:
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   533
                                                                        [exBegin]
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   534
        ((Depth4Image
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   535
             width:4
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   536
             height:4
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   537
             fromArray:#[
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   538
                            16r44 16r44
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   539
                            16r22 16r22
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   540
                            16r11 16r11
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   541
                            16r00 16r00
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   542
                        ])
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   543
            photometric:#rgb;
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   544
            samplesPerPixel:3;
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   545
            bitsPerSample:#(1 1 1);
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   546
            magnifiedBy:30
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   547
        ) edit
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   548
                                                                        [exEnd]
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   549
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   550
      depth4 image with 1/2/1 rgb interpretation:
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   551
                                                                        [exBegin]
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   552
        ((Depth4Image
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   553
             width:4
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   554
             height:4
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   555
             fromArray:#[
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   556
                            16rCC 16r44
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   557
                            16rAA 16r22
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   558
                            16r99 16r11
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   559
                            16r88 16r00
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   560
                        ])
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   561
            photometric:#rgb;
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   562
            samplesPerPixel:3;
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   563
            bitsPerSample:#(1 2 1);
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   564
            magnifiedBy:30
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   565
        ) edit
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   566
                                                                        [exEnd]
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   567
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   568
      depth8 image with 3/3/2 rgb interpretation:
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   569
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   570
        ((Depth8Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   571
             width:16
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   572
             height:16
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   573
             fromArray:(ByteArray withAll:(0 to:16rFF)))
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   574
            photometric:#rgb;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   575
            samplesPerPixel:3;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   576
            bitsPerSample:#(3 3 2);
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   577
            magnifiedBy:10
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   578
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   579
                                                                        [exEnd]
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   580
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   581
      depth8 image with 2/2/2 rgb interpretation:
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   582
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   583
        ((Depth8Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   584
             width:8
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   585
             height:8
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   586
             fromArray:(ByteArray withAll:(0 to:16r3F)))
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   587
            photometric:#rgb;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   588
            samplesPerPixel:3;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   589
            bitsPerSample:#(2 2 2);
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   590
            magnifiedBy:10
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   591
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   592
                                                                        [exEnd]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   593
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   594
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   595
        ((Depth8Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   596
             width:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   597
             height:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   598
             fromArray:#[
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   599
                    16r30 16r0C  16r03 16r3F
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   600
                    16r20 16r08  16r02 16r2A
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   601
                    16r10 16r04  16r01 16r15
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   602
                    16r00 16r00  16r00 16r00
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   603
                        ])
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   604
            photometric:#rgb;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   605
            samplesPerPixel:3;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   606
            bitsPerSample:#(2 2 2);
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   607
            magnifiedBy:30
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   608
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   609
                                                                        [exEnd]
5126
d3f2baf80581 color conversions fixed (16bit images)
Claus Gittinger <cg@exept.de>
parents: 5074
diff changeset
   610
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
   611
      trueColor image: remember: bytes are MSB
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   612
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   613
        ((Depth16Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   614
             width:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   615
             height:5
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   616
             fromArray:#[
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   617
                    2r01111100 2r00000000  2r00000011 2r11100000  2r00000000 2r00011111  2r01111111 2r11111111
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   618
                    2r00111100 2r00000000  2r00000001 2r11100000  2r00000000 2r00001111  2r00111101 2r11101111
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   619
                    2r00011100 2r00000000  2r00000000 2r11100000  2r00000000 2r00000111  2r00011100 2r11100111
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   620
                    2r00001100 2r00000000  2r00000000 2r01100000  2r00000000 2r00000001  2r00001100 2r01100011
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   621
                    2r00000100 2r00000000  2r00000000 2r00100000  2r00000000 2r00000001  2r00000100 2r00100001
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   622
                        ])
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   623
            photometric:#rgb;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   624
            samplesPerPixel:3;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   625
            bitsPerSample:#(5 5 5);
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   626
            magnifiedBy:30
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   627
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   628
                                                                        [exEnd]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   629
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   630
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   631
        ((Depth24Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   632
             width:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   633
             height:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   634
             fromArray:#[
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   635
                    16rFF 16r00 16r00  16rFF 16r00 16r00  16rFF 16r00 16r00  16rFF 16r00 16r00
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   636
                    16r00 16rFF 16r00  16r00 16rFF 16r00  16r00 16rFF 16r00  16r00 16rFF 16r00
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   637
                    16r00 16r00 16rFF  16r00 16r00 16rFF  16r00 16r00 16rFF  16r00 16r00 16rFF
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   638
                    16rFF 16rFF 16rFF  16rFF 16rFF 16rFF  16rFF 16rFF 16rFF  16rFF 16rFF 16rFF
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   639
                        ])
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   640
            photometric:#rgb;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   641
            samplesPerPixel:3;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   642
            bitsPerSample:#(8 8 8);
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   643
            magnifiedBy:30
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   644
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   645
                                                                        [exEnd]
4762
f70af9e4a5f1 comment
Claus Gittinger <cg@exept.de>
parents: 4757
diff changeset
   646
f70af9e4a5f1 comment
Claus Gittinger <cg@exept.de>
parents: 4757
diff changeset
   647
      32bit trueColor image:
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   648
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   649
        ((Depth32Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   650
             width:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   651
             height:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   652
             fromArray:#[
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   653
                    16rFF 16r00 16r00 16r00  16rFF 16r00 16r00 16r00  16rFF 16r00 16r00 16r00  16rFF 16r00 16r00 16r00
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   654
                    16r00 16rFF 16r00 16r00  16r00 16rFF 16r00 16r00  16r00 16rFF 16r00 16r00  16r00 16rFF 16r00 16r00
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   655
                    16r00 16r00 16rFF 16r00  16r00 16r00 16rFF 16r00  16r00 16r00 16rFF 16r00  16r00 16r00 16rFF 16r00
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   656
                    16rFF 16rFF 16rFF 16r00  16rFF 16rFF 16rFF 16r00  16rFF 16rFF 16rFF 16r00  16rFF 16rFF 16rFF 16r00
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   657
                        ])
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   658
            photometric:#rgb;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   659
            samplesPerPixel:4;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   660
            bitsPerSample:#(8 8 8 8);
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   661
            magnifiedBy:30
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   662
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   663
                                                                        [exEnd]
2760
94d2d524081b example added (24-bit image)
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   664
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
   665
    storing - only a subset of formats (TIFF, XBM, XPM) currently support storing:
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   666
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   667
        |img|
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   668
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   669
        img := Image fromFile:'bitmaps/winBitmaps/okSmily_up.bmp' inPackage:'stx:goodies'.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   670
        img saveOn:'myImage.tiff'.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   671
        (Image fromFile:'myImage.tiff') inspect.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   672
        img saveOn:'myImage.gif'.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   673
        (Image fromFile:'myImage.gif') inspect.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   674
                                                                        [exEnd]
1774
4241f730e0a6 fixed gunzipped image reading;
Claus Gittinger <cg@exept.de>
parents: 1771
diff changeset
   675
649
38e6d0015137 examples
Claus Gittinger <cg@exept.de>
parents: 622
diff changeset
   676
    magnifying (any factor):
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   677
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   678
        ((Image fromFile:'bitmaps/gifImages/claus.gif' inPackage:'stx:goodies')
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   679
            magnifiedTo:(48@48))
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   680
                inspect
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   681
                                                                        [exEnd]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   682
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   683
        ((Image fromFile:'bitmaps/gifImages/claus.gif' inPackage:'stx:goodies')
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   684
            magnifiedBy:0.7)
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   685
                inspect
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   686
                                                                        [exEnd]
1774
4241f730e0a6 fixed gunzipped image reading;
Claus Gittinger <cg@exept.de>
parents: 1771
diff changeset
   687
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
   688
    rotating (any angle in degrees clockwise):
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   689
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   690
        ((Image fromFile:'bitmaps/gifImages/claus.gif' inPackage:'stx:goodies')
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   691
            rotated:90)
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   692
                inspect
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   693
                                                                        [exEnd]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   694
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   695
        (((Image fromFile:'bitmaps/gifImages/claus.gif' inPackage:'stx:goodies')
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   696
            magnifiedBy:0.3@0.7) rotated:270)
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   697
                inspect
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   698
                                                                        [exEnd]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   699
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   700
        (((Image fromFile:'bitmaps/gifImages/claus.gif' inPackage:'stx:goodies')
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   701
            ) rotated:30)
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   702
                inspect
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   703
                                                                        [exEnd]
1774
4241f730e0a6 fixed gunzipped image reading;
Claus Gittinger <cg@exept.de>
parents: 1771
diff changeset
   704
    negative:
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   705
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   706
        ((Image fromFile:'bitmaps/gifImages/claus.gif' inPackage:'stx:goodies')
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   707
            negative)
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   708
                inspect
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   709
                                                                        [exEnd]
7123
320a7ec771f3 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7101
diff changeset
   710
320a7ec771f3 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7101
diff changeset
   711
      depth32 image with 8+8+8+8 argb interpretation:
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   712
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   713
        ((Depth32Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   714
             width:4 height:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   715
             fromArray:#[
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   716
                255 255 0 0       255 255 0 0       255 255 0 0       255 255 0 0
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   717
                255 0 255 0       255 0 255 0       255 0 255 0       255 0 255 0
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   718
                255 0 0 255       255 0 0 255       255 0 0 255       255 0 0 255
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   719
                255 255 255 255   255 255 255 255   255 255 255 255   255 255 255 255 ])
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   720
            photometric:#argb;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   721
            samplesPerPixel:4;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   722
            bitsPerSample:#(8 8 8 8);
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   723
            magnifiedBy:10
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   724
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   725
                                                                        [exEnd]
7123
320a7ec771f3 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7101
diff changeset
   726
7126
a81b992fd069 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 7123
diff changeset
   727
      depth32 image with 8+8+8+8 rgba interpretation:
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   728
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   729
        ((Depth32Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   730
             width:4 height:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   731
             fromArray:#[
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   732
                255 0 0 255       255 0 0 255       255 0 0 255       255 0 0 255
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   733
                0 255 0 255       0 255 0 255       0 255 0 255       0 255 0 255
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   734
                0 0 255 255       0 0 255 255       0 0 255 255       0 0 255 255
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   735
                255 255 255 255   255 255 255 255   255 255 255 255   255 255 255 255 ])
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   736
            photometric:#rgba;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   737
            samplesPerPixel:4;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   738
            bitsPerSample:#(8 8 8 8);
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   739
            magnifiedBy:10
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   740
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   741
                                                                        [exEnd]
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
   742
"
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
   743
!
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
   744
7904
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   745
examples_dithering
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   746
"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   747
    Just for fun (see the wikipedia article 'https://en.wikipedia.org/wiki/Dither#Algorithms' on dithering)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   748
                                                                                                        [exBegin]
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   749
    |image top panel image2 wrapIt|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   750
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   751
    top := StandardSystemView new.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   752
    top label:'Dithering Examples'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   753
    top width:1000.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   754
    panel := PanelView origin:0.0@0.0 corner:1.0@1.0 in:top.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   755
    panel horizontalLayout:#left.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   756
    panel verticalLayout:#top.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   757
    top openAndWait.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   758
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   759
    wrapIt := 
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   760
        [:image :text |
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   761
            |imageView label view|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   762
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   763
            view := View in:panel.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   764
            imageView := ImageView origin:0@0 extent:image extent in:view.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   765
            imageView image:image.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   766
            label := Label origin:0@(image height) corner:1.0@1.0 in:view.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   767
            label logo:text.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   768
            view extent:(image extent + (0@30)).
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   769
            view realize.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   770
            view realizeAllSubViews.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   771
        ].    
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   772
    'original image:'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   773
    image := ImageReader fromURL:'https://upload.wikimedia.org/wikipedia/commons/7/71/Michelangelo%27s_David_-_63_grijswaarden.png'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   774
    wrapIt value:image value:'Original'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   775
    
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   776
    'dithered image:'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   777
    image2 := image asOrderedDitheredMonochromeImage.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   778
    wrapIt value:image2 value:'Ordered'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   779
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   780
    'dithered Arce:'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   781
    image2 := image asStevensonArceDitheredMonochromeImage.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   782
    wrapIt value:image2 value:'Stephenson Arce'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   783
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   784
    'dithered Burkes:'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   785
    image2 := image asBurkesDitheredMonochromeImage.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   786
    wrapIt value:image2 value:'Burkes'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   787
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   788
    'dithered Floyd-Steinberg:'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   789
    image2 := image asFloydSteinbergDitheredMonochromeImage.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   790
    wrapIt value:image2 value:'FS b&w'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   791
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   792
    'dithered grey depth2 ordered:'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   793
    image2 := image asOrderedDitheredGrayImageDepth:2.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   794
    wrapIt value:image2 value:'Ordered gray 2bit'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   795
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   796
    'dithered grey depth4 ordered:'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   797
    image2 := image asOrderedDitheredGrayImageDepth:4.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   798
    wrapIt value:image2 value:'Ordered gray 4bit'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   799
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   800
    'dithered grey depth2 ordered:'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   801
    image2 := image asFloydSteinbergDitheredGrayImageDepth:2.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   802
    wrapIt value:image2 value:'FS gray 2bit'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   803
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   804
    'dithered grey depth4 ordered:'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   805
    image2 := image asFloydSteinbergDitheredGrayImageDepth:4.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   806
    wrapIt value:image2 value:'FS gray 4bit'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   807
                                                                                                        [exEnd]
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   808
"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   809
!
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   810
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
   811
examples_functionalImages
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
   812
"
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
   813
    Functional images (please read 'Functional Images' by Conal Elliot, Microsoft Research).
8025
2e4d3fedcbd3 #DOCUMENTATION by mawalch
mawalch
parents: 7996
diff changeset
   814
    These have no underlying pixelstorage, but instead compute the pixel-value via a block.
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
   815
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
   816
    Plain x/y mapping:
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   817
                                                                        [exBegin]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   818
        |i|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   819
        i := Depth1Image extent:256@256.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   820
        i pixelFunction:[:x :y | ((x // 16) bitXor:(y // 16)) odd ifTrue:1 ifFalse:[0]].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   821
        i inspect.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   822
                                                                        [exEnd]
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
   823
    Transformed x/y mapping:
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   824
                                                                        [exBegin]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   825
        |i f|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   826
        f := [:x :y | (x between:0.4 and:0.6) asInteger].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   827
        i := Depth1Image extent:256@256.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   828
        i pixelFunction:f inX:(0.0 to:1.0) y:(0.0 to:1.0).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   829
        i inspect.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   830
                                                                        [exEnd]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   831
                                                                        [exBegin]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   832
        |i f|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   833
        f := [:x :y | ((x between:0.4 and:0.6) or:[(y between:0.4 and:0.6)]) asInteger].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   834
        i := Depth1Image extent:256@256.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   835
        i pixelFunction:f inX:(0.0 to:1.0) y:(0.0 to:1.0).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   836
        i inspect.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   837
                                                                        [exEnd]
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
   838
    Image based on polar coordinate:
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   839
                                                                        [exBegin]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   840
        |i f|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   841
        f := [:x :y | ((x@y) r * 10) asInteger bitAnd:1].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   842
        i := Depth1Image extent:256@256.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   843
        i pixelFunction:f inX:(-1.0 to:1.0) y:(-1.0 to:1.0).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   844
        i inspect.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   845
                                                                        [exEnd]
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
   846
    Grayscale image based on polar coordinate:
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   847
                                                                        [exBegin]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   848
        |i|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   849
        i := Depth8Image extent:256@256.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   850
        i photometric:#blackIs0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   851
        i pixelFunction:[:x :y | ((x@y) r * 255) truncated min:255] inX:(-1 to:1) y:(-1 to:1).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   852
        i inspect.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   853
                                                                        [exEnd]
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
   854
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
   855
    Taking another image as ''input''
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   856
                                                                        [exBegin]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   857
        |garfield f i h|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   858
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   859
        garfield := Image fromFile:'bitmaps/gifImages/garfield.gif' inPackage:'stx:goodies'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   860
        h := garfield height.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   861
        f := [:x :y | (garfield colorAtX:x y:h-y) rgbValue].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   862
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   863
        i := Depth24Image extent:garfield extent.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   864
        i pixelFunction:f.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   865
        i inspect.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   866
                                                                        [exEnd]
649
38e6d0015137 examples
Claus Gittinger <cg@exept.de>
parents: 622
diff changeset
   867
"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   868
! !
48194c26a46c Initial revision
claus
parents:
diff changeset
   869
1086
269243c32f69 added displayOpaque, for protocol completeness
Claus Gittinger <cg@exept.de>
parents: 1070
diff changeset
   870
!Image class methodsFor:'initialization'!
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
   871
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
   872
addReader:aReaderClass suffix:aSuffix
5216
f7ec910cfce1 Mark obsolete methods
Stefan Vogel <sv@exept.de>
parents: 5200
diff changeset
   873
    <resource: #obsolete>
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
   874
    "register an additional image reader.
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
   875
     This is provided for subclasses, to regster themself when
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
   876
     loaded (or from the startup scripts)"
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
   877
1800
1b4d3067bdc0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1799
diff changeset
   878
    self obsoleteMethodWarning.
1780
b20be7704d6f added mimeType
Claus Gittinger <cg@exept.de>
parents: 1779
diff changeset
   879
    self addReader:aReaderClass suffix:aSuffix mimeType:nil
b20be7704d6f added mimeType
Claus Gittinger <cg@exept.de>
parents: 1779
diff changeset
   880
!
b20be7704d6f added mimeType
Claus Gittinger <cg@exept.de>
parents: 1779
diff changeset
   881
b20be7704d6f added mimeType
Claus Gittinger <cg@exept.de>
parents: 1779
diff changeset
   882
addReader:aReaderClass suffix:aSuffix mimeType:mimeType
5216
f7ec910cfce1 Mark obsolete methods
Stefan Vogel <sv@exept.de>
parents: 5200
diff changeset
   883
    <resource: #obsolete>
1780
b20be7704d6f added mimeType
Claus Gittinger <cg@exept.de>
parents: 1779
diff changeset
   884
    "register an additional image reader.
1800
1b4d3067bdc0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1799
diff changeset
   885
     This interface is kept for backward compatibility.
1b4d3067bdc0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1799
diff changeset
   886
     The knowledge has been concentrated in MIMETypes"
1b4d3067bdc0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1799
diff changeset
   887
1b4d3067bdc0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1799
diff changeset
   888
    self obsoleteMethodWarning.
1b4d3067bdc0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1799
diff changeset
   889
    MIMETypes
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   890
        defineImageType:mimeType suffix:aSuffix reader:aReaderClass
1780
b20be7704d6f added mimeType
Claus Gittinger <cg@exept.de>
parents: 1779
diff changeset
   891
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
   892
    "
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
   893
     Image addReader:GIFReader suffix:'gif'
1780
b20be7704d6f added mimeType
Claus Gittinger <cg@exept.de>
parents: 1779
diff changeset
   894
     Image addReader:GIFReader suffix:'gif' mimeType:'image/gif'
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
   895
    "
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
   896
1799
054302440308 moved all mime-knowledge to MIMETypes
Claus Gittinger <cg@exept.de>
parents: 1786
diff changeset
   897
    "Modified: 30.6.1997 / 21:59:59 / cg"
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
   898
!
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
   899
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
   900
fileFormats
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
   901
    "return the collection of supported file formats.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
   902
     The returned dictionary maps file-extensions to image reader classes."
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
   903
1799
054302440308 moved all mime-knowledge to MIMETypes
Claus Gittinger <cg@exept.de>
parents: 1786
diff changeset
   904
    ^ MIMETypes fileSuffixToImageReaderMapping
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
   905
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
   906
    "
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
   907
     Image fileFormats
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
   908
    "
1799
054302440308 moved all mime-knowledge to MIMETypes
Claus Gittinger <cg@exept.de>
parents: 1786
diff changeset
   909
054302440308 moved all mime-knowledge to MIMETypes
Claus Gittinger <cg@exept.de>
parents: 1786
diff changeset
   910
    "Modified: 30.6.1997 / 22:05:58 / cg"
100
1b0b86c77397 co !!:*
claus
parents: 89
diff changeset
   911
!
1b0b86c77397 co !!:*
claus
parents: 89
diff changeset
   912
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
   913
flushDeviceImages
869
464ffa8c0c67 comment
Claus Gittinger <cg@exept.de>
parents: 861
diff changeset
   914
    "simply release all deviceForms"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
   915
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
   916
    Lobby do:[:anImage |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   917
        anImage release
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
   918
    ]
869
464ffa8c0c67 comment
Claus Gittinger <cg@exept.de>
parents: 861
diff changeset
   919
464ffa8c0c67 comment
Claus Gittinger <cg@exept.de>
parents: 861
diff changeset
   920
    "Modified: 15.6.1996 / 15:45:02 / cg"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   921
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   922
48194c26a46c Initial revision
claus
parents:
diff changeset
   923
initialize
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
   924
    "initialize class constants"
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
   925
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   926
    "setup tracker of known pictures"
24
e810b1be068b *** empty log message ***
claus
parents: 17
diff changeset
   927
    Lobby isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   928
        Lobby := Registry new.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   929
        ObjectMemory addDependent:self.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   930
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   931
        "/ define the algorithm to use for dithering -
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   932
        "/ supported values are:
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   933
        "/      #threshold
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   934
        "/      #ordered
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   935
        "/      #floydSteinberg
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   936
        "/      #burkes
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   937
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   938
        DitherAlgorithm := #floydSteinberg.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   939
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   940
        (Display notNil and:[Display hasGrayscales]) ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   941
            NumberOfDitherColors := 64
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   942
        ] ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   943
            "as far as I remember, this is about the number of grey values, the eye can distinguish"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   944
            NumberOfDitherColors := 100
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   945
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   946
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   947
        "define reader classes"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   948
        self initializeFileFormatTable.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   949
        self initializeMIMETable.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   950
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   951
        CollectGarbageWhenRunningOutOfColors := false.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   952
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   953
        ImageErrorSignal := Error newSignalMayProceed:true.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   954
        ImageErrorSignal nameClass:self message:#imageErrorSignal.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   955
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   956
        ImageSaveErrorSignal := ImageErrorSignal newSignalMayProceed:true.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   957
        ImageSaveErrorSignal nameClass:self message:#imageSaveErrorSignal.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   958
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   959
        FileCreationErrorSignal := ImageSaveErrorSignal newSignalMayProceed:true.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   960
        FileCreationErrorSignal nameClass:self message:#fileCreationErrorSignal.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   961
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   962
        CannotRepresentImageSignal := ImageSaveErrorSignal newSignalMayProceed:true.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   963
        CannotRepresentImageSignal nameClass:self message:#cannotRepresentImageSignal.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   964
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   965
        ImageLoadErrorSignal := QuerySignal new.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   966
        ImageLoadErrorSignal nameClass:self message:#imageLoadErrorSignal.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   967
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   968
        ImageNotFoundQuerySignal := QuerySignal new.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   969
        ImageNotFoundQuerySignal nameClass:self message:#imageNotFoundQuerySignal.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   970
        ImageNotFoundQuerySignal parent:ImageLoadErrorSignal.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   971
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   972
        InformationLostQuerySignal := QuerySignal new.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   973
        InformationLostQuerySignal nameClass:self message:#informationLostQuerySignal.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   974
        InformationLostQuerySignal parent:ImageLoadErrorSignal.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   975
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   976
        BadImageFormatQuerySignal := QuerySignal new.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   977
        BadImageFormatQuerySignal nameClass:self message:#badImageFormatQuerySignal.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   978
        BadImageFormatQuerySignal parent:ImageLoadErrorSignal.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   979
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   980
        UnrepresentableColorSignal := ImageErrorSignal newSignalMayProceed:true.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   981
        UnrepresentableColorSignal nameClass:self message:#unrepresentableColorSignal.
386
f9a80cac659e only init once
Claus Gittinger <cg@exept.de>
parents: 380
diff changeset
   982
    ]
748
818c6312acd1 grey vs. gray
Claus Gittinger <cg@exept.de>
parents: 746
diff changeset
   983
2678
e12976d7084b raise a query signal when a loadError happens;
Claus Gittinger <cg@exept.de>
parents: 2645
diff changeset
   984
    "Modified: / 18.5.1999 / 15:50:03 / cg"
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   985
!
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   986
24
e810b1be068b *** empty log message ***
claus
parents: 17
diff changeset
   987
initializeFileFormatTable
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
   988
    "initialize a default table to map from file extension to reader class.
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
   989
     The mapping here is a default needed for proper operation of ST/X;
1593
a88f08caacef commentary
Claus Gittinger <cg@exept.de>
parents: 1591
diff changeset
   990
     see the 'smalltalk.rc'/'display.rc' startup files for a real (full) map."
24
e810b1be068b *** empty log message ***
claus
parents: 17
diff changeset
   991
1814
5d413419cf51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1802
diff changeset
   992
    MIMETypes notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   993
        MIMETypes imageReaderForSuffix:'xbm'  put:XBMReader.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   994
        MIMETypes imageReaderForSuffix:'tiff' put:TIFFReader.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   995
        MIMETypes imageReaderForSuffix:'gif'  put:GIFReader.
1814
5d413419cf51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1802
diff changeset
   996
    ].
24
e810b1be068b *** empty log message ***
claus
parents: 17
diff changeset
   997
72
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
   998
    "
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
   999
     Image initializeFileFormatTable
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
  1000
    "
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1001
1799
054302440308 moved all mime-knowledge to MIMETypes
Claus Gittinger <cg@exept.de>
parents: 1786
diff changeset
  1002
    "Modified: 30.6.1997 / 22:07:28 / cg"
1785
3196d65f5fa8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1784
diff changeset
  1003
!
3196d65f5fa8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1784
diff changeset
  1004
3196d65f5fa8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1784
diff changeset
  1005
initializeMIMETable
3196d65f5fa8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1784
diff changeset
  1006
    "initialize a default table to map from mime type to reader class.
3196d65f5fa8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1784
diff changeset
  1007
     The mapping here is a default needed for proper operation of ST/X;
3196d65f5fa8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1784
diff changeset
  1008
     see the 'smalltalk.rc'/'display.rc' startup files for a real (full) map."
3196d65f5fa8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1784
diff changeset
  1009
1799
054302440308 moved all mime-knowledge to MIMETypes
Claus Gittinger <cg@exept.de>
parents: 1786
diff changeset
  1010
    MIMETypes notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1011
        MIMETypes mimeTypeForSuffix:'gif'       put:'image/gif'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1012
        MIMETypes mimeTypeForSuffix:'tiff'      put:'image/tiff'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1013
        MIMETypes mimeTypeForSuffix:'tif'       put:'image/tiff'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1014
        MIMETypes mimeTypeForSuffix:'xbm'       put:'image/x-xbitmap'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1015
        MIMETypes mimeTypeForSuffix:'xpm'       put:'image/x-xpixmap'.
1799
054302440308 moved all mime-knowledge to MIMETypes
Claus Gittinger <cg@exept.de>
parents: 1786
diff changeset
  1016
    ].
1785
3196d65f5fa8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1784
diff changeset
  1017
3196d65f5fa8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1784
diff changeset
  1018
    "
3196d65f5fa8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1784
diff changeset
  1019
     Image initializeMIMETable
3196d65f5fa8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1784
diff changeset
  1020
    "
3196d65f5fa8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1784
diff changeset
  1021
3196d65f5fa8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1784
diff changeset
  1022
    "Created: 27.6.1997 / 16:43:48 / cg"
1815
50212910fc13 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1814
diff changeset
  1023
    "Modified: 21.7.1997 / 17:33:59 / cg"
24
e810b1be068b *** empty log message ***
claus
parents: 17
diff changeset
  1024
!
e810b1be068b *** empty log message ***
claus
parents: 17
diff changeset
  1025
901
6cacd0f4eef0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 896
diff changeset
  1026
update:something with:aParameter from:changedObject
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  1027
    "flush all device specific stuff when restarted from a snapshot"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1028
48194c26a46c Initial revision
claus
parents:
diff changeset
  1029
    (something == #restarted) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1030
        self flushDeviceImages
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  1031
    ]
901
6cacd0f4eef0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 896
diff changeset
  1032
6cacd0f4eef0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 896
diff changeset
  1033
    "Created: 21.6.1996 / 19:47:43 / cg"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  1034
! !
48194c26a46c Initial revision
claus
parents:
diff changeset
  1035
1086
269243c32f69 added displayOpaque, for protocol completeness
Claus Gittinger <cg@exept.de>
parents: 1070
diff changeset
  1036
!Image class methodsFor:'instance creation'!
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1037
2380
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  1038
extent:ext
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  1039
    "create a new image, given extent.
2380
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  1040
     Assume a depth of 1, unless an explicit imageClass is the receiver."
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  1041
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  1042
    ^ self width:(ext x) height:(ext y)
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  1043
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  1044
    "Created: / 30.9.1998 / 22:31:26 / cg"
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  1045
    "Modified: / 30.9.1998 / 22:32:48 / cg"
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  1046
!
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  1047
3023
cb063801decd more Squeak compatibility
ps
parents: 2980
diff changeset
  1048
extent:ext depth:d
cb063801decd more Squeak compatibility
ps
parents: 2980
diff changeset
  1049
    "ST-80 compatibility"
cb063801decd more Squeak compatibility
ps
parents: 2980
diff changeset
  1050
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  1051
    ^ self width:ext x height:ext y depth:d
3023
cb063801decd more Squeak compatibility
ps
parents: 2980
diff changeset
  1052
!
cb063801decd more Squeak compatibility
ps
parents: 2980
diff changeset
  1053
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1054
extent:ext depth:d antiAliasedPalette:aBasicColorArray bgColor:bgColor
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1055
    ^ self extent:ext depth:d antiAliasedPalette:aBasicColorArray bgColor:bgColor mixedArray:#(1.0 0.8 0.6 0.4 0.2)
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1056
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1057
    "
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1058
        |colorMap aaImgArray|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1059
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1060
        colorMap := Array with:Color white with:Color blue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1061
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1062
        aaImgArray := Depth8Image extent:300@400 depth:8 antiAliasedPalette:colorMap bgColor:Color white.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1063
        aaImgArray last
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1064
            fillAntiAliasedArc:200@200
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1065
            radius:80
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1066
            from:0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1067
            angle:360
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1068
            withColor:Color blue
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1069
            antiAliasedPalette:aaImgArray first
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1070
            startWith:aaImgArray second.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1071
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1072
        aaImgArray last inspect.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1073
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1074
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1075
        |colorMap aaImgArray|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1076
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1077
        colorMap := Array with:Color white with:Color black with:Color red with:Color blue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1078
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1079
        aaImgArray := Depth8Image extent:300@400 depth:8 antiAliasedPalette:colorMap bgColor:Color white.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1080
        aaImgArray last fillAntiAliasedArc:205@195 radius:80 from:0 angle:90 withColor:Color red
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1081
            colorDictionary:aaImgArray first
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1082
            blendStart:aaImgArray second.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1083
        aaImgArray last fillAntiAliasedArc:200@200 radius:80 from:90 angle:270 withColor:Color blue
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1084
            colorDictionary:aaImgArray first
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1085
            blendStart:aaImgArray second.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1086
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1087
        aaImgArray last inspect.
5135
0a2a850a20cc *** empty log message ***
sr
parents: 5126
diff changeset
  1088
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1089
    "
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1090
!
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1091
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1092
extent:ext depth:d antiAliasedPalette:aBasicColorArray bgColor:bgColor mixedArray:mixedArray
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  1093
    |colorMap colorIndex colorDictionary tmpDic newImage|
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  1094
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1095
    colorMap := OrderedCollection new.
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1096
    colorIndex := 0.
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1097
    colorDictionary := Dictionary new.
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1098
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1099
    aBasicColorArray do:[:aColor |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1100
        colorMap add:aColor.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1101
        colorIndex := colorIndex + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1102
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1103
        tmpDic := Dictionary new.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1104
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1105
        mixedArray do:[:aFloat |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1106
            tmpDic at:aFloat put:colorIndex.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1107
            colorMap add:(aColor mixed:aFloat with:bgColor).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1108
            colorIndex := colorIndex + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1109
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1110
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1111
        colorDictionary at:aColor put:tmpDic.
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 6037
diff changeset
  1112
    ].
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1113
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1114
    newImage := (self implementorForDepth:d) new.
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1115
    newImage width:ext x height:ext y depth:d palette:colorMap.
5643
bf38d077884a changed:
Claus Gittinger <cg@exept.de>
parents: 5533
diff changeset
  1116
    newImage createPixelStore.
bf38d077884a changed:
Claus Gittinger <cg@exept.de>
parents: 5533
diff changeset
  1117
"/    emptyBits := ByteArray new:(newImage bytesPerRow * ext y).
bf38d077884a changed:
Claus Gittinger <cg@exept.de>
parents: 5533
diff changeset
  1118
"/    newImage bits:emptyBits.
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1119
5135
0a2a850a20cc *** empty log message ***
sr
parents: 5126
diff changeset
  1120
    ^ Array with:colorDictionary with:mixedArray first with:newImage
0a2a850a20cc *** empty log message ***
sr
parents: 5126
diff changeset
  1121
0a2a850a20cc *** empty log message ***
sr
parents: 5126
diff changeset
  1122
    "
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1123
        |colorMap aaImgArray|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1124
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1125
        colorMap := Array with:Color white with:Color black with:Color red with:Color blue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1126
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1127
        aaImgArray := Depth8Image extent:300@400 depth:8 antiAliasedPalette:colorMap bgColor:Color white.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1128
        aaImgArray last fillAntiAliasedArc:205@195 radius:80 from:0 angle:90 withColor:Color red
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1129
            colorDictionary:aaImgArray first
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1130
            blendStart:aaImgArray second.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1131
        aaImgArray last fillAntiAliasedArc:200@200 radius:80 from:90 angle:270 withColor:Color blue
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1132
            colorDictionary:aaImgArray first
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1133
            blendStart:aaImgArray second.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1134
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1135
        aaImgArray last inspect.
5135
0a2a850a20cc *** empty log message ***
sr
parents: 5126
diff changeset
  1136
0a2a850a20cc *** empty log message ***
sr
parents: 5126
diff changeset
  1137
 ###################
0a2a850a20cc *** empty log message ***
sr
parents: 5126
diff changeset
  1138
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1139
        |colorMap aaImgArray|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1140
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1141
        colorMap := Array with:Color white with:Color blue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1142
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1143
        aaImgArray := Depth8Image extent:300@400 depth:8 antiAliasedPalette:colorMap bgColor:Color white.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1144
        aaImgArray last
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1145
            fillAntiAliasedArc:200@200
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1146
            radius:80
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1147
            from:0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1148
            angle:360
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1149
            withColor:Color blue
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  1150
            colorDictionary:aaImgArray first
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  1151
            blendStart:aaImgArray second.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1152
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1153
        aaImgArray last inspect.
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1154
    "
5643
bf38d077884a changed:
Claus Gittinger <cg@exept.de>
parents: 5533
diff changeset
  1155
bf38d077884a changed:
Claus Gittinger <cg@exept.de>
parents: 5533
diff changeset
  1156
    "Modified: / 02-11-2010 / 20:57:41 / cg"
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  1157
    "Modified: / 31-01-2017 / 14:30:22 / stefan"
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  1158
    "Modified (comment): / 31-01-2017 / 15:47:39 / stefan"
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1159
!
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1160
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1161
extent:ext depth:d bits:bits
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1162
    "ST-80 compatibility; assume 32-bit padding"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1163
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1164
    ^ self extent:ext depth:d bits:bits pad:32
24
e810b1be068b *** empty log message ***
claus
parents: 17
diff changeset
  1165
!
e810b1be068b *** empty log message ***
claus
parents: 17
diff changeset
  1166
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1167
extent:ext depth:d bits:bits pad:padding
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1168
    "ST-80 compatibility"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1169
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1170
    ^ self width:ext x height:ext y depth:d fromArray:bits pad:padding
24
e810b1be068b *** empty log message ***
claus
parents: 17
diff changeset
  1171
!
e810b1be068b *** empty log message ***
claus
parents: 17
diff changeset
  1172
1276
ec4112f62da7 ST-80 stuff
Claus Gittinger <cg@exept.de>
parents: 1248
diff changeset
  1173
extent:ext depth:d bitsPerPixel:bpp palette:aColormap usingBits:bits
ec4112f62da7 ST-80 stuff
Claus Gittinger <cg@exept.de>
parents: 1248
diff changeset
  1174
    "ST-80 compatibility"
ec4112f62da7 ST-80 stuff
Claus Gittinger <cg@exept.de>
parents: 1248
diff changeset
  1175
ec4112f62da7 ST-80 stuff
Claus Gittinger <cg@exept.de>
parents: 1248
diff changeset
  1176
    |img|
ec4112f62da7 ST-80 stuff
Claus Gittinger <cg@exept.de>
parents: 1248
diff changeset
  1177
ec4112f62da7 ST-80 stuff
Claus Gittinger <cg@exept.de>
parents: 1248
diff changeset
  1178
    img := self width:ext x height:ext y depth:bpp fromArray:bits pad:32.
ec4112f62da7 ST-80 stuff
Claus Gittinger <cg@exept.de>
parents: 1248
diff changeset
  1179
    img colorMap:aColormap.
ec4112f62da7 ST-80 stuff
Claus Gittinger <cg@exept.de>
parents: 1248
diff changeset
  1180
    ^ img
ec4112f62da7 ST-80 stuff
Claus Gittinger <cg@exept.de>
parents: 1248
diff changeset
  1181
ec4112f62da7 ST-80 stuff
Claus Gittinger <cg@exept.de>
parents: 1248
diff changeset
  1182
    "Created: 25.1.1997 / 03:50:22 / cg"
ec4112f62da7 ST-80 stuff
Claus Gittinger <cg@exept.de>
parents: 1248
diff changeset
  1183
    "Modified: 25.1.1997 / 12:27:35 / cg"
ec4112f62da7 ST-80 stuff
Claus Gittinger <cg@exept.de>
parents: 1248
diff changeset
  1184
!
ec4112f62da7 ST-80 stuff
Claus Gittinger <cg@exept.de>
parents: 1248
diff changeset
  1185
1433
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  1186
extent:ext depth:d palette:aColormap
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  1187
    "create & return a blank image of the given size.
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  1188
     ST-80 compatibility"
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  1189
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  1190
    |newImage|
1433
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  1191
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  1192
    newImage := (self implementorForDepth:d) new.
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  1193
    newImage width:ext x height:ext y depth:d palette:aColormap.
5643
bf38d077884a changed:
Claus Gittinger <cg@exept.de>
parents: 5533
diff changeset
  1194
    newImage createPixelStore.
bf38d077884a changed:
Claus Gittinger <cg@exept.de>
parents: 5533
diff changeset
  1195
"/    emptyBits := ByteArray new:(newImage bytesPerRow * ext y).
bf38d077884a changed:
Claus Gittinger <cg@exept.de>
parents: 5533
diff changeset
  1196
"/    newImage bits:emptyBits.
1433
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  1197
    ^ newImage
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  1198
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  1199
    "
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  1200
     Image extent:16@16 depth:8 palette:nil
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  1201
     Image extent:16@16 depth:4 palette:nil
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  1202
     Image extent:16@16 depth:2 palette:nil
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  1203
    "
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  1204
5643
bf38d077884a changed:
Claus Gittinger <cg@exept.de>
parents: 5533
diff changeset
  1205
    "Created: / 06-03-1997 / 15:24:01 / cg"
bf38d077884a changed:
Claus Gittinger <cg@exept.de>
parents: 5533
diff changeset
  1206
    "Modified: / 02-11-2010 / 20:56:53 / cg"
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  1207
    "Modified (format): / 31-01-2017 / 14:51:03 / stefan"
1433
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  1208
!
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  1209
1070
6a695c4bb749 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1063
diff changeset
  1210
extent:ext depth:d palette:aColormap bits:bits
6a695c4bb749 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1063
diff changeset
  1211
    "ST-80 compatibility"
6a695c4bb749 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1063
diff changeset
  1212
6a695c4bb749 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1063
diff changeset
  1213
    ^ self extent:ext depth:d palette:aColormap bits:bits pad:16
6a695c4bb749 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1063
diff changeset
  1214
6a695c4bb749 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1063
diff changeset
  1215
    "Modified: 7.10.1996 / 11:32:16 / cg"
6a695c4bb749 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1063
diff changeset
  1216
!
6a695c4bb749 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1063
diff changeset
  1217
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1218
extent:ext depth:d palette:aColormap bits:bits pad:padding
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1219
    "ST-80 compatibility"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1220
1070
6a695c4bb749 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1063
diff changeset
  1221
    |img|
6a695c4bb749 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1063
diff changeset
  1222
6a695c4bb749 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1063
diff changeset
  1223
    img := self width:ext x height:ext y depth:d fromArray:bits pad:padding.
6a695c4bb749 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1063
diff changeset
  1224
    img colorMap:aColormap.
6a695c4bb749 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1063
diff changeset
  1225
    ^ img
6a695c4bb749 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1063
diff changeset
  1226
6a695c4bb749 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1063
diff changeset
  1227
    "Modified: 7.10.1996 / 11:32:00 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1228
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1229
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1230
extent:ext fromArray:bits offset:offset
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1231
    "ST-80 compatibility"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1232
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1233
    ^ self width:ext x height:ext y fromArray:bits
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1234
!
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1235
7913
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  1236
fromAlphaInImage:anImage
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  1237
    "create & return an Image from the alpha channel ofanother image.
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  1238
     If I am a depth1 image, set the pixels for alpha > 127;
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  1239
     if I am a depth8 image, set the pixels to the alpha values."
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  1240
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  1241
    |cls|
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  1242
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  1243
    self == Image ifTrue:[
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  1244
        cls := Depth8Image.
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  1245
    ] ifFalse:[
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  1246
        cls := self.
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  1247
    ].
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  1248
    ^ cls new fromAlphaInImage:anImage
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  1249
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  1250
    "Created: / 17-02-2017 / 17:39:30 / cg"
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  1251
!
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  1252
7637
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
  1253
fromDeviceForm:aForm maskForm:aMaskFormOrNil
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
  1254
    "create & return an image form aForm that is already on a device"
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
  1255
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
  1256
    |img|
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
  1257
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
  1258
    img := self newForDepth:aForm depth.
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
  1259
    img fromDeviceForm:aForm maskForm:aMaskFormOrNil.
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
  1260
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
  1261
    ^ img 
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
  1262
!
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
  1263
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1264
fromForm:aForm
924
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  1265
    "create & return an Image given a aForm"
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1266
3026
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1267
    ^ self fromSubForm:(0@0 extent:aForm extent) in:aForm
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1268
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1269
    "
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1270
     |f|
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1271
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1272
     f := Form width:16 height:16.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1273
     f clear.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1274
     f displayLineFromX:0 y:0 toX:15 y:15.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1275
     f inspect.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1276
     (Image fromForm:f) inspect
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1277
    "
924
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  1278
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  1279
    "
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  1280
     |f|
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  1281
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  1282
     f := Form width:16 height:16 depth:(Display depth) on:Display.
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  1283
     f clear.
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  1284
     f paint:(Color red).
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  1285
     f displayLineFromX:0 y:0 toX:15 y:15.
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  1286
     f paint:(Color green).
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  1287
     f displayLineFromX:15 y:0 toX:0 y:15.
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  1288
     f inspect.
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  1289
     (Image fromForm:f) inspect
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  1290
    "
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  1291
936
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
  1292
    "Modified: 11.7.1996 / 11:21:42 / cg"
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1293
!
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1294
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1295
fromImage:anImage
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1296
    "create & return an Image given another image. This can be used to
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1297
     convert an image to another depth."
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1298
3259
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1299
    ^ self fromImage:anImage photometric:nil
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1300
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1301
    "
3448
44cbe8a45067 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1302
     |i i2 idx|
44cbe8a45067 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1303
44cbe8a45067 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1304
     i := Image fromFile:'/home/cg/work/stx/goodies/bitmaps/xpmBitmaps/QUESTION.xpm'.
44cbe8a45067 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1305
     i2 := i deepCopy.
44cbe8a45067 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1306
44cbe8a45067 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1307
     idx := i2 colorMap indexOfPaintNearest:(Color green).
44cbe8a45067 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1308
     i2 colorMap at:idx put:Color red.
44cbe8a45067 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1309
     i2 inspect.
44cbe8a45067 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1310
     i inspect.
3259
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1311
    "
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1312
!
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1313
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1314
fromImage:anImage photometric:photometricOrNil
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1315
    "create & return an Image given another image. This can be used to
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1316
     convert an image to another depth."
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1317
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  1318
    (self == Image
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  1319
    or:[anImage class == self
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1320
        and:[photometricOrNil isNil or:[photometricOrNil == anImage photometric]]]) ifTrue:[^ anImage].
3259
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1321
    ^ self new fromImage:anImage photometric:photometricOrNil.
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1322
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1323
    "
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1324
     |i1 i8|
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1325
8093
363a0cdd8762 #DOCUMENTATION by mawalch
mawalch
parents: 8091
diff changeset
  1326
     i1 := Image fromFile:'libtool/bitmaps/SBrowser.xbm'.
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1327
     i8 := Depth8Image fromImage:i1.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1328
     i8 inspect
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1329
    "
8093
363a0cdd8762 #DOCUMENTATION by mawalch
mawalch
parents: 8091
diff changeset
  1330
363a0cdd8762 #DOCUMENTATION by mawalch
mawalch
parents: 8091
diff changeset
  1331
    "Modified (comment): / 23-08-2017 / 12:02:25 / mawalch"
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1332
!
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1333
3026
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1334
fromSubForm:aRectangle in:aForm
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1335
    "create & return an subImage given a aForm"
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1336
7271
3d35b4e39ec4 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 7242
diff changeset
  1337
    |depth formsDevice vis img photometric|
3026
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1338
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1339
    depth := aForm depth.
7271
3d35b4e39ec4 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 7242
diff changeset
  1340
    formsDevice := aForm device.
3026
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1341
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  1342
    photometric := (depth > 8) ifTrue:[#rgb] ifFalse:[#palette].
4937
1b0ebaed9336 photometric fix
Claus Gittinger <cg@exept.de>
parents: 4893
diff changeset
  1343
7271
3d35b4e39ec4 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 7242
diff changeset
  1344
    (formsDevice notNil and:[depth == formsDevice depth]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1345
        "/
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1346
        "/ for truecolor displays, return a Depth24Image
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1347
        "/ (must do this for depth15 & depth16 displays, since
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1348
        "/  Depth16Image has no way to specify r/g/b masks ...)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1349
        "/
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1350
        vis := formsDevice visualType.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1351
        (vis == #TrueColor or:[vis == #DirectColor]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1352
            depth > 8 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1353
                depth := 24.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1354
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1355
        ].
3026
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1356
    ].
3259
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1357
    img := self newForDepth:depth.
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 6037
diff changeset
  1358
    img photometric:photometric.
4937
1b0ebaed9336 photometric fix
Claus Gittinger <cg@exept.de>
parents: 4893
diff changeset
  1359
7271
3d35b4e39ec4 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 7242
diff changeset
  1360
    formsDevice isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1361
        ^ img from:aForm in:aRectangle.
3026
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1362
    ].
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1363
    ^ img from:aForm in:aRectangle
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1364
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1365
    "
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1366
     |f|
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1367
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1368
     f := Form width:16 height:16.
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1369
     f clear.
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1370
     f displayLineFromX:0 y:0 toX:15 y:15.
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1371
     f inspect.
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1372
     (Image fromForm:f) inspect.
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1373
     (Image fromSubForm:(5@5 corner:10@10) in:f) inspect
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1374
    "
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1375
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1376
    "
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1377
     |f|
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1378
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1379
     f := Form width:16 height:16 depth:(Display depth) on:Display.
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1380
     f clear.
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1381
     f paint:(Color red).
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1382
     f displayLineFromX:0 y:0 toX:15 y:15.
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1383
     f paint:(Color green).
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1384
     f displayLineFromX:15 y:0 toX:0 y:15.
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1385
     f inspect.
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1386
     (Image fromForm:f) inspect.
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1387
     (Image fromSubForm:(5@5 corner:10@10) in:f) inspect
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1388
    "
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  1389
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  1390
    "Modified: / 31-01-2017 / 15:03:17 / stefan"
3026
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1391
!
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1392
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  1393
fromSubImage:anImage in:aRectangle
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  1394
    "create & return an Image from a rectangular area in another image.
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1395
     This can also be used to get a subimage in another depth.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1396
     As with layouts, the rectangle may contain integers (= nr of pixels) or float numbers (= relative size).
7373
61933c223183 added metaData instVar (for free use by image reader)
Claus Gittinger <cg@exept.de>
parents: 7363
diff changeset
  1397
     Color precision may be lost, if conversion is from a higher depth image.
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1398
     For palette & rgb images, this may fail if a color cannot be represented."
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1399
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1400
    |cls|
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  1401
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  1402
    self == Image ifTrue:[
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  1403
        cls := self implementorForDepth:anImage depth.
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  1404
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1405
        cls := self.
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1406
    ].
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1407
    ^ cls new fromSubImage:anImage in:aRectangle.
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  1408
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  1409
    "
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  1410
     |i1 i8|
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  1411
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1412
     i1 := Image fromFile:'bitmaps/gifImages/garfield.gif' inPackage:'stx:goodies'.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1413
     i8 := Depth8Image fromSubImage:i1 in:(250@90 extent:50@50).
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  1414
     i8 inspect
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  1415
    "
650
14fc51fc3a4e comments
Claus Gittinger <cg@exept.de>
parents: 649
diff changeset
  1416
    "
14fc51fc3a4e comments
Claus Gittinger <cg@exept.de>
parents: 649
diff changeset
  1417
     |i1 i8|
14fc51fc3a4e comments
Claus Gittinger <cg@exept.de>
parents: 649
diff changeset
  1418
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1419
     i1 := Image fromFile:'bitmaps/gifImages/claus.gif' inPackage:'stx:goodies'.
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  1420
     i8 := Image fromSubImage:i1 in:(70@50 extent:50@50).
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  1421
     i8 inspect
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  1422
    "
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1423
    "
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1424
     |i1 i24|
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1425
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1426
     i1 := Image fromFile:'bitmaps/gifImages/claus.gif' inPackage:'stx:goodies'.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1427
     i24 := Depth24Image fromSubImage:i1 in:(70@50 extent:50@50).
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1428
     i24 inspect
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1429
    "
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1430
    "
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1431
     |i1 i24|
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1432
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1433
     i1 := Image fromFile:'bitmaps/gifImages/claus.gif' inPackage:'stx:goodies'.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1434
     i1 inspect.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1435
     i24 := Depth24Image fromSubImage:i1 in:(0.25@0.25 extent:0.5@0.5).
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1436
     i24 inspect
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1437
    "
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  1438
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  1439
    "Created: / 20-09-1995 / 01:05:43 / claus"
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  1440
    "Modified: / 24-04-1997 / 23:13:02 / cg"
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  1441
    "Modified (format): / 30-01-2017 / 19:45:54 / stefan"
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  1442
!
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  1443
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1444
new
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1445
    "create a new image. Redefined to set the photometric to
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1446
     greyScale with black being 0 as default."
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1447
4416
fb209558d622 proper #initialize
Claus Gittinger <cg@exept.de>
parents: 4415
diff changeset
  1448
    ^ self basicNew initialize
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  1449
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  1450
    "Modified: 10.6.1996 / 18:08:37 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1451
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1452
3259
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1453
newForDepth:depth
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1454
    "create a new image. Redefined to set the photometric to
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1455
     greyScale with black being 0 as default."
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1456
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1457
    |cls|
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1458
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1459
    cls := self implementorForDepth:depth.
4757
60d27f8e65bb some fixes for depth32
Claus Gittinger <cg@exept.de>
parents: 4745
diff changeset
  1460
    ^ cls new
3259
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1461
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1462
    "
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1463
     Image newForDepth:8
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1464
    "
4757
60d27f8e65bb some fixes for depth32
Claus Gittinger <cg@exept.de>
parents: 4745
diff changeset
  1465
60d27f8e65bb some fixes for depth32
Claus Gittinger <cg@exept.de>
parents: 4745
diff changeset
  1466
    "Modified: / 27-05-2007 / 16:57:09 / cg"
3259
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1467
!
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1468
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1469
width:w height:h
2380
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  1470
    "create a new image, given width, height.
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  1471
     Assume a depth of 1, unless an explicit imageClass is the receiver."
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1472
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1473
    |cls|
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1474
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1475
    cls := self.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1476
    cls == Image ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1477
        cls := self implementorForDepth:1
4788
0d07247aee8b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4780
diff changeset
  1478
    ].
0d07247aee8b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4780
diff changeset
  1479
    ^ cls new width:w height:h
0d07247aee8b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4780
diff changeset
  1480
0d07247aee8b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4780
diff changeset
  1481
    "Modified: / 06-06-2007 / 11:10:55 / cg"
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1482
!
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1483
82
98a70bce6d51 *** empty log message ***
claus
parents: 81
diff changeset
  1484
width:w height:h depth:d
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1485
    "create a new image, given width, height and depth"
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1486
3259
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1487
    ^ (self newForDepth:d)
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1488
        width:w height:h depth:d
82
98a70bce6d51 *** empty log message ***
claus
parents: 81
diff changeset
  1489
!
98a70bce6d51 *** empty log message ***
claus
parents: 81
diff changeset
  1490
98a70bce6d51 *** empty log message ***
claus
parents: 81
diff changeset
  1491
width:w height:h depth:d fromArray:pixelData
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1492
    "create a new image, given width, height, depth and data.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1493
     Data must be a ByteArray containing correctly aligned bits for the specified
134
claus
parents: 132
diff changeset
  1494
     depth (8-bit padded)."
82
98a70bce6d51 *** empty log message ***
claus
parents: 81
diff changeset
  1495
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  1496
    ^ (self newForDepth:d)
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1497
        width:w height:h depth:d fromArray:pixelData
82
98a70bce6d51 *** empty log message ***
claus
parents: 81
diff changeset
  1498
98a70bce6d51 *** empty log message ***
claus
parents: 81
diff changeset
  1499
    "
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  1500
     Image width:8
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1501
           height:8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1502
           depth:1
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1503
           fromArray:#[2r11001100
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1504
                       2r00110011
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1505
                       2r11001100
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1506
                       2r00110011
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1507
                       2r11001100
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1508
                       2r00110011
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1509
                       2r11001100
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1510
                       2r00110011].
82
98a70bce6d51 *** empty log message ***
claus
parents: 81
diff changeset
  1511
    "
98a70bce6d51 *** empty log message ***
claus
parents: 81
diff changeset
  1512
98a70bce6d51 *** empty log message ***
claus
parents: 81
diff changeset
  1513
    "
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  1514
     Image width:8
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1515
           height:8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1516
           depth:2
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1517
           fromArray:#[4r1100 4r1100
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1518
                       4r0011 4r0011
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1519
                       4r1100 4r1100
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1520
                       4r0011 4r0011
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1521
                       4r1100 4r1100
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1522
                       4r0011 4r0011
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1523
                       4r1100 4r1100
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1524
                       4r0011 4r0011].
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1525
    "
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1526
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1527
    "
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  1528
     Image width:8
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1529
           height:8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1530
           depth:4
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1531
           fromArray:#[16r00 16r01 16rf0 16rf1
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1532
                       16r02 16r03 16rf2 16rf3
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1533
                       16r04 16r05 16rf4 16rf5
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1534
                       16r06 16r07 16rf6 16rf7
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1535
                       16r08 16r09 16rf8 16rf9
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1536
                       16r0a 16r0b 16rfa 16rfb
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1537
                       16r0c 16r0d 16rfc 16rfd
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1538
                       16r0e 16r0f 16rfe 16rff].
7101
8c2377f29588 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 6900
diff changeset
  1539
    "
8c2377f29588 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 6900
diff changeset
  1540
8c2377f29588 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 6900
diff changeset
  1541
    "
8c2377f29588 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 6900
diff changeset
  1542
     Image width:8
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1543
           height:8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1544
           depth:16
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1545
           fromArray:#(1 1 1 1 1 1 1 1
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1546
                       2 2 2 2 2 2 2 2
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1547
                       3 3 3 3 3 3 3 3
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1548
                       4 4 4 4 4 4 4 4
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1549
                       5 5 5 5 5 5 5 5
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1550
                       6 6 6 6 6 6 6 6
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1551
                       7 7 7 7 7 7 7 7
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1552
                       8 8 8 8 8 8 8 8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1553
                      ) asWordArray.
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  1554
    "
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  1555
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  1556
    "Modified: 10.6.1996 / 18:18:10 / cg"
132
claus
parents: 125
diff changeset
  1557
!
claus
parents: 125
diff changeset
  1558
134
claus
parents: 132
diff changeset
  1559
width:w height:h depth:d fromArray:pixelData pad:padding
claus
parents: 132
diff changeset
  1560
    "create a new image, given width, height, depth and data.
claus
parents: 132
diff changeset
  1561
     Data must be a ByteArray containing correctly aligned bits for the specified
claus
parents: 132
diff changeset
  1562
     depth."
claus
parents: 132
diff changeset
  1563
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  1564
    |img newBits
2772
e8ceedf9aeab code cleanup & a few more SmallInteger type hints
Claus Gittinger <cg@exept.de>
parents: 2760
diff changeset
  1565
     srcRowBytes "{ Class: SmallInteger }"
e8ceedf9aeab code cleanup & a few more SmallInteger type hints
Claus Gittinger <cg@exept.de>
parents: 2760
diff changeset
  1566
     dstRowBytes "{ Class: SmallInteger }"
e8ceedf9aeab code cleanup & a few more SmallInteger type hints
Claus Gittinger <cg@exept.de>
parents: 2760
diff changeset
  1567
     nextDstIndex "{ Class: SmallInteger }"
2527
5391e6e2c8a6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2526
diff changeset
  1568
     srcIndex "{ Class: SmallInteger }"
5391e6e2c8a6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2526
diff changeset
  1569
     dstIndex "{ Class: SmallInteger }" |
134
claus
parents: 132
diff changeset
  1570
3259
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1571
    img := (self newForDepth:d) width:w height:h depth:d .
134
claus
parents: 132
diff changeset
  1572
4757
60d27f8e65bb some fixes for depth32
Claus Gittinger <cg@exept.de>
parents: 4745
diff changeset
  1573
    srcRowBytes := ((w * d + padding - 1) bitShift:-5) bitShift:2.
5341
ede63c3764ca *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5326
diff changeset
  1574
    dstRowBytes := img bytesPerRow.
ede63c3764ca *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5326
diff changeset
  1575
ede63c3764ca *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5326
diff changeset
  1576
    (padding ~~ 8 and:[(srcRowBytes \\ 4 ~~ 0) or:[srcRowBytes ~= dstRowBytes]]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1577
        "must repad; ST/X uses byte padding, while ST-80 uses longword
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1578
         padding. This is stupid, and may be changed in ST/X with future versions.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1579
        "
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1580
        dstRowBytes := img bytesPerRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1581
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1582
        newBits := ByteArray uninitializedNew:(dstRowBytes * h).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1583
        srcIndex := 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1584
        dstIndex := 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1585
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1586
        1 to:h do:[:row |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1587
            nextDstIndex := dstIndex + dstRowBytes.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1588
            newBits replaceFrom:dstIndex
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1589
                             to:(nextDstIndex - 1)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1590
                           with:pixelData
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1591
                     startingAt:srcIndex.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1592
            srcIndex := srcIndex + srcRowBytes.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1593
            dstIndex := nextDstIndex.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1594
        ].
134
claus
parents: 132
diff changeset
  1595
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1596
        pixelData class isBytes ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1597
            newBits := ByteArray withAll:pixelData
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1598
        ] ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1599
            newBits := pixelData
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1600
        ]
134
claus
parents: 132
diff changeset
  1601
    ].
claus
parents: 132
diff changeset
  1602
    img bits:newBits.
claus
parents: 132
diff changeset
  1603
    ^ img
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  1604
4757
60d27f8e65bb some fixes for depth32
Claus Gittinger <cg@exept.de>
parents: 4745
diff changeset
  1605
    "Modified: / 27-05-2007 / 14:01:32 / cg"
134
claus
parents: 132
diff changeset
  1606
!
claus
parents: 132
diff changeset
  1607
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1608
width:w height:h fromArray:anArray
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1609
    "create a new image, given width, height. Assume a depth of 1 of the
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1610
     receiving class is Image.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1611
     Data must be a ByteArray containing correctly aligned bits for depth 1
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1612
     (i.e. 8 bits per byte)."
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1613
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  1614
    |cls d pixels|
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1615
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1616
    cls := self.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1617
    cls == Image ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1618
        cls := self implementorForDepth:1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1619
        d := 1.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1620
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1621
        d := cls imageDepth
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1622
    ].
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  1623
    anArray class isBytes ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1624
        pixels := ByteArray withAll:anArray
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  1625
    ] ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1626
        pixels := anArray
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  1627
    ].
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  1628
    ^ cls new width:w height:h depth:d fromArray:pixels
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  1629
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  1630
    "
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  1631
     Image width:8
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1632
           height:8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1633
           fromArray:#[2r11001100
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1634
                       2r00110011
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1635
                       2r11001100
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1636
                       2r00110011
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1637
                       2r11001100
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1638
                       2r00110011
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1639
                       2r11001100
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1640
                       2r00110011].
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  1641
    "
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  1642
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  1643
    "Modified: 8.6.1996 / 10:07:26 / cg"
6899
4530c3bfcef8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6896
diff changeset
  1644
!
4530c3bfcef8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6896
diff changeset
  1645
6900
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  1646
width:w height:h photometric:photometric
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  1647
    "create a new image, given width, height.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  1648
     Assume a depth of 1, unless an explicit imageClass is the receiver."
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  1649
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  1650
    |cls|
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  1651
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  1652
    cls := self.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  1653
    cls == Image ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1654
        cls := self implementorForDepth:1
6900
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  1655
    ].
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  1656
    ^ cls new width:w height:h; photometric:photometric; yourself
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  1657
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  1658
    "Modified: / 06-06-2007 / 11:10:55 / cg"
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  1659
!
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  1660
6899
4530c3bfcef8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6896
diff changeset
  1661
width:w height:h photometric:photometric bitsPerSample:bitsPerSample
4530c3bfcef8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6896
diff changeset
  1662
    "create a new image, given width, height.
4530c3bfcef8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6896
diff changeset
  1663
     Assume a depth of 1, unless an explicit imageClass is the receiver."
4530c3bfcef8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6896
diff changeset
  1664
4530c3bfcef8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6896
diff changeset
  1665
    |cls|
4530c3bfcef8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6896
diff changeset
  1666
4530c3bfcef8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6896
diff changeset
  1667
    cls := self.
4530c3bfcef8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6896
diff changeset
  1668
    cls == Image ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1669
        cls := self implementorForDepth:1
6899
4530c3bfcef8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6896
diff changeset
  1670
    ].
4530c3bfcef8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6896
diff changeset
  1671
    ^ cls new width:w height:h; photometric:photometric; bitsPerSample:bitsPerSample; yourself
4530c3bfcef8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6896
diff changeset
  1672
4530c3bfcef8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6896
diff changeset
  1673
    "Modified: / 06-06-2007 / 11:10:55 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1674
! !
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1675
1156
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  1676
!Image class methodsFor:'Signal constants'!
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  1677
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1678
badImageFormatQuerySignal
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1679
    "return the (query-) signal, which is raised if some
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1680
     bitmap-image could not be loaded due to an unrecognized format.
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1681
     If unhandled, the image-load returns nil.
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1682
     Otherwise, it returns whatever the handler proceeds with.
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1683
     The exception gets either the images fileName or an input stream
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1684
     as parameter"
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1685
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1686
    ^ BadImageFormatQuerySignal
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1687
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1688
    "Created: 1.2.1997 / 14:40:29 / cg"
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1689
!
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1690
1385
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1691
cannotRepresentImageSignal
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1692
    "return the signal, which is raised if some
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1693
     bitmap-image could not be saved in the requested format.
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1694
     This happens for example, if a true color image is saved in
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1695
     xpm format or a color image saved in xbm format.
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1696
     Applications should either ask the class before saving
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1697
     (via #canRepresent:) or handle the error and use an alternative
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1698
     format then."
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1699
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1700
    ^ CannotRepresentImageSignal
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1701
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1702
    "Created: 27.2.1997 / 12:24:43 / cg"
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1703
!
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1704
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1705
fileCreationErrorSignal
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1706
    "return the signal which is raised if a file could not be
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1707
     created in an image-save operation."
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1708
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1709
    ^ FileCreationErrorSignal
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1710
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1711
    "Created: 27.2.1997 / 12:32:59 / cg"
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1712
!
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1713
2380
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  1714
imageErrorSignal
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  1715
    "return the parent of all image signals"
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  1716
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  1717
    ^ ImageErrorSignal
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  1718
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  1719
    "Created: / 30.9.1998 / 21:59:08 / cg"
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  1720
!
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  1721
2678
e12976d7084b raise a query signal when a loadError happens;
Claus Gittinger <cg@exept.de>
parents: 2645
diff changeset
  1722
imageLoadErrorSignal
e12976d7084b raise a query signal when a loadError happens;
Claus Gittinger <cg@exept.de>
parents: 2645
diff changeset
  1723
    "return the parent of all image load error signals"
e12976d7084b raise a query signal when a loadError happens;
Claus Gittinger <cg@exept.de>
parents: 2645
diff changeset
  1724
e12976d7084b raise a query signal when a loadError happens;
Claus Gittinger <cg@exept.de>
parents: 2645
diff changeset
  1725
    ^ ImageLoadErrorSignal
e12976d7084b raise a query signal when a loadError happens;
Claus Gittinger <cg@exept.de>
parents: 2645
diff changeset
  1726
e12976d7084b raise a query signal when a loadError happens;
Claus Gittinger <cg@exept.de>
parents: 2645
diff changeset
  1727
    "Created: / 18.5.1999 / 15:42:05 / cg"
e12976d7084b raise a query signal when a loadError happens;
Claus Gittinger <cg@exept.de>
parents: 2645
diff changeset
  1728
!
e12976d7084b raise a query signal when a loadError happens;
Claus Gittinger <cg@exept.de>
parents: 2645
diff changeset
  1729
1156
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  1730
imageNotFoundQuerySignal
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  1731
    "return the (query-) signal, which is raised if some
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  1732
     bitmap-image could not be loaded from a file.
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  1733
     If unhandled, the image-load returns nil.
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  1734
     Otherwise, it returns whatever the handler proceeds with.
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  1735
     The exception gets the images fileName as parameter"
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  1736
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  1737
    ^ ImageNotFoundQuerySignal
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  1738
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  1739
    "Created: 7.1.1997 / 16:04:49 / cg"
1385
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1740
!
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1741
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1742
imageSaveErrorSignal
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1743
    "return the parent signal of all image-save errors."
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1744
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1745
    ^ ImageSaveErrorSignal
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1746
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1747
    "Created: 27.2.1997 / 12:32:23 / cg"
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1748
!
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1749
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1750
informationLostQuerySignal
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1751
    "return the (query-) signal, which is raised if some
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1752
     bitmap-image is saved in a format which cannot represent
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1753
     the full image (for example: the images mask).
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1754
     If unhandled, the image-save proceeds.
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1755
     Otherwise, the handler may show a warn box or whatever and decide
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1756
     to proceed or abort the saving."
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1757
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1758
    ^ InformationLostQuerySignal
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1759
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1760
    "Created: 27.2.1997 / 12:43:50 / cg"
2182
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  1761
!
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  1762
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  1763
unrepresentableColorSignal
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  1764
    "return the signal, which is raised if some color is not
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  1765
     representable in the image (when storing a pixel)."
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  1766
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  1767
    ^ UnrepresentableColorSignal
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  1768
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  1769
    "Created: 1.2.1997 / 14:40:29 / cg"
1156
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  1770
! !
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  1771
1230
279016623d5a resource release on display shutDown
Claus Gittinger <cg@exept.de>
parents: 1175
diff changeset
  1772
!Image class methodsFor:'cleanup'!
279016623d5a resource release on display shutDown
Claus Gittinger <cg@exept.de>
parents: 1175
diff changeset
  1773
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  1774
releaseResourcesOnDevice:aDevice
1230
279016623d5a resource release on display shutDown
Claus Gittinger <cg@exept.de>
parents: 1175
diff changeset
  1775
    "this is sent when a display connection is closed,
279016623d5a resource release on display shutDown
Claus Gittinger <cg@exept.de>
parents: 1175
diff changeset
  1776
     to release all cached Images from that device"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  1777
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  1778
    Lobby
7565
462e6f62c737 #FEATURE by stefan
Stefan Vogel <sv@exept.de>
parents: 7552
diff changeset
  1779
        unregisterAllForWhichHandle:[:eachImage |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1780
            |ok|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1781
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1782
            ok := eachImage graphicsDevice == aDevice.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1783
            ok ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1784
                eachImage releaseFromDevice
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1785
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1786
            ok
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1787
        ].
6390
f9a4a09ff2a1 class: Image
Stefan Vogel <sv@exept.de>
parents: 6379
diff changeset
  1788
7573
656c59bc93ad #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7565
diff changeset
  1789
    Icon notNil ifTrue:[
656c59bc93ad #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7565
diff changeset
  1790
        Icon releaseCachedIconsFromDevice:aDevice.
656c59bc93ad #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7565
diff changeset
  1791
    ].
656c59bc93ad #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7565
diff changeset
  1792
    MenuPanel notNil ifTrue:[
656c59bc93ad #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7565
diff changeset
  1793
        MenuPanel releaseCachedImagesFromDevice:aDevice.
656c59bc93ad #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7565
diff changeset
  1794
    ].
656c59bc93ad #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7565
diff changeset
  1795
656c59bc93ad #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7565
diff changeset
  1796
6390
f9a4a09ff2a1 class: Image
Stefan Vogel <sv@exept.de>
parents: 6379
diff changeset
  1797
    "
f9a4a09ff2a1 class: Image
Stefan Vogel <sv@exept.de>
parents: 6379
diff changeset
  1798
      self releaseResourcesOnDevice:Screen current
f9a4a09ff2a1 class: Image
Stefan Vogel <sv@exept.de>
parents: 6379
diff changeset
  1799
    "
1230
279016623d5a resource release on display shutDown
Claus Gittinger <cg@exept.de>
parents: 1175
diff changeset
  1800
279016623d5a resource release on display shutDown
Claus Gittinger <cg@exept.de>
parents: 1175
diff changeset
  1801
    "Created: 16.1.1997 / 19:30:44 / cg"
279016623d5a resource release on display shutDown
Claus Gittinger <cg@exept.de>
parents: 1175
diff changeset
  1802
    "Modified: 16.1.1997 / 19:33:49 / cg"
279016623d5a resource release on display shutDown
Claus Gittinger <cg@exept.de>
parents: 1175
diff changeset
  1803
! !
279016623d5a resource release on display shutDown
Claus Gittinger <cg@exept.de>
parents: 1175
diff changeset
  1804
1086
269243c32f69 added displayOpaque, for protocol completeness
Claus Gittinger <cg@exept.de>
parents: 1070
diff changeset
  1805
!Image class methodsFor:'file reading'!
650
14fc51fc3a4e comments
Claus Gittinger <cg@exept.de>
parents: 649
diff changeset
  1806
14fc51fc3a4e comments
Claus Gittinger <cg@exept.de>
parents: 649
diff changeset
  1807
fromFile:aFileName
14fc51fc3a4e comments
Claus Gittinger <cg@exept.de>
parents: 649
diff changeset
  1808
    "read an image from a file - this methods tries to find
14fc51fc3a4e comments
Claus Gittinger <cg@exept.de>
parents: 649
diff changeset
  1809
     out the file format itself (by the extension and by contents)
1143
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  1810
     and lets the appropriate reader read the file.
6375
b31008047817 class: Image
Claus Gittinger <cg@exept.de>
parents: 6370
diff changeset
  1811
     Also, unless the path is absolute,
b31008047817 class: Image
Claus Gittinger <cg@exept.de>
parents: 6370
diff changeset
  1812
     all bitmap directories along the searchPath are checked
1143
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  1813
     for the file; thus, you can place your private images into a
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  1814
     separate directory, thereby overriding system bitmaps easily.
1156
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  1815
     If the file is unreadable or does not contain an appropriate image,
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  1816
     the ImageNotFoundQuerySignal is raised, which may be handled to
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  1817
     proceed with some replacement image. If unhandled, nil is returned."
650
14fc51fc3a4e comments
Claus Gittinger <cg@exept.de>
parents: 649
diff changeset
  1818
6532
f50614a23989 class: Image
Stefan Vogel <sv@exept.de>
parents: 6507
diff changeset
  1819
    |image fn nm inStream suffix readerClass
f50614a23989 class: Image
Stefan Vogel <sv@exept.de>
parents: 6507
diff changeset
  1820
     mustDecompress readersErrorMsg|
650
14fc51fc3a4e comments
Claus Gittinger <cg@exept.de>
parents: 649
diff changeset
  1821
4159
d27c88bc4c79 Fix image reading
Stefan Vogel <sv@exept.de>
parents: 4158
diff changeset
  1822
    "before trying each reader, check if the file is readable"
d27c88bc4c79 Fix image reading
Stefan Vogel <sv@exept.de>
parents: 4158
diff changeset
  1823
6532
f50614a23989 class: Image
Stefan Vogel <sv@exept.de>
parents: 6507
diff changeset
  1824
    fn := aFileName asFilename.
f50614a23989 class: Image
Stefan Vogel <sv@exept.de>
parents: 6507
diff changeset
  1825
    fn isAbsolute ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1826
        inStream := Smalltalk systemFileStreamFor:fn.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1827
        inStream isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1828
            inStream := Smalltalk bitmapFileStreamFor:fn.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1829
            inStream isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1830
                "this signal is a query - if noone seems to care, return nil.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1831
                 However, a handler may provide a replacement image."
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1832
                ^ ImageNotFoundQuerySignal
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1833
                            raiseRequestWith:fn
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1834
                            errorString:('Image: ''' , fn pathName, ''' does not exist or is not readable').
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1835
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1836
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1837
        fn := inStream pathName asFilename.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1838
        inStream close.
4843
36621a8aafd5 care for absolute filename when loading an image
Claus Gittinger <cg@exept.de>
parents: 4793
diff changeset
  1839
    ].
650
14fc51fc3a4e comments
Claus Gittinger <cg@exept.de>
parents: 649
diff changeset
  1840
4158
930761d24ab2 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4156
diff changeset
  1841
    nm := fn name.
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1842
    suffix := fn suffix.
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1843
4159
d27c88bc4c79 Fix image reading
Stefan Vogel <sv@exept.de>
parents: 4158
diff changeset
  1844
    "handle compressed-suffix"
6532
f50614a23989 class: Image
Stefan Vogel <sv@exept.de>
parents: 6507
diff changeset
  1845
    (#('gz') includes:suffix) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1846
        |baseFn|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1847
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1848
        baseFn := fn withoutSuffix.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1849
        nm := baseFn name.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1850
        suffix := baseFn suffix.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1851
        mustDecompress := true.
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1852
    ].
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1853
    suffix isEmpty ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1854
        suffix := nm.
1774
4241f730e0a6 fixed gunzipped image reading;
Claus Gittinger <cg@exept.de>
parents: 1771
diff changeset
  1855
    ].
4241f730e0a6 fixed gunzipped image reading;
Claus Gittinger <cg@exept.de>
parents: 1771
diff changeset
  1856
6507
05fb9b9d9e53 class: Image
Claus Gittinger <cg@exept.de>
parents: 6496
diff changeset
  1857
    "get the imageReader class from the file's extension and ask it first"
1799
054302440308 moved all mime-knowledge to MIMETypes
Claus Gittinger <cg@exept.de>
parents: 1786
diff changeset
  1858
    readerClass := MIMETypes imageReaderForSuffix:suffix.
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1859
    readerClass notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1860
        mustDecompress == true ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1861
            |zipStream|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1862
            inStream := fn readStream.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1863
            zipStream := ZipStream readOpenOn:inStream suppressHeaderAndChecksum:true.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1864
            zipStream notNil ifTrue:[
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  1865
                image := [
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  1866
                    readerClass fromStream:zipStream.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1867
                ] ensure:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1868
                    zipStream close.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1869
                    inStream close.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1870
                ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1871
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1872
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1873
            BadImageFormatQuerySignal handle:[:ex |
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  1874
                BadImageFormatQuerySignal isHandled ifTrue:[
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  1875
                    ex reject
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  1876
                ].
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  1877
                readersErrorMsg := ex description.
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  1878
                Logger warning:readersErrorMsg.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1879
                image := nil.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1880
                ex return.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1881
            ] do:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1882
                image := readerClass fromFile:fn.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1883
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1884
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1885
        image notNil ifTrue:[^ image].
4159
d27c88bc4c79 Fix image reading
Stefan Vogel <sv@exept.de>
parents: 4158
diff changeset
  1886
    ].
d27c88bc4c79 Fix image reading
Stefan Vogel <sv@exept.de>
parents: 4158
diff changeset
  1887
d27c88bc4c79 Fix image reading
Stefan Vogel <sv@exept.de>
parents: 4158
diff changeset
  1888
    (readerClass isNil or:[readersErrorMsg notNil]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1889
        "no known extension (or wrong extension)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1890
         - ask all readers if they know this format ...
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1891
         ... these look into the file, and investigate the header.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1892
         therefore, it takes a bit longer."
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1893
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1894
        MIMETypes imageReaderClasses do:[:mimeReaderClass |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1895
            (mimeReaderClass notNil
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1896
            and:[mimeReaderClass ~~ readerClass]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1897
               (mimeReaderClass isValidImageFile:fn) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1898
                    image := mimeReaderClass fromFile:fn.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1899
                    image notNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1900
                        ^ image
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1901
                    ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1902
                ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1903
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1904
        ].
4159
d27c88bc4c79 Fix image reading
Stefan Vogel <sv@exept.de>
parents: 4158
diff changeset
  1905
    ].
d27c88bc4c79 Fix image reading
Stefan Vogel <sv@exept.de>
parents: 4158
diff changeset
  1906
7175
4bd37cf4075e #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7173
diff changeset
  1907
    (fn exists and:[fn isReadable]) ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1908
        ^ ImageNotFoundQuerySignal
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1909
                    raiseRequestWith:fn
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1910
                    errorString:('Image: ''' , fn pathName, ''' does not exist or is not readable').
7373
61933c223183 added metaData instVar (for free use by image reader)
Claus Gittinger <cg@exept.de>
parents: 7363
diff changeset
  1911
    ].
61933c223183 added metaData instVar (for free use by image reader)
Claus Gittinger <cg@exept.de>
parents: 7363
diff changeset
  1912
4159
d27c88bc4c79 Fix image reading
Stefan Vogel <sv@exept.de>
parents: 4158
diff changeset
  1913
    "nope - unknown format
d27c88bc4c79 Fix image reading
Stefan Vogel <sv@exept.de>
parents: 4158
diff changeset
  1914
     this signal is a query - if noone seems to care, return nil.
d27c88bc4c79 Fix image reading
Stefan Vogel <sv@exept.de>
parents: 4158
diff changeset
  1915
     However, a handler may provide a replacement image."
d27c88bc4c79 Fix image reading
Stefan Vogel <sv@exept.de>
parents: 4158
diff changeset
  1916
3656
11670e0e6fcb invalid format notification fixed
Claus Gittinger <cg@exept.de>
parents: 3623
diff changeset
  1917
    ^ BadImageFormatQuerySignal
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1918
        raiseRequestWith:fn
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1919
        errorString:(readersErrorMsg ? ('Image: unknown image file format: ''' , fn pathName , '''')).
4159
d27c88bc4c79 Fix image reading
Stefan Vogel <sv@exept.de>
parents: 4158
diff changeset
  1920
d27c88bc4c79 Fix image reading
Stefan Vogel <sv@exept.de>
parents: 4158
diff changeset
  1921
    "
6532
f50614a23989 class: Image
Stefan Vogel <sv@exept.de>
parents: 6507
diff changeset
  1922
     Image fromFile:'bitmaps/gifImages/claus.gif' inPackage:'stx:goodies'
f50614a23989 class: Image
Stefan Vogel <sv@exept.de>
parents: 6507
diff changeset
  1923
     Image fromFile:'bitmaps/gifImages/garfield.gif' inPackage:'stx:goodies'
f50614a23989 class: Image
Stefan Vogel <sv@exept.de>
parents: 6507
diff changeset
  1924
f50614a23989 class: Image
Stefan Vogel <sv@exept.de>
parents: 6507
diff changeset
  1925
     Image fromFile:'bitmaps/winBitmaps/a11.ico' inPackage:'stx:goodies'
f50614a23989 class: Image
Stefan Vogel <sv@exept.de>
parents: 6507
diff changeset
  1926
     Image fromFile:'bitmaps/xpmBitmaps/countries/czech.xpm' inPackage:'stx:goodies'
f50614a23989 class: Image
Stefan Vogel <sv@exept.de>
parents: 6507
diff changeset
  1927
     Image fromFile:'bitmaps/xpmBitmaps/countries/czech.xpm.gz' inPackage:'stx:goodies'
f50614a23989 class: Image
Stefan Vogel <sv@exept.de>
parents: 6507
diff changeset
  1928
     Image fromFile:'Demos/bitmaps/hello_world.icon' inPackage:'stx:clients'
650
14fc51fc3a4e comments
Claus Gittinger <cg@exept.de>
parents: 649
diff changeset
  1929
    "
14fc51fc3a4e comments
Claus Gittinger <cg@exept.de>
parents: 649
diff changeset
  1930
1156
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  1931
    "
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  1932
     Image fromFile:'fooBar'
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  1933
    "
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  1934
1774
4241f730e0a6 fixed gunzipped image reading;
Claus Gittinger <cg@exept.de>
parents: 1771
diff changeset
  1935
    "giving a message for non-existing images:
1156
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  1936
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  1937
     Image imageNotFoundQuerySignal
1156
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  1938
     handle:[:ex |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1939
        Transcript showCR:ex description.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1940
        ex proceedWith:nil
1156
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  1941
     ] do:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1942
         Image fromFile:'fooBar'
1156
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  1943
     ]
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  1944
    "
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  1945
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  1946
    "giving a replacement for non-existing images:
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  1947
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  1948
     Image imageNotFoundQuerySignal
4160
6d31e4e6a432 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4159
diff changeset
  1949
     answer:(Image fromFile:'libtool/bitmaps/SmalltalkX.xbm')
1156
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  1950
     do:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1951
         Image fromFile:'fooBar'
1156
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  1952
     ]
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  1953
    "
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  1954
4843
36621a8aafd5 care for absolute filename when loading an image
Claus Gittinger <cg@exept.de>
parents: 4793
diff changeset
  1955
    "Modified: / 19-11-2007 / 15:50:52 / cg"
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  1956
    "Modified: / 31-01-2017 / 15:56:14 / stefan"
1051
5605bf1b10b9 allow reading from Streams
Claus Gittinger <cg@exept.de>
parents: 1043
diff changeset
  1957
!
5605bf1b10b9 allow reading from Streams
Claus Gittinger <cg@exept.de>
parents: 1043
diff changeset
  1958
3426
ebd06c83448e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3389
diff changeset
  1959
fromFile:aFileName inPackage:aPackage
ebd06c83448e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3389
diff changeset
  1960
    "read an image for a package from a file.
ebd06c83448e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3389
diff changeset
  1961
     The filename is assumed to be package-relative (i.e. bitmaps/filename).
ebd06c83448e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3389
diff changeset
  1962
     This methods tries to find out the file format itself (by the extension and by contents)
ebd06c83448e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3389
diff changeset
  1963
     and lets the appropriate reader read the file.
ebd06c83448e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3389
diff changeset
  1964
     Also, all bitmap directories along the searchPath are checked
ebd06c83448e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3389
diff changeset
  1965
     for the file; thus, you can place your private images into a
ebd06c83448e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3389
diff changeset
  1966
     separate directory, thereby overriding system bitmaps easily.
ebd06c83448e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3389
diff changeset
  1967
     If the file is unreadable or does not contain an appropriate image,
ebd06c83448e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3389
diff changeset
  1968
     the ImageNotFoundQuerySignal is raised, which may be handled to
ebd06c83448e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3389
diff changeset
  1969
     proceed with some replacement image. If unhandled, nil is returned."
ebd06c83448e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3389
diff changeset
  1970
ebd06c83448e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3389
diff changeset
  1971
    ^ Smalltalk imageFromFileNamed:aFileName inPackage:aPackage
ebd06c83448e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3389
diff changeset
  1972
ebd06c83448e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3389
diff changeset
  1973
    "
4168
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
  1974
     Image fromFile:'libtool/bitmaps/SBrowser.xbm'
3426
ebd06c83448e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3389
diff changeset
  1975
     Image fromFile:'bitmaps/SBrowser.xbm' inPackage:'stx:libtool'
ebd06c83448e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3389
diff changeset
  1976
     Image fromFile:'garfield.gif' inPackage:'stx:goodies/bitmaps/gifImages'
ebd06c83448e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3389
diff changeset
  1977
    "
ebd06c83448e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3389
diff changeset
  1978
!
ebd06c83448e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3389
diff changeset
  1979
1143
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  1980
fromFile:aFileName on:aDevice
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  1981
    "read an image from a file and prepare a device representation.
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  1982
     Return nil (or whatever a handler returned),
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1983
     if the file is unreadable or does not contain an appropriate image."
1143
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  1984
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  1985
    |img|
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  1986
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  1987
    img := self fromFile:aFileName.
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  1988
    img notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1989
        ^ img onDevice:aDevice
1143
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  1990
    ].
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  1991
    ^ nil
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1992
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1993
    "Modified: 1.2.1997 / 14:48:07 / cg"
1143
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  1994
!
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  1995
1139
416e6abb408f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
  1996
fromFile:aFileName resolution:res
416e6abb408f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
  1997
    "read an image from a file and (if required) scale the image
3059
0895d23678ac assume 90dpi in #fromFile:resolution: if there is no current display
Claus Gittinger <cg@exept.de>
parents: 3038
diff changeset
  1998
     as appropriate (only req'd for very high resolution displays).
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  1999
     Return nil (or whatever a handler returned),
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2000
     if the file is unreadable or does not contain an appropriate image."
1143
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2001
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2002
    ^ self fromFile:aFileName resolution:res on:nil
1139
416e6abb408f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
  2003
416e6abb408f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
  2004
    "Created: 19.12.1996 / 14:02:13 / cg"
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2005
    "Modified: 1.2.1997 / 14:48:16 / cg"
1139
416e6abb408f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
  2006
!
416e6abb408f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
  2007
1143
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2008
fromFile:aFileName resolution:dpi on:aDevice
1139
416e6abb408f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
  2009
    "read an image from a file and (if required) scale the image
3059
0895d23678ac assume 90dpi in #fromFile:resolution: if there is no current display
Claus Gittinger <cg@exept.de>
parents: 3038
diff changeset
  2010
     as appropriate (only req'd with very high resolution displays).
1143
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2011
     Prepare a device representation.
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2012
     Return nil (or whatever a handler returned),
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2013
     if the file is unreadable or does not contain an appropriate image."
1143
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2014
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2015
    |img dev dpiH mag|
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2016
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2017
    img := self fromFile:aFileName.
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2018
    img isNil ifTrue:[^ nil].
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2019
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2020
    "if the devices resolution is within +- 50% of dpi, no magnify is needed"
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2021
    dev := aDevice.
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2022
    dev isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2023
        "should not happen ..."
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2024
        dev := Screen current
1143
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2025
    ].
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2026
3059
0895d23678ac assume 90dpi in #fromFile:resolution: if there is no current display
Claus Gittinger <cg@exept.de>
parents: 3038
diff changeset
  2027
    dev notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2028
        dpiH := dev horizontalPixelPerInch.
3059
0895d23678ac assume 90dpi in #fromFile:resolution: if there is no current display
Claus Gittinger <cg@exept.de>
parents: 3038
diff changeset
  2029
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2030
        dpiH := 90
3059
0895d23678ac assume 90dpi in #fromFile:resolution: if there is no current display
Claus Gittinger <cg@exept.de>
parents: 3038
diff changeset
  2031
    ].
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  2032
    (dpi between:(dpiH * 0.75) and:(dpiH * 1.5)) ifTrue:[
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  2033
        ^ img
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  2034
    ].
1143
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2035
    mag := (dpiH / dpi) rounded.
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2036
    mag = 0 ifTrue:[^ img].
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2037
    mag = 1 ifTrue:[^ img].
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2038
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2039
    img := img magnifiedBy:(mag @ mag).
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2040
    aDevice notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2041
        ^ img onDevice:aDevice
1143
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2042
    ].
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2043
    ^ img
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2044
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  2045
    "Modified: / 01-02-1997 / 14:48:20 / cg"
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  2046
    "Modified (format): / 31-01-2017 / 15:06:23 / stefan"
1139
416e6abb408f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
  2047
!
416e6abb408f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
  2048
1051
5605bf1b10b9 allow reading from Streams
Claus Gittinger <cg@exept.de>
parents: 1043
diff changeset
  2049
fromStream:aStream
5605bf1b10b9 allow reading from Streams
Claus Gittinger <cg@exept.de>
parents: 1043
diff changeset
  2050
    "read an image from a stream - this methods tries to find
5605bf1b10b9 allow reading from Streams
Claus Gittinger <cg@exept.de>
parents: 1043
diff changeset
  2051
     out the file format itself (by contents)
5605bf1b10b9 allow reading from Streams
Claus Gittinger <cg@exept.de>
parents: 1043
diff changeset
  2052
     and lets the appropriate reader read the file.
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2053
     To do this, the stream must be positionable.
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2054
     Return nil (or whatever a handler returned),
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2055
     if the stream does not contain an appropriate image."
1051
5605bf1b10b9 allow reading from Streams
Claus Gittinger <cg@exept.de>
parents: 1043
diff changeset
  2056
1063
ba1bf8091bc1 unused variable cleanup
Claus Gittinger <cg@exept.de>
parents: 1057
diff changeset
  2057
    |image|
1051
5605bf1b10b9 allow reading from Streams
Claus Gittinger <cg@exept.de>
parents: 1043
diff changeset
  2058
5605bf1b10b9 allow reading from Streams
Claus Gittinger <cg@exept.de>
parents: 1043
diff changeset
  2059
    "
5605bf1b10b9 allow reading from Streams
Claus Gittinger <cg@exept.de>
parents: 1043
diff changeset
  2060
     ask all readers if they know
5605bf1b10b9 allow reading from Streams
Claus Gittinger <cg@exept.de>
parents: 1043
diff changeset
  2061
     this format ...
5605bf1b10b9 allow reading from Streams
Claus Gittinger <cg@exept.de>
parents: 1043
diff changeset
  2062
    "
1799
054302440308 moved all mime-knowledge to MIMETypes
Claus Gittinger <cg@exept.de>
parents: 1786
diff changeset
  2063
    MIMETypes imageReaderClasses do:[:readerClass |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2064
        readerClass notNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2065
            image := readerClass fromStream:aStream.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2066
            image notNil ifTrue:[^ image].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2067
        ]
1051
5605bf1b10b9 allow reading from Streams
Claus Gittinger <cg@exept.de>
parents: 1043
diff changeset
  2068
    ].
5605bf1b10b9 allow reading from Streams
Claus Gittinger <cg@exept.de>
parents: 1043
diff changeset
  2069
5605bf1b10b9 allow reading from Streams
Claus Gittinger <cg@exept.de>
parents: 1043
diff changeset
  2070
    "
5605bf1b10b9 allow reading from Streams
Claus Gittinger <cg@exept.de>
parents: 1043
diff changeset
  2071
     nope - unknown format
5605bf1b10b9 allow reading from Streams
Claus Gittinger <cg@exept.de>
parents: 1043
diff changeset
  2072
    "
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2073
"/    'Image [info]: unknown image file format in stream: ' infoPrintCR.
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2074
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2075
    ^ ImageNotFoundQuerySignal
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2076
                raiseRequestWith:aStream
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2077
                errorString:('Image [warning]: unknown image file format in stream').
4168
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
  2078
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
  2079
    "
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
  2080
     Image fromFile:'goodies/bitmaps/gifImages/claus.gif'
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
  2081
     Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
  2082
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
  2083
     Image fromFile:'clients/Animation/bitmaps/globe1.xbm'
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
  2084
     Image fromFile:'clients/Animation/bitmaps/globe1.xbm.Z'
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
  2085
     Image fromFile:'clients/Demos/bitmaps/hello_world.icon'
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
  2086
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
  2087
     Image fromFile:'librun/stx.ico'
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
  2088
     Image fromFile:'libwidg3/bitmaps/wall.tiff'
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
  2089
3476
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
  2090
     Image fromFile:'goodies/bitmaps/test.fax'
4168
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
  2091
     Image fromFile:'fileIn/bitmaps/founders.im8'
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
  2092
     Image fromFile:'goodies/faces/next.com/steve.face'
1051
5605bf1b10b9 allow reading from Streams
Claus Gittinger <cg@exept.de>
parents: 1043
diff changeset
  2093
    "
5605bf1b10b9 allow reading from Streams
Claus Gittinger <cg@exept.de>
parents: 1043
diff changeset
  2094
5605bf1b10b9 allow reading from Streams
Claus Gittinger <cg@exept.de>
parents: 1043
diff changeset
  2095
    "Created: 13.9.1996 / 18:06:00 / cg"
1799
054302440308 moved all mime-knowledge to MIMETypes
Claus Gittinger <cg@exept.de>
parents: 1786
diff changeset
  2096
    "Modified: 30.6.1997 / 22:03:59 / cg"
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2097
!
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2098
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2099
fromStream:aStream using:aReaderClass
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2100
    "read an image from a stream, given an imageReaderClass.
6507
05fb9b9d9e53 class: Image
Claus Gittinger <cg@exept.de>
parents: 6496
diff changeset
  2101
     Use this, if you know the file's format, but it has an invalid
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2102
     extension (or non-definite header), so #fromStream: could not
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2103
     find out the images format.
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2104
     Return nil (or whatever a handler returned),
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2105
     if the stream does not contain an appropriate image."
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2106
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2107
    |image|
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2108
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2109
    image := aReaderClass fromStream:aStream.
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2110
    image notNil ifTrue:[^ image].
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2111
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2112
    "
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2113
     nope - unknown format
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2114
    "
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2115
"/    'Image [info]: unknown image file format in stream: ' infoPrintCR.
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2116
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2117
    ^ ImageNotFoundQuerySignal
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2118
                raiseRequestWith:aStream
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2119
                errorString:('Image: unknown image file format in stream').
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2120
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2121
    "Created: 1.2.1997 / 14:46:20 / cg"
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2122
    "Modified: 1.2.1997 / 14:48:53 / cg"
650
14fc51fc3a4e comments
Claus Gittinger <cg@exept.de>
parents: 649
diff changeset
  2123
! !
14fc51fc3a4e comments
Claus Gittinger <cg@exept.de>
parents: 649
diff changeset
  2124
1086
269243c32f69 added displayOpaque, for protocol completeness
Claus Gittinger <cg@exept.de>
parents: 1070
diff changeset
  2125
!Image class methodsFor:'misc'!
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2126
7898
05e286976596 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7895
diff changeset
  2127
bytesPerRowForWidth:width bitsPerPixel:bitsPerPixel
7899
c32cbefff86a #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7898
diff changeset
  2128
    "return the number of bytes in one scanline of an image.
c32cbefff86a #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7898
diff changeset
  2129
     (if there is no padding (except byte padding)"
7898
05e286976596 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7895
diff changeset
  2130
05e286976596 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7895
diff changeset
  2131
    |bitsPerRow bytesPerRow|
05e286976596 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7895
diff changeset
  2132
05e286976596 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7895
diff changeset
  2133
    bitsPerRow := width * bitsPerPixel.
05e286976596 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7895
diff changeset
  2134
    bytesPerRow := bitsPerRow // 8.
05e286976596 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7895
diff changeset
  2135
    ((bitsPerRow \\ 8) ~~ 0) ifTrue:[
05e286976596 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7895
diff changeset
  2136
        bytesPerRow := bytesPerRow + 1
05e286976596 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7895
diff changeset
  2137
    ].
05e286976596 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7895
diff changeset
  2138
    ^ bytesPerRow
05e286976596 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7895
diff changeset
  2139
05e286976596 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7895
diff changeset
  2140
    "Created: / 16-02-2017 / 16:17:42 / cg"
7899
c32cbefff86a #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7898
diff changeset
  2141
    "Modified (comment): / 16-02-2017 / 17:31:20 / cg"
7898
05e286976596 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7895
diff changeset
  2142
!
05e286976596 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7895
diff changeset
  2143
879
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  2144
ditherAlgorithm
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2145
    "return the way we dither -
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2146
        #threshold, or nil        -> no dither
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2147
        #pattern, or #ordered     -> orderedDither (ugly, but fast)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2148
        #error or #floydSteinberg -> errorDiffusion; much better
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2149
        #burkes                   -> errorDiffusion; even better."
879
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  2150
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  2151
    ^ DitherAlgorithm
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  2152
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  2153
    "Created: 17.6.1996 / 18:57:47 / cg"
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  2154
!
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  2155
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  2156
ditherAlgorithm:aSymbol
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2157
    "define how to dither -
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2158
        #threshold, or nil        -> no dither
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2159
        #pattern, or #ordered     -> orderedDither (ugly, but fast)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2160
        #error or #floydSteinberg -> errorDiffusion; much better
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2161
        #burkes                   -> errorDiffusion; even better."
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2162
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2163
    DitherAlgorithm := aSymbol
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2164
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  2165
    "
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  2166
     Image dither:#pattern
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  2167
     Image dither:#floydSteinberg
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  2168
     Image dither:#burkes
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  2169
     Image dither:nil
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  2170
    "
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  2171
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  2172
    "Modified: 10.6.1996 / 12:27:09 / cg"
879
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  2173
    "Created: 17.6.1996 / 18:57:19 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2174
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2175
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2176
numberOfDitherColors:n
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2177
    "define how many colors (i.e. patterns) to use when
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2178
     doing a pattern dither"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2179
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2180
    NumberOfDitherColors := n
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2181
!
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2182
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2183
orderedDitherMatrixOfSize:sz
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2184
    sz == 2 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2185
        ^ #[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2186
                0 2
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2187
                3 1
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2188
           ].
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2189
    ].
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2190
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2191
    sz == 4 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2192
        ^ #[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2193
                 0  8  2 10
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2194
                12  4 14  6
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2195
                 3 11  1  9
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2196
                15  7 13  5
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2197
           ].
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2198
    ].
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2199
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2200
    sz == 8 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2201
        ^  #[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2202
                0 32  8 40    2 34 10 42
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2203
               48 16 56 24   50 18 58 26
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2204
               12 44  4 36   14 46  6 38
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2205
               60 28 52 20   62 30 54 22
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2206
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2207
                3 35 11 43    1 33  9 41
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2208
               51 19 59 27   49 17 57 25
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2209
               15 47  7 39   13 45  5 37
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2210
               63 31 55 23   61 29 53 21
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2211
            ].
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2212
    ].
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2213
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2214
    ^ nil
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2215
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2216
    "Created: 7.6.1996 / 14:15:05 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2217
! !
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2218
1086
269243c32f69 added displayOpaque, for protocol completeness
Claus Gittinger <cg@exept.de>
parents: 1070
diff changeset
  2219
!Image class methodsFor:'queries'!
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2220
2005
525f712084b3 oops - padding stuff was wrong (16-bit display)
tz
parents: 2001
diff changeset
  2221
bytesPerRowForWidth:width depth:bitsPerPixel padding:padding
525f712084b3 oops - padding stuff was wrong (16-bit display)
tz
parents: 2001
diff changeset
  2222
    "helper - return the number of bytes in one scanline of an image,
525f712084b3 oops - padding stuff was wrong (16-bit display)
tz
parents: 2001
diff changeset
  2223
     if scanlines are to be padded to padding-bits and the depth of the image is d."
525f712084b3 oops - padding stuff was wrong (16-bit display)
tz
parents: 2001
diff changeset
  2224
525f712084b3 oops - padding stuff was wrong (16-bit display)
tz
parents: 2001
diff changeset
  2225
    |bitsPerRow paddedUnitsPerRow|
525f712084b3 oops - padding stuff was wrong (16-bit display)
tz
parents: 2001
diff changeset
  2226
525f712084b3 oops - padding stuff was wrong (16-bit display)
tz
parents: 2001
diff changeset
  2227
    bitsPerRow := width * bitsPerPixel.
525f712084b3 oops - padding stuff was wrong (16-bit display)
tz
parents: 2001
diff changeset
  2228
    paddedUnitsPerRow := bitsPerRow // padding.
525f712084b3 oops - padding stuff was wrong (16-bit display)
tz
parents: 2001
diff changeset
  2229
    ((bitsPerRow \\ padding) ~~ 0) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2230
        paddedUnitsPerRow := paddedUnitsPerRow + 1
2005
525f712084b3 oops - padding stuff was wrong (16-bit display)
tz
parents: 2001
diff changeset
  2231
    ].
525f712084b3 oops - padding stuff was wrong (16-bit display)
tz
parents: 2001
diff changeset
  2232
    ^ paddedUnitsPerRow * (padding // 8)
525f712084b3 oops - padding stuff was wrong (16-bit display)
tz
parents: 2001
diff changeset
  2233
5126
d3f2baf80581 color conversions fixed (16bit images)
Claus Gittinger <cg@exept.de>
parents: 5074
diff changeset
  2234
    "
d3f2baf80581 color conversions fixed (16bit images)
Claus Gittinger <cg@exept.de>
parents: 5074
diff changeset
  2235
     self bytesPerRowForWidth:7 depth:1 padding:8
d3f2baf80581 color conversions fixed (16bit images)
Claus Gittinger <cg@exept.de>
parents: 5074
diff changeset
  2236
     self bytesPerRowForWidth:7 depth:1 padding:16
d3f2baf80581 color conversions fixed (16bit images)
Claus Gittinger <cg@exept.de>
parents: 5074
diff changeset
  2237
     self bytesPerRowForWidth:7 depth:1 padding:32
d3f2baf80581 color conversions fixed (16bit images)
Claus Gittinger <cg@exept.de>
parents: 5074
diff changeset
  2238
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 6037
diff changeset
  2239
     self bytesPerRowForWidth:15 depth:1 padding:8
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 6037
diff changeset
  2240
     self bytesPerRowForWidth:15 depth:1 padding:16
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 6037
diff changeset
  2241
     self bytesPerRowForWidth:15 depth:1 padding:32
5126
d3f2baf80581 color conversions fixed (16bit images)
Claus Gittinger <cg@exept.de>
parents: 5074
diff changeset
  2242
    "
2005
525f712084b3 oops - padding stuff was wrong (16-bit display)
tz
parents: 2001
diff changeset
  2243
!
525f712084b3 oops - padding stuff was wrong (16-bit display)
tz
parents: 2001
diff changeset
  2244
6797
161685b0d113 class: Image
Claus Gittinger <cg@exept.de>
parents: 6755
diff changeset
  2245
defaultImageFileWriter
161685b0d113 class: Image
Claus Gittinger <cg@exept.de>
parents: 6755
diff changeset
  2246
    "only used, if a file is saved with no particular extension
161685b0d113 class: Image
Claus Gittinger <cg@exept.de>
parents: 6755
diff changeset
  2247
     or explicit writer given.
161685b0d113 class: Image
Claus Gittinger <cg@exept.de>
parents: 6755
diff changeset
  2248
     For now, default to tiff format.
161685b0d113 class: Image
Claus Gittinger <cg@exept.de>
parents: 6755
diff changeset
  2249
     Will change to png, as soon as all mask formats are fully supported by it"
161685b0d113 class: Image
Claus Gittinger <cg@exept.de>
parents: 6755
diff changeset
  2250
161685b0d113 class: Image
Claus Gittinger <cg@exept.de>
parents: 6755
diff changeset
  2251
    ^ TIFFReader
161685b0d113 class: Image
Claus Gittinger <cg@exept.de>
parents: 6755
diff changeset
  2252
!
161685b0d113 class: Image
Claus Gittinger <cg@exept.de>
parents: 6755
diff changeset
  2253
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  2254
defaultPhotometric
6311
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
  2255
    "return the default photometric pixel interpretation.
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
  2256
     This may be a somewhat old leftover from times, when tiff was the first image file type to be read.
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
  2257
     Much better would be to always have some (possibly fake and virtual) colormap around, and ask that one.
7373
61933c223183 added metaData instVar (for free use by image reader)
Claus Gittinger <cg@exept.de>
parents: 7363
diff changeset
  2258
     However, in the meantime, many other classes depend on that, so that it should be kept as an API
6311
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
  2259
     - even when the internal representation will be replaced by something better in the future."
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  2260
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  2261
    ^ #blackIs0
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  2262
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  2263
    "Modified: 20.4.1996 / 23:40:41 / cg"
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  2264
    "Created: 10.6.1996 / 18:08:12 / cg"
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  2265
!
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  2266
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2267
imageDepth
579
e381761190c4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 518
diff changeset
  2268
    "return the depth of images represented by instances of
e381761190c4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 518
diff changeset
  2269
     this class.
e381761190c4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 518
diff changeset
  2270
     Must be redefined in concrete subclasses"
e381761190c4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 518
diff changeset
  2271
2913
c51ac85e9aa2 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2891
diff changeset
  2272
    ^ self subclassResponsibility
579
e381761190c4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 518
diff changeset
  2273
e381761190c4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 518
diff changeset
  2274
    "Modified: 20.4.1996 / 23:40:41 / cg"
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  2275
!
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  2276
1306
d56585b0e8c0 checkin from browser
ca
parents: 1289
diff changeset
  2277
imageFileSuffixes
d56585b0e8c0 checkin from browser
ca
parents: 1289
diff changeset
  2278
    "return a collection of suffixes which are recognized as image-file suffix"
d56585b0e8c0 checkin from browser
ca
parents: 1289
diff changeset
  2279
1799
054302440308 moved all mime-knowledge to MIMETypes
Claus Gittinger <cg@exept.de>
parents: 1786
diff changeset
  2280
    ^ MIMETypes imageFileSuffixes
1306
d56585b0e8c0 checkin from browser
ca
parents: 1289
diff changeset
  2281
d56585b0e8c0 checkin from browser
ca
parents: 1289
diff changeset
  2282
    "
d56585b0e8c0 checkin from browser
ca
parents: 1289
diff changeset
  2283
     Image imageFileSuffixes
d56585b0e8c0 checkin from browser
ca
parents: 1289
diff changeset
  2284
    "
1799
054302440308 moved all mime-knowledge to MIMETypes
Claus Gittinger <cg@exept.de>
parents: 1786
diff changeset
  2285
054302440308 moved all mime-knowledge to MIMETypes
Claus Gittinger <cg@exept.de>
parents: 1786
diff changeset
  2286
    "Modified: 30.6.1997 / 22:04:39 / cg"
1306
d56585b0e8c0 checkin from browser
ca
parents: 1289
diff changeset
  2287
!
d56585b0e8c0 checkin from browser
ca
parents: 1289
diff changeset
  2288
1783
7a487f0d4000 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1782
diff changeset
  2289
imageReaderClassForMIME:mimeType
7a487f0d4000 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1782
diff changeset
  2290
    "return an appropriate imageReader class for a given mime type;
7a487f0d4000 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1782
diff changeset
  2291
     nil if there is none (or it did not install itself)"
7a487f0d4000 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1782
diff changeset
  2292
1801
3dff7fb2bd59 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1800
diff changeset
  2293
    ^ MIMETypes imageReaderForType:mimeType
1783
7a487f0d4000 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1782
diff changeset
  2294
7a487f0d4000 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1782
diff changeset
  2295
    "
7a487f0d4000 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1782
diff changeset
  2296
     Image imageReaderClassForMIME:'image/tiff'
7a487f0d4000 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1782
diff changeset
  2297
     Image imageReaderClassForMIME:'image/x-portable-pixmap'
7a487f0d4000 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1782
diff changeset
  2298
    "
7a487f0d4000 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1782
diff changeset
  2299
7a487f0d4000 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1782
diff changeset
  2300
    "Created: 24.6.1997 / 22:32:27 / cg"
1799
054302440308 moved all mime-knowledge to MIMETypes
Claus Gittinger <cg@exept.de>
parents: 1786
diff changeset
  2301
    "Modified: 30.6.1997 / 21:54:10 / cg"
1783
7a487f0d4000 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1782
diff changeset
  2302
!
7a487f0d4000 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1782
diff changeset
  2303
1572
029910ee5c9e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1570
diff changeset
  2304
imageReaderClassForSuffix:aSuffix
1783
7a487f0d4000 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1782
diff changeset
  2305
    "return an appropriate imageReader class for a given file-suffix;
7a487f0d4000 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1782
diff changeset
  2306
     nil if there is none (or it did not install itself)"
1572
029910ee5c9e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1570
diff changeset
  2307
1799
054302440308 moved all mime-knowledge to MIMETypes
Claus Gittinger <cg@exept.de>
parents: 1786
diff changeset
  2308
    ^ MIMETypes imageReaderForSuffix:aSuffix
1572
029910ee5c9e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1570
diff changeset
  2309
029910ee5c9e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1570
diff changeset
  2310
    "
029910ee5c9e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1570
diff changeset
  2311
     Image imageReaderClassForSuffix:'tiff'
1783
7a487f0d4000 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1782
diff changeset
  2312
     Image imageReaderClassForSuffix:'foo'
7a487f0d4000 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1782
diff changeset
  2313
    "
7a487f0d4000 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1782
diff changeset
  2314
1799
054302440308 moved all mime-knowledge to MIMETypes
Claus Gittinger <cg@exept.de>
parents: 1786
diff changeset
  2315
    "Modified: 30.6.1997 / 22:05:14 / cg"
1572
029910ee5c9e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1570
diff changeset
  2316
!
029910ee5c9e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1570
diff changeset
  2317
399
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
  2318
implementorForDepth:depth
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2319
    "return the class, which best implements images of depth"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2320
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2321
    depth == 1 ifTrue:[^ Depth1Image].
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2322
    depth == 2 ifTrue:[^ Depth2Image].
1623
56c2fd4250c8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1611
diff changeset
  2323
    depth <= 4 ifTrue:[^ Depth4Image].
56c2fd4250c8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1611
diff changeset
  2324
    depth <= 8 ifTrue:[^ Depth8Image].
56c2fd4250c8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1611
diff changeset
  2325
    depth <= 16 ifTrue:[^ Depth16Image].
56c2fd4250c8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1611
diff changeset
  2326
    depth <= 24 ifTrue:[^ Depth24Image].
1664
42b1af0353c2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1662
diff changeset
  2327
    depth <= 32 ifTrue:[^ Depth32Image].
5299
6b1d1dcf5c85 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5237
diff changeset
  2328
    depth <= 48 ifTrue:[^ Depth48Image].
5313
7c40ea0163ee *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5299
diff changeset
  2329
    depth <= 64 ifTrue:[^ Depth64Image].
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2330
    ^ self
1664
42b1af0353c2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1662
diff changeset
  2331
42b1af0353c2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1662
diff changeset
  2332
    "Modified: 24.4.1997 / 19:04:52 / cg"
1611
8ec019a529b4 added convenient #isImageFileSuffix:
Claus Gittinger <cg@exept.de>
parents: 1608
diff changeset
  2333
!
8ec019a529b4 added convenient #isImageFileSuffix:
Claus Gittinger <cg@exept.de>
parents: 1608
diff changeset
  2334
7795
490b3691a124 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7755
diff changeset
  2335
isAbstract
490b3691a124 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7755
diff changeset
  2336
    ^ self == Image
490b3691a124 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7755
diff changeset
  2337
!
490b3691a124 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7755
diff changeset
  2338
1611
8ec019a529b4 added convenient #isImageFileSuffix:
Claus Gittinger <cg@exept.de>
parents: 1608
diff changeset
  2339
isImageFileSuffix:aSuffix
8ec019a529b4 added convenient #isImageFileSuffix:
Claus Gittinger <cg@exept.de>
parents: 1608
diff changeset
  2340
    "return true, if the given suffix is known to be an image files suffix"
8ec019a529b4 added convenient #isImageFileSuffix:
Claus Gittinger <cg@exept.de>
parents: 1608
diff changeset
  2341
8ec019a529b4 added convenient #isImageFileSuffix:
Claus Gittinger <cg@exept.de>
parents: 1608
diff changeset
  2342
     ^ self imageFileSuffixes includes:(aSuffix asLowercase)
8ec019a529b4 added convenient #isImageFileSuffix:
Claus Gittinger <cg@exept.de>
parents: 1608
diff changeset
  2343
8ec019a529b4 added convenient #isImageFileSuffix:
Claus Gittinger <cg@exept.de>
parents: 1608
diff changeset
  2344
    "
8ec019a529b4 added convenient #isImageFileSuffix:
Claus Gittinger <cg@exept.de>
parents: 1608
diff changeset
  2345
     Image isImageFileSuffix:'gif'
8ec019a529b4 added convenient #isImageFileSuffix:
Claus Gittinger <cg@exept.de>
parents: 1608
diff changeset
  2346
     Image isImageFileSuffix:'xbm'
8ec019a529b4 added convenient #isImageFileSuffix:
Claus Gittinger <cg@exept.de>
parents: 1608
diff changeset
  2347
     Image isImageFileSuffix:'foo'
8ec019a529b4 added convenient #isImageFileSuffix:
Claus Gittinger <cg@exept.de>
parents: 1608
diff changeset
  2348
    "
8ec019a529b4 added convenient #isImageFileSuffix:
Claus Gittinger <cg@exept.de>
parents: 1608
diff changeset
  2349
8ec019a529b4 added convenient #isImageFileSuffix:
Claus Gittinger <cg@exept.de>
parents: 1608
diff changeset
  2350
    "Created: 18.4.1997 / 14:55:28 / cg"
1786
302b8208bf6c more mime stuff
Claus Gittinger <cg@exept.de>
parents: 1785
diff changeset
  2351
!
302b8208bf6c more mime stuff
Claus Gittinger <cg@exept.de>
parents: 1785
diff changeset
  2352
302b8208bf6c more mime stuff
Claus Gittinger <cg@exept.de>
parents: 1785
diff changeset
  2353
mimeTypeFromSuffix:suffix
302b8208bf6c more mime stuff
Claus Gittinger <cg@exept.de>
parents: 1785
diff changeset
  2354
    "search my suffix information for a mime type and
302b8208bf6c more mime stuff
Claus Gittinger <cg@exept.de>
parents: 1785
diff changeset
  2355
     return it; return nil if unknown"
302b8208bf6c more mime stuff
Claus Gittinger <cg@exept.de>
parents: 1785
diff changeset
  2356
1802
9a3d7c669727 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1801
diff changeset
  2357
    ^ MIMETypes mimeTypeForSuffix:suffix
1786
302b8208bf6c more mime stuff
Claus Gittinger <cg@exept.de>
parents: 1785
diff changeset
  2358
302b8208bf6c more mime stuff
Claus Gittinger <cg@exept.de>
parents: 1785
diff changeset
  2359
    "
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2360
     Image mimeTypeFromSuffix:'gif'
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2361
     Image mimeTypeFromSuffix:'tiff'
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2362
     Image mimeTypeFromSuffix:'foobar'
1786
302b8208bf6c more mime stuff
Claus Gittinger <cg@exept.de>
parents: 1785
diff changeset
  2363
    "
302b8208bf6c more mime stuff
Claus Gittinger <cg@exept.de>
parents: 1785
diff changeset
  2364
1802
9a3d7c669727 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1801
diff changeset
  2365
    "Modified: 1.7.1997 / 00:17:27 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2366
! !
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2367
1086
269243c32f69 added displayOpaque, for protocol completeness
Claus Gittinger <cg@exept.de>
parents: 1070
diff changeset
  2368
!Image class methodsFor:'screen capture'!
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2369
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2370
fromScreen
1488
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  2371
    "return an image of the full screen.
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  2372
     WARNING: this temporarily grabs the display
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2373
              it may not work from within a buttonMotion
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2374
              (use #fromScreen:on:grab: with a false grabArg then)."
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2375
7966
52449eb9f442 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7962
diff changeset
  2376
    |display bounds|
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2377
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2378
    display := Screen current.
7966
52449eb9f442 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7962
diff changeset
  2379
    bounds := (0@0 corner:(display width @ display height)).
52449eb9f442 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7962
diff changeset
  2380
    
52449eb9f442 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7962
diff changeset
  2381
    OperatingSystem isOSXlike ifTrue:[
52449eb9f442 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7962
diff changeset
  2382
        "/ sigh: XQuartz does not include the dock
52449eb9f442 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7962
diff changeset
  2383
        display == Display ifTrue:[
7967
fa34f3731d4e #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7966
diff changeset
  2384
            bounds := OperatingSystem getScreenBounds:0
7966
52449eb9f442 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7962
diff changeset
  2385
        ].    
52449eb9f442 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7962
diff changeset
  2386
    ].
52449eb9f442 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7962
diff changeset
  2387
    
52449eb9f442 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7962
diff changeset
  2388
    ^ self fromScreen:bounds on:display grab:true
401
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
  2389
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
  2390
    "
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
  2391
     Image fromScreen
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2392
     Image fromScreen inspect
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2393
    "
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2394
7967
fa34f3731d4e #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7966
diff changeset
  2395
    "Modified: / 06-03-2017 / 14:48:42 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2396
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2397
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2398
fromScreen:aRectangle
1488
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  2399
    "return an image of a part of the screen.
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  2400
     WARNING: this temporarily grabs the display
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2401
              it may not work from within a buttonMotion
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2402
              (use #fromScreen:on:grab: with a false grabArg then)."
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2403
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2404
    ^ self
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2405
        fromScreen:aRectangle
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2406
        on:Screen current
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2407
        grab:true
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2408
401
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
  2409
    "
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
  2410
     Image fromScreen:(0@0 corner:100@100)
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2411
     (Image fromScreen:(0@0 corner:100@100)) inspect
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2412
    "
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2413
1488
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  2414
    "Modified: 26.3.1997 / 10:45:02 / cg"
1487
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2415
!
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2416
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2417
fromScreen:aRectangle on:aDevice
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2418
    "return an image of a part of a screen, which may be on
1488
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  2419
     another display device.
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  2420
     WARNING: this temporarily grabs the display
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2421
              it may not work from within a buttonMotion
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2422
              (use #fromScreen:on:grab: with a false grabArg then)."
1487
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2423
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2424
    ^ self
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2425
        fromScreen:aRectangle
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2426
        on:aDevice
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2427
        grab:true
1487
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2428
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2429
    "
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2430
     Image fromScreen:(0@0 corner:100@100)
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2431
    "
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2432
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2433
    "get a snapshot of your friends screen ...
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2434
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2435
     |dpy2|
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2436
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2437
     dpy2 := XWorkstation new initializeFor:'idefix:0'.
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2438
     (Image fromScreen:(dpy2 bounds) on:dpy2) inspect
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2439
    "
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2440
1488
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  2441
    "Modified: 26.3.1997 / 10:45:08 / cg"
1487
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2442
!
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2443
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2444
fromScreen:aRectangle on:aDisplay grab:doGrab
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2445
    "return an image of a part of the screen, which may be on
1487
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2446
     another Display. If the doGrab argument is true, the display
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2447
     is grabbed (i.e. blocked for others) and a camera cursor is
1488
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  2448
     shown while the readout is done.
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  2449
     WARNING: with doGrab true, this temporarily grabs the display
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2450
              and it may not work from within a buttonMotion
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2451
              (use with a false grabArg then)."
7230
71910d55d08c #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7227
diff changeset
  2452
71910d55d08c #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7227
diff changeset
  2453
    |depth vis img tmpFile util|
71910d55d08c #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7227
diff changeset
  2454
71910d55d08c #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7227
diff changeset
  2455
    aDisplay supportsScreenReading ifFalse:[
7962
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2456
        "/ workaround (fast): look if there is an OS-hook for this...
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2457
        OperatingSystem isOSXlike ifTrue:[
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2458
            Error handle:[:ex |
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2459
                img := nil
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2460
            ] do:[
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2461
                img := OperatingSystem getFrameBufferImage:0 in:aRectangle
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2462
            ].
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2463
        ].
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2464
        img isNil ifTrue:[
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2465
            "/ workaround (slow): look for a helper utility in support/<os>/screenshot
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2466
            "/ currently there is one for osx.
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2467
            tmpFile := Filename newTemporary withSuffix:'png'.
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2468
            util := Smalltalk packageDirectory asFilename / ('../support/',OperatingSystem getSystemType,'/screenshot').
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2469
            util exists ifTrue:[
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2470
                OperatingSystem executeCommand:('%1 %2 png %3 %4 %5 %6'
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2471
                                                    bindWith:util pathName
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2472
                                                    with:tmpFile pathName
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2473
                                                    with:aRectangle left
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2474
                                                    with:aRectangle top
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2475
                                                    with:aRectangle width
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2476
                                                    with:aRectangle height).
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2477
                [
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2478
                    img := Image fromFile:tmpFile.
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2479
                ] ensure:[
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2480
                    tmpFile remove.
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2481
                ].
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2482
            ].
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2483
        ].
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2484
        ^ img
7230
71910d55d08c #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7227
diff changeset
  2485
    ].
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2486
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2487
    depth := aDisplay depth.
401
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
  2488
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
  2489
    "/
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
  2490
    "/ for truecolor displays, return a Depth24Image
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
  2491
    "/ (must do this for depth15 & depth16 displays, since
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
  2492
    "/  Depth16Image has no way to specify r/g/b masks ...)
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
  2493
    "/
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
  2494
    vis := aDisplay visualType.
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
  2495
    (vis == #TrueColor or:[vis == #DirectColor]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2496
        depth > 8 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2497
            depth := 24.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2498
        ]
401
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
  2499
    ].
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
  2500
3259
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  2501
    img := self newForDepth:depth.
1487
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2502
    ^ img fromScreen:aRectangle on:aDisplay grab:doGrab
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2503
7962
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2504
    "
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2505
     Image fromScreen:(0@0 corner:100@100)
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2506
    "
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2507
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  2508
    "Modified: / 30-01-2017 / 19:49:01 / stefan"
7962
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2509
    "Modified (comment): / 26-02-2017 / 18:24:41 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2510
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2511
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2512
fromScreenArea
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2513
    "return an image of a part of the screen;
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2514
     let user specify screen area.
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2515
     This is the same as #fromUser - kept for backward compatibility.
1488
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  2516
     Use #fromUser for ST-80 compatibility.
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  2517
     WARNING: this temporarily grabs the display
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2518
              it may not work from within a buttonMotion
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2519
              (use #fromScreen:on:grab: with a false grabArg then)."
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2520
2102
7c7d11aa956e care for empty rectangle in Image>>fromScreenArea
Claus Gittinger <cg@exept.de>
parents: 2081
diff changeset
  2521
    |r|
7c7d11aa956e care for empty rectangle in Image>>fromScreenArea
Claus Gittinger <cg@exept.de>
parents: 2081
diff changeset
  2522
2323
bf88727c4dee wait until button is released in #fromUser.
Claus Gittinger <cg@exept.de>
parents: 2311
diff changeset
  2523
    [Screen current leftButtonPressed] whileTrue:[Delay waitForSeconds:0.05].
2102
7c7d11aa956e care for empty rectangle in Image>>fromScreenArea
Claus Gittinger <cg@exept.de>
parents: 2081
diff changeset
  2524
    r := Rectangle fromUser.
7c7d11aa956e care for empty rectangle in Image>>fromScreenArea
Claus Gittinger <cg@exept.de>
parents: 2081
diff changeset
  2525
    r width == 0 ifTrue:[^ nil].
7c7d11aa956e care for empty rectangle in Image>>fromScreenArea
Claus Gittinger <cg@exept.de>
parents: 2081
diff changeset
  2526
    r height == 0 ifTrue:[^ nil].
7c7d11aa956e care for empty rectangle in Image>>fromScreenArea
Claus Gittinger <cg@exept.de>
parents: 2081
diff changeset
  2527
    ^ self fromScreen:r
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2528
401
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
  2529
    "
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
  2530
     Image fromScreenArea
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2531
     Image fromScreenArea inspect
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2532
    "
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2533
2323
bf88727c4dee wait until button is released in #fromUser.
Claus Gittinger <cg@exept.de>
parents: 2311
diff changeset
  2534
    "Modified: / 10.9.1998 / 15:59:58 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2535
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2536
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2537
fromUser
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2538
    "return an image of a part of the screen; let user specify screen area.
1488
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  2539
     Same as fromScreenArea, for ST-80 compatibility.
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  2540
     WARNING: this temporarily grabs the display
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2541
              it may not work from within a buttonMotion
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2542
              (use #fromScreen:on:grab: with a false grabArg then)."
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2543
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2544
    ^ self fromScreenArea
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2545
401
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
  2546
    "
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
  2547
     Image fromUser
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2548
     Image fromUser inspect
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2549
    "
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2550
1488
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  2551
    "Modified: 26.3.1997 / 10:45:25 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2552
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2553
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2554
fromView:aView
8152
aa729f2a2a58 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8141
diff changeset
  2555
    "return an image taken from a view's contents as currently
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2556
     on the screen. The returned image has the same depth and photometric
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2557
     as the Display.
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  2558
     Notice that for invisible or partial covered views,
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2559
     the returned Image is NOT correct.
1488
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  2560
     You may want to raise the view before using this method.
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  2561
     WARNING: this temporarily grabs the display
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  2562
              it may not work from within a buttonMotion
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  2563
              (use #fromView:grab: with a false grabArg then)."
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2564
8152
aa729f2a2a58 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8141
diff changeset
  2565
    ^ self fromView:aView grab:true
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  2566
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  2567
    "
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2568
     Image fromView:(Launcher allInstances first window topView)
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2569
     Image fromView:(BrowserView allInstances first topView)
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2570
    "
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2571
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2572
    "get a snapshot from whichever view is active:
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2573
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2574
     |active|
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2575
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2576
     active := WindowGroup activeGroup topViews first.
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2577
     (Image fromView:active) inspect
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2578
    "
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2579
8152
aa729f2a2a58 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8141
diff changeset
  2580
    "Modified: / 09-09-1996 / 22:41:01 / stefan"
aa729f2a2a58 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8141
diff changeset
  2581
    "Modified: / 26-03-1997 / 10:45:40 / cg"
aa729f2a2a58 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8141
diff changeset
  2582
    "Modified (comment): / 31-08-2017 / 20:15:21 / cg"
1487
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2583
!
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2584
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2585
fromView:aView grab:doGrab
8152
aa729f2a2a58 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8141
diff changeset
  2586
    "return an image taken from a view's contents as currently
1487
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2587
     on the screen. If the doGrab argument is true, the display
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2588
     is grabbed (i.e. blocked for others) and a camera cursor is
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2589
     shown while the readout is done.
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2590
     The returned image has the same depth and photometric
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2591
     as the Display.
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  2592
     Notice that for invisible or partial covered views,
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2593
     the returned Image is NOT correct.
1488
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  2594
     You may want to raise the view before using this method.
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  2595
     WARNING: with doGrab true, this temporarily grabs the display
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  2596
              and it may not work from within a buttonMotion
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  2597
              (use with a false grabArg then)."
4540
abe9a008966e added functionality to grab a window incl. caption-border
ps
parents: 4423
diff changeset
  2598
abe9a008966e added functionality to grab a window incl. caption-border
ps
parents: 4423
diff changeset
  2599
    ^ self fromView:aView grab:doGrab withDecoration:false
abe9a008966e added functionality to grab a window incl. caption-border
ps
parents: 4423
diff changeset
  2600
8152
aa729f2a2a58 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8141
diff changeset
  2601
    "Created: / 26-03-1997 / 10:34:20 / cg"
aa729f2a2a58 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8141
diff changeset
  2602
    "Modified: / 10-10-2001 / 14:13:29 / cg"
aa729f2a2a58 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8141
diff changeset
  2603
    "Modified (comment): / 31-08-2017 / 20:14:58 / cg"
4540
abe9a008966e added functionality to grab a window incl. caption-border
ps
parents: 4423
diff changeset
  2604
!
abe9a008966e added functionality to grab a window incl. caption-border
ps
parents: 4423
diff changeset
  2605
abe9a008966e added functionality to grab a window incl. caption-border
ps
parents: 4423
diff changeset
  2606
fromView:aView grab:doGrab withDecoration:withDecoration
8152
aa729f2a2a58 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8141
diff changeset
  2607
    "return an image taken from a view's contents as currently
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2608
     on the screen, optionally with decoration included.
4540
abe9a008966e added functionality to grab a window incl. caption-border
ps
parents: 4423
diff changeset
  2609
     If the doGrab argument is true, the display
abe9a008966e added functionality to grab a window incl. caption-border
ps
parents: 4423
diff changeset
  2610
     is grabbed (i.e. blocked for others) and a camera cursor is
abe9a008966e added functionality to grab a window incl. caption-border
ps
parents: 4423
diff changeset
  2611
     shown while the readout is done.
abe9a008966e added functionality to grab a window incl. caption-border
ps
parents: 4423
diff changeset
  2612
     The returned image has the same depth and photometric
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2613
     as the Display.
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  2614
     Notice that for invisible or partial covered views,
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2615
     the returned Image is NOT correct.
4540
abe9a008966e added functionality to grab a window incl. caption-border
ps
parents: 4423
diff changeset
  2616
     You may want to raise the view before using this method.
abe9a008966e added functionality to grab a window incl. caption-border
ps
parents: 4423
diff changeset
  2617
     WARNING: with doGrab true, this temporarily grabs the display
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  2618
              and it may not work from within a buttonMotion
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  2619
              (use with a false grabArg then)."
4540
abe9a008966e added functionality to grab a window incl. caption-border
ps
parents: 4423
diff changeset
  2620
7271
3d35b4e39ec4 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 7242
diff changeset
  2621
    |org ext viewsDevice cH bW bH|
3d35b4e39ec4 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 7242
diff changeset
  2622
3d35b4e39ec4 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 7242
diff changeset
  2623
    viewsDevice := aView graphicsDevice.
3d35b4e39ec4 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 7242
diff changeset
  2624
    org := viewsDevice translatePoint:(0@0) fromView:aView toView:nil.
4540
abe9a008966e added functionality to grab a window incl. caption-border
ps
parents: 4423
diff changeset
  2625
    ext := aView extent.
abe9a008966e added functionality to grab a window incl. caption-border
ps
parents: 4423
diff changeset
  2626
    withDecoration ifTrue:[
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  2627
        viewsDevice isWindowsPlatform ifTrue:[
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  2628
            cH := viewsDevice captionHeight.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  2629
            bW := (viewsDevice getSystemMetrics: #SM_CXFRAME )
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  2630
                  "+ ( device getSystemMetrics: #borderFrameWidth )".
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  2631
            bH := (viewsDevice getSystemMetrics: #SM_CYFRAME )
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  2632
                  " + ( device getSystemMetrics: #borderFrameHeight )".
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  2633
            org := org - (bW @ (bH + cH)).
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  2634
            ext := ext + ((bW + bW) @ (bH+bH+cH)).
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  2635
        ].
4540
abe9a008966e added functionality to grab a window incl. caption-border
ps
parents: 4423
diff changeset
  2636
    ].
7271
3d35b4e39ec4 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 7242
diff changeset
  2637
    ^ self fromScreen:(org extent:ext) on:viewsDevice grab:doGrab
4540
abe9a008966e added functionality to grab a window incl. caption-border
ps
parents: 4423
diff changeset
  2638
abe9a008966e added functionality to grab a window incl. caption-border
ps
parents: 4423
diff changeset
  2639
    "
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2640
     Transcript topView raise. (Image fromView:Transcript topView grab:false withDecoration:false) inspect
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2641
     Transcript topView raise. (Image fromView:Transcript topView grab:false withDecoration:true) inspect
4540
abe9a008966e added functionality to grab a window incl. caption-border
ps
parents: 4423
diff changeset
  2642
    "
3518
983e7730a905 use new translatePoint:fromView:toView:
Claus Gittinger <cg@exept.de>
parents: 3507
diff changeset
  2643
4574
4b65895bbb6b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4565
diff changeset
  2644
    "Created: / 26-03-1997 / 10:34:20 / cg"
4b65895bbb6b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4565
diff changeset
  2645
    "Modified: / 08-09-2006 / 15:41:41 / cg"
8152
aa729f2a2a58 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8141
diff changeset
  2646
    "Modified (comment): / 31-08-2017 / 20:14:53 / cg"
157
claus
parents: 154
diff changeset
  2647
! !
claus
parents: 154
diff changeset
  2648
3880
c4c8268a2d9f method category rename
Claus Gittinger <cg@exept.de>
parents: 3876
diff changeset
  2649
!Image methodsFor:'Compatibility-Squeak'!
3475
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2650
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2651
boundingBox
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2652
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2653
    ^ self bounds
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2654
!
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2655
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2656
colormapIfNeededForDepth:d
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2657
    ^ nil
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2658
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2659
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2660
!
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2661
6308
6e4008b97f64 class: Image
Claus Gittinger <cg@exept.de>
parents: 6305
diff changeset
  2662
colorsFromArray:anArrayOfRGBTriples
6e4008b97f64 class: Image
Claus Gittinger <cg@exept.de>
parents: 6305
diff changeset
  2663
    "for squeak compatibility with ColorForm:
6e4008b97f64 class: Image
Claus Gittinger <cg@exept.de>
parents: 6305
diff changeset
  2664
     set the colorMap from an array of rgb triples, each value being in 0..1."
6e4008b97f64 class: Image
Claus Gittinger <cg@exept.de>
parents: 6305
diff changeset
  2665
6e4008b97f64 class: Image
Claus Gittinger <cg@exept.de>
parents: 6305
diff changeset
  2666
    |newMap|
6e4008b97f64 class: Image
Claus Gittinger <cg@exept.de>
parents: 6305
diff changeset
  2667
6e4008b97f64 class: Image
Claus Gittinger <cg@exept.de>
parents: 6305
diff changeset
  2668
    newMap := Colormap new:anArrayOfRGBTriples size.
6e4008b97f64 class: Image
Claus Gittinger <cg@exept.de>
parents: 6305
diff changeset
  2669
    anArrayOfRGBTriples doWithIndex:[:rgb :i |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2670
        newMap at:i putRGBTriple:rgb
6308
6e4008b97f64 class: Image
Claus Gittinger <cg@exept.de>
parents: 6305
diff changeset
  2671
    ].
6e4008b97f64 class: Image
Claus Gittinger <cg@exept.de>
parents: 6305
diff changeset
  2672
    self colorMap:newMap.
6e4008b97f64 class: Image
Claus Gittinger <cg@exept.de>
parents: 6305
diff changeset
  2673
6e4008b97f64 class: Image
Claus Gittinger <cg@exept.de>
parents: 6305
diff changeset
  2674
    "
6e4008b97f64 class: Image
Claus Gittinger <cg@exept.de>
parents: 6305
diff changeset
  2675
     Depth8Image new
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2676
        colorsFromArray:#( (0.5 0.5 0.5) (0.25 0.0 0.0) (0.0 0.25 0.5))
6308
6e4008b97f64 class: Image
Claus Gittinger <cg@exept.de>
parents: 6305
diff changeset
  2677
    "
6e4008b97f64 class: Image
Claus Gittinger <cg@exept.de>
parents: 6305
diff changeset
  2678
!
6e4008b97f64 class: Image
Claus Gittinger <cg@exept.de>
parents: 6305
diff changeset
  2679
3475
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2680
fill:aRectangle fillColor:aColor
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2681
    "fill the rectangular area specified by aRectangle with the given color"
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2682
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2683
    self fillRectangle:aRectangle withColor:aColor
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2684
!
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2685
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2686
fillBlack:aRectangle
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2687
    "fill the rectangular area specified by aRectangle with the black color"
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2688
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2689
    self fillRectangle:aRectangle withColor:Color black
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2690
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2691
    "
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2692
     |img|
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2693
     img := Image extent:100@100 depth:24.
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2694
     img photometric:#rgb.
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2695
     img data:(ByteArray new:100*100*3).
3475
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2696
     img fillWhite:(0@0 corner:100@100).
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2697
     img fillBlack:(10@10 corner:90@90).
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2698
     img inspect.
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2699
    "
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2700
!
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2701
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2702
fillWhite:aRectangle
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2703
    "fill the rectangular area specified by aRectangle with the white color"
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2704
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2705
    self fillRectangle:aRectangle withColor:Color white
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2706
!
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2707
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2708
isTransparentAt:aPoint
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2709
    mask isNil ifTrue:[ ^ false].
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2710
    ^ (mask pixelAt:aPoint) == 0
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2711
! !
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2712
3880
c4c8268a2d9f method category rename
Claus Gittinger <cg@exept.de>
parents: 3876
diff changeset
  2713
!Image methodsFor:'Compatibility-VW'!
1279
09eef854916c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1276
diff changeset
  2714
09eef854916c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1276
diff changeset
  2715
asCachedImage
09eef854916c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1276
diff changeset
  2716
    "return the receiver associated to the current screens device.
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2717
     For ST-80 compatibility
1279
09eef854916c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1276
diff changeset
  2718
     (ST/X uses Image for both device- and nonDevice-images)"
09eef854916c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1276
diff changeset
  2719
2832
793500016a2b #on: -> #onDevice:
Claus Gittinger <cg@exept.de>
parents: 2801
diff changeset
  2720
    ^ self onDevice:Screen current
1279
09eef854916c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1276
diff changeset
  2721
09eef854916c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1276
diff changeset
  2722
    "Modified: 23.4.1996 / 11:10:32 / cg"
09eef854916c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1276
diff changeset
  2723
!
09eef854916c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1276
diff changeset
  2724
09eef854916c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1276
diff changeset
  2725
asRetainedMedium
09eef854916c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1276
diff changeset
  2726
    "return the receiver associated to the current screens device.
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2727
     For ST-80 compatibility
1279
09eef854916c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1276
diff changeset
  2728
     (ST/X uses Image for both device- and nonDevice-images)"
09eef854916c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1276
diff changeset
  2729
2832
793500016a2b #on: -> #onDevice:
Claus Gittinger <cg@exept.de>
parents: 2801
diff changeset
  2730
    ^ self onDevice:Screen current
1279
09eef854916c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1276
diff changeset
  2731
09eef854916c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1276
diff changeset
  2732
    "Modified: 23.4.1996 / 11:10:32 / cg"
09eef854916c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1276
diff changeset
  2733
    "Created: 27.1.1997 / 15:49:08 / cg"
1325
3c09b139de30 more st80 compatibility
Claus Gittinger <cg@exept.de>
parents: 1309
diff changeset
  2734
!
3c09b139de30 more st80 compatibility
Claus Gittinger <cg@exept.de>
parents: 1309
diff changeset
  2735
3c09b139de30 more st80 compatibility
Claus Gittinger <cg@exept.de>
parents: 1309
diff changeset
  2736
bounds:newBounds
3c09b139de30 more st80 compatibility
Claus Gittinger <cg@exept.de>
parents: 1309
diff changeset
  2737
    ^ self
3c09b139de30 more st80 compatibility
Claus Gittinger <cg@exept.de>
parents: 1309
diff changeset
  2738
3c09b139de30 more st80 compatibility
Claus Gittinger <cg@exept.de>
parents: 1309
diff changeset
  2739
    "Created: 10.2.1997 / 12:44:46 / cg"
3c09b139de30 more st80 compatibility
Claus Gittinger <cg@exept.de>
parents: 1309
diff changeset
  2740
!
3c09b139de30 more st80 compatibility
Claus Gittinger <cg@exept.de>
parents: 1309
diff changeset
  2741
1433
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  2742
containsPoint:aPoint
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  2743
    "in st-80, images are visualComponents ..."
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  2744
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  2745
    ^ self bounds containsPoint:aPoint
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  2746
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  2747
    "Created: 6.3.1997 / 15:24:12 / cg"
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  2748
!
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  2749
1403
4b132381579e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1386
diff changeset
  2750
convertToPalette:aColormap renderedBy:anImageRenderer
4b132381579e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1386
diff changeset
  2751
    "this does not really mimicri the corresponding ST-80 functionality"
4b132381579e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1386
diff changeset
  2752
4b132381579e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1386
diff changeset
  2753
    |monoBits convertedImage|
4b132381579e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1386
diff changeset
  2754
4b132381579e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1386
diff changeset
  2755
    aColormap size == 2 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2756
        anImageRenderer class == OrderedDither ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2757
            monoBits := self orderedDitheredMonochromeBits.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2758
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2759
            monoBits := self floydSteinbergDitheredMonochromeBits.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2760
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2761
        (((aColormap at:1) = Color black)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2762
        and:[(aColormap at:2) = Color white]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2763
            "/ ok
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2764
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2765
            (((aColormap at:1) = Color white)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2766
            and:[(aColormap at:2) = Color black]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2767
                monoBits invert
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2768
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2769
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2770
        convertedImage := Depth1Image width:width height:height fromArray:monoBits.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2771
        convertedImage palette:aColormap.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2772
        ^ convertedImage
1403
4b132381579e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1386
diff changeset
  2773
    ].
4b132381579e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1386
diff changeset
  2774
4b132381579e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1386
diff changeset
  2775
    self error:'unimplemented operation'.
4b132381579e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1386
diff changeset
  2776
    ^ self
4b132381579e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1386
diff changeset
  2777
4b132381579e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1386
diff changeset
  2778
    "Modified: 1.3.1997 / 17:25:50 / cg"
4b132381579e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1386
diff changeset
  2779
!
4b132381579e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1386
diff changeset
  2780
1433
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  2781
paintBasis
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  2782
    "huh - whats that;
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  2783
     I guess, I have to return Color for images without a mask,
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  2784
     and CoverageValue for those with a mask; for now, always return Color"
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  2785
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  2786
    ^ ColorValue
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  2787
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  2788
    "Created: 6.3.1997 / 15:24:19 / cg"
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  2789
!
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  2790
1325
3c09b139de30 more st80 compatibility
Claus Gittinger <cg@exept.de>
parents: 1309
diff changeset
  2791
preferredBounds
3c09b139de30 more st80 compatibility
Claus Gittinger <cg@exept.de>
parents: 1309
diff changeset
  2792
    ^ self bounds
3c09b139de30 more st80 compatibility
Claus Gittinger <cg@exept.de>
parents: 1309
diff changeset
  2793
3c09b139de30 more st80 compatibility
Claus Gittinger <cg@exept.de>
parents: 1309
diff changeset
  2794
    "Created: 10.2.1997 / 12:42:36 / cg"
4380
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2795
!
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2796
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2797
tile:bounds from:origin in:tile rule:rule
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2798
    |orgX orgY tW tH|
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2799
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2800
    origin ~= (0@0) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2801
        self shouldImplement.
4380
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2802
    ].
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2803
    bounds ~= self bounds ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2804
        self shouldImplement.
4380
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2805
    ].
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2806
    rule ~= #over ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2807
        self shouldImplement.
4380
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2808
    ].
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2809
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2810
    orgX := origin x.
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2811
    orgY := origin y.
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2812
    tW := tile width.
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2813
    tH := tile height.
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2814
    (bounds top) to:(bounds bottom) by:tH do:[:dstY |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2815
        (bounds left) to:(bounds right) by:(tile width) do:[:dstX |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2816
            self
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2817
                copyFrom:tile
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2818
                x:orgX y:orgY
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2819
                toX:dstX y:dstY
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2820
                width:tW height:tH.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2821
        ].
4380
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2822
    ].
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2823
!
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2824
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2825
valueAtPoint:aPoint put:aColorValue
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2826
    aColorValue isInteger ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2827
        self colorAtX:aPoint x y:aPoint y put:aColorValue
4380
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2828
    ] ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2829
        self pixelAtX:aPoint x y:aPoint y put:aColorValue
4380
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2830
    ]
1279
09eef854916c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1276
diff changeset
  2831
! !
09eef854916c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1276
diff changeset
  2832
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  2833
!Image methodsFor:'accessing'!
48194c26a46c Initial revision
claus
parents:
diff changeset
  2834
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2835
bitsPerSample
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2836
    "return the number of bits per sample.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2837
     The return value is an array of bits-per-plane."
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2838
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  2839
    bitsPerSample notNil ifTrue:[^ bitsPerSample].
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  2840
    ^ Array with:self depth
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  2841
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  2842
    "Modified: 10.6.1996 / 18:04:21 / cg"
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2843
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2844
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2845
colorMap
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2846
    "return the colormap"
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2847
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2848
    ^ colorMap
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2849
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2850
7834
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
  2851
colorMap:newColorMap
6900
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  2852
    "set the colorMap; this also sets the photometric to a useful default."
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  2853
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  2854
    |oldSize "{ Class: SmallInteger }"
852
318a6190e31d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 851
diff changeset
  2855
     sameColors|
318a6190e31d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 851
diff changeset
  2856
7834
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
  2857
    (newColorMap isNil and:[colorMap isNil]) ifTrue:[^ self].
2502
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  2858
6900
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  2859
    sameColors := false.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  2860
852
318a6190e31d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 851
diff changeset
  2861
    photometric == #palette ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2862
        "/ any change at all ?
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  2863
        oldSize := colorMap size.
7834
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
  2864
        newColorMap size >= oldSize ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2865
            sameColors := true.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2866
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2867
            1 to:oldSize do:[:idx |
7834
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
  2868
                (newColorMap at:idx) = (colorMap at:idx) ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2869
                    sameColors := false.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2870
                ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2871
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2872
        ].
3863
b7ba8a04be25 always ensure colorMap is a real colorMap
Claus Gittinger <cg@exept.de>
parents: 3861
diff changeset
  2873
    ].
b7ba8a04be25 always ensure colorMap is a real colorMap
Claus Gittinger <cg@exept.de>
parents: 3861
diff changeset
  2874
7834
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
  2875
    self setColorMap:newColorMap.
3863
b7ba8a04be25 always ensure colorMap is a real colorMap
Claus Gittinger <cg@exept.de>
parents: 3861
diff changeset
  2876
    sameColors ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2877
        ^ self
3863
b7ba8a04be25 always ensure colorMap is a real colorMap
Claus Gittinger <cg@exept.de>
parents: 3861
diff changeset
  2878
    ].
b7ba8a04be25 always ensure colorMap is a real colorMap
Claus Gittinger <cg@exept.de>
parents: 3861
diff changeset
  2879
7834
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
  2880
    newColorMap notNil ifTrue:[
7840
dedc215d1631 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7834
diff changeset
  2881
        (newColorMap isColormap and:[newColorMap isFixedPalette]) ifTrue:[
7834
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
  2882
            photometric := #rgb
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
  2883
        ] ifFalse:[  
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
  2884
            self assert:(self depth <= 8).
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
  2885
            photometric := #palette.
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
  2886
        ].
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  2887
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2888
        (photometric == #palette) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2889
            photometric := #blackIs0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2890
        ]
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  2891
    ].
852
318a6190e31d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 851
diff changeset
  2892
    deviceForm notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2893
        self release
852
318a6190e31d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 851
diff changeset
  2894
    ]
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2895
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  2896
    "Modified: / 31-08-1995 / 03:05:59 / claus"
7834
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
  2897
    "Modified: / 03-02-2017 / 16:52:33 / cg"
7840
dedc215d1631 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7834
diff changeset
  2898
    "Modified: / 06-02-2017 / 11:00:36 / stefan"
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2899
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2900
2068
3bc8754883ae store on the color map in an array of rgb-byte values
tz
parents: 2059
diff changeset
  2901
colorMapFromArray: anArray
2266
72460683cc97 fixed maskedPixelsAre0 flag setting when copying images.
Claus Gittinger <cg@exept.de>
parents: 2249
diff changeset
  2902
    "set the colorMap by reading colors from an array with rgb-byte values.
72460683cc97 fixed maskedPixelsAre0 flag setting when copying images.
Claus Gittinger <cg@exept.de>
parents: 2249
diff changeset
  2903
     The (byte-)Array argument should be of the form:
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2904
        #( red0 green0 blue0  red1 green1 blue1 ... redN greenN blueN)
2266
72460683cc97 fixed maskedPixelsAre0 flag setting when copying images.
Claus Gittinger <cg@exept.de>
parents: 2249
diff changeset
  2905
     where each component must be a byteValue in 0..255."
2068
3bc8754883ae store on the color map in an array of rgb-byte values
tz
parents: 2059
diff changeset
  2906
3876
f4dc6267a30a getting rid of colorMap
Claus Gittinger <cg@exept.de>
parents: 3872
diff changeset
  2907
    self colorMap:(MappedPalette rgbBytesVector:anArray)
3864
b04f2f0c5eae *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3863
diff changeset
  2908
!
b04f2f0c5eae *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3863
diff changeset
  2909
b04f2f0c5eae *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3863
diff changeset
  2910
colorMapFromRGBValueArray:anArray
2266
72460683cc97 fixed maskedPixelsAre0 flag setting when copying images.
Claus Gittinger <cg@exept.de>
parents: 2249
diff changeset
  2911
    "set the colorMap by reading colors from an array with rgb-integer values.
72460683cc97 fixed maskedPixelsAre0 flag setting when copying images.
Claus Gittinger <cg@exept.de>
parents: 2249
diff changeset
  2912
     The (integer-)Array argument should be of the form:
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2913
        #( rgb0 rgb1  ... rgbN)
2266
72460683cc97 fixed maskedPixelsAre0 flag setting when copying images.
Claus Gittinger <cg@exept.de>
parents: 2249
diff changeset
  2914
     where each element must be an rgbValue in 0..FFFFFF."
72460683cc97 fixed maskedPixelsAre0 flag setting when copying images.
Claus Gittinger <cg@exept.de>
parents: 2249
diff changeset
  2915
3876
f4dc6267a30a getting rid of colorMap
Claus Gittinger <cg@exept.de>
parents: 3872
diff changeset
  2916
    self colorMap:(MappedPalette rgbValueVector:anArray)
2068
3bc8754883ae store on the color map in an array of rgb-byte values
tz
parents: 2059
diff changeset
  2917
!
3bc8754883ae store on the color map in an array of rgb-byte values
tz
parents: 2059
diff changeset
  2918
757
6c7dc7e05e93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 748
diff changeset
  2919
container:aVisualContainer
6c7dc7e05e93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 748
diff changeset
  2920
    "ignored here - added to allow images to be used like
6c7dc7e05e93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 748
diff changeset
  2921
     VisualComponents (later, Image should inherit from it)"
6c7dc7e05e93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 748
diff changeset
  2922
6c7dc7e05e93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 748
diff changeset
  2923
    "Created: 28.5.1996 / 23:43:49 / cg"
6c7dc7e05e93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 748
diff changeset
  2924
    "Modified: 29.5.1996 / 10:22:23 / cg"
6c7dc7e05e93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 748
diff changeset
  2925
!
6c7dc7e05e93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 748
diff changeset
  2926
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2927
depth
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2928
    "return the depth of the image"
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2929
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2930
    ^ self bitsPerPixel
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2931
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2932
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2933
device
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2934
    "return the device, the receiver is associated with.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2935
     Return nil, if the image is unassigned."
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2936
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2937
    ^ device
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2938
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2939
7637
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
  2940
drawableId
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
  2941
    "return the id of the image on the device.
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
  2942
     Return nil, if the image is unassigned."
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
  2943
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
  2944
    deviceForm isNil ifTrue:[^ nil].
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
  2945
    ^ deviceForm drawableId
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
  2946
!
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
  2947
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2948
extent
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2949
    "return the images extent"
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2950
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2951
    ^ width@height
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2952
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2953
1950
23f49293deb8 access to filename
Claus Gittinger <cg@exept.de>
parents: 1935
diff changeset
  2954
fileName
23f49293deb8 access to filename
Claus Gittinger <cg@exept.de>
parents: 1935
diff changeset
  2955
    "return the value of the instance variable 'fileName' (automatically generated)"
23f49293deb8 access to filename
Claus Gittinger <cg@exept.de>
parents: 1935
diff changeset
  2956
23f49293deb8 access to filename
Claus Gittinger <cg@exept.de>
parents: 1935
diff changeset
  2957
    ^ fileName
23f49293deb8 access to filename
Claus Gittinger <cg@exept.de>
parents: 1935
diff changeset
  2958
23f49293deb8 access to filename
Claus Gittinger <cg@exept.de>
parents: 1935
diff changeset
  2959
    "Created: / 3.11.1997 / 14:54:46 / cg"
23f49293deb8 access to filename
Claus Gittinger <cg@exept.de>
parents: 1935
diff changeset
  2960
!
23f49293deb8 access to filename
Claus Gittinger <cg@exept.de>
parents: 1935
diff changeset
  2961
23f49293deb8 access to filename
Claus Gittinger <cg@exept.de>
parents: 1935
diff changeset
  2962
fileName:something
23f49293deb8 access to filename
Claus Gittinger <cg@exept.de>
parents: 1935
diff changeset
  2963
    "set the value of the instance variable 'fileName' (automatically generated)"
23f49293deb8 access to filename
Claus Gittinger <cg@exept.de>
parents: 1935
diff changeset
  2964
23f49293deb8 access to filename
Claus Gittinger <cg@exept.de>
parents: 1935
diff changeset
  2965
    fileName := something.
23f49293deb8 access to filename
Claus Gittinger <cg@exept.de>
parents: 1935
diff changeset
  2966
23f49293deb8 access to filename
Claus Gittinger <cg@exept.de>
parents: 1935
diff changeset
  2967
    "Created: / 3.11.1997 / 14:54:46 / cg"
23f49293deb8 access to filename
Claus Gittinger <cg@exept.de>
parents: 1935
diff changeset
  2968
!
23f49293deb8 access to filename
Claus Gittinger <cg@exept.de>
parents: 1935
diff changeset
  2969
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2970
fullColorId
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2971
    "return the id of the full color image on the device.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2972
     Return nil, if the image is unassigned."
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2973
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2974
    fullColorDeviceForm isNil ifTrue:[^ nil].
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2975
    ^ fullColorDeviceForm id
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2976
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2977
728
04d0a262b82e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 694
diff changeset
  2978
graphicsDevice
04d0a262b82e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 694
diff changeset
  2979
    "same as #device - for ST-80 compatibility"
04d0a262b82e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 694
diff changeset
  2980
04d0a262b82e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 694
diff changeset
  2981
    ^ device
04d0a262b82e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 694
diff changeset
  2982
!
744
db883c9b74b8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 728
diff changeset
  2983
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2984
height
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2985
    "return the height of the image"
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2986
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2987
    ^ height
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2988
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2989
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2990
id
7637
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
  2991
    ^ self drawableId  
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2992
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2993
2081
24f4f3004fe3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2068
diff changeset
  2994
imageSequence
24f4f3004fe3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2068
diff changeset
  2995
    "return the frameSequence of which this image is a part of;
24f4f3004fe3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2068
diff changeset
  2996
     nil if it is not part of a sequence."
24f4f3004fe3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2068
diff changeset
  2997
24f4f3004fe3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2068
diff changeset
  2998
    ^ imageSequence
24f4f3004fe3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2068
diff changeset
  2999
24f4f3004fe3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2068
diff changeset
  3000
    "Created: / 1.4.1998 / 14:43:00 / cg"
24f4f3004fe3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2068
diff changeset
  3001
!
24f4f3004fe3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2068
diff changeset
  3002
24f4f3004fe3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2068
diff changeset
  3003
imageSequence:aCollection
24f4f3004fe3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2068
diff changeset
  3004
    "private entry for imageReaders - set the frameSequence of which
24f4f3004fe3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2068
diff changeset
  3005
     this image is a part of"
24f4f3004fe3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2068
diff changeset
  3006
24f4f3004fe3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2068
diff changeset
  3007
    imageSequence := aCollection
24f4f3004fe3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2068
diff changeset
  3008
24f4f3004fe3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2068
diff changeset
  3009
    "Created: / 1.4.1998 / 14:42:36 / cg"
24f4f3004fe3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2068
diff changeset
  3010
!
24f4f3004fe3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2068
diff changeset
  3011
896
26cea84f134d mask access
Claus Gittinger <cg@exept.de>
parents: 894
diff changeset
  3012
mask
26cea84f134d mask access
Claus Gittinger <cg@exept.de>
parents: 894
diff changeset
  3013
    ^ mask
26cea84f134d mask access
Claus Gittinger <cg@exept.de>
parents: 894
diff changeset
  3014
26cea84f134d mask access
Claus Gittinger <cg@exept.de>
parents: 894
diff changeset
  3015
    "Created: 21.6.1996 / 12:57:44 / cg"
26cea84f134d mask access
Claus Gittinger <cg@exept.de>
parents: 894
diff changeset
  3016
!
26cea84f134d mask access
Claus Gittinger <cg@exept.de>
parents: 894
diff changeset
  3017
906
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
  3018
mask:anotherImage
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
  3019
    "set the images mask - currently, this may be nil or a Depth1Image.
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
  3020
     (it is planned to support alpha information in a Depth8 maskImage in
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
  3021
      the near future).
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
  3022
     For depth1 masks: each pixel of the image where a corresponding
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3023
                       1-bit is present in the mask will be drawn;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3024
                       0-bit mask pixels lead to transparent pixels.
906
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
  3025
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
  3026
     For depth8 masks: (future):
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3027
                       each pixel specifies the alpha value (0..255),
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3028
                       which specifies the transparency of that pixel.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3029
                       0 means completely transparent, 255 means completely
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3030
                       opaque. The 1-plane mask is a special case of this,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3031
                       interpreting a 0 as a 0 alpha value and 1's as an
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3032
                       alpha value of 255."
906
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
  3033
1591
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  3034
    mask := anotherImage.
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  3035
    maskedPixelsAre0 := false.
906
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
  3036
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
  3037
    "Created: 27.6.1996 / 17:45:22 / cg"
1591
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  3038
    "Modified: 12.4.1997 / 12:04:39 / cg"
906
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
  3039
!
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
  3040
1587
4a0b4c864ff0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1586
diff changeset
  3041
maskedPixelsAre0
4a0b4c864ff0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1586
diff changeset
  3042
    "return true if masked pixels have been cleared to zero"
4a0b4c864ff0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1586
diff changeset
  3043
2266
72460683cc97 fixed maskedPixelsAre0 flag setting when copying images.
Claus Gittinger <cg@exept.de>
parents: 2249
diff changeset
  3044
    ^ maskedPixelsAre0 == true
72460683cc97 fixed maskedPixelsAre0 flag setting when copying images.
Claus Gittinger <cg@exept.de>
parents: 2249
diff changeset
  3045
72460683cc97 fixed maskedPixelsAre0 flag setting when copying images.
Claus Gittinger <cg@exept.de>
parents: 2249
diff changeset
  3046
    "Modified: / 22.8.1998 / 11:27:22 / cg"
1587
4a0b4c864ff0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1586
diff changeset
  3047
!
4a0b4c864ff0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1586
diff changeset
  3048
4a0b4c864ff0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1586
diff changeset
  3049
maskedPixelsAre0:aBoolean
4a0b4c864ff0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1586
diff changeset
  3050
    "set/clear the flag which states if masked pixels
1591
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  3051
     have been set to zero. Knowing this to be true allows
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  3052
     faster drawing of the image later; (however, not setting
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  3053
     it will still produce correct output).
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  3054
     This flag is typically set by image readers."
1587
4a0b4c864ff0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1586
diff changeset
  3055
4a0b4c864ff0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1586
diff changeset
  3056
    maskedPixelsAre0 := aBoolean
1591
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  3057
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  3058
    "Modified: 12.4.1997 / 12:08:42 / cg"
1587
4a0b4c864ff0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1586
diff changeset
  3059
!
4a0b4c864ff0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1586
diff changeset
  3060
7374
b1a4e6ba38cb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7373
diff changeset
  3061
metaData
b1a4e6ba38cb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7373
diff changeset
  3062
    ^ metaData
b1a4e6ba38cb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7373
diff changeset
  3063
!
b1a4e6ba38cb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7373
diff changeset
  3064
b1a4e6ba38cb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7373
diff changeset
  3065
metaData:something
b1a4e6ba38cb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7373
diff changeset
  3066
    metaData := something.
b1a4e6ba38cb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7373
diff changeset
  3067
!
b1a4e6ba38cb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7373
diff changeset
  3068
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3069
monochromeId
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3070
    "return the id of the monochrome image on the device.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3071
     Return nil, if the image is unassigned."
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3072
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3073
    monoDeviceForm isNil ifTrue:[^ nil].
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3074
    ^ monoDeviceForm id
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3075
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3076
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  3077
palette
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3078
    "return the colormap; ST-80 compatibility"
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3079
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3080
    ^ colorMap
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3081
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3082
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  3083
palette:aColormap
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3084
    "set the colormap; ST-80 compatibility"
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3085
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  3086
    self colorMap:aColormap
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3087
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3088
    "Created: 1.2.1996 / 15:09:25 / cg"
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  3089
    "Modified: 8.6.1996 / 09:54:02 / cg"
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3090
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3091
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3092
photometric
6311
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
  3093
    "return the photometric, a symbol such as #palette, #rgb etc.
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
  3094
     This may be a somewhat old leftover from times, when tiff was the first image file type to be read.
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
  3095
     Much better would be to always have some (possibly fake and virtual) colormap around, and ask that one.
7373
61933c223183 added metaData instVar (for free use by image reader)
Claus Gittinger <cg@exept.de>
parents: 7363
diff changeset
  3096
     However, in the meantime, many other classes depend on that, so that it should be kept as an API
6311
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
  3097
     - even when the internal representation will be replaced by something better in the future."
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
  3098
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3099
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3100
    ^ photometric
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3101
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3102
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3103
samplesPerPixel
6840
3dee5e952e94 class: Image
Stefan Vogel <sv@exept.de>
parents: 6831
diff changeset
  3104
    "return the number of samples per pixel in the image."
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3105
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  3106
    samplesPerPixel notNil ifTrue:[^ samplesPerPixel].
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  3107
    ^ 1
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  3108
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  3109
    "Modified: 10.6.1996 / 18:03:30 / cg"
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3110
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3111
7834
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
  3112
setColorMap:newColorMap
7878
87d2abc0d82a #BUGFIX by Maren
matilk
parents: 7840
diff changeset
  3113
    (newColorMap isColormap or:[newColorMap isNil]) ifTrue:[
7834
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
  3114
        colorMap := newColorMap.
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  3115
    ] ifFalse:[
7834
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
  3116
        colorMap := MappedPalette withColors:newColorMap.
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  3117
    ].
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  3118
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  3119
    "Modified: / 30-01-2017 / 19:15:34 / stefan"
7834
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
  3120
    "Modified (format): / 03-02-2017 / 16:39:48 / cg"
3863
b7ba8a04be25 always ensure colorMap is a real colorMap
Claus Gittinger <cg@exept.de>
parents: 3861
diff changeset
  3121
!
b7ba8a04be25 always ensure colorMap is a real colorMap
Claus Gittinger <cg@exept.de>
parents: 3861
diff changeset
  3122
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3123
width
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3124
    "return the width of the image"
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3125
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3126
    ^ width
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3127
! !
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3128
3263
bd92a12c9316 category changes
Claus Gittinger <cg@exept.de>
parents: 3259
diff changeset
  3129
!Image methodsFor:'accessing-pixels'!
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3130
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  3131
at:aPoint
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3132
    "WARNING: for now, this returns a pixel's color
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3133
     (backward compatibility with ST/X)
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3134
     In the future, this will return a pixel value (ST-80 compatibility)
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3135
     Use #colorAt: - for future compatibility.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3136
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3137
     retrieve the pixel at aPoint; return a color.
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
  3138
     Pixels start at 0@0 for upper left pixel, end at
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3139
     (width-1)@(height-1) for lower right pixel.
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
  3140
     You should not use this method for image-processing, its
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3141
     very slow ...
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3142
     (it is meant to access individual pixels - for example, in a bitmap editor)"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  3143
3433
809312fa7e4f Use <resource:#obsolete>
Stefan Vogel <sv@exept.de>
parents: 3426
diff changeset
  3144
    <resource:#obsolete>
809312fa7e4f Use <resource:#obsolete>
Stefan Vogel <sv@exept.de>
parents: 3426
diff changeset
  3145
7482
0e29bd25788b #QUALITY by stefan
Stefan Vogel <sv@exept.de>
parents: 7481
diff changeset
  3146
    self obsoleteFeatureWarning:'Image [warning]: the Image>>at: will change semantics soon; use #colorAt:'.
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3147
    ^ self colorAtX:(aPoint x) y:(aPoint y)
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3148
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3149
    "Modified: / 21-06-1997 / 13:10:17 / cg"
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3150
    "Modified: / 09-01-1998 / 20:33:52 / stefan"
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3151
    "Modified (comment): / 29-08-2017 / 14:35:55 / cg"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  3152
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  3153
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3154
at:aPoint put:aColor
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3155
    "WARNING: for now, this expects a pixel's color
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3156
     (backward compatibility with ST/X)
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3157
     In the future, this will expect a pixel value (ST-80 compatibility)
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3158
     Use #colorAt:put: - for future compatibility.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3159
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3160
     set the pixel at aPoint to aColor.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3161
     Pixels start at 0@0 for the upper left pixel, end at
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3162
     (width-1)@(height-1) for lower right pixel.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3163
     You should not use this method for image-processing, its
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3164
     very slow ...
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3165
     (it is meant to access individual pixels - for example, in a bitmap editor)"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3166
7482
0e29bd25788b #QUALITY by stefan
Stefan Vogel <sv@exept.de>
parents: 7481
diff changeset
  3167
    aColor isInteger ifTrue:[
0e29bd25788b #QUALITY by stefan
Stefan Vogel <sv@exept.de>
parents: 7481
diff changeset
  3168
        ^ self pixelAtX:aPoint x y:aPoint y put:aColor.
0e29bd25788b #QUALITY by stefan
Stefan Vogel <sv@exept.de>
parents: 7481
diff changeset
  3169
    ].
0e29bd25788b #QUALITY by stefan
Stefan Vogel <sv@exept.de>
parents: 7481
diff changeset
  3170
    self obsoleteFeatureWarning:'Image [warning]: the Image>>at:put: will change semantics soon; use #colorAt:put:'.
0e29bd25788b #QUALITY by stefan
Stefan Vogel <sv@exept.de>
parents: 7481
diff changeset
  3171
    ^ self colorAtX:aPoint x y:aPoint y put:aColor.
1764
01101be8bd5c obsolete warning messages
Claus Gittinger <cg@exept.de>
parents: 1763
diff changeset
  3172
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3173
    "Modified: / 21-06-1997 / 13:16:02 / cg"
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3174
    "Modified: / 09-01-1998 / 20:34:15 / stefan"
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3175
    "Modified (comment): / 29-08-2017 / 14:36:03 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3176
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3177
2502
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3178
atImageAndMask:aPoint put:aColorOrPixelOrNil
1972
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
  3179
    "set the pixel at x/y to aColor.
2502
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3180
     If aColor is a mask color (i.e. Color noColor) the mask pixel will be set to 0 (transparent),
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3181
     otherwise to 1. Nil is treated like noColor.
1972
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
  3182
     (used by the bitmap editor)"
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
  3183
2523
4c197af8cc50 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2502
diff changeset
  3184
    |maskVal|
2502
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3185
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  3186
    (aColorOrPixelOrNil notNil and:[aColorOrPixelOrNil ~= Color noColor]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3187
        maskVal := 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3188
        aColorOrPixelOrNil isInteger ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3189
            self pixelAt:aPoint put:aColorOrPixelOrNil.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3190
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3191
            self colorAt:aPoint put:aColorOrPixelOrNil
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3192
        ]
2380
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  3193
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3194
        maskVal := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3195
        self pixelAt:aPoint put:0.
2502
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3196
    ].
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3197
    mask notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3198
        mask pixelAt:aPoint put:maskVal
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  3199
    ].
2502
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3200
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3201
    "Modified: / 30.9.1998 / 22:42:44 / cg"
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3202
!
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3203
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3204
atImageAndMask:aPoint putValue:aPixelValueOrNil
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3205
    "set the pixel at x/y to aColor.
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3206
     If aPixelValueOrNil is nil, the mask pixel will be set to 0 (transparent),
5138
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  3207
     otherwise to 1. (used by the bitmap editor)"
2502
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3208
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3209
    |pixVal maskVal|
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3210
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  3211
    aPixelValueOrNil notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3212
        pixVal := aPixelValueOrNil.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3213
        maskVal := 1.
2502
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3214
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3215
        pixVal := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3216
        maskVal := 0.
2502
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3217
    ].
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3218
    mask notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3219
        mask pixelAt:aPoint put:maskVal
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  3220
    ].
2502
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3221
    self pixelAt:aPoint put:pixVal
2380
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  3222
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  3223
    "Modified: / 30.9.1998 / 22:42:44 / cg"
1972
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
  3224
!
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
  3225
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3226
atPoint:aPoint
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3227
    "ST-80 compatibility: return the pixelValue at:aPoint."
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3228
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3229
    ^ self pixelAtX:aPoint x y:aPoint y
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3230
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3231
    "Modified: 24.4.1997 / 16:18:44 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3232
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3233
1433
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  3234
atPoint:aPoint put:aPixelValue
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  3235
    "ST-80 compatibility: set the pixelValue at:aPoint."
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  3236
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3237
    ^ self pixelAtX:aPoint x y:aPoint y put:aPixelValue
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3238
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3239
    "Modified: 24.4.1997 / 17:17:59 / cg"
1433
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  3240
!
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  3241
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  3242
atX:x y:y
7482
0e29bd25788b #QUALITY by stefan
Stefan Vogel <sv@exept.de>
parents: 7481
diff changeset
  3243
    <resource: #obsolete>
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3244
    "WARNING: for now, this returns a pixel's color
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3245
     (backward compatibility with ST/X)
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3246
     In the future, this will return a pixel value (ST-80 compatibility)
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3247
     Use #colorAt: - for future compatibility.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3248
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3249
     Retrieve a pixel at x/y; return a color.
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3250
     Pixels start at 0@0 for upper left pixel, end at
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3251
     (width-1)@(height-1) for lower right pixel.
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
  3252
     You should not use this method for image-processing, its
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3253
     very slow ...
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3254
     (it is meant to access individual pixels - for example, in a bitmap editor)"
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
  3255
7482
0e29bd25788b #QUALITY by stefan
Stefan Vogel <sv@exept.de>
parents: 7481
diff changeset
  3256
    self obsoleteFeatureWarning:'Image [warning]: the Image>>atX:y: will change semantics soon; use #colorAtX:y:'.
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3257
    ^ self colorAtX:x y:y
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3258
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3259
    "Modified: / 21-06-1997 / 13:10:32 / cg"
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3260
    "Modified (comment): / 29-08-2017 / 14:36:09 / cg"
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
  3261
!
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
  3262
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
  3263
atX:x y:y put:aColor
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3264
    "WARNING: for now, this expects a pixel's color
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3265
     (backward compatibility with ST/X)
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3266
     In the future, this will expect a pixel value (ST-80 compatibility)
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3267
     Use #colorAt:put: - for future compatibility.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3268
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3269
     set the pixel at x/y to aColor.
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3270
     Pixels start at 0@0 for the upper left pixel, end at
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3271
     (width-1)@(height-1) for the lower right pixel.
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  3272
     This method checks if the color can be stored in the image.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  3273
     (i.e. if the receiver is a palette image, the color must be present in there).
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  3274
     You should not use this method for image-processing, it is very slow ...
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3275
     (it is meant to access individual pixels - for example, in a bitmap editor)"
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3276
4380
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  3277
    aColor isInteger ifTrue:[
7482
0e29bd25788b #QUALITY by stefan
Stefan Vogel <sv@exept.de>
parents: 7481
diff changeset
  3278
        ^ self pixelAtX:x y:y put:aColor
0e29bd25788b #QUALITY by stefan
Stefan Vogel <sv@exept.de>
parents: 7481
diff changeset
  3279
    ].
0e29bd25788b #QUALITY by stefan
Stefan Vogel <sv@exept.de>
parents: 7481
diff changeset
  3280
    self obsoleteFeatureWarning:'Image [warning]: the Image>>atX:y:put: will change semantics soon; use #colorAtX:y:put:'.
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3281
    ^ self colorAtX:x y:y put:aColor
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3282
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3283
    "Modified: / 21-06-1997 / 13:10:44 / cg"
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3284
    "Modified (comment): / 29-08-2017 / 14:36:15 / cg"
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3285
!
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3286
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3287
atX:x y:y putValue:aPixelValue
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3288
    "set the pixel at x/y to aPixelValue.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3289
     The interpretation of the pixelValue depends on the photometric
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3290
     and the colormap. (see also: Image>>atX:y:put:)
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3291
     Pixels start at 0@0 for the upper left pixel, end at
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3292
     (width-1) @ (height-1) for the lower right pixel.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3293
     You should not use this method for image-processing, its
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3294
     very slow ...
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3295
     (it is meant to access individual pixels - for example, in a bitmap editor)"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3296
3433
809312fa7e4f Use <resource:#obsolete>
Stefan Vogel <sv@exept.de>
parents: 3426
diff changeset
  3297
    <resource:#obsolete>
809312fa7e4f Use <resource:#obsolete>
Stefan Vogel <sv@exept.de>
parents: 3426
diff changeset
  3298
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3299
    self obsoleteMethodWarning:'use #pixelAtX:y:put:'.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3300
    ^ self pixelAtX:x y:y put:aPixelValue.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3301
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3302
    "Modified: 24.4.1997 / 17:15:45 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3303
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3304
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3305
bits
7373
61933c223183 added metaData instVar (for free use by image reader)
Claus Gittinger <cg@exept.de>
parents: 7363
diff changeset
  3306
    "return the raw image data (pixel data);
61933c223183 added metaData instVar (for free use by image reader)
Claus Gittinger <cg@exept.de>
parents: 7363
diff changeset
  3307
     depending on the photometric, this has to be interpreted as monochrome,
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
  3308
     greyscale, palette or rgb data.
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  3309
     It is also packed to be dense, so a 4 bitPerSample palette image
4415
be0fa075e4c4 comment
Claus Gittinger <cg@exept.de>
parents: 4414
diff changeset
  3310
     will store 2 pixels per byte, whereas a 2-bitPerPixel image will store
be0fa075e4c4 comment
Claus Gittinger <cg@exept.de>
parents: 4414
diff changeset
  3311
     4 pixels per byte."
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3312
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
  3313
    bytes isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3314
        pixelFunction notNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3315
            self createPixelStore.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3316
            0 to:height-1 do:[:y |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3317
                0 to:width-1 do:[:x |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3318
                    self pixelAtX:x y:y put:(pixelFunction value:x value:y)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3319
                ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3320
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3321
        ].
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
  3322
    ].
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3323
    ^ bytes
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3324
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3325
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3326
colAt:x into:aPixelBuffer
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3327
    "fill aBuffer with pixel values retrieved from a single column.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3328
     (eg. a vertical span)    
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3329
     Notice: row/column coordinates start at 0."
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3330
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3331
    ^ self colAt:x into:aPixelBuffer startingAt:1
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3332
!
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3333
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3334
colAt:x into:aPixelBuffer startingAt:startIndex
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3335
    "fill aBuffer with pixel values retrieved from a single column.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3336
     (eg. a vertical span)    
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3337
     Notice: row/column coordinates start at 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3338
     This is a slow fallBack method, which works with any depth;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3339
     concrete image subclasses should redefine this for more performance."
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3340
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3341
    |h "{ Class: SmallInteger }"|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3342
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3343
    h := height-1.    
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3344
    0 to:h do:[:row |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3345
        aPixelBuffer at:(row + startIndex) put:(self pixelAtX:x y:row)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3346
    ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3347
!
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3348
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3349
colAt:x putAll:pixelArray
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3350
    "store a single column's pixels from bits in the argument;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3351
     (eg. a vertical span)    
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3352
     Notice: row/column coordinates start at 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3353
     This is a slow fallBack method, which works with any depth;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3354
     concrete image subclasses should redefine this for more performance."
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3355
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3356
    ^ self colAt:x putAll:pixelArray startingAt:1
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3357
!
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3358
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3359
colAt:x putAll:pixelArray startingAt:startIndex
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3360
    "store a single row's pixels from bits in the pixelArray argument.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3361
     (eg. a vertical span)    
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3362
     Notice: row/column coordinates start at 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3363
     This is a slow fallBack method, which works with any depth;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3364
     concrete image subclasses should redefine this for more performance."
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3365
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3366
    |h "{ Class: SmallInteger }"|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3367
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3368
    h := height-1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3369
    0 to:h do:[:row |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3370
        self pixelAtX:x y:row put:(pixelArray at:(row + startIndex))
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3371
    ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3372
    ^ pixelArray
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3373
!
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3374
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3375
colorAt:aPoint
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3376
    "retrieve a pixel at x/y; return a color.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3377
     Pixels start at 0@0 for upper left pixel, end at
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3378
     (width-1)@(height-1) for lower right pixel.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3379
     You should not use this method for image-processing, its
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3380
     very slow ...
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3381
     (it is meant to access individual pixels - for example, in a bitmap editor)"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3382
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3383
    ^ self colorAtX:(aPoint x) y:(aPoint y)
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3384
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3385
    "Created: 24.4.1997 / 17:02:31 / cg"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3386
!
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3387
1962
8c7377d243f6 save mask in storeOn.
tz
parents: 1950
diff changeset
  3388
colorAt: aPoint put:aColor
8c7377d243f6 save mask in storeOn.
tz
parents: 1950
diff changeset
  3389
8c7377d243f6 save mask in storeOn.
tz
parents: 1950
diff changeset
  3390
    self colorAtX: aPoint x y: aPoint y put:aColor
8c7377d243f6 save mask in storeOn.
tz
parents: 1950
diff changeset
  3391
!
8c7377d243f6 save mask in storeOn.
tz
parents: 1950
diff changeset
  3392
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3393
colorAtX:x y:y
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3394
    "retrieve a pixel at x/y; return a color.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3395
     Pixels start at 0@0 for upper left pixel, end at
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3396
     (width-1)@(height-1) for lower right pixel.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3397
     You should not use this method for image-processing, its
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3398
     very slow ...
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3399
     (it is meant to access individual pixels - for example, in a bitmap editor)"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3400
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3401
    |pixel|
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3402
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3403
    pixel := self pixelAtX:x y:y.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3404
    ^ self colorFromValue:pixel
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3405
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3406
    "Modified: 24.4.1997 / 16:18:53 / cg"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3407
    "Created: 24.4.1997 / 17:00:52 / cg"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3408
!
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3409
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3410
colorAtX:x y:y put:aColor
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3411
    "set the pixel at x/y to aColor.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3412
     Pixels start at 0@0 for the upper left pixel, end at
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3413
     (width-1)@(height-1) for the lower right pixel.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3414
     This method checks if the color can be stored in the image.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3415
     (i.e. if the receiver is a palette image, the color must be present in there).
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3416
     You should not use this method for image-processing, it is very slow ...
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3417
     (it is meant to access individual pixels - for example, in a bitmap editor)"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3418
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3419
    |pixel|
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3420
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3421
    pixel := self valueFromColor:aColor.
2182
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3422
    pixel isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3423
        ^ UnrepresentableColorSignal raiseErrorString:'cannot store color - not in colormap'.
2182
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3424
    ].
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3425
    self pixelAtX:x y:y put:pixel.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3426
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3427
    "Modified: 24.4.1997 / 17:36:20 / cg"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3428
!
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3429
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3430
data
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3431
    "for backward compatibility - will vanish"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3432
3433
809312fa7e4f Use <resource:#obsolete>
Stefan Vogel <sv@exept.de>
parents: 3426
diff changeset
  3433
    <resource:#obsolete>
809312fa7e4f Use <resource:#obsolete>
Stefan Vogel <sv@exept.de>
parents: 3426
diff changeset
  3434
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3435
    self obsoleteMethodWarning:'use #bits'.
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
  3436
    ^ self bits
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3437
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3438
    "Modified: 24.4.1997 / 17:37:57 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3439
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3440
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3441
data:aByteArray
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3442
    "for backward compatibility - will vanish"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3443
4175
a9e65365e590 Mark obsolete methods
Stefan Vogel <sv@exept.de>
parents: 4173
diff changeset
  3444
    <resource:#obsolete>
3966
950a2db201c7 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3964
diff changeset
  3445
    self obsoleteMethodWarning:'use #bits:'.
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
  3446
    self bits:aByteArray
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3447
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3448
    "Modified: 24.4.1997 / 17:38:18 / cg"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3449
!
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3450
2182
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3451
maskAt:aPoint
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3452
    "retrieve the maskValue at aPoint - an integer number which is
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3453
     0 for masked pixels (invisible), 1 for unmasked (visible).
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3454
     For images without mask, 1 is returned for all pixels."
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3455
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3456
    ^ self maskAtX:aPoint x y:aPoint y
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3457
!
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3458
3457
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
  3459
maskAt:aPoint put:maskValue
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
  3460
    "set the maskValue at aPoint - an integer number which is
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
  3461
     0 for masked pixels (invisible), 1 for unmasked (visible)."
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
  3462
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
  3463
    ^ self maskAtX:aPoint x y:aPoint y put:maskValue
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
  3464
!
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
  3465
2182
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3466
maskAtX:x y:y
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3467
    "retrieve the maskValue at aPoint - an integer number which is
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3468
     0 for masked pixels (invisible), 1 for unmasked (visible).
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3469
     For images without mask, 1 is returned for all pixels."
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3470
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3471
    mask isNil ifTrue:[^ 1].
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3472
    ^ mask pixelAtX:x y:y
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3473
!
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3474
3457
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
  3475
maskAtX:x y:y put:maskValue
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
  3476
    "set the maskValue at aPoint - an integer number which is
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
  3477
     0 for masked pixels (invisible), 1 for unmasked (visible)."
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
  3478
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
  3479
    mask isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3480
        maskValue == 1 ifTrue:[^ self].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3481
        self error:'image has no mask'.
3457
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
  3482
    ].
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
  3483
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
  3484
    ^ mask pixelAtX:x y:y put:maskValue
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
  3485
!
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
  3486
2205
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  3487
pixelAt:aPoint
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  3488
    "retrieve a pixel at x/y; return a pixel value.
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  3489
     Pixels start at 0@0 for upper left pixel, end at
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  3490
     (width-1)@(height-1) for lower right pixel.
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  3491
     You should not use this method for image-processing, its
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  3492
     very slow ...
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  3493
     (it is meant to access individual pixels - for example, in a bitmap editor)"
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  3494
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  3495
    ^ self pixelAtX:(aPoint x) y:(aPoint y)
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  3496
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  3497
    "Created: / 29.7.1998 / 02:48:52 / cg"
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  3498
!
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  3499
2380
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  3500
pixelAt:aPoint put:aPixelValue
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  3501
    "set the pixel at x/y to aPixelValue.
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  3502
     The interpretation of the pixelValue depends on the photometric
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  3503
     and the colormap. (see also: Image>>atX:y:put:)
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  3504
     Pixels start at 0@0 for the upper left pixel, end at
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  3505
     (width-1) @ (height-1) for the lower right pixel.
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  3506
     You should not use this method for image-processing, its
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  3507
     very slow ...
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  3508
     (it is meant to access individual pixels - for example, in a bitmap editor)"
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  3509
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  3510
    ^ self pixelAtX:aPoint x y:aPoint y put:aPixelValue
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  3511
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  3512
    "Created: / 30.9.1998 / 22:40:43 / cg"
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  3513
!
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  3514
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3515
pixelAtX:x y:y
7519
c0603c8183dc #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7511
diff changeset
  3516
    "retrieve the pixelValue at aPoint; return a pixel (an integer number).
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3517
     Pixels start at 0/0 for upper left pixel, and end at
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3518
     width-1@height-1 for lower right pixel.
7519
c0603c8183dc #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7511
diff changeset
  3519
     The returned number's interpretation depends on the photometric
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3520
     and the colormap. (see also Image>>at: and Image>>atX:y:)
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3521
     You should not use this method for image-processing of
7519
c0603c8183dc #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7511
diff changeset
  3522
     big images, it's very slow ...
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3523
     (it is meant to access individual pixels - for example, in a bitmap editor)"
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
  3524
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
  3525
    pixelFunction notNil ifTrue:[^ pixelFunction value:x value:y].
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
  3526
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
  3527
    ^ self subclassResponsibility
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3528
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3529
    "Created: 24.4.1997 / 16:06:56 / cg"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3530
!
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3531
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3532
pixelAtX:x y:y put:aPixelValue
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3533
    "set the pixel at x/y to aPixelValue.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3534
     The interpretation of the pixelValue depends on the photometric
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3535
     and the colormap. (see also: Image>>atX:y:put:)
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3536
     Pixels start at 0@0 for the upper left pixel, end at
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3537
     (width-1) @ (height-1) for the lower right pixel.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3538
     You should not use this method for image-processing, its
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3539
     very slow ...
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3540
     (it is meant to access individual pixels - for example, in a bitmap editor)"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3541
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3542
    ^ self subclassResponsibility
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3543
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3544
    "Created: 24.4.1997 / 17:05:11 / cg"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3545
!
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3546
4117
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
  3547
rgbValueAt:aPoint
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3548
    "retrieve a pixel's rgb value at x/y; 
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3549
     return a 24bit rgbValue (rrggbb, red is MSB).
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3550
     Pixels start at 0@0 for the upper left pixel, 
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3551
     and end at (width-1)@(height-1) for the lower right pixel."
4117
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
  3552
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
  3553
    ^ self rgbValueAtX:(aPoint x) y:(aPoint y)
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3554
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3555
    "Modified (comment): / 29-08-2017 / 14:36:33 / cg"
4117
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
  3556
!
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
  3557
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
  3558
rgbValueAtX:x y:y
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3559
    "retrieve a pixel's rgb value at x/y; 
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3560
     return a 24bit rgbValue (rrggbb, red is MSB).
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3561
     Pixels start at 0@0 for the upper left pixel, 
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3562
     and end at (width-1)@(height-1) for the lower right pixel."
4117
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
  3563
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
  3564
    |pixel|
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
  3565
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
  3566
    pixel := self pixelAtX:x y:y.
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
  3567
    ^ self rgbFromValue:pixel
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3568
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3569
    "Modified (comment): / 29-08-2017 / 14:36:48 / cg"
4117
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
  3570
!
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
  3571
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 6037
diff changeset
  3572
rgbValueAtX:x y:y put:newRGBValue
4858
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
  3573
    |value|
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
  3574
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
  3575
    value := self valueFromRGB:newRGBValue.
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
  3576
    self pixelAtX:x y:y put:value.
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
  3577
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
  3578
    "Created: / 15-01-2008 / 15:56:10 / cg"
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
  3579
!
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
  3580
3872
390fabbc3036 comments and slight cleanup
Claus Gittinger <cg@exept.de>
parents: 3871
diff changeset
  3581
rowAt:y
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3582
    "retrieve an array filled with pixel values from a single row.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3583
     (eg. a horizontal span)    
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3584
     Notice: row/column coordinates start at 0.
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3585
     This is a slow fallBack method, which works with any depth;
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3586
     concrete image subclasses should redefine this for more performance."
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3587
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3588
    |pixelArray|
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3589
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3590
    pixelArray := self pixelArraySpecies new:width.
3872
390fabbc3036 comments and slight cleanup
Claus Gittinger <cg@exept.de>
parents: 3871
diff changeset
  3591
    self rowAt:y into:pixelArray startingAt:1.
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3592
    ^ pixelArray
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3593
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3594
    "
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3595
     |i|
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3596
3476
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
  3597
     i := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3598
     (i rowAt:0) inspect
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3599
    "
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3600
    "
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3601
     |i|
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3602
4168
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
  3603
     i := Image fromFile:'libtool/bitmaps/SBrowser.xbm'.
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3604
     (i rowAt:0) inspect
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3605
    "
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3606
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3607
    "Modified: 24.4.1997 / 15:51:24 / cg"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3608
!
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3609
3872
390fabbc3036 comments and slight cleanup
Claus Gittinger <cg@exept.de>
parents: 3871
diff changeset
  3610
rowAt:y into:aPixelBuffer
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3611
    "fill aBuffer with pixel values retrieved from a single row.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3612
     (eg. a horizontal span)    
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3613
     Notice: row/column coordinates start at 0."
3872
390fabbc3036 comments and slight cleanup
Claus Gittinger <cg@exept.de>
parents: 3871
diff changeset
  3614
390fabbc3036 comments and slight cleanup
Claus Gittinger <cg@exept.de>
parents: 3871
diff changeset
  3615
    ^ self rowAt:y into:aPixelBuffer startingAt:1
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3616
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3617
    "Created: 24.4.1997 / 15:44:46 / cg"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3618
    "Modified: 24.4.1997 / 15:51:35 / cg"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3619
!
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3620
3872
390fabbc3036 comments and slight cleanup
Claus Gittinger <cg@exept.de>
parents: 3871
diff changeset
  3621
rowAt:y into:aPixelBuffer startingAt:startIndex
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3622
    "fill aBuffer with pixel values retrieved from a single row.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3623
     (eg. a horizontal span)    
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3624
     Notice: row/column coordinates start at 0.
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3625
     This is a slow fallBack method, which works with any depth;
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3626
     concrete image subclasses should redefine this for more performance."
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3627
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3628
    |w "{ Class: SmallInteger }"|
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3629
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3630
    w := width-1.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3631
    0 to:w do:[:col |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3632
        aPixelBuffer at:(col + startIndex) put:(self pixelAtX:col y:y)
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3633
    ].
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3634
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3635
    "Created: 24.4.1997 / 15:05:21 / cg"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3636
    "Modified: 24.4.1997 / 16:52:43 / cg"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3637
!
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3638
3872
390fabbc3036 comments and slight cleanup
Claus Gittinger <cg@exept.de>
parents: 3871
diff changeset
  3639
rowAt:y putAll:pixelArray
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3640
    "store a single row's pixels from bits in the argument;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3641
     (eg. a horizontal span)    
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3642
     Notice: row/column coordinates start at 0.
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3643
     This is a slow fallBack method, which works with any depth;
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3644
     concrete image subclasses should redefine this for more performance."
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3645
3872
390fabbc3036 comments and slight cleanup
Claus Gittinger <cg@exept.de>
parents: 3871
diff changeset
  3646
    ^ self rowAt:y putAll:pixelArray startingAt:1
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3647
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3648
    "Modified: 24.4.1997 / 15:51:58 / cg"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3649
!
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3650
3872
390fabbc3036 comments and slight cleanup
Claus Gittinger <cg@exept.de>
parents: 3871
diff changeset
  3651
rowAt:y putAll:pixelArray startingAt:startIndex
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3652
    "store a single row's pixels from bits in the pixelArray argument;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3653
     (eg. a horizontal span)    
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3654
     Notice: row/column coordinates start at 0.
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3655
     This is a slow fallBack method, which works with any depth;
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3656
     concrete image subclasses should redefine this for more performance."
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3657
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3658
    |w "{ Class: SmallInteger }"|
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3659
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3660
    w := width-1.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3661
    0 to:w do:[:col |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3662
        self pixelAtX:col y:y put:(pixelArray at:(col + startIndex))
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3663
    ].
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3664
    ^ pixelArray
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3665
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3666
    "Modified: 24.4.1997 / 17:05:57 / cg"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3667
!
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3668
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3669
valueAt:aPoint
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3670
    "WARNING: for now, this returns a pixel's value
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3671
     (backward compatibility with ST/X)
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3672
     In the future, this will return a color (ST-80 compatibility)
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3673
     Use #pixelAt: - for future compatibility.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3674
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3675
     Retrieve the pixelValue at aPoint; return an integer number.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3676
     Pixels start at 0@0 for upper left pixel, end at
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3677
     width-1@height-1 for lower right pixel.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3678
     The returned numbers interpretation depends on the photometric
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3679
     and the colormap. (see also Image>>at: and Image>>atX:y:)
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3680
     You should not use this method for image-processing, its
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3681
     very slow ...
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3682
     (it is meant to access individual pixels - for example, in a bitmap editor)"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3683
1764
01101be8bd5c obsolete warning messages
Claus Gittinger <cg@exept.de>
parents: 1763
diff changeset
  3684
    'Image [warning]: the Image>>valueAt: will change semantics soon; use #pixelAt:' infoPrintCR.
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3685
    ^ self pixelAtX:aPoint x y:aPoint y
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3686
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3687
    "Modified: / 21-06-1997 / 13:11:19 / cg"
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3688
    "Modified (comment): / 29-08-2017 / 14:36:52 / cg"
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3689
!
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3690
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3691
valueAtX:x y:y
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3692
    "WARNING: for now, this returns a pixel's value
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3693
     (backward compatibility with ST/X)
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3694
     In the future, this will return a color (ST-80 compatibility)
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3695
     Use #pixelAt: - for future compatibility.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3696
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3697
     Retrieve the pixelValue at aPoint; return an integer number.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3698
     Pixels start at 0/0 for upper left pixel, and end at
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3699
     width-1@height-1 for lower right pixel.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3700
     The returned numbers interpretation depends on the photometric
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3701
     and the colormap. (see also Image>>at: and Image>>atX:y:)
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3702
     You should not use this method for image-processing of
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  3703
     big images, its very slow ...
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3704
     (it is meant to access individual pixels - for example, in a bitmap editor)"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3705
1764
01101be8bd5c obsolete warning messages
Claus Gittinger <cg@exept.de>
parents: 1763
diff changeset
  3706
    'Image [warning]: the Image>>valueAtX:y: will change semantics soon; use #pixelAtX:y' infoPrintCR.
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3707
    ^ self pixelAtX:x y:y
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3708
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3709
    "Modified: / 21-06-1997 / 13:11:29 / cg"
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3710
    "Modified (comment): / 29-08-2017 / 14:36:57 / cg"
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3711
! !
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3712
3263
bd92a12c9316 category changes
Claus Gittinger <cg@exept.de>
parents: 3259
diff changeset
  3713
!Image methodsFor:'accessing-private'!
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3714
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3715
bits:aByteArray
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3716
    "set the raw data.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3717
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3718
     This interface is only to be used when initializing
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3719
     instances or by image readers. Calling for a change of an
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
  3720
     existing image may confuse later pixel interpretation
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
  3721
     (it does not care for colormaps and/or cached device image flushing)."
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3722
6894
0fc111a48edf class: Image
Claus Gittinger <cg@exept.de>
parents: 6862
diff changeset
  3723
    |expectedSize d|
0fc111a48edf class: Image
Claus Gittinger <cg@exept.de>
parents: 6862
diff changeset
  3724
0fc111a48edf class: Image
Claus Gittinger <cg@exept.de>
parents: 6862
diff changeset
  3725
    bytes := aByteArray.
0fc111a48edf class: Image
Claus Gittinger <cg@exept.de>
parents: 6862
diff changeset
  3726
0fc111a48edf class: Image
Claus Gittinger <cg@exept.de>
parents: 6862
diff changeset
  3727
    "/ sanity check:
0fc111a48edf class: Image
Claus Gittinger <cg@exept.de>
parents: 6862
diff changeset
  3728
    "/ there seem to be images in some image-resource methods,
0fc111a48edf class: Image
Claus Gittinger <cg@exept.de>
parents: 6862
diff changeset
  3729
    "/ which were written with an invalid packed pixel string.
0fc111a48edf class: Image
Claus Gittinger <cg@exept.de>
parents: 6862
diff changeset
  3730
    "/ leave this in for a while and watch out for the halt below.
0fc111a48edf class: Image
Claus Gittinger <cg@exept.de>
parents: 6862
diff changeset
  3731
    "/ If you encounter this halt,
0fc111a48edf class: Image
Claus Gittinger <cg@exept.de>
parents: 6862
diff changeset
  3732
    "/ please edit the image in the image editor and save it back.
7373
61933c223183 added metaData instVar (for free use by image reader)
Claus Gittinger <cg@exept.de>
parents: 7363
diff changeset
  3733
6894
0fc111a48edf class: Image
Claus Gittinger <cg@exept.de>
parents: 6862
diff changeset
  3734
    (width notNil and:[height notNil and:[(d := self depth) notNil]]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3735
        (d <= 8) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3736
            expectedSize := (self bytesPerRow * height).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3737
            bytes size < expectedSize ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3738
                Smalltalk isSmalltalkDevelopmentSystem ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3739
                    self breakPoint:#cg info:'invalid bytearray size'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3740
                ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3741
                bytes := (ByteArray new:expectedSize) replaceFrom:1 with:bytes; yourself.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3742
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3743
        ].
6894
0fc111a48edf class: Image
Claus Gittinger <cg@exept.de>
parents: 6862
diff changeset
  3744
    ].
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3745
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3746
    "Modified: 23.4.1996 / 11:08:28 / cg"
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
  3747
!
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
  3748
6900
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3749
bits:aByteArrayArg colorMap:clrMapArg
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3750
    "set the raw data.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3751
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3752
     This interface is only to be used when initializing
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3753
     instances or by image readers. Calling for a change of an
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3754
     existing image may confuse later pixel interpretation
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3755
     (it does not care for colormaps and/or cached device image flushing)."
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3756
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3757
    self bits:aByteArrayArg.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3758
    self colorMap:clrMapArg.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3759
!
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3760
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3761
bits:aByteArrayArg colorMap:clrMapArg mask:maskArg
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3762
    "set the raw data.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3763
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3764
     This interface is only to be used when initializing
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3765
     instances or by image readers. Calling for a change of an
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3766
     existing image may confuse later pixel interpretation
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3767
     (it does not care for colormaps and/or cached device image flushing)."
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3768
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3769
    self bits:aByteArrayArg.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3770
    self colorMap:clrMapArg.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3771
    self mask:maskArg
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3772
!
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3773
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3774
bits:aByteArrayArg colorMapFromArray:clrMapArg
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3775
    "set the raw data.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3776
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3777
     This interface is only to be used when initializing
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3778
     instances or by image readers. Calling for a change of an
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3779
     existing image may confuse later pixel interpretation
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3780
     (it does not care for colormaps and/or cached device image flushing)."
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3781
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3782
    self bits:aByteArrayArg.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3783
    self colorMapFromArray:clrMapArg.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3784
!
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3785
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3786
bits:aByteArrayArg colorMapFromArray:clrMapArg mask:maskArg
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3787
    "set the raw data.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3788
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3789
     This interface is only to be used when initializing
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3790
     instances or by image readers. Calling for a change of an
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3791
     existing image may confuse later pixel interpretation
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3792
     (it does not care for colormaps and/or cached device image flushing)."
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3793
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3794
    self bits:aByteArrayArg.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3795
    self colorMapFromArray:clrMapArg.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3796
    self mask:maskArg
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3797
!
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3798
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3799
bits:aByteArrayArg mask:maskArg
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3800
    "set the raw data.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3801
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3802
     This interface is only to be used when initializing
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3803
     instances or by image readers. Calling for a change of an
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3804
     existing image may confuse later pixel interpretation
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3805
     (it does not care for colormaps and/or cached device image flushing)."
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3806
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3807
    self bits:aByteArrayArg.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3808
    self mask:maskArg
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3809
!
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3810
4115
0e783379a6b0 Use ByteArray for bitsPerSample (255 should be enough ;-)
Stefan Vogel <sv@exept.de>
parents: 4109
diff changeset
  3811
bitsPerSample:aCollection
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  3812
    "set the number of bits per sample.
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3813
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3814
     This interface is only to be used when initializing
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3815
     instances or by image readers. Calling for a change of an
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3816
     existing image may confuse later pixel interpretation."
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3817
7373
61933c223183 added metaData instVar (for free use by image reader)
Claus Gittinger <cg@exept.de>
parents: 7363
diff changeset
  3818
    "/ the following is a trick to get both shared and immutable instances,
61933c223183 added metaData instVar (for free use by image reader)
Claus Gittinger <cg@exept.de>
parents: 7363
diff changeset
  3819
    "/ at least for the most common cases.
7363
778803c164cd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7349
diff changeset
  3820
    "/ Prevents writers to do what is described above.
778803c164cd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7349
diff changeset
  3821
    "/ Do not remove, as you might not understand it!!
7373
61933c223183 added metaData instVar (for free use by image reader)
Claus Gittinger <cg@exept.de>
parents: 7363
diff changeset
  3822
    bitsPerSample :=
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3823
        #(
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3824
            #[ 8 8 8 ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3825
            #[ 4 4 4 ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3826
            #[ 8 ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3827
            #[ 4 ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3828
            #[ 2 ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3829
            #[ 1 ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3830
        ) detect:[:bps | bps sameContentsAs:aCollection] ifNone:[aCollection asByteArray].
7363
778803c164cd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7349
diff changeset
  3831
6899
4530c3bfcef8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6896
diff changeset
  3832
    samplesPerPixel isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3833
        samplesPerPixel := bitsPerSample size.
6899
4530c3bfcef8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6896
diff changeset
  3834
    ].
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3835
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3836
    "Modified: 23.4.1996 / 11:08:31 / cg"
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3837
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3838
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3839
depth:d
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3840
    "set the depth of the image.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3841
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3842
     This interface is only to be used when initializing
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3843
     instances or by image readers. Calling for a change of an
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3844
     existing image may confuse later pixel interpretation."
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3845
1362
454d644f6ff7 set depth & bitsPerPixel for ST-80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 1349
diff changeset
  3846
    depth := self depth.
7180
40dcb4638d93 #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 7176
diff changeset
  3847
    "/ bitsPerPixel := d.
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3848
    d == 24 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3849
        samplesPerPixel := 3.
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  3850
        bitsPerSample := #[8 8 8]
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3851
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3852
        d == 32 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3853
            samplesPerPixel := 4.
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  3854
            bitsPerSample := #[8 8 8 8]
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3855
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3856
            d == 16 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3857
                samplesPerPixel := 3.
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  3858
                bitsPerSample := #[5 5 5].
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3859
                "/ bitsPerPixel := 15.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3860
            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3861
                samplesPerPixel := 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3862
                bitsPerSample := ByteArray with:d
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3863
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3864
        ]
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3865
    ]
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3866
4757
60d27f8e65bb some fixes for depth32
Claus Gittinger <cg@exept.de>
parents: 4745
diff changeset
  3867
    "Modified: / 27-05-2007 / 16:59:47 / cg"
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  3868
    "Modified: / 30-01-2017 / 19:36:00 / stefan"
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3869
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3870
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3871
extent:anExtent
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3872
    "set the images extent.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3873
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3874
     This interface is only to be used when initializing
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3875
     instances or by image readers. Calling for a change of an
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3876
     existing image may confuse later pixel interpretation."
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3877
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3878
    width := anExtent x.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3879
    height := anExtent y
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3880
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3881
    "Modified: 23.4.1996 / 11:08:38 / cg"
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3882
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3883
5326
0443d8649cac *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5319
diff changeset
  3884
hasAlphaChannel
0443d8649cac *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5319
diff changeset
  3885
    ^ false
0443d8649cac *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5319
diff changeset
  3886
!
0443d8649cac *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5319
diff changeset
  3887
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3888
height:aNumber
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3889
    "set the height of the image.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3890
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3891
     This interface is only to be used when initializing
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3892
     instances or by image readers. Calling for a change of an
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3893
     existing image may confuse later pixel interpretation."
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3894
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3895
    height := aNumber
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3896
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3897
    "Modified: 23.4.1996 / 11:08:40 / cg"
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3898
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3899
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3900
photometric:aSymbol
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3901
    "set the photometric interpretation of the pixel values.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3902
     The argument, aSymbol is one of:
7960
8d8cace1b6e0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7958
diff changeset
  3903
        #blackIs0, #whiteIs0, #palette, #rgb, #rgba
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3904
     See TIFF documentation, from which the photometric concept is borrowed.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3905
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3906
     This interface is only to be used when initializing
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3907
     instances or by image readers. Calling for a change of an
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3908
     existing image may confuse later pixel interpretation."
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3909
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  3910
    |b|
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  3911
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  3912
    photometric := aSymbol.
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  3913
    bitsPerSample isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3914
        photometric == #rgb ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3915
            b := self class imageDepth // 3.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3916
            bitsPerSample := ByteArray with:b with:b with:b
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3917
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3918
            bitsPerSample := ByteArray with:(self class imageDepth)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3919
        ].
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  3920
    ].
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  3921
    samplesPerPixel isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3922
        photometric == #rgb ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3923
            samplesPerPixel := 3
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3924
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3925
            samplesPerPixel := 1
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3926
        ]
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  3927
    ].
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  3928
7960
8d8cace1b6e0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7958
diff changeset
  3929
    "Modified: / 10-06-1996 / 18:21:29 / cg"
8d8cace1b6e0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7958
diff changeset
  3930
    "Modified (comment): / 25-02-2017 / 10:41:53 / cg"
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3931
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3932
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3933
samplesPerPixel:aNumber
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3934
    "set the array of samples per pixel.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3935
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3936
     This interface is only to be used when initializing
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3937
     instances or by image readers. Calling for a change of an
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3938
     existing image may confuse later pixel interpretation."
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3939
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3940
    samplesPerPixel := aNumber
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3941
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3942
    "Modified: 23.4.1996 / 11:08:45 / cg"
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3943
!
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3944
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3945
width:aNumber
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3946
    "set the width of the image.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3947
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3948
     This interface is only to be used when initializing
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3949
     instances or by image readers. Calling for a change of an
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3950
     existing image may confuse later pixel interpretation."
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3951
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3952
    width := aNumber
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3953
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3954
    "Modified: 23.4.1996 / 11:08:48 / cg"
100
1b0b86c77397 co !!:*
claus
parents: 89
diff changeset
  3955
!
1b0b86c77397 co !!:*
claus
parents: 89
diff changeset
  3956
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  3957
width:w height:h
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3958
    "set the width and height of the image.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3959
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3960
     This interface is only to be used when initializing
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3961
     instances or by image readers. Calling for a change of an
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3962
     existing image may confuse later pixel interpretation."
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3963
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3964
    width := w.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3965
    height := h
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3966
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3967
    "Modified: 23.4.1996 / 11:08:53 / cg"
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3968
!
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
  3969
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3970
width:w height:h depth:d
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3971
    "set the width, height and depth of the image.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3972
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3973
     This interface is only to be used when initializing
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3974
     instances or by image readers. Calling for a change of an
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3975
     existing image may confuse later pixel interpretation."
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3976
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3977
    width := w.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3978
    height := h.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3979
    self depth:d.
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3980
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3981
    "Modified: 23.4.1996 / 11:08:56 / cg"
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  3982
!
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  3983
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3984
width:w height:h depth:d fromArray:bits
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3985
    "set the width, height, depth and pixels of the image.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3986
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3987
     This interface is only to be used when initializing
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3988
     instances or by image readers. Calling for a change of an
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3989
     existing image may confuse later pixel interpretation."
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3990
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3991
    width := w.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3992
    height := h.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3993
    self depth:d.
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
  3994
    self bits:bits
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3995
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3996
    "Modified: 23.4.1996 / 11:08:59 / cg"
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3997
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3998
1433
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  3999
width:w height:h depth:d palette:aColormap
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  4000
    "set the width, height and depth of the image.
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  4001
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  4002
     This interface is only to be used when initializing
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  4003
     instances or by image readers. Calling for a change of an
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  4004
     existing image may confuse later pixel interpretation."
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  4005
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  4006
    width := w.
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  4007
    height := h.
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  4008
    self depth:d.
3863
b7ba8a04be25 always ensure colorMap is a real colorMap
Claus Gittinger <cg@exept.de>
parents: 3861
diff changeset
  4009
    self setColorMap:aColormap.
1433
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  4010
    aColormap notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4011
        photometric := #palette
4955
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
  4012
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4013
        photometric := #blackIs0
4955
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
  4014
    ].
1433
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  4015
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  4016
    "Modified: 23.4.1996 / 11:08:56 / cg"
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  4017
    "Created: 6.3.1997 / 15:23:57 / cg"
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  4018
!
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  4019
6900
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  4020
width:w height:h photometric:p
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  4021
    "set the width, height and photometric of the image.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  4022
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  4023
     This interface is only to be used when initializing
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  4024
     instances or by image readers. Calling for a change of an
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  4025
     existing image may confuse later pixel interpretation."
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  4026
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  4027
    width := w.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  4028
    height := h.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  4029
    self photometric:p.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  4030
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  4031
    "Modified: 23.4.1996 / 11:08:56 / cg"
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  4032
!
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  4033
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4034
width:w height:h photometric:p samplesPerPixel:spp bitsPerSample:bps colorMap:cm bits:pixels
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4035
    "set all relevant internal state of the image.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4036
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4037
     This interface is only to be used when initializing
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4038
     instances or by image readers. Calling for a change of an
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4039
     existing image may confuse later pixel interpretation."
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4040
894
1041c0edbd35 prepare to read mask/alpha channel
Claus Gittinger <cg@exept.de>
parents: 891
diff changeset
  4041
    ^ self
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4042
        width:w
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4043
        height:h
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4044
        photometric:p
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4045
        samplesPerPixel:spp
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4046
        bitsPerSample:bps
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4047
        colorMap:cm
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4048
        bits:pixels
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4049
        mask:nil
894
1041c0edbd35 prepare to read mask/alpha channel
Claus Gittinger <cg@exept.de>
parents: 891
diff changeset
  4050
1041c0edbd35 prepare to read mask/alpha channel
Claus Gittinger <cg@exept.de>
parents: 891
diff changeset
  4051
    "Modified: 20.6.1996 / 17:10:24 / cg"
1041c0edbd35 prepare to read mask/alpha channel
Claus Gittinger <cg@exept.de>
parents: 891
diff changeset
  4052
!
1041c0edbd35 prepare to read mask/alpha channel
Claus Gittinger <cg@exept.de>
parents: 891
diff changeset
  4053
1041c0edbd35 prepare to read mask/alpha channel
Claus Gittinger <cg@exept.de>
parents: 891
diff changeset
  4054
width:w height:h photometric:p samplesPerPixel:spp bitsPerSample:bps colorMap:cm bits:pixels mask:m
1041c0edbd35 prepare to read mask/alpha channel
Claus Gittinger <cg@exept.de>
parents: 891
diff changeset
  4055
    "set all relevant internal state of the image.
1041c0edbd35 prepare to read mask/alpha channel
Claus Gittinger <cg@exept.de>
parents: 891
diff changeset
  4056
1041c0edbd35 prepare to read mask/alpha channel
Claus Gittinger <cg@exept.de>
parents: 891
diff changeset
  4057
     This interface is only to be used when initializing
1041c0edbd35 prepare to read mask/alpha channel
Claus Gittinger <cg@exept.de>
parents: 891
diff changeset
  4058
     instances or by image readers. Calling for a change of an
1041c0edbd35 prepare to read mask/alpha channel
Claus Gittinger <cg@exept.de>
parents: 891
diff changeset
  4059
     existing image may confuse later pixel interpretation."
1041c0edbd35 prepare to read mask/alpha channel
Claus Gittinger <cg@exept.de>
parents: 891
diff changeset
  4060
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4061
    width := w.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4062
    height := h.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4063
    photometric := p.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4064
    samplesPerPixel := spp.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4065
    bitsPerSample := bps.
3863
b7ba8a04be25 always ensure colorMap is a real colorMap
Claus Gittinger <cg@exept.de>
parents: 3861
diff changeset
  4066
    self setColorMap:cm.
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
  4067
    self bits:pixels.
894
1041c0edbd35 prepare to read mask/alpha channel
Claus Gittinger <cg@exept.de>
parents: 891
diff changeset
  4068
    mask := m.
1041c0edbd35 prepare to read mask/alpha channel
Claus Gittinger <cg@exept.de>
parents: 891
diff changeset
  4069
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4070
    "Modified: 23.4.1996 / 11:09:02 / cg"
894
1041c0edbd35 prepare to read mask/alpha channel
Claus Gittinger <cg@exept.de>
parents: 891
diff changeset
  4071
    "Created: 20.6.1996 / 17:09:53 / cg"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  4072
! !
48194c26a46c Initial revision
claus
parents:
diff changeset
  4073
5135
0a2a850a20cc *** empty log message ***
sr
parents: 5126
diff changeset
  4074
2205
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4075
!Image methodsFor:'conversion helpers'!
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4076
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4077
rgbColormapFor:aDevice
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4078
    "helper for conversion to rgb format"
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4079
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4080
    |nColors    "{ Class: SmallInteger }"
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4081
     scaleRed scaleGreen scaleBlue
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4082
     redShift   "{ Class: SmallInteger }"
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4083
     greenShift "{ Class: SmallInteger }"
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4084
     blueShift  "{ Class: SmallInteger }"
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4085
     colorValues|
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4086
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4087
    "/ gather r/g/b values for all colors in the map ...
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4088
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4089
    nColors := 1 bitShift:(self depth).
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4090
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4091
    "/ precompute scales to map from 0..100 into devices range
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4092
    "/ (this may be different for the individual components)
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4093
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4094
    scaleRed := ((1 bitShift:aDevice bitsRed) - 1) / 100.
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4095
    scaleGreen := ((1 bitShift:aDevice bitsGreen) - 1) / 100.
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4096
    scaleBlue := ((1 bitShift:aDevice bitsBlue) - 1) / 100.
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4097
    redShift := aDevice shiftRed.
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4098
    greenShift := aDevice shiftGreen.
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4099
    blueShift := aDevice shiftBlue.
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4100
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4101
    colorValues := Array uninitializedNew:nColors.
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4102
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4103
    0 to:nColors-1 do:[:pixel |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4104
        |clr rv gv bv v "{ Class: SmallInteger }" |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4105
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4106
        clr := self colorFromValue:pixel.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4107
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4108
        rv := (clr red * scaleRed) rounded.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4109
        gv := (clr green * scaleGreen) rounded.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4110
        bv := (clr blue * scaleBlue) rounded.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4111
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4112
        v := rv bitShift:redShift.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4113
        v := v bitOr:(gv bitShift:greenShift).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4114
        v := v bitOr:(bv bitShift:blueShift).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4115
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4116
        colorValues at:(pixel+1) put:v.
2205
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4117
"/ clr print. ' ' print.
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4118
"/ rv print. ' ' print. gv print. ' ' print. bv print. ' ' print.
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4119
"/ ' -> ' print. v printNL.
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4120
    ].
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4121
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4122
    ^ colorValues
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4123
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4124
    "Modified: / 29.7.1998 / 00:34:56 / cg"
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4125
! !
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4126
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  4127
!Image methodsFor:'converting'!
48194c26a46c Initial revision
claus
parents:
diff changeset
  4128
8113
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4129
anyImageAsTrueColorFormOn:aDevice
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4130
    "general fallback to return a true-color device-form for the receiver."
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4131
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4132
    |form bestFormat usedDeviceDepth usedDeviceBitsPerPixel
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4133
     pixelValue "{ Class: SmallInteger }"
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4134
     h          "{ Class: SmallInteger }"
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4135
     w          "{ Class: SmallInteger }"
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4136
     pixelArray newPixelArray i rgbValue|
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4137
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4138
    bestFormat := self bestSupportedImageFormatFor:aDevice.
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4139
    usedDeviceDepth := bestFormat at:#depth.
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4140
    usedDeviceBitsPerPixel := bestFormat at:#bitsPerPixel.
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4141
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4142
    i := (Image implementorForDepth:usedDeviceBitsPerPixel) new.
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4143
    i width:width height:height.
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4144
    i createPixelStore.
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4145
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4146
    "/ now, walk over the image and replace each pixel
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4147
    h := height - 1.
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4148
    w := width - 1.
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4149
    pixelArray := self pixelArraySpecies new:width.
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4150
    newPixelArray := i pixelArraySpecies new:width.
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4151
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4152
    0 to:h do:[:y |
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4153
        self rowAt:y into:pixelArray.
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4154
        0 to:w do:[:x |
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4155
            pixelValue := pixelArray at:(x+1).
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4156
            rgbValue := self rgbFromValue:pixelValue.
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4157
            newPixelArray at:(x+1) put:rgbValue.
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4158
        ].
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4159
        i rowAt:y putAll:newPixelArray.
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4160
    ].
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4161
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4162
    form := Form width:width height:height depth:usedDeviceDepth onDevice:aDevice.
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4163
    form isNil ifTrue:[^ nil].
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4164
    form initGC.
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4165
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4166
    form
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4167
        copyBitsFrom:i bits
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4168
        bitsPerPixel:usedDeviceBitsPerPixel
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4169
        depth:usedDeviceDepth
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4170
        padding:8
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4171
        width:width height:height
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4172
        x:0 y:0
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4173
        toX:0 y:0.
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4174
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4175
    ^ form
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4176
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4177
    "Created: / 27-08-2017 / 21:06:14 / cg"
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4178
!
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4179
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  4180
asFormOn:aDevice
72
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
  4181
    "get a device form, with best possible approximation.
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
  4182
     remember it in case someone asks again."
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
  4183
1041
30452cf0805b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 942
diff changeset
  4184
    |form visual|
72
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
  4185
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
  4186
    ((aDevice == device) and:[deviceForm notNil]) ifTrue:[^ deviceForm].
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  4187
901
6cacd0f4eef0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 896
diff changeset
  4188
    mask notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4189
        mask := mask onDevice:aDevice
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
  4190
    ].
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
  4191
    bytes isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4192
        pixelFunction notNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4193
            self computeBitsFromPixelFunction.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4194
        ]
901
6cacd0f4eef0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 896
diff changeset
  4195
    ].
6cacd0f4eef0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 896
diff changeset
  4196
8103
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  4197
    visual := aDevice visualType.
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  4198
    
1623
56c2fd4250c8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1611
diff changeset
  4199
    (aDevice depth == 1
56c2fd4250c8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1611
diff changeset
  4200
    or:[aDevice hasGrayscales not]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4201
        form := self asMonochromeFormOn:aDevice.
2212
ddc9cb6aeb73 more caching if device forms.
Claus Gittinger <cg@exept.de>
parents: 2206
diff changeset
  4202
    ] ifFalse:[
8103
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  4203
        (visual == #StaticGray) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4204
            form := self asGrayFormOn:aDevice.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4205
        ] ifFalse:[
8103
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  4206
            (visual == #PseudoColor or:[visual == #StaticColor]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4207
                form := self asPseudoFormQuickOn:aDevice.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4208
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4209
        ]
2212
ddc9cb6aeb73 more caching if device forms.
Claus Gittinger <cg@exept.de>
parents: 2206
diff changeset
  4210
    ].
ddc9cb6aeb73 more caching if device forms.
Claus Gittinger <cg@exept.de>
parents: 2206
diff changeset
  4211
ddc9cb6aeb73 more caching if device forms.
Claus Gittinger <cg@exept.de>
parents: 2206
diff changeset
  4212
    form isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4213
        "/ kludge: repair a 'should not happen' situation...
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4214
        photometric isNil ifTrue:[ self repairPhotometric ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4215
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4216
        (photometric == #palette) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4217
            form := self paletteImageAsFormOn:aDevice
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4218
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4219
            (photometric == #rgb or:[photometric == #rgba or:[photometric == #argb]]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4220
                form := self rgbImageAsFormOn:aDevice
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4221
            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4222
                (photometric == #cmy or:[photometric == #cmyk]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4223
                    form := self rgbImageAsFormOn:aDevice
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4224
                ] ifFalse:[
8103
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  4225
                    (photometric == #blackIs0 or:[photometric == #whiteIs0]) ifTrue:[
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  4226
                        form := self rgbImageAsFormOn:aDevice
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  4227
                    ] ifFalse:[
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  4228
                        "/ other encodings (cmy, for example)
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  4229
                        "/ calls a slow fallback (which usually enumerates each pixel)
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  4230
                        form := self rgbImageAsFormOn:aDevice
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  4231
                    ]
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4232
                ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4233
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4234
        ].
873
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4235
    ].
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4236
72
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
  4237
    (device isNil or:[aDevice == device]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4238
        "remember this form in the receiver ..."
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4239
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4240
        form notNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4241
            form := form asImageForm.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4242
            deviceForm := form.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4243
            maskedPixelsAre0 := nil.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4244
            device isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4245
                device := aDevice.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4246
                Lobby register:self
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4247
            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4248
                Lobby registerChange:self
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4249
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4250
            mask notNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4251
                self clearMaskedPixels.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4252
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4253
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4254
            "
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4255
             can save space, by not keeping the images data-bits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4256
             twice (here and in the device form)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4257
            "
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4258
            form forgetBits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4259
        ]
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  4260
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  4261
72
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
  4262
    ^ form
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4263
4173
100ca435fb0e New class Form::ImageForm for Forms that are created from Images.
Stefan Vogel <sv@exept.de>
parents: 4168
diff changeset
  4264
    "
100ca435fb0e New class Form::ImageForm for Forms that are created from Images.
Stefan Vogel <sv@exept.de>
parents: 4168
diff changeset
  4265
     |i|
100ca435fb0e New class Form::ImageForm for Forms that are created from Images.
Stefan Vogel <sv@exept.de>
parents: 4168
diff changeset
  4266
100ca435fb0e New class Form::ImageForm for Forms that are created from Images.
Stefan Vogel <sv@exept.de>
parents: 4168
diff changeset
  4267
     i := Image fromFile:'goodies/bitmaps/gifImages/claus.gif'.
100ca435fb0e New class Form::ImageForm for Forms that are created from Images.
Stefan Vogel <sv@exept.de>
parents: 4168
diff changeset
  4268
     (i asFormOn:Display) inspect.
100ca435fb0e New class Form::ImageForm for Forms that are created from Images.
Stefan Vogel <sv@exept.de>
parents: 4168
diff changeset
  4269
    "
100ca435fb0e New class Form::ImageForm for Forms that are created from Images.
Stefan Vogel <sv@exept.de>
parents: 4168
diff changeset
  4270
8103
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  4271
    "Modified: / 25-08-2017 / 09:41:22 / cg"
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4272
!
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4273
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4274
asGrayFormOn:aDevice
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4275
    "get a gray device form"
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4276
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4277
    ^ self asGrayFormOn:aDevice dither:DitherAlgorithm.
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4278
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4279
    "
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4280
     |i|
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4281
3476
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
  4282
     i := Image fromFile:'goodies/bitmaps/claus.gif'.
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4283
     (i asGrayFormOn:Display) inspect.
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4284
    "
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4285
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4286
    "Modified: 10.6.1996 / 17:39:30 / cg"
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4287
    "Created: 10.6.1996 / 18:44:42 / cg"
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4288
!
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4289
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4290
asGrayFormOn:aDevice dither:aDitherAlgorithm
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4291
    "get a greyscale device form, using aDitherAlgorithm."
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4292
1063
ba1bf8091bc1 unused variable cleanup
Claus Gittinger <cg@exept.de>
parents: 1057
diff changeset
  4293
    |depth|
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4294
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4295
    depth := aDevice depth.
1623
56c2fd4250c8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1611
diff changeset
  4296
    (depth == 1
56c2fd4250c8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1611
diff changeset
  4297
    or:[aDevice hasGrayscales not]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4298
        ^ self asMonochromeFormOn:aDevice
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4299
    ].
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4300
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4301
    (aDitherAlgorithm isNil
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4302
    or:[aDitherAlgorithm == #threshold]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4303
        ^ self asThresholdGrayFormOn:aDevice
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4304
    ].
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4305
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4306
    (aDitherAlgorithm == #pattern
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4307
    or:[aDitherAlgorithm == #ordered]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4308
        ^ self asOrderedDitheredGrayFormOn:aDevice
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4309
    ].
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4310
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4311
    ^ self asFloydSteinbergDitheredGrayFormOn:aDevice.
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4312
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4313
    "Created: 10.6.1996 / 18:42:01 / cg"
852
318a6190e31d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 851
diff changeset
  4314
    "Modified: 14.6.1996 / 15:17:28 / cg"
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4315
!
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4316
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  4317
asGrayImageDepth:depthArg
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4318
    "get a gray image from the receiver"
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4319
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  4320
    ((self colorMap notNil and:[depthArg between:self depth and:8])
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  4321
     or:[self depth >= 8 "do need for dither" ]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4322
        ^ self copyWithColorMapProcessing:[:clr | Color brightness:(clr brightness)].
4417
5e5d9b696293 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  4323
    ].
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  4324
    ^ self asGrayImageDepth:depthArg dither:DitherAlgorithm.
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  4325
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  4326
    "
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  4327
     |i|
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  4328
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  4329
     i := Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif'.
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  4330
     (i asGrayImageDepth:16).
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  4331
     (i asGrayImageDepth:4).
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  4332
    "
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  4333
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  4334
    "Modified: / 10-06-1996 / 17:39:30 / cg"
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  4335
    "Created: / 10-06-1996 / 19:07:08 / cg"
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  4336
    "Modified: / 30-01-2017 / 20:13:06 / stefan"
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  4337
    "Modified (comment): / 31-01-2017 / 13:25:29 / stefan"
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4338
!
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4339
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4340
asGrayImageDepth:depth dither:aDitherAlgorithm
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4341
    "get a greyscale image, using aDitherAlgorithm."
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4342
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4343
    (aDitherAlgorithm isNil
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4344
    or:[aDitherAlgorithm == #threshold]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4345
        ^ self asThresholdGrayImageDepth:depth
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4346
    ].
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4347
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4348
    (aDitherAlgorithm == #pattern
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4349
    or:[aDitherAlgorithm == #ordered]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4350
        ^ self asOrderedDitheredGrayImageDepth:depth
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4351
    ].
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4352
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4353
    ^ self asFloydSteinbergDitheredGrayImageDepth:depth
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4354
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4355
    "Created: 10.6.1996 / 19:08:21 / cg"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  4356
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  4357
4423
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4358
asImageWithDepth:depth
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4359
    "return a new image with another depth. Notice that this
7242
bf3a75233d55 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 7230
diff changeset
  4360
     may raise an error, if the depth is smaller than the receiver's depths
4423
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4361
     and the number of colors is greater than the number of possible colors
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4362
     for the new depth - i.e. you should use this only to convert to a higher depth.
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4363
     In the other case, use one of the dithering converters"
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4364
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4365
    |imageClass|
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4366
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4367
    imageClass := Image implementorForDepth:depth.
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4368
    ^ imageClass fromImage:self
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4369
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4370
    "
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4371
     |i|
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4372
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4373
     i := Image fromFile:'goodies/bitmaps/gifImages/claus.gif'.
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4374
     (i asImageWithDepth:24) inspect.
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4375
    "
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4376
    "
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4377
     |i|
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4378
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4379
     i := Image fromFile:'goodies/bitmaps/gifImages/claus.gif'.
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4380
     (i asImageWithDepth:4) inspect.
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4381
    "
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4382
!
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4383
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  4384
asMonochromeFormOn:aDevice
48194c26a46c Initial revision
claus
parents:
diff changeset
  4385
    "get a monochrome device form"
48194c26a46c Initial revision
claus
parents:
diff changeset
  4386
72
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
  4387
    |form|
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
  4388
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
  4389
    ((aDevice == device) and:[monoDeviceForm notNil]) ifTrue:[^ monoDeviceForm].
4390
8d752f4cd9e2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4380
diff changeset
  4390
    self depth == 1 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4391
        ((aDevice == device) and:[deviceForm notNil]) ifTrue:[^ deviceForm].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4392
        ^ self asFormOn:aDevice
1935
b71d2b3766b3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1932
diff changeset
  4393
    ].
72
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
  4394
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4395
    form := self asMonochromeFormOn:aDevice dither:DitherAlgorithm.
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  4396
72
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
  4397
    (device isNil or:[aDevice == device]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4398
        "remember this form in the receiver ..."
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4399
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4400
        form notNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4401
            form := form asImageForm.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4402
            monoDeviceForm := form.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4403
            device isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4404
                device := aDevice.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4405
                Lobby register:self
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4406
            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4407
                Lobby registerChange:self
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4408
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4409
            "
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4410
             can save space, by not keeping the images data-bits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4411
             twice (here and in the device form)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4412
            "
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4413
            form forgetBits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4414
        ]
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  4415
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  4416
72
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
  4417
    ^ form
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4418
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4419
    "
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4420
     |i|
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4421
4173
100ca435fb0e New class Form::ImageForm for Forms that are created from Images.
Stefan Vogel <sv@exept.de>
parents: 4168
diff changeset
  4422
     i := Image fromFile:'goodies/bitmaps/gifImages/claus.gif'.
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4423
     (i asMonochromeFormOn:Display) inspect.
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4424
    "
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4425
1935
b71d2b3766b3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1932
diff changeset
  4426
    "Modified: 23.10.1997 / 00:44:59 / cg"
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4427
!
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4428
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4429
asMonochromeFormOn:aDevice dither:aDitherAlgorithm
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4430
    "get a monochrome device form, using aDitherAlgorithm."
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4431
1063
ba1bf8091bc1 unused variable cleanup
Claus Gittinger <cg@exept.de>
parents: 1057
diff changeset
  4432
    |monoBits|
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4433
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4434
    (aDitherAlgorithm isNil
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4435
    or:[aDitherAlgorithm == #threshold]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4436
        ^ self asThresholdMonochromeFormOn:aDevice
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4437
    ].
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4438
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4439
    aDitherAlgorithm == #burkes ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4440
        monoBits := self burkesDitheredMonochromeBits.
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4441
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4442
        aDitherAlgorithm == #stevensonArce ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4443
            monoBits := self stevensonArceDitheredMonochromeBits.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4444
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4445
            (aDitherAlgorithm == #pattern
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4446
            or:[aDitherAlgorithm == #ordered]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4447
                ^ self asOrderedDitheredGrayFormOn:aDevice.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4448
            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4449
                ^ self asFloydSteinbergDitheredMonochromeFormOn:aDevice.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4450
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4451
        ]
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4452
    ].
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4453
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4454
    "/
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4455
    "/ make its pixel interpretation correct for the device
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4456
    "/
816
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
  4457
    ^ self makeDeviceMonochromeBitmapOn:aDevice fromArray:monoBits
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
  4458
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
  4459
    "Modified: 10.6.1996 / 20:18:05 / cg"
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4460
!
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4461
873
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4462
asPseudoFormQuickOn:aDevice
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4463
    "return a pseudo-deviceForm from the image.
878
b99add8dc742 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 874
diff changeset
  4464
     Fail if any color is not available (i.e. do not dither)."
873
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4465
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  4466
    |f d
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  4467
     temp temp8 bits clr cMap idMap
2772
e8ceedf9aeab code cleanup & a few more SmallInteger type hints
Claus Gittinger <cg@exept.de>
parents: 2760
diff changeset
  4468
     w            "{ Class: SmallInteger }"
e8ceedf9aeab code cleanup & a few more SmallInteger type hints
Claus Gittinger <cg@exept.de>
parents: 2760
diff changeset
  4469
     h            "{ Class: SmallInteger }"
e8ceedf9aeab code cleanup & a few more SmallInteger type hints
Claus Gittinger <cg@exept.de>
parents: 2760
diff changeset
  4470
     dDev         "{ Class: SmallInteger }"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  4471
     nClr         "{ Class: SmallInteger }"
2772
e8ceedf9aeab code cleanup & a few more SmallInteger type hints
Claus Gittinger <cg@exept.de>
parents: 2760
diff changeset
  4472
     bytesPerLine "{ Class: SmallInteger }"
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
  4473
     usedColors pix fmt bytes|
873
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4474
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4475
    d := self depth.
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4476
    (d == 1
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4477
    or:[d == 2
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4478
    or:[d == 4
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4479
    or:[d == 8]]]) ifFalse:[^ nil].
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4480
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
  4481
    bytes := self bits.
2772
e8ceedf9aeab code cleanup & a few more SmallInteger type hints
Claus Gittinger <cg@exept.de>
parents: 2760
diff changeset
  4482
    w := width.
e8ceedf9aeab code cleanup & a few more SmallInteger type hints
Claus Gittinger <cg@exept.de>
parents: 2760
diff changeset
  4483
    h := height.
e8ceedf9aeab code cleanup & a few more SmallInteger type hints
Claus Gittinger <cg@exept.de>
parents: 2760
diff changeset
  4484
2530
81b8ffe7662f use new supportedImageFormat query from Device
Claus Gittinger <cg@exept.de>
parents: 2527
diff changeset
  4485
    "/ for now (since the code below does not care for padding;
81b8ffe7662f use new supportedImageFormat query from Device
Claus Gittinger <cg@exept.de>
parents: 2527
diff changeset
  4486
    "/ if the padding is not supported: fail
81b8ffe7662f use new supportedImageFormat query from Device
Claus Gittinger <cg@exept.de>
parents: 2527
diff changeset
  4487
81b8ffe7662f use new supportedImageFormat query from Device
Claus Gittinger <cg@exept.de>
parents: 2527
diff changeset
  4488
    dDev := aDevice depth.
81b8ffe7662f use new supportedImageFormat query from Device
Claus Gittinger <cg@exept.de>
parents: 2527
diff changeset
  4489
    (bytesPerLine := dDev) == 8 ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4490
        bytesPerLine := (w * dDev + 7) // 8.
2530
81b8ffe7662f use new supportedImageFormat query from Device
Claus Gittinger <cg@exept.de>
parents: 2527
diff changeset
  4491
    ].
81b8ffe7662f use new supportedImageFormat query from Device
Claus Gittinger <cg@exept.de>
parents: 2527
diff changeset
  4492
2532
Claus Gittinger <cg@exept.de>
parents: 2530
diff changeset
  4493
    fmt := aDevice supportedImageFormatForDepth:dDev.
2530
81b8ffe7662f use new supportedImageFormat query from Device
Claus Gittinger <cg@exept.de>
parents: 2527
diff changeset
  4494
    fmt isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4495
        "/ cannot draw directly
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4496
        ^ nil
2530
81b8ffe7662f use new supportedImageFormat query from Device
Claus Gittinger <cg@exept.de>
parents: 2527
diff changeset
  4497
    ].
81b8ffe7662f use new supportedImageFormat query from Device
Claus Gittinger <cg@exept.de>
parents: 2527
diff changeset
  4498
    (bytesPerLine * 8) \\ (fmt at:#padding) == 0 ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4499
        "/ mhmh - ought to repad here;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4500
        "/ however, the nonQuick converter does it.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4501
        ^ nil
2530
81b8ffe7662f use new supportedImageFormat query from Device
Claus Gittinger <cg@exept.de>
parents: 2527
diff changeset
  4502
    ].
81b8ffe7662f use new supportedImageFormat query from Device
Claus Gittinger <cg@exept.de>
parents: 2527
diff changeset
  4503
873
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4504
    "/ see if all of the images colors are representable
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4505
    "/ on the device
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4506
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4507
    bits := self bitsPerPixel.
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4508
    nClr := (1 bitShift:bits).
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4509
    cMap := Array new:nClr.
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4510
    idMap := ByteArray new:nClr.
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4511
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4512
    photometric == #palette ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4513
        nClr := nClr min:(colorMap size)
873
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4514
    ].
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4515
878
b99add8dc742 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 874
diff changeset
  4516
    d == 8 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4517
        usedColors := bytes usedValues.    "gets us an array filled with used values"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4518
        1 to:nClr do:[:pixel |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4519
            (usedColors includes:(pixel - 1)) ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4520
                clr := Color black
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4521
            ] ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4522
                clr := self colorFromValue:pixel-1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4523
                clr := clr exactOn:aDevice.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4524
                clr isNil ifTrue:[^ nil].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4525
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4526
            (pix := clr colorId) isNil ifTrue:[^ nil].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4527
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4528
            cMap at:(pixel) put:clr.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4529
            idMap at:(pixel) put:pix.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4530
        ].
878
b99add8dc742 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 874
diff changeset
  4531
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4532
        1 to:nClr do:[:pixel |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4533
            clr := self colorFromValue:pixel-1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4534
            clr := clr exactOn:aDevice.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4535
            clr isNil ifTrue:[^ nil].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4536
            (pix := clr colorId) isNil ifTrue:[^ nil].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4537
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4538
            cMap at:(pixel) put:clr.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4539
            idMap at:(pixel) put:pix.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4540
        ].
873
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4541
    ].
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4542
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4543
    "/ got all colors; good - simply change depth & translate pixels
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4544
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4545
    (d == 8 and:[dDev == 8]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4546
        "/ only translate
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4547
        temp := ByteArray uninitializedNew:(w * h).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4548
        bytes expandPixels:8         "xlate only"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4549
                    width:w
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4550
                   height:h
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4551
                     into:temp
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4552
                  mapping:idMap.
873
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4553
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4554
        "/ stupid: expandPixels can only handle any-to-8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4555
        "/ compressPixels can only handle 8-to-any
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4556
        "/ However, those methods are faster
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4557
        "/ - even if we convert twice.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4558
        "/ Therefore, convert first from myDepth to 8,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4559
        "/ then from 8 to the device depth.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4560
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4561
        d ~~ 8 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4562
            temp8 := ByteArray uninitializedNew:(w * h).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4563
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4564
            bytes expandPixels:d
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4565
                         width:w
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4566
                        height:h
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4567
                          into:temp8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4568
                       mapping:idMap.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4569
            idMap := nil.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4570
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4571
            temp8 := bytes.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4572
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4573
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4574
        dDev ~~ 8 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4575
            temp := ByteArray uninitializedNew:(bytesPerLine * h).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4576
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4577
            temp8 compressPixels:dDev
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4578
                         width:w
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4579
                        height:h
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4580
                          into:temp
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4581
                       mapping:idMap.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4582
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4583
            temp := temp8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4584
        ].
4780
03c3e810a584 Change senders of obsolete messages Form>>...on: to ...onDevice:
Stefan Vogel <sv@exept.de>
parents: 4769
diff changeset
  4585
    ].
03c3e810a584 Change senders of obsolete messages Form>>...on: to ...onDevice:
Stefan Vogel <sv@exept.de>
parents: 4769
diff changeset
  4586
03c3e810a584 Change senders of obsolete messages Form>>...on: to ...onDevice:
Stefan Vogel <sv@exept.de>
parents: 4769
diff changeset
  4587
    f := Form width:w height:h depth:dDev onDevice:aDevice.
873
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4588
    f isNil ifTrue:[^ nil].
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4589
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  4590
    f colorMap:cMap.
873
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4591
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  4592
    aDevice
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4593
        drawBits:temp
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4594
        depth:dDev
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4595
        padding:8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4596
        width:w
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4597
        height:h
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4598
        x:0 y:0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4599
        into:(f id) x:0 y:0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4600
        width:w
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4601
        height:h
7755
75f5eba88e77 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 7689
diff changeset
  4602
        with:(f initGC).
873
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4603
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4604
    ^ f
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4605
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4606
    "
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4607
     (
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4608
        (((Depth4Image
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4609
             width:4
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4610
             height:4
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4611
             fromArray:#[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4612
                            16r01 16r23
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4613
                            16r45 16r67
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4614
                            16r89 16rab
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4615
                            16rcd 16ref
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4616
                        ]))
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4617
               magnifiedBy:30
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4618
         )
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4619
          asPseudoFormQuickOn:Display
873
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4620
      ) inspect
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4621
     "
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4622
2113
c64f89f9ffba checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2102
diff changeset
  4623
    "Modified: / 7.5.1998 / 19:40:47 / cg"
873
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4624
!
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4625
1591
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  4626
clearMaskedPixels
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  4627
    "assuming that I already have a device representation
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  4628
     in deviceForm, clear any masked pixels.
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  4629
     This will allow faster drawing in the future."
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  4630
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  4631
    maskedPixelsAre0 == true ifTrue:[^ self].   "/ already cleared
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  4632
    mask isNil ifTrue:[^ self].         "/ no mask
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  4633
    deviceForm isNil ifTrue:[^ self].   "/ no device rep.
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  4634
    mask depth ~~ 1 ifTrue:[^ self].    "/ not done with alpha masks
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  4635
7494
70c399ea367b #OTHER by stefan
Stefan Vogel <sv@exept.de>
parents: 7484
diff changeset
  4636
    deviceForm clearMaskedPixels:(mask asFormOn:device).
1591
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  4637
    maskedPixelsAre0 := true.
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  4638
6496
614e100374da class: Image
Stefan Vogel <sv@exept.de>
parents: 6493
diff changeset
  4639
1591
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  4640
    "Created: 12.4.1997 / 12:18:05 / cg"
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  4641
    "Modified: 12.4.1997 / 12:20:19 / cg"
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  4642
!
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  4643
3104
edc88b280153 added #exactOn: - for Color-protocol compatibility
Claus Gittinger <cg@exept.de>
parents: 3092
diff changeset
  4644
exactOn:aDevice
3107
ed51e2c00f1d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3105
diff changeset
  4645
    "for compatibility with color protocol - here, the same as #onDevice."
3104
edc88b280153 added #exactOn: - for Color-protocol compatibility
Claus Gittinger <cg@exept.de>
parents: 3092
diff changeset
  4646
edc88b280153 added #exactOn: - for Color-protocol compatibility
Claus Gittinger <cg@exept.de>
parents: 3092
diff changeset
  4647
    ^ self onDevice:aDevice
edc88b280153 added #exactOn: - for Color-protocol compatibility
Claus Gittinger <cg@exept.de>
parents: 3092
diff changeset
  4648
!
edc88b280153 added #exactOn: - for Color-protocol compatibility
Claus Gittinger <cg@exept.de>
parents: 3092
diff changeset
  4649
3105
4fb4dcd2b055 more Color-protocol compatibility
Claus Gittinger <cg@exept.de>
parents: 3104
diff changeset
  4650
exactOrNearestOn:aDevice
3107
ed51e2c00f1d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3105
diff changeset
  4651
    "for compatibility with color protocol - here, the same as #onDevice."
3105
4fb4dcd2b055 more Color-protocol compatibility
Claus Gittinger <cg@exept.de>
parents: 3104
diff changeset
  4652
4fb4dcd2b055 more Color-protocol compatibility
Claus Gittinger <cg@exept.de>
parents: 3104
diff changeset
  4653
    ^ self onDevice:aDevice
4fb4dcd2b055 more Color-protocol compatibility
Claus Gittinger <cg@exept.de>
parents: 3104
diff changeset
  4654
!
4fb4dcd2b055 more Color-protocol compatibility
Claus Gittinger <cg@exept.de>
parents: 3104
diff changeset
  4655
7913
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4656
fromAlphaInImage:anImage
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4657
    "setup the receiver from the alpha channel of another image.
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4658
     WARNING:
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4659
       This implementation is a slow fallback (the loop over the
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4660
       source pixels is very slow). If this method is used heavily, you
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4661
       may want to redefine it in concrete subclasses for common source images."
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4662
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4663
    |myDepth|
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4664
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4665
    anImage photometric == #rgba ifFalse:[self error].
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4666
    
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4667
    width := anImage width.
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4668
    height := anImage height.
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4669
    bitsPerSample := self bitsPerSample.
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4670
    samplesPerPixel := self samplesPerPixel.
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4671
    photometric := #blackIs0.
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4672
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4673
    myDepth := self depth.
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4674
    self bits:(ByteArray new: "uninitializedNew:"(self bytesPerRow * height) withAll:16rFF).
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4675
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4676
    myDepth == 1 ifTrue:[
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4677
        anImage colorsFromX:0 y:0 toX:(width-1) y:(height-1) do:[:x :y :clr |
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4678
            |a|
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4679
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4680
            a := clr alphaByte.
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4681
            a < 128 ifTrue:[ self pixelAtX:x y:y put:0 ]
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4682
        ].
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4683
    ] ifFalse:[    
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4684
        anImage colorsFromX:0 y:0 toX:(width-1) y:(height-1) do:[:x :y :clr |
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4685
            |a|
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4686
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4687
            a := clr alphaByte.
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4688
            a ~~ 255 ifTrue:[ self pixelAtX:x y:y put:a ]
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4689
        ].
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4690
    ].
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4691
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4692
    "Created: / 17-02-2017 / 17:43:57 / cg"
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4693
!
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4694
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4695
fromForm:aForm
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4696
    "setup the receiver from a form"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4697
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4698
    |map c0 c1|
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4699
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4700
    width := aForm width.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4701
    height := aForm height.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4702
    bitsPerSample := self bitsPerSample.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4703
    samplesPerPixel := self samplesPerPixel.
924
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  4704
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  4705
    aForm hasBits ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4706
        "/ must read the data from the device
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4707
        self from:aForm in:(0@0 extent:aForm extent).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4708
        ^ self
924
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  4709
    ].
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  4710
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  4711
    "/ the form has all data available
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  4712
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
  4713
    self bits:(aForm bits).
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4714
    map := aForm colorMap.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4715
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4716
    aForm depth == 1 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4717
        map isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4718
            photometric := #whiteIs0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4719
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4720
            c0 := map at:1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4721
            c1 := map at:2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4722
            ((c0 = Color white)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4723
            and:[c1 = Color black]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4724
                photometric := #whiteIs0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4725
            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4726
                ((c0 = Color black)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4727
                and:[c1 = Color white]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4728
                    photometric := #blackIs0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4729
                ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4730
                    photometric := #palette.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4731
                    self setColorMap:(Array with:c0 with:c1).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4732
                ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4733
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4734
        ]
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4735
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4736
        map notNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4737
            photometric := #palette.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4738
            self setColorMap:(map copy).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4739
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4740
            "
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4741
             photometric stays at default
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4742
             (which is rgb for d24, greyscale for others)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4743
            "
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4744
        ]
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4745
    ].
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4746
924
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  4747
    "Modified: 5.7.1996 / 16:24:31 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4748
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4749
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4750
fromImage:anImage
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4751
    "setup the receiver from another image.
4888
7d2d5ef445e3 conversion fixes (palette problem / implizit greyscale conversion)
Claus Gittinger <cg@exept.de>
parents: 4859
diff changeset
  4752
     Color precision may be lost, if conversion is from a higher depth image.
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  4753
     WARNING:
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  4754
     This implementation is a slow fallback (the loop over the
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4755
     source pixels is very slow). If this method is used heavily, you
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4756
     may want to redefine it in concrete subclasses for common source images."
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4757
3259
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  4758
    ^ self fromImage:anImage photometric:nil
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  4759
!
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  4760
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  4761
fromImage:anImage photometric:photometricOrNil
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  4762
    "setup the receiver from another image and optionally set the photometric.
4888
7d2d5ef445e3 conversion fixes (palette problem / implizit greyscale conversion)
Claus Gittinger <cg@exept.de>
parents: 4859
diff changeset
  4763
     Color precision may be lost, if conversion is from a higher depth image.
3259
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  4764
     WARNING:
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  4765
     This implementation is a slow fallback (the loop over the
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  4766
     source pixels is very slow). If this method is used heavily, you
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  4767
     may want to redefine it in concrete subclasses for common source images."
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  4768
3363
de7e8628d329 fixed conversion of 3-3-2 8-bit truecolor images
Claus Gittinger <cg@exept.de>
parents: 3273
diff changeset
  4769
    |map clr mappedRowPixels samePhotometric
1784
25b96d8904c6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1783
diff changeset
  4770
     h "{ Class: SmallInteger }"
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  4771
     w "{ Class: SmallInteger }" myDepth otherDepth|
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  4772
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4773
    width := anImage width.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4774
    height := anImage height.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4775
    bitsPerSample := self bitsPerSample.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4776
    samplesPerPixel := self samplesPerPixel.
4859
553f9013f270 only try to fetch colormap for palette images
Claus Gittinger <cg@exept.de>
parents: 4858
diff changeset
  4777
4888
7d2d5ef445e3 conversion fixes (palette problem / implizit greyscale conversion)
Claus Gittinger <cg@exept.de>
parents: 4859
diff changeset
  4778
    photometricOrNil isNil ifTrue:[
8099
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  4779
        (self depth <= 8) ifTrue:[
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  4780
            anImage isGrayscaleImage ifTrue:[
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  4781
                self photometric:#blackIs0
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  4782
            ] ifFalse:[
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  4783
                (anImage usedColorsMax:4096) size <= (1 bitShift:self depth) ifTrue:[
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  4784
                    self photometric:#palette.
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  4785
                    self colorMap:(anImage usedColors asArray)
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  4786
                ]
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  4787
            ].    
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  4788
        ] ifFalse:[    
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  4789
            photometric := self class defaultPhotometric.
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  4790
        ].
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  4791
        
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4792
        "/ photometric := anImage photometric
4888
7d2d5ef445e3 conversion fixes (palette problem / implizit greyscale conversion)
Claus Gittinger <cg@exept.de>
parents: 4859
diff changeset
  4793
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4794
        photometricOrNil == #rgba ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4795
            samplesPerPixel == 3 ifTrue:[ photometric := #rgb ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4796
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4797
            photometric := photometricOrNil
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4798
        ].
4888
7d2d5ef445e3 conversion fixes (palette problem / implizit greyscale conversion)
Claus Gittinger <cg@exept.de>
parents: 4859
diff changeset
  4799
    ].
7d2d5ef445e3 conversion fixes (palette problem / implizit greyscale conversion)
Claus Gittinger <cg@exept.de>
parents: 4859
diff changeset
  4800
7d2d5ef445e3 conversion fixes (palette problem / implizit greyscale conversion)
Claus Gittinger <cg@exept.de>
parents: 4859
diff changeset
  4801
    photometric == #palette ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4802
        self colormapFromImage:anImage photometric:photometric.
4859
553f9013f270 only try to fetch colormap for palette images
Claus Gittinger <cg@exept.de>
parents: 4858
diff changeset
  4803
    ].
1374
ab515c0576c6 preserve mask when creating an image from another image.
Claus Gittinger <cg@exept.de>
parents: 1362
diff changeset
  4804
    self mask:anImage mask.
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  4805
7968
df68d662edff #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7967
diff changeset
  4806
    samePhotometric := (photometric == anImage photometric).
7272
4ec4788352ce #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7271
diff changeset
  4807
    myDepth := self depth.
4ec4788352ce #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7271
diff changeset
  4808
    otherDepth := anImage depth.
4ec4788352ce #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7271
diff changeset
  4809
4ec4788352ce #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7271
diff changeset
  4810
    ((myDepth = otherDepth) and:[samePhotometric]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4811
        self bits:(anImage bits copy).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4812
        ^ self.
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
  4813
    ].
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
  4814
7272
4ec4788352ce #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7271
diff changeset
  4815
    self bits:(ByteArray new: "uninitializedNew:"(self bytesPerRow * height)).
4ec4788352ce #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7271
diff changeset
  4816
4ec4788352ce #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7271
diff changeset
  4817
    myDepth >= otherDepth ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4818
        otherDepth <= 12 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4819
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4820
            "/ if my depth is greater, all colors can be represented,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4821
            "/ and the loop can be done over pixel values ...
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4822
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4823
            (colorMap isNil or:[samePhotometric not]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4824
                map := Array new:(1 bitShift:otherDepth).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4825
                1 to:map size do:[:i |
8059
1e08cb836ecb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8050
diff changeset
  4826
                    |newIdx|
1e08cb836ecb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8050
diff changeset
  4827
                    
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4828
                    clr := anImage colorFromValue:(i - 1).
8059
1e08cb836ecb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8050
diff changeset
  4829
                    newIdx := self valueFromColor:clr.
1e08cb836ecb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8050
diff changeset
  4830
                    newIdx isNil ifTrue:[ 
1e08cb836ecb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8050
diff changeset
  4831
                        clr := colorMap colorNearestTo:clr.
1e08cb836ecb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8050
diff changeset
  4832
                        newIdx := self valueFromColor:clr.
1e08cb836ecb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8050
diff changeset
  4833
                        newIdx isNil ifTrue:[ self halt ].
1e08cb836ecb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8050
diff changeset
  4834
                    ].
1e08cb836ecb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8050
diff changeset
  4835
                    map at:i put:newIdx.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4836
                ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4837
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4838
            mappedRowPixels := self pixelArraySpecies new:width.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4839
            h := height-1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4840
            w := width.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4841
            0 to:h do:[:row |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4842
                anImage rowAt:row into:mappedRowPixels startingAt:1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4843
                map notNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4844
                    1 to:w do:[:i |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4845
                        mappedRowPixels at:i put:(map at:(mappedRowPixels at:i)+1)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4846
                    ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4847
                ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4848
                self rowAt:row putAll:mappedRowPixels
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4849
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4850
            ^ self
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4851
        ].
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  4852
    ].
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  4853
5712
b4d960599bc8 changed: #fromImage:photometric:
Claus Gittinger <cg@exept.de>
parents: 5710
diff changeset
  4854
    "/ a hack, for now - alpha is in the low-byte !!!!!!
7272
4ec4788352ce #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7271
diff changeset
  4855
    (myDepth == 24 and:[otherDepth == 32]) ifTrue:[
7968
df68d662edff #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7967
diff changeset
  4856
        ((samePhotometric and:[photometric == #rgb])
df68d662edff #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7967
diff changeset
  4857
          or:[ (photometric == #rgb and:[anImage photometric == #rgba]) ]
df68d662edff #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7967
diff changeset
  4858
        ) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4859
            "/ can do the bits by simple stripping off the alpha channel
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4860
            self copyPixels32AlphaLowTo24From:anImage.
7272
4ec4788352ce #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7271
diff changeset
  4861
"/    anImage valuesFromX:0 y:0 toX:(width-1) y:(height-1) do:[:x :y :pixel |
4ec4788352ce #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7271
diff changeset
  4862
"/        |a r g b rgbPixel|
4ec4788352ce #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7271
diff changeset
  4863
"/
4ec4788352ce #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7271
diff changeset
  4864
"/        "/ bgra-pixel
4ec4788352ce #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7271
diff changeset
  4865
"/        "/ a := pixel bitAnd:16rFF.
4ec4788352ce #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7271
diff changeset
  4866
"/        r := (pixel bitShift:-8) bitAnd:16rFF.
4ec4788352ce #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7271
diff changeset
  4867
"/        g := (pixel bitShift:-16) bitAnd:16rFF.
4ec4788352ce #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7271
diff changeset
  4868
"/        b := (pixel bitShift:-24) bitAnd:16rFF.
4ec4788352ce #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7271
diff changeset
  4869
"/        rgbPixel := r + (g bitShift:8) + (b bitShift:16).
4ec4788352ce #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7271
diff changeset
  4870
"/        self pixelAtX:x y:y put:rgbPixel
4ec4788352ce #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7271
diff changeset
  4871
"/    ].
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4872
            ^ self
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4873
        ].
5712
b4d960599bc8 changed: #fromImage:photometric:
Claus Gittinger <cg@exept.de>
parents: 5710
diff changeset
  4874
    ].
b4d960599bc8 changed: #fromImage:photometric:
Claus Gittinger <cg@exept.de>
parents: 5710
diff changeset
  4875
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4876
    anImage colorsFromX:0 y:0 toX:(width-1) y:(height-1) do:[:x :y :clr |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4877
        self colorAtX:x y:y put:clr
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4878
    ].
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4879
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4880
    "
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  4881
     |i i2 i4 i8 i16 i24|
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4882
6496
614e100374da class: Image
Stefan Vogel <sv@exept.de>
parents: 6493
diff changeset
  4883
     i := GenericToolbarIconLibrary desktop32x32Icon2.
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4884
     i inspect.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4885
     i2 := Depth2Image fromImage:i.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4886
     i2 inspect.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4887
     i4 := Depth4Image fromImage:i.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4888
     i4 inspect.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4889
     i8 := Depth8Image fromImage:i.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4890
     i8 inspect.
6496
614e100374da class: Image
Stefan Vogel <sv@exept.de>
parents: 6493
diff changeset
  4891
     i16 := Depth16Image fromImage:i.
614e100374da class: Image
Stefan Vogel <sv@exept.de>
parents: 6493
diff changeset
  4892
     i16 inspect.
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4893
     i24 := Depth24Image fromImage:i.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4894
     i24 inspect.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4895
    "
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  4896
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  4897
    "
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  4898
     |i i24|
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  4899
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  4900
     i := Image fromFile:'bitmaps/gifImages/garfield.gif' inPackage:'stx:goodies'.
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  4901
     Transcript showCR:(
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4902
        Time millisecondsToRun:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4903
            i24 := Depth24Image fromImage:i.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4904
        ]
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  4905
     ).
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  4906
     i24 inspect.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  4907
    "
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  4908
    "
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  4909
     |i i24|
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  4910
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  4911
     i := Image fromFile:'bitmaps/gifImages/garfield.gif' inPackage:'stx:goodies'.
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  4912
     MessageTally spyOn:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4913
        i24 := Depth24Image fromImage:i.
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  4914
     ]
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  4915
    "
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  4916
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  4917
    "Modified (format): / 30-01-2017 / 20:46:22 / stefan"
8099
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  4918
    "Modified: / 24-08-2017 / 17:28:25 / cg"
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  4919
!
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  4920
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  4921
fromSubImage:anImage in:aRectangle
7373
61933c223183 added metaData instVar (for free use by image reader)
Claus Gittinger <cg@exept.de>
parents: 7363
diff changeset
  4922
    "setup the receiver from another image, extracting a rectangular area.
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  4923
     As with layouts, the rectangle may contain integers (= nr of pixels) or float numbers (= relative size).
7373
61933c223183 added metaData instVar (for free use by image reader)
Claus Gittinger <cg@exept.de>
parents: 7363
diff changeset
  4924
     Color precision may be lost, if conversion is from a higher depth image.
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  4925
     For palette & rgb images, this may fail if a color cannot be represented."
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  4926
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  4927
    |w h xL yT imgWidth imgHeight|
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  4928
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  4929
    w := aRectangle width.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  4930
    h := aRectangle height.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  4931
    xL := aRectangle left.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  4932
    yT := aRectangle top.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  4933
    imgWidth := anImage width.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  4934
    imgHeight := anImage height.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  4935
7373
61933c223183 added metaData instVar (for free use by image reader)
Claus Gittinger <cg@exept.de>
parents: 7363
diff changeset
  4936
    xL isFloat ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4937
        xL := (imgWidth * xL) rounded min: imgWidth.
7373
61933c223183 added metaData instVar (for free use by image reader)
Claus Gittinger <cg@exept.de>
parents: 7363
diff changeset
  4938
    ].
61933c223183 added metaData instVar (for free use by image reader)
Claus Gittinger <cg@exept.de>
parents: 7363
diff changeset
  4939
    yT isFloat ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4940
        yT := (imgHeight * yT) rounded min:imgHeight.
7373
61933c223183 added metaData instVar (for free use by image reader)
Claus Gittinger <cg@exept.de>
parents: 7363
diff changeset
  4941
    ].
61933c223183 added metaData instVar (for free use by image reader)
Claus Gittinger <cg@exept.de>
parents: 7363
diff changeset
  4942
    w isFloat ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4943
        w := (imgWidth * w) rounded.
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  4944
    ].
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  4945
    w := w min:(imgWidth - xL).
7373
61933c223183 added metaData instVar (for free use by image reader)
Claus Gittinger <cg@exept.de>
parents: 7363
diff changeset
  4946
    h isFloat ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4947
        h := (imgHeight * h) rounded.
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  4948
    ].
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  4949
    h := h min:(imgHeight - yT).
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  4950
    self fromSubImage:anImage inX:xL y:yT width:w height:h
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  4951
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  4952
    "
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  4953
     |i i2 i4 i8 i16 i24|
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  4954
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  4955
     i := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  4956
     i inspect.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  4957
     i4 := Depth4Image fromSubImage:i in:(300@160 corner:340@200).
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  4958
     i4 inspect.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  4959
     i8 := Depth8Image fromSubImage:i in:(300@160 corner:340@200).
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  4960
     i8 inspect.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  4961
     i24 := Depth24Image fromSubImage:i in:(300@160 corner:340@200).
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  4962
     i24 inspect.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  4963
    "
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  4964
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  4965
    "Created: / 20.9.1995 / 01:06:02 / claus"
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  4966
    "Modified: / 20.9.1995 / 10:15:37 / claus"
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  4967
    "Modified: / 18.5.1999 / 20:06:55 / cg"
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  4968
!
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  4969
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  4970
fromSubImage:anImage inX:xL y:yT width:w height:h
7373
61933c223183 added metaData instVar (for free use by image reader)
Claus Gittinger <cg@exept.de>
parents: 7363
diff changeset
  4971
    "setup the receiver from another image, extracting a rectangular area.
61933c223183 added metaData instVar (for free use by image reader)
Claus Gittinger <cg@exept.de>
parents: 7363
diff changeset
  4972
     Color precision may be lost, if conversion is from a higher depth image.
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  4973
     For palette & rgb images, this may fail if a color cannot be represented.
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4974
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  4975
     WARNING:
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4976
       This implementation is a slow fallback (the loop over the
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4977
       source pixels is very slow). If this method is used heavily, you
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4978
       may want to redefine it in concrete subclasses for the common case of
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4979
       of creating a subImage with the same depth & palette."
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  4980
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  4981
    |xR yB imagesMask maskClass|
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  4982
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  4983
    width := w.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  4984
    height := h.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  4985
3912
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
  4986
    self createPixelStore.
3458
b2e098e6288b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3457
diff changeset
  4987
    depth := self depth.
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  4988
    bitsPerSample := self bitsPerSample.
7180
40dcb4638d93 #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 7176
diff changeset
  4989
    "/ bitsPerPixel := self bitsPerPixel.
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  4990
    samplesPerPixel := self samplesPerPixel.
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  4991
    self colormapFromImage:anImage.
2678
e12976d7084b raise a query signal when a loadError happens;
Claus Gittinger <cg@exept.de>
parents: 2645
diff changeset
  4992
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  4993
    xR := xL + w - 1.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  4994
    yB := yT + h - 1.
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4995
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  4996
    ((photometric == anImage photometric)
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4997
    and:[self bitsPerPixel = anImage bitsPerPixel
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  4998
    and:[colorMap = anImage colorMap]]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4999
        "/ can do it by value
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5000
        anImage
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5001
            valuesFromX:xL y:yT toX:xR y:yB
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5002
            do:[:x :y :pixelValue | self pixelAtX:x-xL y:y-yT put:pixelValue ]
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5003
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5004
        "/ must do it by colors
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5005
        anImage
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5006
            colorsFromX:xL y:yT toX:xR y:yB
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5007
            do:[:x :y :clr | self colorAtX:x-xL y:y-yT put:clr ]
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5008
    ].
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5009
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5010
    (imagesMask := anImage mask) notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5011
        imagesMask depth == 1 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5012
            maskClass := ImageMask
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5013
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5014
            maskClass := imagesMask class.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5015
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5016
        mask := maskClass new fromSubImage:imagesMask inX:xL y:yT width:w height:h
2678
e12976d7084b raise a query signal when a loadError happens;
Claus Gittinger <cg@exept.de>
parents: 2645
diff changeset
  5017
    ].
1963
ab2d96e4e140 care for masks in copy/copySubImage;
tz
parents: 1962
diff changeset
  5018
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5019
    "
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  5020
     |i i2 i4 i8 i16 i24|
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5021
3476
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
  5022
     i := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5023
     i inspect.
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5024
     i4 := Depth4Image fromSubImage:i in:(300@160 corner:340@200).
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5025
     i4 inspect.
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5026
     i8 := Depth8Image fromSubImage:i in:(300@160 corner:340@200).
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5027
     i8 inspect.
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5028
     i24 := Depth24Image fromSubImage:i in:(300@160 corner:340@200).
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5029
     i24 inspect.
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5030
    "
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5031
2678
e12976d7084b raise a query signal when a loadError happens;
Claus Gittinger <cg@exept.de>
parents: 2645
diff changeset
  5032
    "Created: / 20.9.1995 / 01:06:02 / claus"
e12976d7084b raise a query signal when a loadError happens;
Claus Gittinger <cg@exept.de>
parents: 2645
diff changeset
  5033
    "Modified: / 20.9.1995 / 10:15:37 / claus"
e12976d7084b raise a query signal when a loadError happens;
Claus Gittinger <cg@exept.de>
parents: 2645
diff changeset
  5034
    "Modified: / 18.5.1999 / 20:06:55 / cg"
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  5035
!
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  5036
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  5037
monochromeOn:aDevice
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  5038
    "return a monochrome device image of the receiver for aDevice.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  5039
     (monochrome, even if device supports colors)"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  5040
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  5041
    ((aDevice == device) and:[monoDeviceForm notNil]) ifTrue:[^ self].
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  5042
    (device notNil and:[aDevice ~~ device]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5043
        "oops, I am already accociated to another device
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5044
         - need a copy ...
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5045
        "
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5046
        ^ self copy monochromeOn:aDevice
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  5047
    ].
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  5048
    monoDeviceForm := self asMonochromeFormOn:aDevice.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  5049
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  5050
3105
4fb4dcd2b055 more Color-protocol compatibility
Claus Gittinger <cg@exept.de>
parents: 3104
diff changeset
  5051
nearestOn:aDevice
3107
ed51e2c00f1d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3105
diff changeset
  5052
    "for compatibility with color protocol - here, the same as #onDevice."
3105
4fb4dcd2b055 more Color-protocol compatibility
Claus Gittinger <cg@exept.de>
parents: 3104
diff changeset
  5053
4fb4dcd2b055 more Color-protocol compatibility
Claus Gittinger <cg@exept.de>
parents: 3104
diff changeset
  5054
    ^ self onDevice:aDevice
4fb4dcd2b055 more Color-protocol compatibility
Claus Gittinger <cg@exept.de>
parents: 3104
diff changeset
  5055
!
4fb4dcd2b055 more Color-protocol compatibility
Claus Gittinger <cg@exept.de>
parents: 3104
diff changeset
  5056
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  5057
on:aDevice
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  5058
    "return an image with the same pixels as the receiver, but
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  5059
     associated to aDevice. If the receiver is not yet bound to
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  5060
     a device, this will be the receiver. Otherwise, a new image
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  5061
     is returned."
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  5062
3623
16665d9b7263 #on: -> #onDevice
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  5063
    "/ send out a warning: #on: is typically used to create views
16665d9b7263 #on: -> #onDevice
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  5064
    "/ operating on a model.
16665d9b7263 #on: -> #onDevice
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  5065
    "/ Please use #onDevice: to avoid confusion.
16665d9b7263 #on: -> #onDevice
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  5066
16665d9b7263 #on: -> #onDevice
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  5067
    <resource:#obsolete>
16665d9b7263 #on: -> #onDevice
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  5068
16665d9b7263 #on: -> #onDevice
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  5069
    self obsoleteMethodWarning:'use #onDevice:'.
3477
9440bfc0768d on: -> onDevice:
Claus Gittinger <cg@exept.de>
parents: 3476
diff changeset
  5070
    ^ self onDevice:aDevice
1496
fc27b03282af added #onDevice: for protocol completeness.
Claus Gittinger <cg@exept.de>
parents: 1488
diff changeset
  5071
!
fc27b03282af added #onDevice: for protocol completeness.
Claus Gittinger <cg@exept.de>
parents: 1488
diff changeset
  5072
fc27b03282af added #onDevice: for protocol completeness.
Claus Gittinger <cg@exept.de>
parents: 1488
diff changeset
  5073
onDevice:aDevice
fc27b03282af added #onDevice: for protocol completeness.
Claus Gittinger <cg@exept.de>
parents: 1488
diff changeset
  5074
    "return an image with the same pixels as the receiver, but
fc27b03282af added #onDevice: for protocol completeness.
Claus Gittinger <cg@exept.de>
parents: 1488
diff changeset
  5075
     associated to aDevice. If the receiver is not yet bound to
fc27b03282af added #onDevice: for protocol completeness.
Claus Gittinger <cg@exept.de>
parents: 1488
diff changeset
  5076
     a device, this will be the receiver. Otherwise, a new image
fc27b03282af added #onDevice: for protocol completeness.
Claus Gittinger <cg@exept.de>
parents: 1488
diff changeset
  5077
     is returned."
fc27b03282af added #onDevice: for protocol completeness.
Claus Gittinger <cg@exept.de>
parents: 1488
diff changeset
  5078
2980
409e9547a45c ignore nil device in #onDevice:
Claus Gittinger <cg@exept.de>
parents: 2947
diff changeset
  5079
    aDevice isNil ifTrue:[^ self].
3477
9440bfc0768d on: -> onDevice:
Claus Gittinger <cg@exept.de>
parents: 3476
diff changeset
  5080
    ((aDevice == device) and:[deviceForm notNil]) ifTrue:[^ self].
9440bfc0768d on: -> onDevice:
Claus Gittinger <cg@exept.de>
parents: 3476
diff changeset
  5081
9440bfc0768d on: -> onDevice:
Claus Gittinger <cg@exept.de>
parents: 3476
diff changeset
  5082
    (device notNil and:[aDevice ~~ device]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5083
        "oops, I am already associated to another device
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5084
         - need a copy ...
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5085
        "
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5086
        ^ self copy onDevice:aDevice
3477
9440bfc0768d on: -> onDevice:
Claus Gittinger <cg@exept.de>
parents: 3476
diff changeset
  5087
    ].
7573
656c59bc93ad #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7565
diff changeset
  5088
    device := aDevice.
3477
9440bfc0768d on: -> onDevice:
Claus Gittinger <cg@exept.de>
parents: 3476
diff changeset
  5089
    deviceForm := self asFormOn:aDevice.
9440bfc0768d on: -> onDevice:
Claus Gittinger <cg@exept.de>
parents: 3476
diff changeset
  5090
    maskedPixelsAre0 := nil.
6496
614e100374da class: Image
Stefan Vogel <sv@exept.de>
parents: 6493
diff changeset
  5091
    mask notNil ifTrue:[
7573
656c59bc93ad #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7565
diff changeset
  5092
        mask := mask onDevice:aDevice.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5093
        self clearMaskedPixels.
6496
614e100374da class: Image
Stefan Vogel <sv@exept.de>
parents: 6493
diff changeset
  5094
    ].
3477
9440bfc0768d on: -> onDevice:
Claus Gittinger <cg@exept.de>
parents: 3476
diff changeset
  5095
    Lobby register:self
9440bfc0768d on: -> onDevice:
Claus Gittinger <cg@exept.de>
parents: 3476
diff changeset
  5096
9440bfc0768d on: -> onDevice:
Claus Gittinger <cg@exept.de>
parents: 3476
diff changeset
  5097
    "Modified: / 22.8.1998 / 13:34:24 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  5098
! !
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  5099
7904
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5100
!Image methodsFor:'converting - dithering'!
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5101
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5102
asBurkesDitheredMonochromeImage
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5103
    "return a burkes dithered monochrome image from the receiver image.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5104
     Depending on the images contents, this may or may not look better than
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5105
     a floyd-steinberg dithered image.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5106
     Notice that floyd-steinberg dithering is faster; both because less
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5107
     error diffusion is done and due to being specially tuned."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5108
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5109
    |monoBits|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5110
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5111
    monoBits := self burkesDitheredMonochromeBits.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5112
    ^ Depth1Image width:width height:height fromArray:monoBits
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5113
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5114
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5115
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5116
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5117
     i := Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5118
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5119
     i asFloydSteinbergDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5120
     i asBurkesDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5121
     i asOrderedDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5122
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5123
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5124
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5125
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5126
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5127
     i := Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5128
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5129
     i asFloydSteinbergDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5130
     i asBurkesDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5131
     i asOrderedDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5132
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5133
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5134
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5135
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5136
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5137
     i := Depth4Image
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5138
             width:4
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5139
             height:4
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5140
             fromArray:#[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5141
                            16r01 16r23
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5142
                            16r45 16r67
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5143
                            16r89 16rab
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5144
                            16rcd 16ref
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5145
                        ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5146
     i := i magnifiedBy:30.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5147
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5148
     i asFloydSteinbergDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5149
     i asBurkesDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5150
     i asOrderedDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5151
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5152
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5153
    "Created: / 10-06-1996 / 12:34:44 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5154
    "Modified: / 12-06-1996 / 13:58:16 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5155
    "Modified (comment): / 16-02-2017 / 17:59:53 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5156
!
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5157
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5158
asDitheredImageUsing:colors
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5159
    "return a dithered image from the picture,
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5160
     using colors in colors for dithering."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5161
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5162
    ^ self asDitheredImageUsing:colors depth:self depth
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5163
!
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5164
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5165
asDitheredImageUsing:colors depth:d
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5166
    "return a dithered image from the picture,
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5167
     using colors in colors for dithering."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5168
8099
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  5169
    |newBits img8|
7904
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5170
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5171
    newBits := self floydSteinbergDitheredDepth8BitsColors:colors map:(0 to:colors size - 1).
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5172
    newBits isNil ifTrue:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5173
        self error:'dithering failed'
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5174
    ].
8099
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  5175
    d ~~ 8 ifTrue:[
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  5176
        img8 := Depth8Image new extent:(self extent).
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  5177
        img8 colorMap:colors.
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  5178
        img8 bits:newBits.
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  5179
        ^ (self class implementorForDepth:d) fromImage:img8.
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  5180
    ].
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  5181
    
7904
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5182
    ^ (self class newForDepth:d) extent:(self extent); depth:d; palette:colors; bits:newBits; yourself
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5183
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5184
    "Modified: / 30-01-2017 / 19:40:19 / stefan"
8099
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  5185
    "Modified: / 24-08-2017 / 17:37:12 / cg"
7904
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5186
!
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5187
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5188
asErrorDitheredMonochromeImage
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5189
    "return an error-diffusion dithered monochrome image from the receiver image."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5190
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5191
    DitherAlgorithm == #burkes ifTrue:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5192
        ^ self asBurkesDitheredMonochromeImage
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5193
    ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5194
    DitherAlgorithm == #stevensonArce ifTrue:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5195
        ^ self asStevensonArceDitheredMonochromeImage
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5196
    ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5197
    ^ self asFloydSteinbergDitheredMonochromeImage
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5198
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5199
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5200
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5201
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5202
     i := Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5203
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5204
     i asErrorDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5205
     i asOrderedDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5206
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5207
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5208
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5209
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5210
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5211
     i := Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5212
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5213
     i asErrorDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5214
     i asOrderedDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5215
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5216
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5217
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5218
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5219
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5220
     i := Depth4Image
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5221
             width:4
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5222
             height:4
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5223
             fromArray:#[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5224
                            16r01 16r23
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5225
                            16r45 16r67
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5226
                            16r89 16rab
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5227
                            16rcd 16ref
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5228
                        ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5229
     i := i magnifiedBy:30.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5230
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5231
     i asErrorDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5232
     i asOrderedDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5233
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5234
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5235
    "Modified: / 10-06-1996 / 14:22:30 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5236
    "Modified (comment): / 16-02-2017 / 17:58:42 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5237
!
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5238
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5239
asFloydSteinbergDitheredDepth8FormOn:aDevice colors:fixColors
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5240
    "return a floyd-steinberg dithered pseudoForm from the picture.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5241
     Use the colors in the fixColors array.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5242
     By passing the ditherColors as extra array, this method can
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5243
     also be used to dither an 8bit image into a smaller number of colors,
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5244
     for example to create dithered Depth4Images from Depth8Images."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5245
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5246
    |pseudoBits f deviceDepth map|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5247
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5248
    deviceDepth := aDevice depth.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5249
    deviceDepth == 8 ifFalse:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5250
        (aDevice supportedImageFormatForDepth:8) isNil ifTrue:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5251
            ^ nil.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5252
        ]
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5253
    ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5254
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5255
    pseudoBits := self floydSteinbergDitheredDepth8BitsColors:fixColors.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5256
    pseudoBits isNil ifTrue:[^ nil].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5257
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5258
    f := Form width:width height:height depth:deviceDepth onDevice:aDevice.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5259
    f isNil ifTrue:[^ nil].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5260
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5261
    "/
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5262
    "/ have to create a funny colorMap, where
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5263
    "/ color at:index == color colorId:index
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5264
    "/
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5265
    map := Array new:256.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5266
    fixColors do:[:clr |
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5267
        map at:clr colorId + 1 put:clr
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5268
    ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5269
    f colorMap:map.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5270
    f bits:pseudoBits.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5271
    aDevice
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5272
        drawBits:pseudoBits
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5273
        bitsPerPixel:8
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5274
        depth:deviceDepth
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5275
        padding:8
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5276
        width:width height:height
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5277
        x:0 y:0
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5278
        into:(f id) x:0 y:0
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5279
        width:width height:height
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5280
        with:(f initGC).
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5281
    ^ f
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5282
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5283
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5284
     example:
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5285
        color reduction from Depth8 to Depth4 (dithering) can be done by:
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5286
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5287
     |img8 reducedImg8 img4 map form|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5288
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5289
     map := #(
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5290
                  (0     0   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5291
                  (0     0 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5292
                  (0    50   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5293
                  (0    50 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5294
                  (0   100   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5295
                  (0   100 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5296
                  (100   0   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5297
                  (100   0 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5298
                  (100  50   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5299
                  (100  50 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5300
                  (100 100   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5301
                  (100 100 100)) collect:[:rgb | (Color red:(rgb at:1)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5302
                                                      green:(rgb at:2)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5303
                                                       blue:(rgb at:3)) onDevice:Display].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5304
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5305
     img8 := Image fromFile:'goodies/bitmaps/bf.im8'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5306
     form := img8 paletteImageAsDitheredPseudoFormOn:Display
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5307
                      colors:map
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5308
                        nRed:2
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5309
                      nGreen:3
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5310
                       nBlue:2.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5311
     img8 := Depth8Image fromForm:form.    'dithered version of original image'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5312
     img4 := Depth4Image fromImage:img8.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5313
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5314
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5315
    "Modified: 14.6.1996 / 16:52:34 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5316
    "Created: 23.6.1997 / 15:25:37 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5317
!
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5318
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5319
asFloydSteinbergDitheredDepth8FormOn:aDevice colors:fixColors nRed:nRed nGreen:nGreen nBlue:nBlue
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5320
    "return a floyd-steinberg dithered pseudoForm from the palette picture.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5321
     Use the colors in the fixColors array, which must be fixR x fixG x fixB
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5322
     colors assigned to aDevice, such as the preallocated colors of the
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5323
     Color class.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5324
     By passing the ditherColors as extra array, this method can
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5325
     also be used to dither an 8bit image into a smaller number of colors,
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5326
     for example to create dithered Depth4Images from Depth8Images."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5327
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5328
    |pseudoBits f deviceDepth map|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5329
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5330
    deviceDepth := aDevice depth.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5331
    deviceDepth == 8 ifFalse:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5332
        (aDevice supportedImageFormatForDepth:8) isNil ifTrue:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5333
            ^ nil
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5334
        ]
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5335
    ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5336
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5337
    pseudoBits := self floydSteinbergDitheredDepth8BitsColors:fixColors nRed:nRed nGreen:nGreen nBlue:nBlue.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5338
    pseudoBits isNil ifTrue:[^ nil].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5339
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5340
    f := Form width:width height:height depth:deviceDepth onDevice:aDevice.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5341
    f isNil ifTrue:[^ nil].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5342
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5343
    "/
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5344
    "/ have to create a funny colorMap, where
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5345
    "/ color at:index == color colorId:index
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5346
    "/
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5347
    map := Array new:256.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5348
    fixColors do:[:clr |
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5349
        map at:clr colorId + 1 put:clr
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5350
    ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5351
    f colorMap:map.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5352
    f bits:pseudoBits.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5353
    aDevice
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5354
        drawBits:pseudoBits
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5355
        bitsPerPixel:8
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5356
        depth:deviceDepth
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5357
        padding:8
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5358
        width:width height:height
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5359
        x:0 y:0
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5360
        into:(f id) x:0 y:0
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5361
        width:width height:height
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5362
        with:(f initGC).
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5363
    ^ f
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5364
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5365
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5366
     example:
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5367
        color reduction from Depth8 to Depth4 (dithering) can be done by:
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5368
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5369
     |img8 reducedImg8 img4 map form|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5370
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5371
     map := #(
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5372
                  (0     0   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5373
                  (0     0 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5374
                  (0    50   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5375
                  (0    50 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5376
                  (0   100   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5377
                  (0   100 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5378
                  (100   0   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5379
                  (100   0 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5380
                  (100  50   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5381
                  (100  50 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5382
                  (100 100   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5383
                  (100 100 100)) collect:[:rgb | (Color red:(rgb at:1)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5384
                                                      green:(rgb at:2)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5385
                                                       blue:(rgb at:3)) onDevice:Display].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5386
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5387
     img8 := Image fromFile:'goodies/bitmaps/bf.im8'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5388
     form := img8 paletteImageAsDitheredPseudoFormOn:Display
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5389
                      colors:map
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5390
                        nRed:2
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5391
                      nGreen:3
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5392
                       nBlue:2.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5393
     img8 := Depth8Image fromForm:form.    'dithered version of original image'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5394
     img4 := Depth4Image fromImage:img8.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5395
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5396
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5397
    "Modified: 14.6.1996 / 16:52:34 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5398
!
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5399
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5400
asFloydSteinbergDitheredGrayFormOn:aDevice
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5401
    "return a dithered depth-x grey form from the receiver image."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5402
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5403
    |depth bits|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5404
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5405
    depth := aDevice depth.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5406
    (depth == 1
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5407
    or:[aDevice hasGrayscales not]) ifTrue:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5408
        "/ for monochrome, there is specialized
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5409
        "/ monochrome dither code available
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5410
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5411
        bits := self floydSteinbergDitheredMonochromeBits.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5412
    ] ifFalse:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5413
        bits := self floydSteinbergDitheredGrayBitsDepth:depth.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5414
    ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5415
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5416
    ^ self makeDeviceGrayPixmapOn:aDevice depth:depth fromArray:bits
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5417
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5418
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5419
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5420
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5421
     i := Image fromFile:'goodies/bitmaps/gifImages/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5422
     (i asFloydSteinbergDitheredGrayFormOn:Display) inspect
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5423
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5424
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5425
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5426
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5427
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5428
     i := Image fromFile:'bitmaps/granite.tiff'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5429
     (i asFloydSteinbergDitheredGrayFormOn:Display) inspect
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5430
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5431
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5432
    "Created: 10.6.1996 / 14:11:39 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5433
    "Modified: 17.4.1997 / 01:11:54 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5434
!
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5435
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5436
asFloydSteinbergDitheredGrayImageDepth:depth
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5437
    "return a floyd-steinberg dithered image from the receiver image."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5438
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5439
    |ditheredBits|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5440
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5441
    (depth == 1) ifTrue:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5442
        ^ self asFloydSteinbergDitheredMonochromeImage
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5443
    ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5444
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5445
    ditheredBits := self floydSteinbergDitheredGrayBitsDepth:depth.
8132
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
  5446
    ^ ((self class implementorForDepth:depth)
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
  5447
        width:width height:height fromArray:ditheredBits)
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
  5448
            photometric:#blackIs0
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
  5449
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
  5450
    "
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
  5451
     |i|
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
  5452
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
  5453
     i := Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif'.
7904
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5454
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5455
     (i asFloydSteinbergDitheredGrayImageDepth:1) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5456
     (i asFloydSteinbergDitheredGrayImageDepth:2) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5457
     (i asFloydSteinbergDitheredGrayImageDepth:4) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5458
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5459
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5460
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5461
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5462
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5463
     i := Depth24Image width:4 height:1
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5464
          fromArray:#[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5465
            16rFF 16r00 16r00   16rFF 16r00 16r00  16rFF 16r00 16r00  16rFF 16r00 16r00
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5466
            16rFF 16r00 16r00   16rFF 16r00 16r00  16rFF 16r00 16r00  16rFF 16r00 16r00
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5467
            16rFF 16r00 16r00   16rFF 16r00 16r00  16rFF 16r00 16r00  16rFF 16r00 16r00
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5468
            16rFF 16r00 16r00   16rFF 16r00 16r00  16rFF 16r00 16r00  16rFF 16r00 16r00].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5469
     i := i magnifiedBy:4@1.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5470
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5471
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5472
     (i asFloydSteinbergDitheredGrayImageDepth:1) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5473
     (i asFloydSteinbergDitheredGrayImageDepth:2) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5474
     (i asFloydSteinbergDitheredGrayImageDepth:4) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5475
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5476
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5477
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5478
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5479
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5480
     i := Depth24Image width:4 height:6
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5481
          fromArray:#[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5482
            16r00 16r00 16r00   16r00 16r00 16r80  16r00 16r00 16rff  16r00 16r80 16r00
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5483
            16r00 16r80 16r80   16r00 16rFF 16r00  16r00 16rFF 16r80  16r00 16rFF 16rFF
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5484
            16r80 16r00 16r00   16r80 16r00 16r80  16r80 16r00 16rff  16r80 16r80 16r00
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5485
            16r80 16r80 16r80   16r80 16rFF 16r00  16r80 16rFF 16r80  16r80 16rFF 16rFF
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5486
            16rFF 16r00 16r00   16rFF 16r00 16r80  16rFF 16r00 16rff  16rFF 16r80 16r00
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5487
            16rFF 16r80 16r80   16rFF 16rFF 16r00  16rFF 16rFF 16r80  16rFF 16rFF 16rFF].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5488
     i := i magnifiedBy:30.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5489
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5490
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5491
     (i asFloydSteinbergDitheredGrayImageDepth:1) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5492
     (i asFloydSteinbergDitheredGrayImageDepth:2) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5493
     (i asFloydSteinbergDitheredGrayImageDepth:4) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5494
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5495
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5496
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5497
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5498
     i := Image fromFile:'granite.tiff'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5499
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5500
     (i asFloydSteinbergDitheredGrayImageDepth:1) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5501
     (i asFloydSteinbergDitheredGrayImageDepth:2) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5502
     (i asFloydSteinbergDitheredGrayImageDepth:4) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5503
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5504
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5505
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5506
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5507
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5508
     i := Image fromFile:'goodies/bitmaps/gifImages/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5509
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5510
     (i asFloydSteinbergDitheredGrayImageDepth:1) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5511
     (i asFloydSteinbergDitheredGrayImageDepth:2) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5512
     (i asFloydSteinbergDitheredGrayImageDepth:4) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5513
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5514
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5515
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5516
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5517
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5518
     i := Depth4Image
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5519
             width:4
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5520
             height:4
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5521
             fromArray:#[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5522
                            16r01 16r23
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5523
                            16r45 16r67
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5524
                            16r89 16rab
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5525
                            16rcd 16ref
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5526
                        ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5527
     i := i magnifiedBy:30.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5528
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5529
     (i asFloydSteinbergDitheredGrayImageDepth:1) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5530
     (i asFloydSteinbergDitheredGrayImageDepth:2) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5531
     (i asFloydSteinbergDitheredGrayImageDepth:4) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5532
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5533
8132
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
  5534
    "Created: / 10-06-1996 / 12:33:47 / cg"
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
  5535
    "Modified (comment): / 30-08-2017 / 01:43:56 / cg"
7904
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5536
!
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5537
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5538
asFloydSteinbergDitheredMonochromeFormOn:aDevice
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5539
    "return a dithered moncohrome form from the receiver image."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5540
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5541
    |monoBits|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5542
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5543
    monoBits := self floydSteinbergDitheredMonochromeBits.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5544
    ^ self makeDeviceMonochromeBitmapOn:aDevice fromArray:monoBits
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5545
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5546
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5547
     |i f|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5548
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5549
     i := Image fromFile:'goodies/bitmaps/gifImages/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5550
     (i asFloydSteinbergDitheredMonochromeFormOn:Display) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5551
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5552
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5553
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5554
     |i f|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5555
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5556
     i := Depth2Image width:8 height:8
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5557
          fromArray:#[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5558
                        4r0000 4r0000
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5559
                        4r0000 4r0000
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5560
                        4r1111 4r1111
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5561
                        4r1111 4r1111
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5562
                        4r2222 4r2222
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5563
                        4r2222 4r2222
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5564
                        4r3333 4r3333
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5565
                        4r3333 4r3333
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5566
                     ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5567
     (i asFloydSteinbergDitheredMonochromeFormOn:Display) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5568
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5569
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5570
    "Created: 10.6.1996 / 14:11:39 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5571
    "Modified: 17.4.1997 / 01:14:02 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5572
!
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5573
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5574
asFloydSteinbergDitheredMonochromeImage
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5575
    "return a floyd-steinberg dithered monochrome image from the receiver image."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5576
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5577
    |monoBits|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5578
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5579
    monoBits := self floydSteinbergDitheredMonochromeBits.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5580
    ^ Depth1Image width:width height:height fromArray:monoBits
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5581
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5582
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5583
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5584
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5585
     i := Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5586
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5587
     i asFloydSteinbergDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5588
     i asBurkesDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5589
     i asOrderedDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5590
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5591
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5592
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5593
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5594
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5595
     i := Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5596
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5597
     i asFloydSteinbergDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5598
     i asBurkesDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5599
     i asOrderedDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5600
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5601
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5602
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5603
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5604
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5605
     i := Depth4Image
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5606
             width:4
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5607
             height:4
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5608
             fromArray:#[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5609
                            16r01 16r23
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5610
                            16r45 16r67
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5611
                            16r89 16rab
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5612
                            16rcd 16ref
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5613
                        ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5614
     i := i magnifiedBy:30.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5615
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5616
     i asFloydSteinbergDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5617
     i asBurkesDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5618
     i asOrderedDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5619
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5620
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5621
    "Created: / 10-06-1996 / 12:33:47 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5622
    "Modified: / 17-04-1997 / 01:15:28 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5623
    "Modified (comment): / 16-02-2017 / 17:59:16 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5624
!
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5625
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5626
asFloydSteinbergDitheredPseudoFormUsing:colors on:aDevice
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5627
    "return a floyd-steinberg dithered pseudoForm from the picture,
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5628
     using colors in colors for dithering."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5629
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5630
    |pseudoBits pseudoBits8 f has8BitImage deviceDepth map d|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5631
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5632
    deviceDepth := aDevice depth.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5633
    has8BitImage := (deviceDepth == 8)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5634
                    or:[ (aDevice supportedImageFormatForDepth:8) notNil ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5635
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5636
    has8BitImage ifFalse:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5637
        deviceDepth == 4 ifFalse:[^ nil].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5638
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5639
        pseudoBits8 := self nfloydSteinbergDitheredDepth8BitsColors:colors.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5640
        pseudoBits8 isNil ifTrue:[^ nil].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5641
        "/ convert to devices depth
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5642
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5643
        pseudoBits := ByteArray new:(width*4+7//8 * height).
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5644
        pseudoBits8 compressPixels:4 width:width height:height into:pseudoBits mapping:nil.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5645
        d := 4.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5646
    ] ifTrue:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5647
        pseudoBits := self nfloydSteinbergDitheredDepth8BitsColors:colors.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5648
        pseudoBits isNil ifTrue:[^ nil].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5649
        d := 8.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5650
    ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5651
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5652
    f := Form width:width height:height depth:deviceDepth onDevice:aDevice.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5653
    f isNil ifTrue:[^ nil].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5654
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5655
    "/
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5656
    "/ have to create a funny colorMap, where
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5657
    "/ color at:index == color colorId:index
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5658
    "/
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5659
    map := Array new:256 withAll:0.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5660
    colors do:[:clr |
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5661
        clr notNil ifTrue:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5662
            map at:clr colorId + 1 put:clr
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5663
        ]
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5664
    ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5665
    f colorMap:map.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5666
    f bits:pseudoBits.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5667
    aDevice
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5668
        drawBits:pseudoBits
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5669
        bitsPerPixel:d
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5670
        depth:deviceDepth
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5671
        padding:8
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5672
        width:width height:height
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5673
        x:0 y:0
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5674
        into:(f id) x:0 y:0
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5675
        width:width height:height
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5676
        with:(f initGC).
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5677
    ^ f
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5678
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5679
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5680
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5681
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5682
     i := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5683
     (i asFloydSteinbergDitheredPseudoFormUsing:(Smalltalk at:#'Color:DitherColors') on:Display) inspect
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5684
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5685
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5686
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5687
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5688
     i := Image fromFile:'goodies/bitmaps/gifImages/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5689
     (i asFloydSteinbergDitheredPseudoFormUsing:(Smalltalk at:#'Color:DitherColors') on:Display) inspect
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5690
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5691
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5692
    "Created: 17.6.1996 / 12:13:35 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5693
    "Modified: 5.9.1996 / 19:42:57 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5694
!
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5695
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5696
asOrderedDitheredGrayFormOn:aDevice
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5697
    "return a dithered depth-x grey form from the receiver image.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5698
     Uses an 8x8 dithermatrix."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5699
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5700
    |depth bits|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5701
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5702
    depth := aDevice depth.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5703
    (depth == 1
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5704
    or:[aDevice hasGrayscales not]) ifTrue:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5705
        "/ for monochrome, there is highly specialized
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5706
        "/ monochrome dither code available
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5707
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5708
        ^ self asOrderedDitheredMonochromeFormOn:aDevice
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5709
    ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5710
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5711
    bits := self
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5712
                orderedDitheredGrayBitsWithDitherMatrix:(self class orderedDitherMatrixOfSize:8)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5713
                ditherWidth:8
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5714
                depth:depth.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5715
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5716
    ^ self makeDeviceGrayPixmapOn:aDevice depth:depth fromArray:bits
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5717
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5718
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5719
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5720
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5721
     i := Image fromFile:'goodies/bitmaps/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5722
     (i asOrderedDitheredGrayFormOn:Display) inspect
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5723
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5724
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5725
    "Modified: 24.6.1997 / 22:19:30 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5726
!
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5727
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5728
asOrderedDitheredGrayImageDepth:depth
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5729
    "return a dithered depth-x grey image from the receiver image.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5730
     Uses an 8x8 dithermatrix."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5731
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5732
    |dither|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5733
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5734
    dither := self class orderedDitherMatrixOfSize:8.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5735
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5736
    (depth == 1) ifTrue:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5737
        "/ for monochrome, there is highly specialized
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5738
        "/ monochrome dither code available
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5739
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5740
        ^ Depth1Image
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5741
            width:width
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5742
            height:height
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5743
            fromArray:(
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5744
                self
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5745
                    orderedDitheredMonochromeBitsWithDitherMatrix:dither
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5746
                    ditherWidth:8)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5747
    ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5748
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5749
    ^ (self class implementorForDepth:depth)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5750
        width:width
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5751
        height:height
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5752
        fromArray:(
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5753
            self
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5754
                orderedDitheredGrayBitsWithDitherMatrix:dither
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5755
                ditherWidth:8
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5756
                depth:depth)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5757
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5758
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5759
     |i i1 i2 i4 i8|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5760
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5761
     i := Image fromFile:'goodies/bitmaps/gifImages/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5762
     i1 := i asOrderedDitheredGrayImageDepth:1.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5763
     i1 inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5764
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5765
     i2 := i asOrderedDitheredGrayImageDepth:2.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5766
     i2 inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5767
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5768
     i4 := i asOrderedDitheredGrayImageDepth:4.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5769
     i4 inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5770
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5771
     i8 := i asOrderedDitheredGrayImageDepth:8.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5772
     i8 inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5773
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5774
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5775
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5776
     |i i1 i2 i4 i8|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5777
     i := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5778
     i1 := i asOrderedDitheredGrayImageDepth:1.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5779
     i1 inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5780
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5781
     i2 := i asOrderedDitheredGrayImageDepth:2.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5782
     i2 inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5783
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5784
     i4 := i asOrderedDitheredGrayImageDepth:4.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5785
     i4 inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5786
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5787
     i8 := i asOrderedDitheredGrayImageDepth:8.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5788
     i8 inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5789
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5790
     i2 := i8 asOrderedDitheredGrayImageDepth:2.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5791
     i2 inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5792
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5793
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5794
    "Created: 7.6.1996 / 18:03:54 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5795
    "Modified: 24.6.1997 / 22:19:36 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5796
!
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5797
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5798
asOrderedDitheredMonochromeFormOn:aDevice
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5799
    "return a dithered monochrome form from the grey image.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5800
     Uses a 4x4 dithermatrix."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5801
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5802
    "/ 4x4 seems a good comprimize between:
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5803
    "/    number of grey levels (8x8 is better)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5804
    "/    artifacts             (4x4 is better)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5805
    "/
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5806
    "/ could look at the image and decide upon the number of
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5807
    "/ distinct colors present. Use 8x8 for high-number,
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5808
    "/ 4x4 for small number of colors ...
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5809
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5810
    ^ self
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5811
        asOrderedDitheredMonochromeFormOn:aDevice
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5812
        ditherMatrix:(self class orderedDitherMatrixOfSize:4)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5813
        ditherWidth:4
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5814
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5815
"/    ^ self
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5816
"/        asOrderedDitheredMonochromeFormOn:aDevice
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5817
"/        ditherMatrix:(self class orderedDitherMatrixOfSize:8)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5818
"/        ditherWidth:8
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5819
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5820
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5821
     |i f|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5822
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5823
     i := Image fromFile:'goodies/bitmaps/gifImages/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5824
     f := i asOrderedDitheredMonochromeFormOn:Display.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5825
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5826
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5827
     |i f|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5828
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5829
     i := (Image fromFile:'goodies/bitmaps/winBitmaps/a11.ico') magnifiedBy:10.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5830
     f := i asOrderedDitheredMonochromeFormOn:Display.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5831
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5832
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5833
     |i f|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5834
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5835
     i := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5836
     f := i asOrderedDitheredMonochromeFormOn:Display.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5837
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5838
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5839
     |i f|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5840
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5841
     i := (Image fromFile:'doc/online/pictures/PasteButton.gif') magnifiedBy:10.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5842
     f := i asOrderedDitheredMonochromeFormOn:Display.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5843
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5844
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5845
     |i f|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5846
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5847
     i := (Image fromFile:'goodies/bitmaps/gifImages/blue-ball.gif') magnifiedBy:1.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5848
     f := i asOrderedDitheredMonochromeFormOn:Display.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5849
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5850
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5851
    "Created: 7.6.1996 / 14:52:32 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5852
    "Modified: 17.4.1997 / 01:10:10 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5853
!
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5854
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5855
asOrderedDitheredMonochromeFormOn:aDevice ditherMatrix:ditherMatrix ditherWidth:dW
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5856
    "return a dithered monochrome form from the image.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5857
     Uses the passed ditherMatrix and ditherWidth."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5858
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5859
    |monoBits|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5860
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5861
    monoBits := self orderedDitheredMonochromeBitsWithDitherMatrix:ditherMatrix ditherWidth:dW.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5862
    ^ self makeDeviceMonochromeBitmapOn:aDevice fromArray:monoBits
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5863
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5864
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5865
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5866
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5867
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5868
     i := Image fromFile:'goodies/bitmaps/gifImages/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5869
     (i asOrderedDitheredMonochromeFormOn:Display) inspect
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5870
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5871
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5872
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5873
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5874
     i := Image fromFile:'goodies/bitmaps/granite.tiff'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5875
     (i asOrderedDitheredMonochromeFormOn:Display) inspect
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5876
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5877
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5878
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5879
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5880
     i := (Image fromFile:'goodies/bitmaps/PasteButton.tiff') magnifiedBy:10.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5881
     (i asOrderedDitheredMonochromeFormOn:Display) inspect
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5882
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5883
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5884
    "Created: 7.6.1996 / 14:51:42 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5885
    "Modified: 17.4.1997 / 01:08:24 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5886
!
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5887
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5888
asOrderedDitheredMonochromeImage
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5889
    "return a dithered monochrome image from the receiver image.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5890
     Uses a 4x4 dithermatrix."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5891
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5892
    "/ 4x4 seems a good comprimize between:
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5893
    "/    number of grey levels (8x8 is better)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5894
    "/    artifacts             (4x4 is better)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5895
    "/
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5896
    "/ could look at the image and decide upon the number of
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5897
    "/ distinct colors present. Use 8x8 for high-number,
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5898
    "/ 4x4 for small number of colors ...
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5899
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5900
    ^ self
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5901
        asOrderedDitheredMonochromeImageWithDitherMatrix:(self class orderedDitherMatrixOfSize:4)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5902
        ditherWidth:4
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5903
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5904
"/    ^ self
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5905
"/        asOrderedDitheredMonochromeImageWithDitherMatrix:(self class orderedDitherMatrixOfSize:8)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5906
"/        ditherWidth:8
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5907
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5908
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5909
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5910
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5911
     i := Image fromFile:'goodies/bitmaps/gifImages/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5912
     i asOrderedDitheredMonochromeImage inspect
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5913
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5914
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5915
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5916
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5917
     i := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5918
     i asOrderedDitheredMonochromeImage inspect
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5919
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5920
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5921
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5922
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5923
     i := (Image fromFile:'doc/online/pictures/PasteButton.gif') magnifiedBy:10.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5924
     i asOrderedDitheredMonochromeImage inspect
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5925
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5926
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5927
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5928
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5929
     i := (Image fromFile:'goodies/bitmaps/gifImages/blue-ball.gif') magnifiedBy:1.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5930
     i asOrderedDitheredMonochromeImage inspect
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5931
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5932
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5933
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5934
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5935
     i := Image fromFile:'libwidg3/bitmaps/granite.tiff'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5936
     i asOrderedDitheredMonochromeImage inspect
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5937
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5938
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5939
    "Created: 7.6.1996 / 15:02:07 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5940
    "Modified: 10.6.1996 / 11:15:09 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5941
!
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5942
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5943
asOrderedDitheredMonochromeImageWithDitherMatrix:ditherMatrix ditherWidth:dW
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5944
    "return a dithered monochrome image from the receiver image.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5945
     Uses the passed ditherMatrix and ditherWidth."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5946
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5947
    |monoBits|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5948
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5949
    monoBits := self orderedDitheredMonochromeBitsWithDitherMatrix:ditherMatrix ditherWidth:dW.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5950
    ^ (Depth1Image width:width height:height fromArray:monoBits) photometric:#blackIs0
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5951
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5952
    "order-4 dither:
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5953
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5954
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5955
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5956
     i := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5957
     i
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5958
        asOrderedDitheredMonochromeImageWithDitherMatrix:(Image orderedDitherMatrixOfSize:4)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5959
        ditherWidth:4
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5960
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5961
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5962
    "order-6 dither:
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5963
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5964
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5965
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5966
     i := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5967
     i
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5968
        asOrderedDitheredMonochromeImageWithDitherMatrix:(Image orderedDitherMatrixOfSize:8)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5969
        ditherWidth:8
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5970
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5971
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5972
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5973
    "thresholding at:0.5 (all above 0.5 becomes white):
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5974
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5975
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5976
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5977
     i := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5978
     i
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5979
        asOrderedDitheredMonochromeImageWithDitherMatrix:(ByteArray new:16 withAll:8)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5980
        ditherWidth:4
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5981
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5982
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5983
    "thresholding at: 0.25 (all above 0.25 becomes white):
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5984
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5985
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5986
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5987
     i := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5988
     i
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5989
        asOrderedDitheredMonochromeImageWithDitherMatrix:(ByteArray new:16 withAll:3)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5990
        ditherWidth:4
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5991
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5992
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5993
    "thresholding at: 0.75 (all above 0.75 becomes white):
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5994
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5995
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5996
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5997
     i := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5998
     i
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5999
        asOrderedDitheredMonochromeImageWithDitherMatrix:(ByteArray new:16 withAll:11)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6000
        ditherWidth:4
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6001
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6002
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6003
    "Modified: 7.6.1996 / 17:23:47 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6004
!
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6005
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6006
asStevensonArceDitheredMonochromeImage
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6007
    "return a stevenson-arce dithered monochrome image from the receiver image.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6008
     Depending on the images contents, this may or may not look better than
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6009
     a floyd-steinberg dithered image.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6010
     Notice that floyd-steinberg dithering is faster; both because less
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6011
     error diffusion is done and due to being specially tuned."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6012
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6013
    |monoBits|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6014
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6015
    monoBits := self stevensonArceDitheredMonochromeBits.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6016
    ^ (Depth1Image width:width height:height fromArray:monoBits) photometric:#blackIs0
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6017
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6018
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6019
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6020
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6021
     i := Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6022
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6023
     i asFloydSteinbergDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6024
     i asBurkesDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6025
     i asStevensonArceDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6026
     i asOrderedDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6027
     (i asThresholdMonochromeImage:0.5) inspect
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6028
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6029
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6030
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6031
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6032
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6033
     i := Image fromFile:'goodies/bitmaps/gifImages/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6034
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6035
     i asFloydSteinbergDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6036
     i asBurkesDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6037
     i asStevensonArceDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6038
     i asOrderedDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6039
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6040
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6041
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6042
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6043
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6044
     i := Depth4Image
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6045
             width:4
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6046
             height:4
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6047
             fromArray:#[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6048
                            16r01 16r23
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6049
                            16r45 16r67
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6050
                            16r89 16rab
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6051
                            16rcd 16ref
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6052
                        ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6053
     i := i magnifiedBy:30.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6054
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6055
     i asStevensonArceDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6056
     i asOrderedDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6057
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6058
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6059
    "Created: 10.6.1996 / 12:38:29 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6060
    "Modified: 12.6.1996 / 13:58:24 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6061
! !
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6062
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6063
!Image methodsFor:'converting - thresholding'!
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6064
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6065
asNearestPaintDepth8FormOn:aDevice colors:fixColors
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6066
    "return a nearest paint pseudoForm from the palette picture.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6067
     Use the colors in the fixColors array.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6068
     By passing the ditherColors as extra array, this method can
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6069
     also be used to dither an 8bit image into a smaller number of colors,
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6070
     for example to create dithered Depth4Images from Depth8Images."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6071
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6072
    ^ self asNearestPaintDepth8FormOn:aDevice colors:fixColors nRed:nil nGreen:nil nBlue:nil.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6073
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6074
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6075
     example:
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6076
        color reduction from Depth8 to Depth4 can be done by:
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6077
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6078
     |img8 reducedImg8 img4 map form|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6079
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6080
     map := #(
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6081
                  (0     0   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6082
                  (0     0 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6083
                  (0    50   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6084
                  (0    50 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6085
                  (0   100   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6086
                  (0   100 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6087
                  (100   0   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6088
                  (100   0 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6089
                  (100  50   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6090
                  (100  50 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6091
                  (100 100   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6092
                  (100 100 100)) collect:[:rgb | (Color red:(rgb at:1)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6093
                                                      green:(rgb at:2)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6094
                                                       blue:(rgb at:3)) onDevice:Display].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6095
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6096
     img8 := Image fromFile:'goodies/bitmaps/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6097
     form := img8 asNearestPaintDepth8FormOn:Display
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6098
                      colors:map
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6099
                        nRed:2
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6100
                      nGreen:3
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6101
                       nBlue:2.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6102
     img8 := Depth8Image fromForm:form.    'dithered version of original image'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6103
     img4 := Depth4Image fromImage:img8.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6104
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6105
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6106
    "Modified: 17.6.1996 / 18:52:47 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6107
    "Created: 23.6.1997 / 15:26:09 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6108
!
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6109
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6110
asNearestPaintDepth8FormOn:aDevice colors:fixColors nRed:nRed nGreen:nGreen nBlue:nBlue
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6111
    "return a nearest paint pseudoForm from the palette picture.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6112
     Use the colors in the fixColors array, which must be fixR x fixG x fixB
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6113
     colors assigned to aDevice, such as the preallocated colors of the
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6114
     Color class.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6115
     By passing the ditherColors as extra array, this method can
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6116
     also be used to dither an 8bit image into a smaller number of colors,
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6117
     for example to create dithered Depth4Images from Depth8Images."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6118
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6119
    |pseudoBits f deviceDepth map|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6120
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6121
    deviceDepth := aDevice depth.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6122
    deviceDepth == 8 ifFalse:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6123
        (aDevice supportedImageFormatForDepth:8) isNil ifTrue:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6124
            ^ nil
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6125
        ]
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6126
    ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6127
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6128
    pseudoBits := self nearestPaintDepth8BitsColors:fixColors nRed:nRed nGreen:nGreen nBlue:nBlue.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6129
    pseudoBits isNil ifTrue:[^ nil].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6130
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6131
    f := Form width:width height:height depth:deviceDepth onDevice:aDevice.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6132
    f isNil ifTrue:[^ nil].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6133
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6134
    "/
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6135
    "/ have to create a funny colorMap, where
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6136
    "/ color at:index == color colorId:index
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6137
    "/
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6138
    map := Array new:256.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6139
    fixColors do:[:clr |
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6140
        map at:clr colorId + 1 put:clr
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6141
    ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6142
    f colorMap:map.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6143
    f bits:pseudoBits.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6144
    aDevice
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6145
        drawBits:pseudoBits
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6146
        bitsPerPixel:8
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6147
        depth:deviceDepth
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6148
        padding:8
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6149
        width:width height:height
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6150
        x:0 y:0
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6151
        into:(f id) x:0 y:0
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6152
        width:width height:height
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6153
        with:(f initGC).
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6154
    ^ f
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6155
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6156
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6157
     example:
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6158
        color reduction from Depth8 to Depth4 (dithering) can be done by:
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6159
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6160
     |img8 reducedImg8 img4 map form|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6161
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6162
     map := #(
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6163
                  (0     0   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6164
                  (0     0 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6165
                  (0    50   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6166
                  (0    50 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6167
                  (0   100   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6168
                  (0   100 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6169
                  (100   0   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6170
                  (100   0 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6171
                  (100  50   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6172
                  (100  50 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6173
                  (100 100   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6174
                  (100 100 100)) collect:[:rgb | (Color red:(rgb at:1)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6175
                                                      green:(rgb at:2)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6176
                                                       blue:(rgb at:3)) onDevice:Display].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6177
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6178
     img8 := Image fromFile:'goodies/bitmaps/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6179
     form := img8 asNearestPaintDepth8FormOn:Display
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6180
                      colors:map
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6181
                        nRed:2
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6182
                      nGreen:3
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6183
                       nBlue:2.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6184
     img8 := Depth8Image fromForm:form.    'dithered version of original image'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6185
     img4 := Depth4Image fromImage:img8.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6186
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6187
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6188
    "Created: 17.6.1996 / 18:47:46 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6189
    "Modified: 17.6.1996 / 18:52:47 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6190
!
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6191
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6192
asNearestPaintImageDepth:d colors:colors
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6193
    "return a threshold image from the receiver picture, using colors in colors."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6194
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6195
    |newBits|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6196
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6197
    d ~~ 8 ifTrue:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6198
        self error:'unsupported depth'
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6199
    ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6200
    newBits := self nearestPaintDepth8BitsColors:colors nRed:nil nGreen:nil nBlue:nil.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6201
    newBits isNil ifTrue:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6202
        self error:'conversion failed'
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6203
    ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6204
    ^ (self class newForDepth:d) extent:(self extent); depth:d; palette:colors; bits:newBits; yourself
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6205
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6206
    "Modified: / 30-01-2017 / 19:40:28 / stefan"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6207
!
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6208
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6209
asThresholdGrayFormOn:aDevice
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6210
    "return a thresholded grey form from the receiver image."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6211
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6212
    |depth|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6213
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6214
    (depth := aDevice depth) == 1 ifTrue:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6215
        ^ self asThresholdMonochromeFormOn:aDevice
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6216
    ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6217
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6218
    ^ self
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6219
        makeDeviceGrayPixmapOn:aDevice
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6220
        depth:depth
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6221
        fromArray:(self
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6222
                        orderedDitheredGrayBitsWithDitherMatrix:#[8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8]
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6223
                        ditherWidth:4
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6224
                        depth:depth)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6225
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6226
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6227
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6228
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6229
     i := Image fromFile:'goodies/bitmaps/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6230
     (i asThresholdGrayFormOn:Display) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6231
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6232
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6233
    "Created: 10.6.1996 / 18:38:31 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6234
    "Modified: 24.6.1997 / 22:19:46 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6235
!
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6236
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6237
asThresholdGrayImageDepth:depth
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6238
    "return a thresholded depth-x grey image from the receiver image."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6239
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6240
    (depth == 1) ifTrue:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6241
        "/ for monochrome, there is highly specialized
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6242
        "/ monochrome dither code available
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6243
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6244
        ^ Depth1Image
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6245
            width:width
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6246
            height:height
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6247
            fromArray:(
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6248
                self
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6249
                    orderedDitheredMonochromeBitsWithDitherMatrix:#[8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8]
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6250
                    ditherWidth:4)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6251
    ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6252
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6253
    ^ (self class implementorForDepth:depth)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6254
        width:width
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6255
        height:height
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6256
        fromArray:(
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6257
            self
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6258
                orderedDitheredGrayBitsWithDitherMatrix:#[8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8]
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6259
                ditherWidth:4
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6260
                depth:depth)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6261
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6262
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6263
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6264
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6265
     i := Image fromFile:'goodies/bitmaps/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6266
     (i asThresholdGrayImageDepth:1) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6267
     (i asThresholdGrayImageDepth:2) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6268
     (i asThresholdGrayImageDepth:4) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6269
     (i asThresholdGrayImageDepth:8) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6270
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6271
     (i asOrderedDitheredGrayImageDepth:1) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6272
     (i asOrderedDitheredGrayImageDepth:2) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6273
     (i asOrderedDitheredGrayImageDepth:4) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6274
     (i asOrderedDitheredGrayImageDepth:8) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6275
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6276
     (i asFloydSteinbergDitheredGrayImageDepth:1) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6277
     (i asFloydSteinbergDitheredGrayImageDepth:2) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6278
     (i asFloydSteinbergDitheredGrayImageDepth:4) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6279
     (i asFloydSteinbergDitheredGrayImageDepth:8) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6280
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6281
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6282
    "Created: 7.6.1996 / 18:13:33 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6283
    "Modified: 24.6.1997 / 22:19:52 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6284
!
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6285
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6286
asThresholdMonochromeFormOn:aDevice
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6287
    "return a threshold monochrome form from the image."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6288
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6289
    ^ self
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6290
        asOrderedDitheredMonochromeFormOn:aDevice
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6291
        ditherMatrix:#[8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8]
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6292
        ditherWidth:4
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6293
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6294
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6295
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6296
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6297
     i := Image fromFile:'goodies/bitmaps/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6298
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6299
     (i asThresholdMonochromeFormOn:Display) inspect
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6300
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6301
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6302
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6303
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6304
     i := (Image fromFile:'goodies/bitmaps/a11.ico') magnifiedBy:10.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6305
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6306
     (i asThresholdMonochromeFormOn:Display) inspect
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6307
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6308
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6309
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6310
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6311
     i := Image fromFile:'goodies/bitmaps/granite.tiff'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6312
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6313
     (i asThresholdMonochromeFormOn:Display) inspect
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6314
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6315
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6316
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6317
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6318
     i := (Image fromFile:'goodies/bitmaps/PasteButton.tiff') magnifiedBy:10.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6319
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6320
     (i asThresholdMonochromeFormOn:Display) inspect
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6321
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6322
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6323
    "Created: 7.6.1996 / 16:15:17 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6324
    "Modified: 10.6.1996 / 17:44:29 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6325
!
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6326
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6327
asThresholdMonochromeImage
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6328
    "return a threshold monochrome image from the image.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6329
     Threshold means: brightness < 0.5 -> black / otherwise white"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6330
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6331
    ^ self
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6332
        asOrderedDitheredMonochromeImageWithDitherMatrix:#[8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8]
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6333
        ditherWidth:4
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6334
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6335
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6336
     |i i2|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6337
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6338
     i := Image fromFile:'goodies/bitmaps/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6339
     i2 := i asThresholdMonochromeImage
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6340
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6341
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6342
     |i i2|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6343
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6344
     i := (Image fromFile:'/cdrom/icons/a/a11.ico') magnifiedBy:10.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6345
     i2 := i asThresholdMonochromeImage
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6346
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6347
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6348
     |i i2|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6349
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6350
     i := Image fromFile:'goodies/bitmaps/granite.tiff'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6351
     i2 := i asThresholdMonochromeImage
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6352
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6353
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6354
     |i i2|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6355
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6356
     i := (Image fromFile:'goodies/bitmaps/PasteButton.tiff') magnifiedBy:10.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6357
     i2 := i asThresholdMonochromeImage
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6358
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6359
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6360
    "Created: 7.6.1996 / 16:15:17 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6361
    "Modified: 7.6.1996 / 17:16:10 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6362
!
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6363
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6364
asThresholdMonochromeImage:thresholdBrighness
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6365
    "return a threshold monochrome image from the image.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6366
     The argument (0..1) gives the threshold value;
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6367
     Threshold means: brightness < threshold -> black / otherwise white"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6368
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6369
    |value ditherMatrix|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6370
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6371
    value := thresholdBrighness * 255.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6372
    ditherMatrix := ByteArray new:256 withAll:(value truncated).
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6373
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6374
    ^ self
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6375
        asOrderedDitheredMonochromeImageWithDitherMatrix:ditherMatrix
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6376
        ditherWidth:16
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6377
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6378
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6379
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6380
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6381
     i := Image width:4 height:4 depth:4
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6382
                fromArray:#[ 16r01 16r23
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6383
                             16r45 16r67
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6384
                             16r89 16rab
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6385
                             16rcd 16ref ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6386
     i := i magnifiedBy:30.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6387
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6388
     (i asThresholdMonochromeImage:0.125) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6389
     (i asThresholdMonochromeImage:0.25) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6390
     (i asThresholdMonochromeImage:0.5) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6391
     (i asThresholdMonochromeImage:0.75) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6392
     (i asThresholdMonochromeImage:1) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6393
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6394
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6395
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6396
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6397
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6398
     i := Image fromFile:'goodies/bitmaps/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6399
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6400
     (i asThresholdMonochromeImage:0.125) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6401
     (i asThresholdMonochromeImage:0.25) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6402
     (i asThresholdMonochromeImage:0.5) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6403
     (i asThresholdMonochromeImage:0.625) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6404
     (i asThresholdMonochromeImage:0.75) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6405
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6406
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6407
    "Created: 7.6.1996 / 16:15:17 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6408
    "Modified: 8.6.1996 / 14:51:57 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6409
! !
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6410
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6411
!Image methodsFor:'converting greyscale images'!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6412
8103
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6413
anyImageAsFormOn:aDevice
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6414
    "return a (usually truecolor) deviceForm from an arbitrary image."
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6415
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6416
    |nPlanes|
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6417
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6418
    nPlanes := samplesPerPixel.
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6419
    (nPlanes == 2) ifTrue:[
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6420
        'Image [info]: alpha plane ignored' infoPrintCR.
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6421
    ].
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6422
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6423
    (aDevice visualType == #TrueColor) ifTrue:[
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6424
        ^ self anyImageAsTrueColorFormOn:aDevice
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6425
    ].
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6426
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6427
    "/ PseudoColor conversion also works, although possibly with suboptimal results
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6428
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6429
    ^ self anyImageAsPseudoFormOn:aDevice
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6430
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6431
    "Created: / 25-08-2017 / 09:31:17 / cg"
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6432
!
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6433
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6434
greyImageAsFormOn:aDevice
1932
6afe07d9c88c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1927
diff changeset
  6435
    "return a grey-deviceForm from the grey image."
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6436
1063
ba1bf8091bc1 unused variable cleanup
Claus Gittinger <cg@exept.de>
parents: 1057
diff changeset
  6437
    |pictureDepth nPlanes|
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6438
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  6439
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6440
    nPlanes := samplesPerPixel.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6441
    (nPlanes == 2) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6442
        'Image [info]: alpha plane ignored' infoPrintCR.
3872
390fabbc3036 comments and slight cleanup
Claus Gittinger <cg@exept.de>
parents: 3871
diff changeset
  6443
    ].
390fabbc3036 comments and slight cleanup
Claus Gittinger <cg@exept.de>
parents: 3871
diff changeset
  6444
    "/ first plane only
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6445
    pictureDepth := bitsPerSample at:1.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6446
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6447
    "monochrome is very easy ..."
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6448
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6449
    (pictureDepth == 1) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6450
        ^ Form width:width height:height fromArray:self bits onDevice:aDevice
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6451
    ].
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6452
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6453
    (aDevice visualType == #TrueColor) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6454
        ^ self greyImageAsTrueColorFormOn:aDevice
1932
6afe07d9c88c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1927
diff changeset
  6455
    ].
858
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  6456
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  6457
    "/ PseudoColor conversion also works for StaticColor,
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  6458
    "/ GrayScale and DirectColor; although possibly with suboptimal results
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  6459
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  6460
    ^ self greyImageAsPseudoFormOn:aDevice
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  6461
1932
6afe07d9c88c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1927
diff changeset
  6462
    "Modified: 19.10.1997 / 05:17:25 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6463
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6464
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6465
greyImageAsPseudoFormOn:aDevice
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6466
    "return an 8-bit pseudo Form from the grey image"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6467
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  6468
    |wideBits pictureDepth f map
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  6469
     colorMap usedColors nUsed aColor
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6470
     nColors "{ Class: SmallInteger }"
1766
08b918d293a6 fixed conversion of greyScale images with colorCube
Claus Gittinger <cg@exept.de>
parents: 1764
diff changeset
  6471
     range id
1932
6afe07d9c88c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1927
diff changeset
  6472
     cube nR nG nB grayColors
6afe07d9c88c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1927
diff changeset
  6473
     fit|
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6474
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6475
    pictureDepth := bitsPerSample at:1.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6476
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  6477
    (#[2 4 8] includes:pictureDepth) ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6478
        self error:'currently only depth-2, 4 or 8 supported'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6479
        ^ nil
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6480
    ].
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6481
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6482
    wideBits := ByteArray uninitializedNew:(width * height).
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6483
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6484
    (pictureDepth == 8) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6485
        "for 8bits, we scan for used colors first;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6486
         to avoid allocating too many colors"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6487
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6488
        (grayColors := aDevice fixGrayColors) notNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6489
            DitherAlgorithm == #floydSteinberg ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6490
                f := self
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6491
                       asFloydSteinbergDitheredDepth8FormOn:aDevice
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6492
                       colors:grayColors
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6493
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6494
            f notNil ifTrue:[^ f].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6495
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6496
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6497
        (cube := aDevice fixColors) notNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6498
            nR := aDevice numFixRed.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6499
            nG := aDevice numFixGreen.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6500
            nB := aDevice numFixBlue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6501
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6502
            DitherAlgorithm == #floydSteinberg ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6503
                f := self
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6504
                       asFloydSteinbergDitheredDepth8FormOn:aDevice
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6505
                       colors:cube
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6506
                       nRed:nR
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6507
                       nGreen:nG
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6508
                       nBlue:nB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6509
            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6510
                f := self
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6511
                       asNearestPaintDepth8FormOn:aDevice
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6512
                       colors:cube
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6513
                       nRed:nR
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6514
                       nGreen:nG
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6515
                       nBlue:nB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6516
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6517
            f notNil ifTrue:[^ f].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6518
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6519
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6520
        usedColors := self bits usedValues.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6521
        nUsed := usedColors max + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6523
        colorMap := Array new:nUsed.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6524
        range := 100 / 255.0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6525
        usedColors do:[:grey |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6526
            colorMap at:(grey + 1) put:(Color gray:(range * grey))
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6527
        ].
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  6528
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6529
        nColors := (1 bitShift:pictureDepth).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6530
        colorMap := Array new:nColors.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6531
        range := 100 / (nColors - 1) asFloat.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6532
        1 to:nColors do:[:i |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6533
            colorMap at:i put:(Color gray:(i - 1) * range).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6534
        ].
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6535
    ].
1932
6afe07d9c88c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1927
diff changeset
  6536
    photometric ~~ #blackIs0 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6537
        colorMap reverse
1932
6afe07d9c88c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1927
diff changeset
  6538
    ].
6afe07d9c88c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1927
diff changeset
  6539
6afe07d9c88c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1927
diff changeset
  6540
    "allocate those colors & setup the translation map"
6afe07d9c88c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1927
diff changeset
  6541
6afe07d9c88c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1927
diff changeset
  6542
    fit := true.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6543
    map := ByteArray uninitializedNew:256.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6544
    nColors := colorMap size.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6545
    1 to:nColors do:[:i |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6546
        aColor := colorMap at:i.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6547
        aColor notNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6548
            aColor := aColor onDevice:aDevice.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6549
            colorMap at:i put:aColor.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6550
            id := aColor colorId.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6551
            id isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6552
                id := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6553
                fit := false.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6554
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6555
            map at:i put:id
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6556
        ]
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  6557
    ].
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6558
1932
6afe07d9c88c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1927
diff changeset
  6559
    fit ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6560
        "/ here comes the hard part - some grey value
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6561
        "/ could not be allocated.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6562
        "/ Must dither.
1932
6afe07d9c88c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1927
diff changeset
  6563
6afe07d9c88c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1927
diff changeset
  6564
    ].
6afe07d9c88c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1927
diff changeset
  6565
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6566
    "expand & translate"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  6567
    self bits
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6568
        expandPixels:pictureDepth
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6569
        width:width height:height
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6570
        into:wideBits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6571
        mapping:map.
4780
03c3e810a584 Change senders of obsolete messages Form>>...on: to ...onDevice:
Stefan Vogel <sv@exept.de>
parents: 4769
diff changeset
  6572
03c3e810a584 Change senders of obsolete messages Form>>...on: to ...onDevice:
Stefan Vogel <sv@exept.de>
parents: 4769
diff changeset
  6573
    f := Form width:width height:height depth:8 onDevice:aDevice.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6574
    f isNil ifTrue:[^ nil].
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  6575
    f colorMap:colorMap.
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  6576
    aDevice
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6577
        drawBits:wideBits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6578
        depth:8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6579
        padding:8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6580
        width:width height:height
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6581
        x:0 y:0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6582
        into:(f id)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6583
        x:0 y:0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6584
        width:width height:height
7755
75f5eba88e77 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 7689
diff changeset
  6585
        with:(f initGC).
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6586
    ^ f
746
f5479d603f64 gray vs. grey
Claus Gittinger <cg@exept.de>
parents: 744
diff changeset
  6587
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  6588
    "Modified: / 19-10-1997 / 05:19:44 / cg"
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  6589
    "Modified: / 30-01-2017 / 19:37:01 / stefan"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  6590
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  6591
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6592
greyImageAsTrueColorFormOn:aDevice
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6593
    "return a true-color device-form for the grey-image receiver.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6594
     TODO: the pixel loops ought to be implemented as inline primitive code ..."
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6595
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  6596
    |myDepth    "{ Class: SmallInteger }"
1143
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  6597
     nColors    "{ Class: SmallInteger }"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6598
     colorValues
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  6599
     scaleDown
1143
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  6600
     scaleRed   "{ Class: SmallInteger }"
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  6601
     scaleGreen "{ Class: SmallInteger }"
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  6602
     scaleBlue  "{ Class: SmallInteger }"
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  6603
     redShift   "{ Class: SmallInteger }"
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  6604
     blueShift  "{ Class: SmallInteger }"
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  6605
     greenShift "{ Class: SmallInteger }"
8096
42e3303fe2c2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8093
diff changeset
  6606
     form bestFormat usedDeviceDepth usedDeviceBitsPerPixel
1175
5595569cfbd3 newStyle info & error messages
Claus Gittinger <cg@exept.de>
parents: 1170
diff changeset
  6607
     greyValue  "{ Class: SmallInteger }"
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6608
     h          "{ Class: SmallInteger }"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6609
     w          "{ Class: SmallInteger }"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6610
     pixelArray newPixelArray i|
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6611
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6612
    "/ this is a slow fallback method; this ought to be
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6613
    "/ redefined in DepthxImage for more performance.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6614
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6615
    myDepth := self depth.
5315
cbac968cee6c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5314
diff changeset
  6616
    myDepth > 16 ifTrue:[
8096
42e3303fe2c2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8093
diff changeset
  6617
        "/ for now: deep greyscale images are not supported.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6618
        self error:'unsupported depth' mayProceed:true.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6619
        ^ nil
5315
cbac968cee6c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5314
diff changeset
  6620
    ].
5314
517094dfa71c changed #greyImageAsTrueColorFormOn:
Claus Gittinger <cg@exept.de>
parents: 5313
diff changeset
  6621
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6622
    "/ compute scale to map from my pixels into devices range
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6623
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6624
    scaleDown := 1 bitShift:myDepth.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6625
    scaleRed := (1 bitShift:aDevice bitsRed).
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6626
    scaleGreen := (1 bitShift:aDevice bitsGreen).
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6627
    scaleBlue := (1 bitShift:aDevice bitsBlue).
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6628
    redShift := aDevice shiftRed.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6629
    greenShift := aDevice shiftGreen.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6630
    blueShift := aDevice shiftBlue.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6631
1143
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  6632
    "/ prepare the map
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  6633
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6634
    nColors := (1 bitShift:myDepth).
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6635
    colorValues := Array new:nColors.
6256
1e510d7aea8e Inline block variable rename to avoid stc bug
Stefan Vogel <sv@exept.de>
parents: 6166
diff changeset
  6636
    1 to:nColors do:[:colorIdx |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6637
        |v gv bv rv nv|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6638
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6639
        "/ scale down to 0..1
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6640
        v := (colorIdx-1) / scaleDown.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6641
        rv := (v * scaleRed) truncated.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6642
        gv := (v * scaleGreen) truncated.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6643
        bv := (v * scaleBlue) truncated.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6644
        nv := rv bitShift:redShift.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6645
        nv := nv bitOr:(gv bitShift:greenShift).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6646
        nv := nv bitOr:(bv bitShift:blueShift).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6647
        colorValues at:colorIdx put:nv
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  6648
    ].
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6649
    photometric == #whiteIs0 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6650
        "/ reverse the order; 0 is brightest
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6651
        colorValues reverse
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6652
    ].
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6653
8096
42e3303fe2c2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8093
diff changeset
  6654
    "/ the temporary helper image is only needed to allow
42e3303fe2c2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8093
diff changeset
  6655
    "/ the rowAt:putAll: calls below.
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6656
    bestFormat := self bestSupportedImageFormatFor:aDevice.
235
579f3f804a46 padding info in supportedFormats
Claus Gittinger <cg@exept.de>
parents: 230
diff changeset
  6657
    usedDeviceDepth := bestFormat at:#depth.
579f3f804a46 padding info in supportedFormats
Claus Gittinger <cg@exept.de>
parents: 230
diff changeset
  6658
    usedDeviceBitsPerPixel := bestFormat at:#bitsPerPixel.
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6659
1668
95dafe4184d5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1667
diff changeset
  6660
    i := (Image implementorForDepth:usedDeviceBitsPerPixel) new.
95dafe4184d5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1667
diff changeset
  6661
    i width:width height:height.
3912
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
  6662
    i createPixelStore.
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6663
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6664
    "/ now, walk over the image and replace
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6665
    "/ colorMap indices by color values in the bits array
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6666
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6667
    h := height - 1.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6668
    w := width - 1.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6669
    pixelArray := self pixelArraySpecies new:width.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6670
    newPixelArray := i pixelArraySpecies new:width.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6671
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6672
    0 to:h do:[:y |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6673
        self rowAt:y into:pixelArray.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6674
        0 to:w do:[:x |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6675
            greyValue := pixelArray at:(x+1).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6676
            newPixelArray at:(x+1) put:(colorValues at:greyValue + 1).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6677
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6678
        i rowAt:y putAll:newPixelArray.
4780
03c3e810a584 Change senders of obsolete messages Form>>...on: to ...onDevice:
Stefan Vogel <sv@exept.de>
parents: 4769
diff changeset
  6679
    ].
03c3e810a584 Change senders of obsolete messages Form>>...on: to ...onDevice:
Stefan Vogel <sv@exept.de>
parents: 4769
diff changeset
  6680
03c3e810a584 Change senders of obsolete messages Form>>...on: to ...onDevice:
Stefan Vogel <sv@exept.de>
parents: 4769
diff changeset
  6681
    form := Form width:width height:height depth:usedDeviceDepth onDevice:aDevice.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6682
    form isNil ifTrue:[^ nil].
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6683
    form initGC.
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6684
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  6685
    form
8096
42e3303fe2c2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8093
diff changeset
  6686
        copyBitsFrom:i bits
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6687
        bitsPerPixel:usedDeviceBitsPerPixel
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6688
        depth:usedDeviceDepth
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6689
        padding:8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6690
        width:width height:height
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6691
        x:0 y:0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6692
        toX:0 y:0.
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6693
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6694
    ^ form
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6695
5710
9928e8b52195 changed: #greyImageAsTrueColorFormOn:
Claus Gittinger <cg@exept.de>
parents: 5655
diff changeset
  6696
    "Created: / 20-10-1995 / 22:05:10 / cg"
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  6697
    "Modified (format): / 31-01-2017 / 14:42:05 / stefan"
8096
42e3303fe2c2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8093
diff changeset
  6698
    "Modified (format): / 23-08-2017 / 16:35:13 / cg"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  6699
! !
48194c26a46c Initial revision
claus
parents:
diff changeset
  6700
48194c26a46c Initial revision
claus
parents:
diff changeset
  6701
!Image methodsFor:'converting palette images'!
48194c26a46c Initial revision
claus
parents:
diff changeset
  6702
48194c26a46c Initial revision
claus
parents:
diff changeset
  6703
paletteImageAsFormOn:aDevice
72
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
  6704
    "return a device-form for the palette-image receiver"
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
  6705
380
c5ffc6d48a9e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 379
diff changeset
  6706
    |type ddepth|
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6707
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  6708
    ddepth := aDevice depth.
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  6709
    type := aDevice visualType.
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  6710
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6711
    (type == #TrueColor) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6712
        DitherAlgorithm == #floydSteinberg ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6713
            ddepth == 8 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6714
                self depth == 8 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6715
                    "/ use fixColor dither algorithm
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6716
                    ^ self asDitheredTrueColor8FormOn:aDevice
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6717
                ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6718
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6719
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6720
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6721
        ^ self paletteImageAsTrueColorFormOn:aDevice
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6722
    ].
858
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  6723
8141
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
  6724
    aDevice hasGrayscales ifFalse:[
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
  6725
        ^ self asMonochromeFormOn:aDevice
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
  6726
    ].
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
  6727
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
  6728
    (type == #StaticGray) ifTrue:[
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
  6729
        "/ ddepth == 8 ifTrue:[
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
  6730
        "/     ^ self paletteImageAsGray8FormOn:aDevice
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
  6731
        "/ ].
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
  6732
        ^ self asGrayFormOn:aDevice
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
  6733
    ].
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
  6734
858
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  6735
    "/ the PseudoColor conversion also works for
8141
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
  6736
    "/ StaticColor, GrayScale & DirectColor; 
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
  6737
    "/ although possibly with suboptimal results
858
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  6738
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  6739
    ^ self paletteImageAsPseudoFormOn:aDevice
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  6740
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  6741
    "Modified: / 14-06-1996 / 19:31:01 / cg"
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  6742
    "Modified: / 30-01-2017 / 20:55:32 / stefan"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  6743
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  6744
48194c26a46c Initial revision
claus
parents:
diff changeset
  6745
paletteImageAsPseudoFormOn:aDevice
72
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
  6746
    "return a pseudo-deviceForm from the palette image."
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  6747
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  6748
    |tempImage d temp8|
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  6749
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  6750
    d := self depth.
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  6751
    (#[1 2 4 8] includes:d) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6752
        "
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6753
         fallback code for some depth's:
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6754
         create a temporary Depth8Image and use its conversion method
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6755
        "
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6756
        temp8 := ByteArray uninitializedNew:(width * height).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6757
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6758
        self bits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6759
            expandPixels:d
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6760
            width:width height:height
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6761
            into:temp8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6762
            mapping:nil.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6763
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6764
        tempImage := Image width:width height:height depth:8 fromArray:temp8.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6765
        tempImage colorMap:colorMap.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6766
        ^ tempImage paletteImageAsPseudoFormOn:aDevice
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  6767
    ].
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
  6768
    ^ self subclassResponsibility
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  6769
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  6770
    "Modified: / 30-01-2017 / 19:37:57 / stefan"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  6771
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  6772
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6773
paletteImageAsTrueColorFormOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6774
    "return a true-color device-form for the palette-image receiver."
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6775
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  6776
    |nColors "{ Class: SmallInteger }"
1605
64151392ff64 added generic #paletteImageAsTrueColorForm implementation
Claus Gittinger <cg@exept.de>
parents: 1595
diff changeset
  6777
     h       "{ Class: SmallInteger }"
64151392ff64 added generic #paletteImageAsTrueColorForm implementation
Claus Gittinger <cg@exept.de>
parents: 1595
diff changeset
  6778
     pixel   "{ Class: SmallInteger }"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  6779
     colorValues
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6780
     scaleRed scaleGreen scaleBlue redShift greenShift blueShift
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  6781
     form imageBits bestFormat usedDeviceDepth usedDeviceBitsPerPixel
4187
411b7b76a8bb fixedPalette has more functionality
Claus Gittinger <cg@exept.de>
parents: 4175
diff changeset
  6782
     i pixelArray newPixelArray
411b7b76a8bb fixedPalette has more functionality
Claus Gittinger <cg@exept.de>
parents: 4175
diff changeset
  6783
     clr r g b rv gv bv v "{ Class: SmallInteger }" |
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6784
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6785
    "/ this is a slow fallback method; this ought to be
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6786
    "/ redefined in DepthxImage for more performance.
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6787
4187
411b7b76a8bb fixedPalette has more functionality
Claus Gittinger <cg@exept.de>
parents: 4175
diff changeset
  6788
    bestFormat := self bestSupportedImageFormatFor:aDevice.
411b7b76a8bb fixedPalette has more functionality
Claus Gittinger <cg@exept.de>
parents: 4175
diff changeset
  6789
    usedDeviceDepth := bestFormat at:#depth.
411b7b76a8bb fixedPalette has more functionality
Claus Gittinger <cg@exept.de>
parents: 4175
diff changeset
  6790
    usedDeviceDepth == 1 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6791
        ^ self asMonochromeFormOn:aDevice.
4187
411b7b76a8bb fixedPalette has more functionality
Claus Gittinger <cg@exept.de>
parents: 4175
diff changeset
  6792
    ].
411b7b76a8bb fixedPalette has more functionality
Claus Gittinger <cg@exept.de>
parents: 4175
diff changeset
  6793
    usedDeviceBitsPerPixel := bestFormat at:#bitsPerPixel.
411b7b76a8bb fixedPalette has more functionality
Claus Gittinger <cg@exept.de>
parents: 4175
diff changeset
  6794
411b7b76a8bb fixedPalette has more functionality
Claus Gittinger <cg@exept.de>
parents: 4175
diff changeset
  6795
411b7b76a8bb fixedPalette has more functionality
Claus Gittinger <cg@exept.de>
parents: 4175
diff changeset
  6796
    scaleRed := ((1 bitShift:aDevice bitsRed) - 1) / 255.
411b7b76a8bb fixedPalette has more functionality
Claus Gittinger <cg@exept.de>
parents: 4175
diff changeset
  6797
    scaleGreen := ((1 bitShift:aDevice bitsGreen) - 1) / 255.
411b7b76a8bb fixedPalette has more functionality
Claus Gittinger <cg@exept.de>
parents: 4175
diff changeset
  6798
    scaleBlue := ((1 bitShift:aDevice bitsBlue) - 1) / 255.
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6799
    redShift := aDevice shiftRed.
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6800
    greenShift := aDevice shiftGreen.
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6801
    blueShift := aDevice shiftBlue.
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6802
4187
411b7b76a8bb fixedPalette has more functionality
Claus Gittinger <cg@exept.de>
parents: 4175
diff changeset
  6803
    nColors := colorMap size.
411b7b76a8bb fixedPalette has more functionality
Claus Gittinger <cg@exept.de>
parents: 4175
diff changeset
  6804
    nColors <= 4096 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6805
        "/ precompute scales to map from 0..100 into devices range
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6806
        "/ (this may be different for the individual components)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6807
        colorValues := Array uninitializedNew:nColors.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6808
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6809
        1 to:nColors do:[:index |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6810
            r := colorMap redByteAt:index.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6811
            g := colorMap greenByteAt:index.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6812
            b := colorMap blueByteAt:index.
8103
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6813
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6814
            rv := (r * scaleRed) rounded.
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6815
            gv := (g * scaleGreen) rounded.
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6816
            bv := (b * scaleBlue) rounded.
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6817
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6818
            v := rv bitShift:redShift.
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6819
            v := v bitOr:(gv bitShift:greenShift).
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6820
            v := v bitOr:(bv bitShift:blueShift).
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6821
            colorValues at:index put:v.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6822
        ].
2864
dd151bfdff9d care for deep devices which do not support deep bitmaps
Claus Gittinger <cg@exept.de>
parents: 2832
diff changeset
  6823
    ].
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6824
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6825
    "/ the temporary helper image is only needed to allow
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6826
    "/ the rowAt:putAll: calls below.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6827
1665
e0329f98904d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1664
diff changeset
  6828
    i := (Image implementorForDepth:usedDeviceBitsPerPixel) new.
e0329f98904d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1664
diff changeset
  6829
    i width:width height:height.
3912
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
  6830
    i createPixelStore.
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
  6831
    imageBits := i bits.
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6832
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6833
    "/ now, walk over the image and replace
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6834
    "/ colorMap indices by color values in the bits array
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6835
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6836
    h := height - 1.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6837
    pixelArray := self pixelArraySpecies new:width.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6838
    newPixelArray := i pixelArraySpecies new:width.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6839
4187
411b7b76a8bb fixedPalette has more functionality
Claus Gittinger <cg@exept.de>
parents: 4175
diff changeset
  6840
    colorValues notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6841
        0 to:h do:[:y |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6842
            self rowAt:y into:pixelArray.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6843
            1 to:width do:[:x |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6844
                pixel := pixelArray at:x.
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  6845
                newPixelArray at:x put:(colorValues at:pixel + 1 ifAbsent:[0]).
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6846
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6847
            i rowAt:y putAll:newPixelArray.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6848
        ].
4187
411b7b76a8bb fixedPalette has more functionality
Claus Gittinger <cg@exept.de>
parents: 4175
diff changeset
  6849
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6850
        0 to:h do:[:y |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6851
            self rowAt:y into:pixelArray.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6852
            1 to:width do:[:x |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6853
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6854
                pixel := pixelArray at:x.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6855
                clr := self colorFromValue:pixel.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6856
                r := clr redByte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6857
                g := clr greenByte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6858
                b := clr blueByte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6859
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6860
                rv := (r * scaleRed) rounded.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6861
                gv := (g * scaleGreen) rounded.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6862
                bv := (b * scaleBlue) rounded.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6863
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6864
                v := rv bitShift:redShift.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6865
                v := v bitOr:(gv bitShift:greenShift).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6866
                v := v bitOr:(bv bitShift:blueShift).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6867
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6868
                newPixelArray at:x put:v.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6869
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6870
            i rowAt:y putAll:newPixelArray.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6871
        ].
4780
03c3e810a584 Change senders of obsolete messages Form>>...on: to ...onDevice:
Stefan Vogel <sv@exept.de>
parents: 4769
diff changeset
  6872
    ].
03c3e810a584 Change senders of obsolete messages Form>>...on: to ...onDevice:
Stefan Vogel <sv@exept.de>
parents: 4769
diff changeset
  6873
03c3e810a584 Change senders of obsolete messages Form>>...on: to ...onDevice:
Stefan Vogel <sv@exept.de>
parents: 4769
diff changeset
  6874
    form := Form width:width height:height depth:usedDeviceDepth onDevice:aDevice.
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6875
    form isNil ifTrue:[^ nil].
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6876
    form initGC.
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6877
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  6878
    form
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6879
        copyBitsFrom:imageBits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6880
        bitsPerPixel:usedDeviceBitsPerPixel
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6881
        depth:usedDeviceDepth
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6882
        padding:8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6883
        width:width height:height
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6884
        x:0 y:0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6885
        toX:0 y:0.
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6886
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6887
    ^ form
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6888
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  6889
    "Modified: / 31-01-2017 / 15:01:05 / stefan"
8103
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6890
    "Modified: / 25-08-2017 / 08:54:23 / cg"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  6891
! !
48194c26a46c Initial revision
claus
parents:
diff changeset
  6892
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6893
!Image methodsFor:'converting rgb images'!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6894
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  6895
asDitheredTrueColor8FormOn:aDevice
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  6896
    "convert an rgb image to a dithered depth8-form on aDevice.
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  6897
     Return the device-form.
1771
ee831cb59127 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1766
diff changeset
  6898
     This method is only valid for trueColor displays."
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  6899
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  6900
    |fixColors pixel
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  6901
     dstIdx     "{ Class: SmallInteger }"
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  6902
     shiftRed   "{ Class: SmallInteger }"
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  6903
     shiftGreen "{ Class: SmallInteger }"
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  6904
     shiftBlue  "{ Class: SmallInteger }"
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  6905
     nRed    "{ Class: SmallInteger }"
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  6906
     nGreen  "{ Class: SmallInteger }"
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  6907
     nBlue   "{ Class: SmallInteger }"|
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  6908
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  6909
    shiftRed := aDevice shiftRed.
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  6910
    shiftGreen := aDevice shiftGreen.
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  6911
    shiftBlue := aDevice shiftBlue.
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  6912
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  6913
    nRed := 1 bitShift:aDevice bitsRed.
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  6914
    nGreen := 1 bitShift:aDevice bitsGreen.
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  6915
    nBlue := 1 bitShift:aDevice bitsBlue.
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  6916
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  6917
    fixColors := Array new:(nRed * nGreen * nBlue).
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  6918
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  6919
    dstIdx := 1.
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  6920
    0 to:nRed - 1 do:[:sR |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6921
        0 to:nGreen - 1 do:[:sG |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6922
            0 to:nBlue - 1 do:[:sB |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6923
                pixel := (sR bitShift:shiftRed)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6924
                         + (sG bitShift:shiftGreen)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6925
                         + (sB bitShift:shiftBlue).
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  6926
                fixColors at:dstIdx put:(Color colorId:pixel).
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6927
                dstIdx := dstIdx + 1
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6928
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6929
        ]
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  6930
    ].
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  6931
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  6932
    ^ self
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6933
        asFloydSteinbergDitheredDepth8FormOn:aDevice
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6934
        colors:fixColors
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6935
        nRed:nRed nGreen:nGreen nBlue:nBlue
1771
ee831cb59127 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1766
diff changeset
  6936
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  6937
    "Created: / 14-06-1996 / 17:23:52 / cg"
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  6938
    "Modified: / 23-06-1997 / 15:22:36 / cg"
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  6939
    "Modified (format): / 30-01-2017 / 19:06:08 / stefan"
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  6940
!
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  6941
5919
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  6942
compressColorMap
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  6943
    "calculates a new color map for the image, using only used colors"
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  6944
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 6037
diff changeset
  6945
    |depth newColorMap usedColors oldToNew oldBits newBits tmpBits sortBlockForColors|
5919
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  6946
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  6947
    depth := self depth.
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  6948
    usedColors := self realUsedColors.
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  6949
    sortBlockForColors := [:a :b |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6950
            a redByte == b redByte ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6951
                a greenByte == b greenByte ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6952
                    a blueByte < b blueByte
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6953
                ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6954
                    a greenByte < b greenByte
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6955
                ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6956
            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6957
                a redByte < b redByte
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6958
            ]
5919
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  6959
      ].
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  6960
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  6961
    "/ translation table
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  6962
    oldToNew := ByteArray new:(1 bitShift:depth).
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  6963
    newColorMap := usedColors asArray.
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  6964
    newColorMap sort:sortBlockForColors.
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  6965
    self colorMap notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6966
        self colorMap asArray keysAndValuesDo:[:oldIdx :clr |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6967
            |newPixel|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6968
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6969
            (usedColors includes:clr) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6970
                newPixel := newColorMap indexOf:clr.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6971
                oldToNew at:oldIdx put:newPixel-1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6972
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6973
        ].
5919
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  6974
    ].
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  6975
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  6976
    oldBits := self bits.
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  6977
    newBits := ByteArray new:(oldBits size).
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  6978
    depth ~~ 8 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6979
        "/ expand/compress can only handle 8bits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6980
        tmpBits := ByteArray uninitializedNew:(self width*self height).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6981
        oldBits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6982
            expandPixels:depth
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6983
            width:self width
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6984
            height:self height
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6985
            into:tmpBits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6986
            mapping:oldToNew.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6987
        tmpBits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6988
            compressPixels:depth
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6989
            width:self width
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6990
            height:self height
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6991
            into:newBits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6992
            mapping:nil
5919
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  6993
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6994
        oldBits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6995
            expandPixels:depth
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6996
            width:self width
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6997
            height:self height
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6998
            into:newBits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6999
            mapping:oldToNew.
5919
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7000
    ].
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7001
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7002
    self bits:newBits.
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7003
    self colorMap:newColorMap.
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7004
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7005
    "Created: / 17-07-2012 / 12:13:18 / anwild"
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7006
!
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7007
7282
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7008
copyPixels32AlphaLowTo24From:anImage
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7009
    "tuned helper to copy pixels from a 32bit argb (alpha in low byte)
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7010
     to me as a 24bit non-alpha rgb image"
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7011
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7012
    |imageBits|
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7013
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7014
    imageBits := anImage bits.
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7015
%{
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7016
    OBJ _myBits = __INST(bytes);
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7017
    OBJ w = __INST(width);
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7018
    OBJ h = __INST(height);
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7019
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7020
    if (__isByteArrayLike(_myBits)
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7021
     && __isByteArrayLike(imageBits)
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7022
     && __bothSmallInteger(w, h)) {
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7023
        int _idx;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7024
        int _w = __intVal(w);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7025
        int _h = __intVal(h);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7026
        int _mySize = __byteArraySize(_myBits);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7027
        int _imgSize = __byteArraySize(imageBits);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7028
        char *_myBitsPtr = __ByteArrayInstPtr(_myBits)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7029
        char *_imgBitsPtr = __ByteArrayInstPtr(imageBits)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7030
        char *_myBitsEndPtr = _myBitsPtr + (_w * _h * 3);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7031
        char *_imgBitsEndPtr = _imgBitsPtr + (_w * _h * 4);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7032
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7033
        if ((_w * _h * 3) > _mySize) goto error;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7034
        if ((_w * _h * 4) > _imgSize) goto error;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7035
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7036
        while (_myBitsPtr < _myBitsEndPtr) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7037
            // fetch r,g,b skip a
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7038
            unsigned char _r = _imgBitsPtr[0];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7039
            unsigned char _g = _imgBitsPtr[1];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7040
            unsigned char _b = _imgBitsPtr[2];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7041
            _myBitsPtr[0] = _r;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7042
            _myBitsPtr[1] = _g;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7043
            _myBitsPtr[2] = _b;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7044
            _myBitsPtr += 3;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7045
            _imgBitsPtr += 4;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7046
        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7047
        RETURN( self );
7282
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7048
    }
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7049
error: ;
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7050
    console_printf("Image: oops - bits-size in copyPixels32\n");
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7051
%}.
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7052
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7053
    anImage valuesFromX:0 y:0 toX:(self width-1) y:(self height-1) do:[:x :y :pixel |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7054
        |a r g b rgbPixel|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7055
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7056
        "/ bgra-pixel
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7057
        "/ a := pixel bitAnd:16rFF.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7058
        r := (pixel bitShift:-8) bitAnd:16rFF.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7059
        g := (pixel bitShift:-16) bitAnd:16rFF.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7060
        b := (pixel bitShift:-24) bitAnd:16rFF.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7061
        rgbPixel := r + (g bitShift:8) + (b bitShift:16).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7062
        self pixelAtX:x y:y put:rgbPixel
7282
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7063
    ].
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7064
!
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7065
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7066
rgbImageAsFormOn:aDevice
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7067
    "convert am rgb image to a device-form on aDevice.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7068
     Return the device-form."
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7069
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7070
    |visual|
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7071
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7072
    visual := aDevice visualType.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7073
    (visual == #StaticGray) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7074
        ^ self asGrayFormOn:aDevice
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  7075
    ].
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7076
    (visual == #TrueColor) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7077
        ^ self rgbImageAsTrueColorFormOn:aDevice
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  7078
    ].
858
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  7079
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  7080
    "/ PseudoColor conversion also works for StaticColor, GrayScale
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  7081
    "/ and DirectColor displays; although possibly with suboptimal results
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  7082
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7083
    ^ self rgbImageAsPseudoFormOn:aDevice
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7084
858
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  7085
    "Modified: 14.6.1996 / 19:30:06 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7086
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7087
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7088
rgbImageAsPseudoFormOn:aDevice
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7089
    "return a pseudocolor form from the rgb-picture"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7090
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  7091
    |n     "{ Class: SmallInteger }"
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  7092
     depth "{ Class: SmallInteger }"
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  7093
     palette f|
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  7094
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  7095
    (depth := self depth) <= 8 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7096
        "/ simulate it via a temporary palette image
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7097
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7098
        palette := Array new:(1 bitShift:depth).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7099
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7100
        n := (1 bitShift:depth)-1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7101
        0 to:n do:[:pixelValue |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7102
            palette at:(pixelValue+1) put:(self colorFromValue:pixelValue)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7103
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7104
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7105
        self setColorMap:palette.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7106
        photometric := #palette.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7107
        f := self paletteImageAsPseudoFormOn:aDevice.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7108
        self setColorMap:nil.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7109
        photometric := #rgb.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7110
        ^ f
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  7111
    ].
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  7112
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7113
    ^ self subclassResponsibility
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  7114
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  7115
    "Modified: 8.6.1996 / 10:58:25 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7116
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7117
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7118
rgbImageAsTrueColorFormOn:aDevice
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7119
    "return a truecolor form from the rgb-picture."
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7120
1063
ba1bf8091bc1 unused variable cleanup
Claus Gittinger <cg@exept.de>
parents: 1057
diff changeset
  7121
    |bestFormat usedDeviceDepth usedDeviceBitsPerPixel
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7122
     form|
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  7123
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  7124
    bestFormat := self bestSupportedImageFormatFor:aDevice.
235
579f3f804a46 padding info in supportedFormats
Claus Gittinger <cg@exept.de>
parents: 230
diff changeset
  7125
    usedDeviceDepth := bestFormat at:#depth.
579f3f804a46 padding info in supportedFormats
Claus Gittinger <cg@exept.de>
parents: 230
diff changeset
  7126
    usedDeviceBitsPerPixel := bestFormat at:#bitsPerPixel.
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  7127
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7128
    "/ kludge for some 15bit XFree servers (should return 16 here - does not)
399
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
  7129
    usedDeviceBitsPerPixel == 15 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7130
        usedDeviceBitsPerPixel := 16
399
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
  7131
    ].
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
  7132
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7133
    "/
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7134
    "/ only the trivial case, where the depths match
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7135
    "/ is handled here; conversions are supposed to
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7136
    "/ be done in concrete subclasses (see D24Image)
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7137
    "/
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7138
    self bitsPerPixel == usedDeviceBitsPerPixel ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7139
        "/ kludge - convert to a deep image first, then to a form.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7140
        ^ ((Image implementorForDepth:usedDeviceBitsPerPixel) fromImage:self) asFormOn:aDevice
5126
d3f2baf80581 color conversions fixed (16bit images)
Claus Gittinger <cg@exept.de>
parents: 5074
diff changeset
  7141
"/        'Image [warning]: unimplemented trueColor depth in rgbImageAsTrueColorFormOn: ' errorPrint. self bitsPerPixel errorPrintCR.
d3f2baf80581 color conversions fixed (16bit images)
Claus Gittinger <cg@exept.de>
parents: 5074
diff changeset
  7142
"/        ^ self asMonochromeFormOn:aDevice
4757
60d27f8e65bb some fixes for depth32
Claus Gittinger <cg@exept.de>
parents: 4745
diff changeset
  7143
    ].
60d27f8e65bb some fixes for depth32
Claus Gittinger <cg@exept.de>
parents: 4745
diff changeset
  7144
60d27f8e65bb some fixes for depth32
Claus Gittinger <cg@exept.de>
parents: 4745
diff changeset
  7145
    form := Form width:width height:height depth:usedDeviceDepth onDevice:aDevice.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7146
    form isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7147
        'Image [warning]: display bitmap creation failed' errorPrintCR.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7148
        ^ nil
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  7149
    ].
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  7150
    form initGC.
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  7151
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  7152
    form
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7153
        copyBitsFrom:self bits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7154
        bitsPerPixel:usedDeviceBitsPerPixel
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7155
        depth:usedDeviceDepth
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7156
        padding:8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7157
        width:width height:height
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7158
        x:0 y:0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7159
        toX:0 y:0.
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  7160
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  7161
    ^ form
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  7162
4757
60d27f8e65bb some fixes for depth32
Claus Gittinger <cg@exept.de>
parents: 4745
diff changeset
  7163
    "Modified: / 27-05-2007 / 13:44:26 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7164
! !
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7165
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7166
!Image methodsFor:'copying'!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7167
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7168
postCopy
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  7169
    "redefined to also copy the pixels and the colorMap
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  7170
     and clear out any device handles in the copy."
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  7171
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7172
    bytes := bytes copy.
7878
87d2abc0d82a #BUGFIX by Maren
matilk
parents: 7840
diff changeset
  7173
    colorMap notNil ifTrue:[
87d2abc0d82a #BUGFIX by Maren
matilk
parents: 7840
diff changeset
  7174
        colorMap isColormap ifTrue:[
87d2abc0d82a #BUGFIX by Maren
matilk
parents: 7840
diff changeset
  7175
            colorMap := colorMap copy.
87d2abc0d82a #BUGFIX by Maren
matilk
parents: 7840
diff changeset
  7176
        ] ifFalse:[
87d2abc0d82a #BUGFIX by Maren
matilk
parents: 7840
diff changeset
  7177
            colorMap := MappedPalette withColors:colorMap.
87d2abc0d82a #BUGFIX by Maren
matilk
parents: 7840
diff changeset
  7178
        ].
3863
b7ba8a04be25 always ensure colorMap is a real colorMap
Claus Gittinger <cg@exept.de>
parents: 3861
diff changeset
  7179
    ].
1963
ab2d96e4e140 care for masks in copy/copySubImage;
tz
parents: 1962
diff changeset
  7180
    device := deviceForm := monoDeviceForm := fullColorDeviceForm := nil.
ab2d96e4e140 care for masks in copy/copySubImage;
tz
parents: 1962
diff changeset
  7181
    mask := mask copy.
2266
72460683cc97 fixed maskedPixelsAre0 flag setting when copying images.
Claus Gittinger <cg@exept.de>
parents: 2249
diff changeset
  7182
    maskedPixelsAre0 := false.
72460683cc97 fixed maskedPixelsAre0 flag setting when copying images.
Claus Gittinger <cg@exept.de>
parents: 2249
diff changeset
  7183
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  7184
    "Modified: / 22-08-1998 / 11:27:09 / cg"
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  7185
    "Modified: / 30-01-2017 / 19:16:02 / stefan"
2947
53f0ea77b1e4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2934
diff changeset
  7186
!
53f0ea77b1e4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2934
diff changeset
  7187
53f0ea77b1e4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2934
diff changeset
  7188
skipInstvarIndexInDeepCopy:index
53f0ea77b1e4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2934
diff changeset
  7189
    "a helper for deepCopy; only indices for which this method returns
53f0ea77b1e4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2934
diff changeset
  7190
     false are copied in a deep copy."
53f0ea77b1e4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2934
diff changeset
  7191
7494
70c399ea367b #OTHER by stefan
Stefan Vogel <sv@exept.de>
parents: 7484
diff changeset
  7192
    "
70c399ea367b #OTHER by stefan
Stefan Vogel <sv@exept.de>
parents: 7484
diff changeset
  7193
        self allInstanceVariableNames indexOf:#device
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  7194
        self allInstanceVariableNames indexOf:#deviceForm
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  7195
        self allInstanceVariableNames indexOf:#monoDeviceForm
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  7196
        self allInstanceVariableNames indexOf:#fullColorDeviceForm
7494
70c399ea367b #OTHER by stefan
Stefan Vogel <sv@exept.de>
parents: 7484
diff changeset
  7197
    "
70c399ea367b #OTHER by stefan
Stefan Vogel <sv@exept.de>
parents: 7484
diff changeset
  7198
70c399ea367b #OTHER by stefan
Stefan Vogel <sv@exept.de>
parents: 7484
diff changeset
  7199
    index == 13 ifTrue:[
70c399ea367b #OTHER by stefan
Stefan Vogel <sv@exept.de>
parents: 7484
diff changeset
  7200
        ^ true "/ skip device
70c399ea367b #OTHER by stefan
Stefan Vogel <sv@exept.de>
parents: 7484
diff changeset
  7201
    ].
70c399ea367b #OTHER by stefan
Stefan Vogel <sv@exept.de>
parents: 7484
diff changeset
  7202
    index == 14 ifTrue:[
70c399ea367b #OTHER by stefan
Stefan Vogel <sv@exept.de>
parents: 7484
diff changeset
  7203
        ^ true "/ skip deviceForm
70c399ea367b #OTHER by stefan
Stefan Vogel <sv@exept.de>
parents: 7484
diff changeset
  7204
    ].
70c399ea367b #OTHER by stefan
Stefan Vogel <sv@exept.de>
parents: 7484
diff changeset
  7205
    index == 15 ifTrue:[
70c399ea367b #OTHER by stefan
Stefan Vogel <sv@exept.de>
parents: 7484
diff changeset
  7206
        ^ true "/ skip monoDeviceForm
2947
53f0ea77b1e4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2934
diff changeset
  7207
    ].
7573
656c59bc93ad #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7565
diff changeset
  7208
    index == 16 ifTrue:[
656c59bc93ad #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7565
diff changeset
  7209
        ^ true "/ skip fullColorDeviceForm
656c59bc93ad #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7565
diff changeset
  7210
    ].
2947
53f0ea77b1e4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2934
diff changeset
  7211
    ^ false
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  7212
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  7213
    "Modified (comment): / 31-01-2017 / 15:41:40 / stefan"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7214
! !
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7215
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7216
!Image methodsFor:'displaying'!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7217
1737
30e65b9fee9c ST-80 compatibility
ca
parents: 1733
diff changeset
  7218
asImage
30e65b9fee9c ST-80 compatibility
ca
parents: 1733
diff changeset
  7219
    "ST-80 compatibility
30e65b9fee9c ST-80 compatibility
ca
parents: 1733
diff changeset
  7220
    "
30e65b9fee9c ST-80 compatibility
ca
parents: 1733
diff changeset
  7221
    ^ self
30e65b9fee9c ST-80 compatibility
ca
parents: 1733
diff changeset
  7222
!
30e65b9fee9c ST-80 compatibility
ca
parents: 1733
diff changeset
  7223
758
51ac65155b96 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 757
diff changeset
  7224
displayFilledOn:aGC
759
52f5ceda5347 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 758
diff changeset
  7225
    "display the receiver as an opaque image.
758
51ac65155b96 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 757
diff changeset
  7226
     This allows Images to be wrapped by a FillingWrapper"
51ac65155b96 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 757
diff changeset
  7227
51ac65155b96 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 757
diff changeset
  7228
    aGC displayOpaqueForm:self x:0 y:0.
51ac65155b96 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 757
diff changeset
  7229
51ac65155b96 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 757
diff changeset
  7230
    "Created: 29.5.1996 / 10:34:18 / cg"
759
52f5ceda5347 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 758
diff changeset
  7231
    "Modified: 29.5.1996 / 10:52:36 / cg"
758
51ac65155b96 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 757
diff changeset
  7232
!
51ac65155b96 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 757
diff changeset
  7233
7928
b84b8d86ebb9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7921
diff changeset
  7234
displayOn:aGCOrStream
b84b8d86ebb9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7921
diff changeset
  7235
    "draw the receiver in the graphicsContext, aGC.
b84b8d86ebb9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7921
diff changeset
  7236
     Smalltalk-80 compatibility"
b84b8d86ebb9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7921
diff changeset
  7237
b84b8d86ebb9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7921
diff changeset
  7238
    "Compatibility
b84b8d86ebb9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7921
diff changeset
  7239
       append a printed desription on some stream (Dolphin,  Squeak)
b84b8d86ebb9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7921
diff changeset
  7240
     OR:
b84b8d86ebb9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7921
diff changeset
  7241
       display the receiver in a graphicsContext at 0@0 (ST80).
b84b8d86ebb9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7921
diff changeset
  7242
     This method allows for any object to be displayed in some view
b84b8d86ebb9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7921
diff changeset
  7243
     (although the fallBack is to display its printString ...)"
b84b8d86ebb9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7921
diff changeset
  7244
b84b8d86ebb9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7921
diff changeset
  7245
    "/ what a kludge - Dolphin and Squeak mean: printOn: a stream;
7930
300040dda391 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7928
diff changeset
  7246
    "/ old ST80 means: draw-yourself on a GC.
300040dda391 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7928
diff changeset
  7247
    aGCOrStream isStream ifFalse:[
300040dda391 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7928
diff changeset
  7248
        ^ super displayOn:aGCOrStream.
300040dda391 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7928
diff changeset
  7249
    ].
300040dda391 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7928
diff changeset
  7250
    
300040dda391 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7928
diff changeset
  7251
    aGCOrStream nextPutAll:(self class name).
300040dda391 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7928
diff changeset
  7252
    aGCOrStream nextPutAll:('(%1 x %2' bindWith:width with:height).
300040dda391 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7928
diff changeset
  7253
    fileName notNil ifTrue:[ aGCOrStream nextPutAll:(' from "%1"' bindWith:fileName) ].
300040dda391 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7928
diff changeset
  7254
    aGCOrStream nextPutAll:')'.
7928
b84b8d86ebb9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7921
diff changeset
  7255
b84b8d86ebb9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7921
diff changeset
  7256
    "Created: / 22-02-2017 / 15:51:29 / cg"
7930
300040dda391 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7928
diff changeset
  7257
    "Modified (format): / 22-02-2017 / 17:03:50 / cg"
7928
b84b8d86ebb9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7921
diff changeset
  7258
!
b84b8d86ebb9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7921
diff changeset
  7259
3865
18532e89cdca *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3864
diff changeset
  7260
displayOn:aGC x:x y:y
18532e89cdca *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3864
diff changeset
  7261
    "draw the receiver in the graphicsContext, aGC.
18532e89cdca *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3864
diff changeset
  7262
     Smalltalk-80 compatibility"
18532e89cdca *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3864
diff changeset
  7263
18532e89cdca *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3864
diff changeset
  7264
    aGC displayForm:self x:x y:y.
18532e89cdca *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3864
diff changeset
  7265
18532e89cdca *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3864
diff changeset
  7266
    "Modified: 23.4.1996 / 11:12:31 / cg"
18532e89cdca *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3864
diff changeset
  7267
    "Created: 12.5.1996 / 20:14:31 / cg"
758
51ac65155b96 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 757
diff changeset
  7268
!
51ac65155b96 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 757
diff changeset
  7269
3729
d2cd7d8585a3 *** empty log message ***
penk
parents: 3700
diff changeset
  7270
displayOn:aGC x:x y:y opaque:opaque
d2cd7d8585a3 *** empty log message ***
penk
parents: 3700
diff changeset
  7271
    "draw the receiver in the graphicsContext, aGC.
d2cd7d8585a3 *** empty log message ***
penk
parents: 3700
diff changeset
  7272
     Smalltalk-80 compatibility"
d2cd7d8585a3 *** empty log message ***
penk
parents: 3700
diff changeset
  7273
d2cd7d8585a3 *** empty log message ***
penk
parents: 3700
diff changeset
  7274
    opaque ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7275
        self displayOpaqueOn:aGC x:x y:y .
3729
d2cd7d8585a3 *** empty log message ***
penk
parents: 3700
diff changeset
  7276
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7277
        self displayOn:aGC x:x y:y .
3729
d2cd7d8585a3 *** empty log message ***
penk
parents: 3700
diff changeset
  7278
    ].
d2cd7d8585a3 *** empty log message ***
penk
parents: 3700
diff changeset
  7279
!
d2cd7d8585a3 *** empty log message ***
penk
parents: 3700
diff changeset
  7280
3379
0d1d05ddad7c added displayOpaque
martin
parents: 3363
diff changeset
  7281
displayOpaqueOn:aGC at:aPoint
0d1d05ddad7c added displayOpaque
martin
parents: 3363
diff changeset
  7282
    "draw the receiver in the graphicsContext, aGC.
0d1d05ddad7c added displayOpaque
martin
parents: 3363
diff changeset
  7283
     Smalltalk-80 compatibility"
0d1d05ddad7c added displayOpaque
martin
parents: 3363
diff changeset
  7284
0d1d05ddad7c added displayOpaque
martin
parents: 3363
diff changeset
  7285
    self displayOpaqueOn:aGC x:aPoint x y:aPoint y.
0d1d05ddad7c added displayOpaque
martin
parents: 3363
diff changeset
  7286
0d1d05ddad7c added displayOpaque
martin
parents: 3363
diff changeset
  7287
    "Modified: 12.5.1996 / 20:16:38 / cg"
0d1d05ddad7c added displayOpaque
martin
parents: 3363
diff changeset
  7288
!
0d1d05ddad7c added displayOpaque
martin
parents: 3363
diff changeset
  7289
1086
269243c32f69 added displayOpaque, for protocol completeness
Claus Gittinger <cg@exept.de>
parents: 1070
diff changeset
  7290
displayOpaqueOn:aGC x:x y:y
269243c32f69 added displayOpaque, for protocol completeness
Claus Gittinger <cg@exept.de>
parents: 1070
diff changeset
  7291
    "draw the receiver in the graphicsContext, aGC.
269243c32f69 added displayOpaque, for protocol completeness
Claus Gittinger <cg@exept.de>
parents: 1070
diff changeset
  7292
     Smalltalk-80 compatibility"
269243c32f69 added displayOpaque, for protocol completeness
Claus Gittinger <cg@exept.de>
parents: 1070
diff changeset
  7293
269243c32f69 added displayOpaque, for protocol completeness
Claus Gittinger <cg@exept.de>
parents: 1070
diff changeset
  7294
    aGC displayOpaqueForm:self x:x y:y.
269243c32f69 added displayOpaque, for protocol completeness
Claus Gittinger <cg@exept.de>
parents: 1070
diff changeset
  7295
269243c32f69 added displayOpaque, for protocol completeness
Claus Gittinger <cg@exept.de>
parents: 1070
diff changeset
  7296
    "Modified: 23.4.1996 / 11:12:31 / cg"
269243c32f69 added displayOpaque, for protocol completeness
Claus Gittinger <cg@exept.de>
parents: 1070
diff changeset
  7297
    "Created: 22.10.1996 / 16:35:49 / cg"
269243c32f69 added displayOpaque, for protocol completeness
Claus Gittinger <cg@exept.de>
parents: 1070
diff changeset
  7298
!
269243c32f69 added displayOpaque, for protocol completeness
Claus Gittinger <cg@exept.de>
parents: 1070
diff changeset
  7299
758
51ac65155b96 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 757
diff changeset
  7300
displayStrokedOn:aGC
759
52f5ceda5347 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 758
diff changeset
  7301
    "display the receiver as an non opaque image.
758
51ac65155b96 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 757
diff changeset
  7302
     This allows Images to be wrapped by a StrokingWrapper"
51ac65155b96 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 757
diff changeset
  7303
51ac65155b96 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 757
diff changeset
  7304
    aGC displayForm:self x:0 y:0.
51ac65155b96 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 757
diff changeset
  7305
759
52f5ceda5347 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 758
diff changeset
  7306
    "Created: 29.5.1996 / 10:34:18 / cg"
52f5ceda5347 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 758
diff changeset
  7307
    "Modified: 29.5.1996 / 10:52:30 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7308
! !
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7309
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7310
!Image methodsFor:'dither helpers'!
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7311
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7312
burkesDitheredMonochromeBits
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7313
    "return the bitmap for a dithered monochrome bitmap from the image.
6311
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
  7314
     Works for any source depths / photometric.
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
  7315
     TODO: move to separate dither helper class"
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7316
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7317
    |dstIndex        "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7318
     nextDst         "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7319
     bytesPerMonoRow "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7320
     monoBits greyValues
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7321
     errorArray
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7322
     errorArray1
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7323
     e t
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7324
     w               "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7325
     h               "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7326
     bitCnt          "{Class: SmallInteger }"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  7327
     byte            "{Class: SmallInteger }"
1063
ba1bf8091bc1 unused variable cleanup
Claus Gittinger <cg@exept.de>
parents: 1057
diff changeset
  7328
     grey|
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7329
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7330
    self depth > 12 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7331
        ^ self floydSteinbergDitheredMonochromeBits
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7332
    ].
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7333
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7334
    w := width.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7335
    h := height.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7336
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7337
    bytesPerMonoRow := (w + 7) // 8.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7338
    monoBits := ByteArray uninitializedNew:(bytesPerMonoRow * h).
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7339
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7340
    errorArray := Array new:(w+4).
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7341
    errorArray1 := Array new:(w+4) withAll:0.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7342
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7343
    dstIndex := 1.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7344
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7345
    "/ fetch scaled brightness values outside of loop into a table;
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7346
    "/ use table-value in loop
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7347
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7348
    greyValues := self greyMapForRange:(255*1024).
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  7349
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7350
    0 to:(h-1) do:[:y |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7351
        nextDst := dstIndex + bytesPerMonoRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7352
        byte := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7353
        bitCnt := 8.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7354
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7355
        t := errorArray.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7356
        errorArray := errorArray1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7357
        errorArray1 := t.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7358
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7359
        errorArray1 atAllPut:0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7360
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7361
        self valuesAtY:y from:0 to:(w-1) do:[:x :pixel |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7362
            |eP "{Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7363
             eD
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7364
             eI "{Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7365
             xE "{Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7366
             xN "{Class: SmallInteger }" |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7367
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7368
            "/ get the colors grey value [0 .. 1]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7369
            grey := greyValues at:(pixel + 1).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7370
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7371
            "/ adjust error
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7372
            xE := x + 2 + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7373
            grey := (grey + (errorArray at:xE)).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7374
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7375
            byte := byte bitShift:1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7376
            grey > (127*1024) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7377
                byte := byte bitOr:1.      "/ white
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7378
                e := grey - (255*1024)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7379
            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7380
                e := grey                  "/ black
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7381
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7382
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7383
            e ~= 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7384
                "/ distribute the error:
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7385
                "/                  XX  8  4
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7386
                "/             2  4  8  4  2
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7387
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7388
                eD := e.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7389
                eI := e // 32.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7390
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7391
                eP := eI * 8. eD := eD - eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7392
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7393
                xN := xE + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7394
                errorArray at:xN put:(errorArray at:xN) + eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7395
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7396
                eD := eD - eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7397
                errorArray1 at:xE put:(errorArray1 at:xE) + eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7398
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7399
                eP := eI * 4. eD := eD - eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7400
                xN := xE + 2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7401
                errorArray at:xN put:(errorArray at:xN) + eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7402
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7403
                eD := eD - eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7404
                xN := xE - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7405
                errorArray1 at:xN put:(errorArray1 at:xN) + eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7406
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7407
                eD := eD - eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7408
                xN := xE + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7409
                errorArray1 at:xN put:(errorArray1 at:xN) + eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7410
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7411
                eP := eI * 2. eD := eD - eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7412
                xN := xE - 2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7413
                errorArray1 at:xN put:(errorArray1 at:xN) + eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7414
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7415
                "/ eD := eD.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7416
                xN := xE + 2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7417
                errorArray1 at:xN put:(errorArray1 at:xN) + eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7418
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7419
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7420
            bitCnt := bitCnt - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7421
            bitCnt == 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7422
                monoBits at:dstIndex put:byte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7423
                dstIndex := dstIndex + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7424
                byte := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7425
                bitCnt := 8.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7426
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7427
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7428
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7429
        bitCnt ~~ 8 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7430
            byte := byte bitShift:bitCnt.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7431
            monoBits at:dstIndex put:byte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7432
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7433
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7434
        dstIndex := nextDst.
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7435
    ].
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7436
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7437
    ^ monoBits
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7438
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7439
    "Created: 10.6.1996 / 12:18:20 / cg"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7440
    "Modified: 10.6.1996 / 13:16:33 / cg"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7441
!
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7442
874
cce9c1029d38 added floydSteinberg dithering for pseudo-8 images
Claus Gittinger <cg@exept.de>
parents: 873
diff changeset
  7443
floydSteinbergDitheredDepth8BitsColors:colors
cce9c1029d38 added floydSteinberg dithering for pseudo-8 images
Claus Gittinger <cg@exept.de>
parents: 873
diff changeset
  7444
    "return a floyd-steinberg dithered bitmap from the receiver picture,
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  7445
     which must be a depth-8 image.
874
cce9c1029d38 added floydSteinberg dithering for pseudo-8 images
Claus Gittinger <cg@exept.de>
parents: 873
diff changeset
  7446
     This method expects an array of colors to be used for dithering
cce9c1029d38 added floydSteinberg dithering for pseudo-8 images
Claus Gittinger <cg@exept.de>
parents: 873
diff changeset
  7447
     (which need not be a colorCubes colors)."
cce9c1029d38 added floydSteinberg dithering for pseudo-8 images
Claus Gittinger <cg@exept.de>
parents: 873
diff changeset
  7448
3157
f95dc03365da added some dither helpers
Claus Gittinger <cg@exept.de>
parents: 3145
diff changeset
  7449
    ^ self floydSteinbergDitheredDepth8BitsColors:colors map:nil
f95dc03365da added some dither helpers
Claus Gittinger <cg@exept.de>
parents: 3145
diff changeset
  7450
f95dc03365da added some dither helpers
Claus Gittinger <cg@exept.de>
parents: 3145
diff changeset
  7451
!
f95dc03365da added some dither helpers
Claus Gittinger <cg@exept.de>
parents: 3145
diff changeset
  7452
f95dc03365da added some dither helpers
Claus Gittinger <cg@exept.de>
parents: 3145
diff changeset
  7453
floydSteinbergDitheredDepth8BitsColors:colors map:aMapOrNil
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7454
    "return a floyd-steinberg dithered bitmap from the receiver picture,
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  7455
     which must be a depth-24 image.
3157
f95dc03365da added some dither helpers
Claus Gittinger <cg@exept.de>
parents: 3145
diff changeset
  7456
     This method expects an array of colors to be used for dithering
f95dc03365da added some dither helpers
Claus Gittinger <cg@exept.de>
parents: 3145
diff changeset
  7457
     (which need not be a colorCubes colors)."
f95dc03365da added some dither helpers
Claus Gittinger <cg@exept.de>
parents: 3145
diff changeset
  7458
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  7459
    |pseudoBits
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7460
     ditherRGBBytes ditherColors
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7461
     w       "{Class: SmallInteger }"
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7462
     h       "{Class: SmallInteger }"
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7463
     index   "{Class: SmallInteger }"
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  7464
     lookupPos "{Class: SmallInteger }"
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7465
     ditherIds failed lastColor qScramble
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  7466
     clrLookup error clr|
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7467
7996
a9afe1d564aa #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  7468
    self depth ~~ 24 ifTrue:[
a9afe1d564aa #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  7469
        ^ (Depth24Image fromImage:self) floydSteinbergDitheredDepth8BitsColors:colors map:aMapOrNil
a9afe1d564aa #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  7470
    ].
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7471
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7472
    "/ collect valid ditherColors ...
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7473
    aMapOrNil isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7474
        ditherColors := colors select:[:clr | clr notNil].
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7475
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7476
        ditherColors := colors
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7477
    ].
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7478
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7479
    "/ ... and sort by manhatten distance from black
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7480
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7481
    qScramble := #(
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7482
                "/  2rX00X00X00X00
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7483
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7484
                    2r000000000000    "/ 0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7485
                    2r000000000100    "/ 1
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7486
                    2r000000100000    "/ 2
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7487
                    2r000000100100    "/ 3
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7488
                    2r000100000000    "/ 4
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7489
                    2r000100000100    "/ 5
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7490
                    2r000100100000    "/ 6
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7491
                    2r000100100100    "/ 7
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7492
                    2r100000000000    "/ 8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7493
                    2r100000000100    "/ 9
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7494
                    2r100000100000    "/ a
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7495
                    2r100000100100    "/ b
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7496
                    2r100100000000    "/ c
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7497
                    2r100100000100    "/ d
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7498
                    2r100100100000    "/ e
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7499
                    2r100100100100    "/ f
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7500
                  ).
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7501
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7502
    ditherColors := ditherColors sort:[:a :b |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7503
                                |cr "{Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7504
                                 cg "{Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7505
                                 cb "{Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7506
                                 i1 "{Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7507
                                 i2 "{Class: SmallInteger }"|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7508
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7509
                                cr := a redByte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7510
                                cg := a greenByte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7511
                                cb := a blueByte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7512
                                i1 := qScramble at:((cr bitShift:-4) bitAnd:16r0F) + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7513
                                i1 := i1 + ((qScramble at:((cg bitShift:-4) bitAnd:16r0F) + 1) bitShift:-1).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7514
                                i1 := i1 + ((qScramble at:((cb bitShift:-4) bitAnd:16r0F) + 1) bitShift:-2).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7515
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7516
                                cr := b redByte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7517
                                cg := b greenByte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7518
                                cb := b blueByte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7519
                                i2 := qScramble at:((cr bitShift:-4) bitAnd:16r0F) + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7520
                                i2 := i2 + ((qScramble at:((cg bitShift:-4) bitAnd:16r0F) + 1) bitShift:-1).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7521
                                i2 := i2 + ((qScramble at:((cb bitShift:-4) bitAnd:16r0F) + 1) bitShift:-2).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7523
                                i1 < i2
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7524
                    ].
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7525
    aMapOrNil isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7526
        ditherIds := (ditherColors asArray collect:[:clr | clr colorId]) asByteArray.
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7527
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7528
        ditherIds := aMapOrNil asByteArray
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7529
    ].
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7530
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7531
    "/ build an index table, for fast lookup from manhatten-r-g-b distance
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7532
    "/ to the position in the colorList
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7533
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7534
    clrLookup := ByteArray new:(4096).
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7535
    index := 0.
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7536
    ditherColors keysAndValuesDo:[:clrPosition :clr |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7537
        |r g b i|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7538
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7539
        r := clr redByte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7540
        g := clr greenByte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7541
        b := clr blueByte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7542
        i := qScramble at:((r bitShift:-4) bitAnd:16r0F) + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7543
        i := i + ((qScramble at:((g bitShift:-4) bitAnd:16r0F) + 1) bitShift:-1).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7544
        i := i + ((qScramble at:((b bitShift:-4) bitAnd:16r0F) + 1) bitShift:-2).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7545
        lookupPos := i.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7546
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  7547
        index+1 to:lookupPos do:[:idx|
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  7548
            clrLookup at:idx put:(clrPosition-1-1).
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  7549
        ].
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  7550
        index := lookupPos.
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7551
    ].
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7552
    clrLookup from:index+1 to:4096 put:(ditherColors size - 1).
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7553
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7554
"/    [index <= (4095)] whileTrue:[
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7555
"/        clrLookup at:(index+1) put:(ditherColors size - 1).
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7556
"/        index := index + 1.
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7557
"/    ].
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7558
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7559
    "/ collect ditherColor components
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7560
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7561
    lastColor := ditherColors size.
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7562
    ditherIds := ByteArray uninitializedNew:lastColor.
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7563
    ditherRGBBytes := ByteArray uninitializedNew:(lastColor * 3).
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7564
    index := 1.
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7565
    1 to:lastColor do:[:pix |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7566
        clr := ditherColors at:pix.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7567
        ditherRGBBytes at:index put:(clr redByte).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7568
        ditherRGBBytes at:index+1 put:(clr greenByte).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7569
        ditherRGBBytes at:index+2 put:(clr blueByte).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7570
        aMapOrNil isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7571
            ditherIds at:pix put:clr colorId.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7572
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7573
            ditherIds at:pix put:(aMapOrNil at:pix).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7574
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7575
        index := index + 3.
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7576
    ].
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7577
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7578
    pseudoBits := ByteArray uninitializedNew:(width * height).
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7579
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7580
    w := width + 2.
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7581
    error := ByteArray uninitializedNew:w*(3*2).
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7582
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7583
    w := width.
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7584
    h := height.
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7585
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7586
    failed := true.
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7587
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7588
%{
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7589
    int __x, __y;
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7590
    int __eR, __eG, __eB;
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7591
    unsigned char *srcP, *dstP;
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7592
    unsigned char *idP;
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7593
    unsigned char *dp;
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7594
    unsigned char *__clrLookup;
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7595
    short *errP, *eP;
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7596
    int __fR, __fG, __fB;
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7597
    int iR, iG, iB;
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7598
    int idx;
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7599
    int __w = __intVal(w);
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7600
    int __h = __intVal(h);
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7601
    int __nColors = __intVal(lastColor);
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7602
    int __wR = -1, __wG, __wB;
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7603
    static int __qScramble[16] = {
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7604
                    0x000 /* 2r000000000000    0 */,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7605
                    0x004 /* 2r000000000100    1 */,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7606
                    0x020 /* 2r000000100000    2 */,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7607
                    0x024 /* 2r000000100100    3 */,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7608
                    0x100 /* 2r000100000000    4 */,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7609
                    0x104 /* 2r000100000100    5 */,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7610
                    0x120 /* 2r000100100000    6 */,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7611
                    0x124 /* 2r000100100100    7 */,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7612
                    0x800 /* 2r100000000000    8 */,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7613
                    0x804 /* 2r100000000100    9 */,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7614
                    0x820 /* 2r100000100000    a */,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7615
                    0x824 /* 2r100000100100    b */,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7616
                    0x900 /* 2r100100000000    c */,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7617
                    0x904 /* 2r100100000100    d */,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7618
                    0x920 /* 2r100100100000    e */,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7619
                    0x924 /* 2r100100100100    f */,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7620
                  };
5476
06e08505bc6f __isByteArray() to __isByteArrayLike() in primitive code
Stefan Vogel <sv@exept.de>
parents: 5352
diff changeset
  7621
06e08505bc6f __isByteArray() to __isByteArrayLike() in primitive code
Stefan Vogel <sv@exept.de>
parents: 5352
diff changeset
  7622
    if (__isByteArrayLike(__INST(bytes))
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7623
     && __isByteArray(pseudoBits)
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7624
     && __isByteArray(ditherRGBBytes)
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7625
     && __isByteArray(ditherIds)
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7626
     && __isByteArray(clrLookup)
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7627
     && __isByteArray(error)) {
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7628
        failed = false;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7629
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7630
        srcP = __ByteArrayInstPtr(__INST(bytes))->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7631
        dstP = __ByteArrayInstPtr(pseudoBits)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7632
        idP = __ByteArrayInstPtr(ditherIds)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7633
        __clrLookup = __ByteArrayInstPtr(clrLookup)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7634
        errP = (short *) __ByteArrayInstPtr(error)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7635
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7636
        /*
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7637
         * clear error accumulator
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7638
         */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7639
        eP = errP;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7640
        bzero(eP, (__w+2) * 2 * 3);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7641
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7642
        for (__y=__h; __y>0; __y--) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7643
            __eR = __eG = __eB = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7644
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7645
            eP = &(errP[3]);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7646
            __eR = eP[0];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7647
            __eG = eP[1];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7648
            __eB = eP[2];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7649
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7650
            for (__x=__w; __x>0; __x--) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7651
                int __want;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7652
                int pix;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7653
                int __wantR, __wantG, __wantB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7654
                int idx;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7655
                int tR, tG, tB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7656
                int nR, nG, nB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7657
                int dR, dG, dB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7658
                int minDelta, bestIdx;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7659
                int cnt;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7660
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7661
                __wantR = *srcP++;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7662
                __wantG = *srcP++;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7663
                __wantB = *srcP++;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7664
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7665
                /*
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7666
                 * wR, wG and wB is the wanted r/g/b value;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7667
                 */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7668
                __wantR = __wantR + __eR;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7669
                __wantG = __wantG + __eG;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7670
                __wantB = __wantB + __eB;
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7671
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7672
#define RED_SCALE 30
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7673
#define GREEN_SCALE 59
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7674
#define BLUE_SCALE 11
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7675
#define GOOD_DELTA 30
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7676
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7677
#define xRED_SCALE 1
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7678
#define xGREEN_SCALE 1
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7679
#define xBLUE_SCALE 1
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7680
#define xGOOD_DELTA 3
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7681
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7682
#define FAST_LOOKUP
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7683
/* #define ONE_SHOT */
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7684
#define NPROBE 8
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7685
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7686
#ifndef FAST_LOOKUP
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7687
                if ((__wantR == __wR)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7688
                 && (__wantG == __wG)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7689
                 && (__wantB == __wB)) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7690
                    /*
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7691
                     * same color again - reuse last bestMatch
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7692
                     */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7693
                } else
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7694
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7695
                {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7696
                    __wR = __wantR;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7697
                    __wG = __wantG;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7698
                    __wB = __wantB;
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7699
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7700
#ifdef FAST_LOOKUP
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7701
                    if(__wR > 255) __wR = 255;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7702
                    else if (__wR < 0) __wR = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7703
                    if(__wG > 255) __wG = 255;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7704
                    else if (__wG < 0) __wG = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7705
                    if(__wB > 255) __wB = 255;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7706
                    else if (__wB < 0) __wB = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7707
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7708
                    {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7709
                        int lookupIndex;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7710
                        int idx, idx0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7711
                        int d, delta;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7712
                        unsigned char *dp0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7713
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7714
                        dp = __ByteArrayInstPtr(ditherRGBBytes)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7715
                        lookupIndex =    __qScramble[((__wR & 0xF0)>>4)];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7716
                        lookupIndex |=   __qScramble[((__wG & 0xF0)>>4)] >> 1;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7717
                        lookupIndex |=   __qScramble[((__wB & 0xF0)>>4)] >> 2;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7718
                        idx = bestIdx =__clrLookup[lookupIndex];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7719
                        dp += (idx+idx+idx);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7720
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7721
                        /* try color at lookupIndex */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7722
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7723
                        d = dp[0];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7724
                        delta = (__wR - d) * RED_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7725
                        if (delta < 0) delta = -delta;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7726
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7727
                        d = dp[1];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7728
                        if (__wG > d)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7729
                            delta += (__wG - d) * GREEN_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7730
                        else
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7731
                            delta += (d - __wG) * GREEN_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7732
                        d = dp[2];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7733
                        if (__wB > d)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7734
                            delta += (__wB - d) * BLUE_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7735
                        else
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7736
                            delta += (d - __wB) * BLUE_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7737
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7738
                        if (delta <= GOOD_DELTA) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7739
                            goto foundBest;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7740
                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7741
                        minDelta = delta;
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7742
# ifndef ONE_SHOT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7743
                        idx0 = idx; dp0 = dp;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7744
                        cnt = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7745
                        while ((++cnt <= NPROBE) && (idx > 0)) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7746
                            /* try previous color(s) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7747
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7748
                            idx--; dp -= 3;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7749
                            d = dp[0];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7750
                            delta = (__wR - d) * RED_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7751
                            if (delta < 0) delta = -delta;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7752
                            d = dp[1];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7753
                            if (__wG > d)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7754
                                delta += (__wG - d) * GREEN_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7755
                            else
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7756
                                delta += (d - __wG) * GREEN_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7757
                            d = dp[2];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7758
                            if (__wB > d)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7759
                                delta += (__wB - d) * BLUE_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7760
                            else
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7761
                                delta += (d - __wB) * BLUE_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7762
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7763
                            if (delta < minDelta) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7764
                                bestIdx = idx;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7765
                                if (delta <= GOOD_DELTA) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7766
                                    goto foundBest;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7767
                                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7768
                                minDelta = delta;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7769
                            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7770
                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7771
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7772
                        idx = idx0; dp = dp0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7773
                        cnt = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7774
                        while ((++cnt <= NPROBE) && (++idx < __nColors)) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7775
                            /* try next color */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7776
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7777
                            dp += 3;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7778
                            d = dp[0];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7779
                            delta = (__wR - d) * RED_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7780
                            if (delta < 0) delta = -delta;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7781
                            d = dp[1];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7782
                            if (__wG > d)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7783
                                delta += (__wG - d) * GREEN_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7784
                            else
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7785
                                delta += (d - __wG) * GREEN_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7786
                            d = dp[2];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7787
                            if (__wB > d)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7788
                                delta += (__wB - d) * BLUE_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7789
                            else
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7790
                                delta += (d - __wB) * BLUE_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7791
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7792
                            if (delta < minDelta) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7793
                                bestIdx = idx;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7794
                                if (delta <= GOOD_DELTA) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7795
                                    goto foundBest;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7796
                                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7797
                                minDelta = delta;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7798
                            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7799
                        }
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7800
# endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7801
                    }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7802
        foundBest: ;
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7803
#else
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7804
/*
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7805
                    if(__wR > 255) __wR = 255;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7806
                    else if (__wR < 0) __wR = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7807
                    if(__wG > 255) __wG = 255;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7808
                    else if (__wG < 0) __wG = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7809
                    if(__wB > 255) __wB = 255;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7810
                    else if (__wB < 0) __wB = 0;
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7811
*/
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7812
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7813
                    /* find the best matching color */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7814
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7815
                    minDelta = 99999;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7816
                    bestIdx = -1;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7817
                    dp = __ByteArrayInstPtr(ditherRGBBytes)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7818
                    for (idx = 0; idx<__nColors; idx++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7819
                        int d, delta;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7820
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7821
                        d = dp[0];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7822
                        delta = (__wR - d) * RED_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7823
                        if (delta < 0) delta = -delta;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7824
                        if (delta < minDelta) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7825
                            d = dp[1];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7826
                            if (__wG > d)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7827
                                delta += (__wG - d) * GREEN_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7828
                            else
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7829
                                delta += (d - __wG) * GREEN_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7830
                            if (delta < minDelta) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7831
                                d = dp[2];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7832
                                if (__wB > d)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7833
                                    delta += (__wB - d) * BLUE_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7834
                                else
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7835
                                    delta += (d - __wB) * BLUE_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7836
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7837
                                if (delta < minDelta) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7838
                                    bestIdx = idx;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7839
                                    if (delta <= GOOD_DELTA) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7840
                                        break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7841
                                    }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7842
                                    minDelta = delta;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7843
                                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7844
                            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7845
                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7846
                        dp += 3;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7847
                    }
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7848
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7849
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7850
                dp = __ByteArrayInstPtr(ditherRGBBytes)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7851
                dp += bestIdx * 3;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7852
                dR = dp[0];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7853
                dG = dp[1];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7854
                dB = dp[2];
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7855
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7856
/*
4725
c8896df7bd3f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4717
diff changeset
  7857
console_fprintf(stderr, "want: %d/%d/%d (%d/%d/%d) got: %d/%d/%d\n",
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7858
                __wantR, __wantG, __wantB,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7859
                __wR, __wG, __wB,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7860
                dR, dG, dB);
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7861
*/
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7862
                /*
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7863
                 * store the corresponding dither colors colorId
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7864
                 */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7865
                *dstP++ = idP[bestIdx];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7866
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7867
                /*
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7868
                 * the new error & distribute the error
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7869
                 */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7870
                __eR = __wantR - dR;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7871
                if (__eR) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7872
                    tR = __eR >> 4;  /* 16th of error */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7873
                    nR = eP[3] + (tR * 7);/* from accu: error for (x+1 / y) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7874
                    eP[0] = tR*5;         /* 5/16th for (x / y+1) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7875
                    eP[-3] = tR*3;        /* 3/16th for (x-1 / y+1) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7876
                    eP[3] = __eR - (tR*15);  /* 1/16th for (x+1 / y+1) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7877
                    __eR = nR;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7878
                } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7879
                    __eR = eP[3];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7880
                    eP[0] = eP[-3] = eP[3] = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7881
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7882
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7883
                __eG = __wantG - dG;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7884
                if (__eG) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7885
                    tG = __eG >> 4;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7886
                    nG = eP[4] + (tG * 7);/* plus 7/16'th of this error */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7887
                    eP[1] = tG*5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7888
                    eP[-2] = tG*3;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7889
                    eP[4] = __eG - (tG*15);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7890
                    __eG = nG;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7891
                } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7892
                    __eG = eP[4];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7893
                    eP[1] = eP[-2] = eP[4] = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7894
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7895
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7896
                __eB = __wantB - dB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7897
                if (__eB) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7898
                    tB = __eB >> 4;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7899
                    nB = eP[5] + (tB * 7);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7900
                    eP[2] = tB*5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7901
                    eP[-1] = tB*3;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7902
                    eP[5] = __eB - (tB*15);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7903
                    __eB = nB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7904
                } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7905
                    __eB = eP[5];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7906
                    eP[2] = eP[-1] = eP[5] = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7907
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7908
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7909
                eP += 3;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7910
            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7911
        }
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7912
    }
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7913
%}.
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7914
    failed ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7915
        self primitiveFailed.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7916
        ^ nil
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7917
    ].
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7918
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7919
    ^ pseudoBits
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  7920
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  7921
    "Modified: / 30-01-2017 / 19:58:45 / stefan"
7996
a9afe1d564aa #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  7922
    "Modified: / 06-04-2017 / 13:32:12 / cg"
874
cce9c1029d38 added floydSteinberg dithering for pseudo-8 images
Claus Gittinger <cg@exept.de>
parents: 873
diff changeset
  7923
!
cce9c1029d38 added floydSteinberg dithering for pseudo-8 images
Claus Gittinger <cg@exept.de>
parents: 873
diff changeset
  7924
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  7925
floydSteinbergDitheredDepth8BitsColors:fixColors nRed:nRed nGreen:nGreen nBlue:nBlue
858
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  7926
    "return a floyd-steinberg dithered bitmap from the receiver picture,
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  7927
     which must be a depth-8 image.
858
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  7928
     This is a special-cased dither method for 8-bit palette images being displayed on
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  7929
     an 8-bit pseudoColor display, AND fixColor dithering is used.
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7930
     Use the colors in the fixColors array, which must be fixR x fixG x fixB
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7931
     colors assigned to aDevice, such as the preallocated colors of the
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  7932
     Color class.
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7933
     By passing the ditherColors as extra array, this method can
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7934
     also be used to dither an 8bit image into a smaller number of colors,
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7935
     for example to create dithered Depth4Images from Depth8Images."
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7936
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  7937
    |pseudoBits
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7938
     rgbBytes
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7939
     w       "{Class: SmallInteger }"
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7940
     h       "{Class: SmallInteger }"
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7941
     index   "{Class: SmallInteger }"
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7942
     fixR    "{Class: SmallInteger }"
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7943
     fixG    "{Class: SmallInteger }"
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7944
     fixB    "{Class: SmallInteger }"
879
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  7945
     fixGfixB
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  7946
     fixIds failed map lastColor
879
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  7947
     rgbIDX  "{Class: SmallInteger }"
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  7948
     idxAndErrRBytes idxAndErrGBytes idxAndErrBBytes
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7949
     error clr|
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7950
858
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  7951
    self depth ~~ 8 ifTrue:[^ nil].
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  7952
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7953
    fixR := nRed.
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7954
    fixR == 0 ifTrue:[ ^ nil].
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7955
    fixG := nGreen.
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7956
    fixG == 0 ifTrue:[ ^ nil].
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7957
    fixB := nBlue.
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7958
    fixB == 0 ifTrue:[ ^ nil].
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7959
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7960
    "/ simple check
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7961
    (fixR * fixG * fixB) ~~ fixColors size ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7962
        self error:'invalid color array passed'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7963
        ^ nil
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7964
    ].
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7965
    fixIds := (fixColors asArray collect:[:clr | clr colorId]) asByteArray.
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7966
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7967
    "/
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7968
    "/ collect color components as integer values (for integer arithmetic)
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7969
    "/
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7970
    rgbBytes := ByteArray uninitializedNew:256 * 3.
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7971
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7972
    index := 1.
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7973
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7974
    photometric == #palette ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7975
        lastColor := colorMap size - 1
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7976
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7977
        lastColor := 255.
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7978
    ].
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7979
    0 to:lastColor do:[:pix |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7980
        clr := self colorFromValue:pix.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7981
        rgbBytes at:index put:(clr redByte).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7982
        rgbBytes at:index+1 put:(clr greenByte).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7983
        rgbBytes at:index+2 put:(clr blueByte).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7984
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7985
        index := index + 3.
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7986
    ].
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7987
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7988
    pseudoBits := ByteArray uninitializedNew:(width * height).
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7989
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7990
    w := width + 2.
1636
c30f6644666e dont use bcopy in #floydSteinbergDitheredDepth8BitsColors
Claus Gittinger <cg@exept.de>
parents: 1630
diff changeset
  7991
    error := ByteArray new:w*(3*2).
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7992
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7993
    w := width.
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7994
    h := height.
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7995
879
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  7996
    idxAndErrRBytes := ByteArray uninitializedNew:256*2.
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  7997
    idxAndErrGBytes := ByteArray uninitializedNew:256*2.
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  7998
    idxAndErrBBytes := ByteArray uninitializedNew:256*2.
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  7999
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8000
    fixGfixB := fixG * fixB.
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8001
    index := 1.
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8002
    0 to:255 do:[:i |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8003
        rgbIDX := (i * (fixR-1) + 128) // 255. "red index rounded"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8004
        idxAndErrRBytes at:index put:(rgbIDX * fixGfixB).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8005
        idxAndErrRBytes at:index+1 put:i - (rgbIDX * 255 // (fixR-1)) + 128.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8006
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8007
        rgbIDX := (i * (fixG-1) + 128) // 255. "green index rounded"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8008
        idxAndErrGBytes at:index put:(rgbIDX * fixB).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8009
        idxAndErrGBytes at:index+1 put:i - (rgbIDX * 255 // (fixG-1)) + 128.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8010
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8011
        rgbIDX := (i * (fixB-1) + 128) // 255. "blue index rounded"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8012
        idxAndErrBBytes at:index put:(rgbIDX ).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8013
        idxAndErrBBytes at:index+1 put:i - (rgbIDX * 255 // (fixB-1)) + 128.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8014
        index := index + 2.
879
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8015
    ].
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8016
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8017
    failed := true.
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8018
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8019
%{
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8020
    int __x, __y;
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8021
    int __eR, __eG, __eB;
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8022
    unsigned char *srcP, *dstP;
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8023
    unsigned char *rgbP;
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8024
    unsigned char *idP;
879
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8025
    unsigned char *__idxAndErrRBytes, *__idxAndErrGBytes, *__idxAndErrBBytes;
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8026
    short *errP, *eP;
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8027
    int idx;
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8028
    int __w = __intVal(w);
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8029
5476
06e08505bc6f __isByteArray() to __isByteArrayLike() in primitive code
Stefan Vogel <sv@exept.de>
parents: 5352
diff changeset
  8030
    if (__isByteArrayLike(__INST(bytes))
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8031
     && __isByteArray(pseudoBits)
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8032
     && __isByteArray(rgbBytes)
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8033
     && __isByteArray(fixIds)
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8034
     && __isByteArray(error)
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8035
     && __bothSmallInteger(fixR, fixG)
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8036
     && __isSmallInteger(fixB)) {
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8037
        failed = false;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8038
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8039
        srcP = __ByteArrayInstPtr(__INST(bytes))->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8040
        dstP = __ByteArrayInstPtr(pseudoBits)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8041
        rgbP = __ByteArrayInstPtr(rgbBytes)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8042
        idP = __ByteArrayInstPtr(fixIds)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8043
        __idxAndErrRBytes = __ByteArrayInstPtr(idxAndErrRBytes)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8044
        __idxAndErrGBytes = __ByteArrayInstPtr(idxAndErrGBytes)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8045
        __idxAndErrBBytes = __ByteArrayInstPtr(idxAndErrBBytes)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8046
        errP = (short *) __ByteArrayInstPtr(error)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8047
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8048
        eP = errP;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8049
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8050
        for (__y=__intVal(h); __y>0; __y--) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8051
            __eR = __eG = __eB = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8052
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8053
            eP = &(errP[3]);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8054
            __eR = eP[0];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8055
            __eG = eP[1];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8056
            __eB = eP[2];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8057
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8058
            for (__x=__w; __x>0; __x--) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8059
                int __want;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8060
                int pix;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8061
                int idx;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8062
                int tR, tG, tB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8063
                int nR, nG, nB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8064
                int iRGB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8065
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8066
                pix = *srcP++;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8067
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8068
                /*
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8069
                 * wR, wG and wB is the wanted r/g/b value;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8070
                 */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8071
                pix = pix+pix+pix;  /* pix * 3 */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8072
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8073
                /*
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8074
                 * compute indexR/G/B and the new error:
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8075
                 */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8076
                __want = rgbP[pix]   + __eR;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8077
                if (__want > 255) __want = 255;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8078
                else if (__want < 0) __want = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8079
                __want += __want;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8080
                idx = __idxAndErrRBytes[__want];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8081
                __eR = __idxAndErrRBytes[__want+1];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8082
                __eR -= 128;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8083
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8084
                __want = rgbP[pix+1] + __eG;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8085
                if (__want > 255) __want = 255;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8086
                else if (__want < 0) __want = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8087
                __want += __want;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8088
                idx += __idxAndErrGBytes[__want];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8089
                __eG = __idxAndErrGBytes[__want+1];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8090
                __eG -= 128;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8091
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8092
                __want = rgbP[pix+2] + __eB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8093
                if (__want > 255) __want = 255;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8094
                else if (__want < 0) __want = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8095
                __want += __want;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8096
                idx += __idxAndErrBBytes[__want];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8097
                __eB = __idxAndErrBBytes[__want+1];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8098
                __eB -= 128;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8099
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8100
                /*
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8101
                 * store the corresponding dither colors colorId
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8102
                 */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8103
                *dstP++ = idP[idx];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8104
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8105
                /*
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8106
                 * distribute the error
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8107
                 */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8108
                if (__eR) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8109
                    tR = __eR >> 4;  /* 16th of error */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8110
                    nR = eP[3] + (tR * 7);/* from accu: error for (x+1 / y) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8111
                    eP[0] = tR*5;         /* 5/16th for (x / y+1) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8112
                    eP[-3] = tR*3;        /* 3/16th for (x-1 / y+1) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8113
                    eP[3] = __eR - (tR*15);  /* 1/16th for (x+1 / y+1) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8114
                    __eR = nR;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8115
                } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8116
                    __eR = eP[3];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8117
                    eP[0] = eP[-3] = eP[3] = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8118
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8119
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8120
                if (__eG) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8121
                    tG = __eG >> 4;  /* 16th of error */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8122
                    nG = eP[4] + (tG * 7);/* plus 7/16'th of this error */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8123
                    eP[1] = tG*5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8124
                    eP[-2] = tG*3;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8125
                    eP[4] = __eG - (tG*15);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8126
                    __eG = nG;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8127
                } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8128
                    __eG = eP[4];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8129
                    eP[1] = eP[-2] = eP[4] = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8130
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8131
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8132
                if (__eB) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8133
                    tB = __eB >> 4;  /* 16th of error */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8134
                    nB = eP[5] + (tB * 7);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8135
                    eP[2] = tB*5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8136
                    eP[-1] = tB*3;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8137
                    eP[5] = __eB - (tB*15);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8138
                    __eB = nB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8139
                } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8140
                    __eB = eP[5];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8141
                    eP[2] = eP[-1] = eP[5] = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8142
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8143
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8144
                eP += 3;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8145
            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8146
        }
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8147
    }
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8148
%}.
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8149
    failed ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8150
        self primitiveFailed.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8151
        ^ nil
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8152
    ].
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8153
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8154
    ^ pseudoBits
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8155
!
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8156
1782
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8157
floydSteinbergDitheredGrayBitsDepth:depth
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8158
    "return the bits for dithering a gray image from the image.
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8159
     Works for any source depths / photometric,
1782
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8160
     but possibly slow since each pixel is processed individually.
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8161
     Redefined by some subclasses for more performance (D8Image/D24Image)"
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8162
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8163
    |dstIndex        "{Class: SmallInteger }"
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8164
     nextDst         "{Class: SmallInteger }"
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8165
     bytesPerOutRow  "{Class: SmallInteger }"
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8166
     outBits greyValues greyErrors greyPixels greyLevels
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8167
     errorArray
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8168
     nextErrorArray
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8169
     t
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8170
     w               "{Class: SmallInteger }"
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8171
     h               "{Class: SmallInteger }"
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8172
     bitCnt          "{Class: SmallInteger }"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8173
     byte            "{Class: SmallInteger }"
1782
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8174
     grey
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8175
     eR eRB eB eLB |
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8176
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8177
    depth > 8 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8178
        self error:'unimplemented conversion'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8179
        ^ nil
1782
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8180
    ].
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8181
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8182
    w := width.
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8183
    h := height.
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8184
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8185
    bytesPerOutRow := ((w * depth) + 7) // 8.
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8186
    outBits := ByteArray uninitializedNew:(bytesPerOutRow * h).
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8187
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8188
    greyLevels := (1 bitShift:depth) - 1.
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8189
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8190
    errorArray := Array new:w+2.
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8191
    nextErrorArray := Array new:w+2.
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8192
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8193
    nextErrorArray atAllPut:0.
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8194
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8195
    dstIndex := 1.
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8196
    bitCnt := 8.
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8197
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8198
    self depth <= 12 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8199
        "/ fetch scaled brightness values outside of loop into a table;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8200
        "/ use table-value in loop
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8201
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8202
        greyValues := self greyMapForRange:(greyLevels).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8203
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8204
        greyPixels := greyValues collect:[:v | v isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8205
                                                   0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8206
                                               ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8207
                                                   v truncated]].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8208
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8209
        greyPixels := ByteArray withAll:greyPixels.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8210
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8211
        greyErrors := greyValues collect:[:v | v isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8212
                                                   0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8213
                                               ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8214
                                                   ((v - v truncated) * 1024) truncated
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8215
                                               ]].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8216
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8217
        0 to:(h-1) do:[:y |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8218
            nextDst := dstIndex + bytesPerOutRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8219
            byte := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8220
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8221
            t := errorArray.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8222
            errorArray := nextErrorArray.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8223
            nextErrorArray := t.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8224
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8225
            nextErrorArray atAllPut:0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8226
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8227
            self valuesAtY:y from:0 to:(w-1) do:[:x :value |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8228
                |e     "{ Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8229
                 pixel "{ Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8230
                 error "{ Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8231
                 e16   "{ Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8232
                 xE    "{ Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8233
                 xN    "{ Class: SmallInteger }" |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8234
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8235
                pixel := greyPixels at:(value + 1).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8236
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8237
                "/ adjust error
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8238
                xE := x + 2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8239
                error := (greyErrors at:(value + 1)) + (errorArray at:xE).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8240
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8241
                byte := byte bitShift:depth.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8242
                error > 512 "0.5" ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8243
                    pixel := pixel + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8244
                    e := error - 1024 "1.0"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8245
                ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8246
                    e := error
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8247
                ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8248
                byte := byte bitOr:pixel.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8249
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8250
                e ~= 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8251
                    e16 := e // 16.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8252
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8253
                    eR  := e16 * 7.              "/ 7/16 to right
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8254
                    eRB := e16 "* 1".            "/ 1/16 to right below
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8255
                    eB  := e16 * 5.              "/ 5/16 to below
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8256
                    eLB := e - eR - eRB - eB.  "/ 3/16 to left below
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8257
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8258
                    xN := xE + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8259
                    eR ~= 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8260
                        errorArray     at:xN put:(errorArray at:xN) + eR.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8261
                    ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8262
                    eRB ~= 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8263
                        nextErrorArray at:xN put:(nextErrorArray at:xN) + eRB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8264
                    ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8265
                    eB ~= 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8266
                        nextErrorArray at:xE put:(nextErrorArray at:xE) + eB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8267
                    ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8268
                    eLB ~= 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8269
                        xN := xE - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8270
                        nextErrorArray at:xN put:(nextErrorArray at:xN) + eLB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8271
                    ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8272
                ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8273
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8274
                bitCnt := bitCnt - depth.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8275
                bitCnt == 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8276
                    outBits at:dstIndex put:byte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8277
                    dstIndex := dstIndex + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8278
                    byte := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8279
                    bitCnt := 8.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8280
                ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8281
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8282
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8283
            bitCnt ~~ 8 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8284
                byte := byte bitShift:bitCnt.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8285
                outBits at:dstIndex put:byte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8286
                bitCnt := 8.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8287
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8288
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8289
            dstIndex := nextDst.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8290
        ].
1782
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8291
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8292
        0 to:(h-1) do:[:y |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8293
            nextDst := dstIndex + bytesPerOutRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8294
            byte := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8295
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8296
            t := errorArray.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8297
            errorArray := nextErrorArray.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8298
            nextErrorArray := t.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8299
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8300
            nextErrorArray atAllPut:0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8301
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8302
            self colorsAtY:y from:0 to:(w-1) do:[:x :clr |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8303
                |e     "{ Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8304
                 pixel "{ Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8305
                 error "{ Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8306
                 e16   "{ Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8307
                 xE    "{ Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8308
                 xN    "{ Class: SmallInteger }" |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8309
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8310
                grey := (clr brightness * greyLevels).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8311
                pixel := grey truncated.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8312
                error := ((grey - pixel) * 1024) truncated.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8313
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8314
                "/ adjust error
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8315
                xE := x + 2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8316
                error := error + (errorArray at:xE).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8317
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8318
                byte := byte bitShift:depth.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8319
                error > 512 "0.5" ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8320
                    pixel := pixel + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8321
                    e := error - 1024 "1.0"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8322
                ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8323
                    e := error
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8324
                ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8325
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8326
                byte := byte bitOr:pixel.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8327
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8328
                e ~= 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8329
                    e16 := e // 16.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8330
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8331
                    eR  := e16 * 7.              "/ 7/16 to right
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8332
                    eRB := e16 "* 1".            "/ 1/16 to right below
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8333
                    eB  := e16 * 5.              "/ 5/16 to below
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8334
                    eLB := e - eR - eRB - eB.  "/ 3/16 to left below
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8335
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8336
                    xN := xE + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8337
                    eR ~= 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8338
                        errorArray     at:xN put:(errorArray at:xN) + eR.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8339
                    ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8340
                    eRB ~= 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8341
                        nextErrorArray at:xN put:(nextErrorArray at:xN) + eRB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8342
                    ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8343
                    eB ~= 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8344
                        nextErrorArray at:xE put:(nextErrorArray at:xE) + eB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8345
                    ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8346
                    eLB ~= 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8347
                        xN := xE - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8348
                        nextErrorArray at:xN put:(nextErrorArray at:xN) + eLB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8349
                    ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8350
                ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8351
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8352
                bitCnt := bitCnt - depth.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8353
                bitCnt == 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8354
                    outBits at:dstIndex put:byte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8355
                    dstIndex := dstIndex + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8356
                    byte := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8357
                    bitCnt := 8.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8358
                ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8359
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8360
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8361
            bitCnt ~~ 8 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8362
                byte := byte bitShift:bitCnt.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8363
                outBits at:dstIndex put:byte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8364
                bitCnt := 8.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8365
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8366
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8367
            dstIndex := nextDst.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8368
        ].
1782
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8369
    ].
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8370
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8371
    ^ outBits
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8372
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8373
    "Created: 10.6.1996 / 13:28:22 / cg"
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8374
    "Modified: 11.6.1996 / 00:13:38 / cg"
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8375
!
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8376
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8377
floydSteinbergDitheredMonochromeBits
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8378
    "return the bitmap for a dithered monochrome bitmap from the image.
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8379
     Works for any source depths / photometric,
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8380
     but very very slow since each pixel is processed individually.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8381
     Redefined by some subclasses for more performance (D8Image)"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8382
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8383
    |dstIndex        "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8384
     nextDst         "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8385
     bytesPerMonoRow "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8386
     monoBits greyValues
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8387
     errorArray
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8388
     nextErrorArray
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8389
     e eD t
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8390
     w               "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8391
     h               "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8392
     bitCnt          "{Class: SmallInteger }"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8393
     byte            "{Class: SmallInteger }"
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8394
     grey
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8395
     eR eRB eB eLB |
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8396
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8397
    w := width.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8398
    h := height.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8399
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8400
    bytesPerMonoRow := (w + 7) // 8.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8401
    monoBits := ByteArray uninitializedNew:(bytesPerMonoRow * h).
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8402
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8403
    errorArray := Array new:w+2.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8404
    nextErrorArray := Array new:w+2.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8405
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8406
    nextErrorArray atAllPut:0.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8407
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8408
    dstIndex := 1.
828
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8409
    bitCnt := 8.
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8410
    byte := 0.
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8411
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8412
    self depth <= 12 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8413
        "/ fetch scaled brightness values outside of loop into a table;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8414
        "/ use table-value in loop
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8415
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8416
        greyValues := self greyMapForRange:(255 * 1024).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8417
        greyValues := greyValues collect:[:v | v rounded].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8418
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8419
        0 to:(h-1) do:[:y |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8420
            nextDst := dstIndex + bytesPerMonoRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8421
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8422
            t := errorArray.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8423
            errorArray := nextErrorArray.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8424
            nextErrorArray := t.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8425
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8426
            nextErrorArray atAllPut:0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8427
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8428
            self valuesAtY:y from:0 to:(w-1) do:[:x :pixel |
828
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8429
%{
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8430
                int __grey, __e;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8431
                int __byte = __intVal(byte);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8432
                OBJ *__errorArray = __ArrayInstPtr(errorArray)->a_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8433
                OBJ *__nextErrorArray = __ArrayInstPtr(nextErrorArray)->a_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8434
                int __x = __intVal(x);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8435
                int __eR, __eB, __eRB, __eLB, __eI;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8436
                int __bitCnt = __intVal(bitCnt);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8437
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8438
                __grey = __intVal(__ArrayInstPtr(greyValues)->a_element[__intVal(pixel)]);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8439
                __grey += __intVal(__errorArray[__x+1]);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8440
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8441
                __byte <<= 1;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8442
                if (__grey > 127*1024) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8443
                    __e = __grey - (255*1024);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8444
                    __byte |= 1;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8445
                } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8446
                    __e = __grey;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8447
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8448
                if (__e) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8449
                    __eI = __e >> 4;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8450
                    __eR  = __eI * 7;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8451
                    __eRB = __eI * 1;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8452
                    __eB  = __eI * 5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8453
                    __eLB = __e - __eR - __eRB - __eB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8454
                    __errorArray[__x+2] = __MKSMALLINT(__intVal(__errorArray[__x+2]) + __eR);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8455
                    __nextErrorArray[__x+2] = __MKSMALLINT(__intVal(__nextErrorArray[__x+2]) + __eRB);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8456
                    __nextErrorArray[__x+1] = __MKSMALLINT(__intVal(__nextErrorArray[__x+1]) + __eB);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8457
                    __nextErrorArray[__x  ] = __MKSMALLINT(__intVal(__nextErrorArray[__x  ]) + __eLB);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8458
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8459
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8460
                __bitCnt--;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8461
                if (__bitCnt == 0) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8462
                    int __dstIndex = __intVal(dstIndex);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8463
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8464
                    __ByteArrayInstPtr(monoBits)->ba_element[__dstIndex-1] = __byte;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8465
                    dstIndex = __MKSMALLINT(__dstIndex + 1);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8466
                    __byte = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8467
                    __bitCnt = 8;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8468
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8469
                byte = __MKSMALLINT(__byte);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8470
                bitCnt = __MKSMALLINT(__bitCnt);
828
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8471
%}.
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8472
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8473
"/                |eI "{ Class: SmallInteger }"
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8474
"/                 xE "{ Class: SmallInteger }"
829
d104ec97c38c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  8475
"/                 xN "{ Class: SmallInteger }" |
d104ec97c38c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  8476
"/
828
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8477
"/                "/ get the colors grey value [0 .. 1]
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8478
"/                grey := greyValues at:(pixel + 1).
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8479
"/
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8480
"/                "/ adjust error
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8481
"/                xE := x + 2.
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8482
"/                grey := (grey + (errorArray at:xE)).
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8483
"/
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8484
"/                byte := byte bitShift:1.
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8485
"/                grey > (127*1024) ifTrue:[
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8486
"/                    byte := byte bitOr:1.      "/ white
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8487
"/                    e := grey - (255*1024)
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8488
"/                ] ifFalse:[
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8489
"/                    e := grey                  "/ black
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8490
"/                ].
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8491
"/                e ~= 0 ifTrue:[
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8492
"/                    eD := e.
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8493
"/                    eI := e // 16.
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8494
"/
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8495
"/                    eR  := eI * 7.              "/ 7/16 to right
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8496
"/                    eRB := eI * 1.              "/ 1/16 to right below
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8497
"/                    eB  := eI * 5.              "/ 5/16 to below
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8498
"/                    eLB := eD - eR - eRB - eB.  "/ 3/16 to left below
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8499
"/
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8500
"/                    xN := xE + 1.
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8501
"/                    eR ~= 0 ifTrue:[
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8502
"/                        errorArray     at:xN put:(errorArray at:xN) + eR.
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8503
"/                    ].
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8504
"/                    eRB ~= 0 ifTrue:[
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8505
"/                        nextErrorArray at:xN put:(nextErrorArray at:xN) + eRB.
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8506
"/                    ].
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8507
"/                    eB ~= 0 ifTrue:[
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8508
"/                        nextErrorArray at:xE put:(nextErrorArray at:xE) + eB.
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8509
"/                    ].
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8510
"/                    eLB ~= 0 ifTrue:[
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8511
"/                        xN := xE - 1.
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8512
"/                        nextErrorArray at:xN put:(nextErrorArray at:xN) + eLB.
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8513
"/                    ].
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8514
"/                ].
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8515
"/
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8516
"/                bitCnt := bitCnt - 1.
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8517
"/                bitCnt == 0 ifTrue:[
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8518
"/                    monoBits at:dstIndex put:byte.
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8519
"/                    dstIndex := dstIndex + 1.
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8520
"/                    byte := 0.
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8521
"/                    bitCnt := 8.
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8522
"/                ].
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8523
                  0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8524
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8525
            bitCnt ~~ 8 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8526
                byte := byte bitShift:bitCnt.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8527
                monoBits at:dstIndex put:byte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8528
                bitCnt := 8.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8529
                byte := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8530
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8531
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8532
            dstIndex := nextDst.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8533
        ].
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8534
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8535
        'Image [info]: slow floydSteinberg dither ..' infoPrintCR.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8536
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8537
        0 to:(h-1) do:[:y |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8538
            nextDst := dstIndex + bytesPerMonoRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8539
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8540
            t := errorArray.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8541
            errorArray := nextErrorArray.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8542
            nextErrorArray := t.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8543
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8544
            nextErrorArray atAllPut:0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8545
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8546
            self colorsAtY:y from:0 to:(w-1) do:[:x :clr |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8547
                |eI "{ Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8548
                 xE "{ Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8549
                 xN "{ Class: SmallInteger }" |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8550
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8551
                "/ get the colors grey value [0 .. 1]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8552
                grey := (clr brightness * 255).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8553
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8554
                "/ adjust error
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8555
                xE := x + 2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8556
                grey := (grey + (errorArray at:xE)) rounded.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8557
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8558
                byte := byte bitShift:1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8559
                grey > 127 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8560
                    byte := byte bitOr:1.      "/ white
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8561
                    e := grey - 255
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8562
                ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8563
                    e := grey                  "/ black
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8564
                ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8565
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8566
                e ~= 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8567
                    eD := e.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8568
                    eI := e // 16.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8569
                    eR  := eI * 7.              "/ 7/16 to right
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8570
                    eRB := eI "* 1".            "/ 1/16 to right below
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8571
                    eB  := eI * 5.              "/ 5/16 to below
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8572
                    eLB := eD - eR - eRB - eB.  "/ 3/16 to left below
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8573
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8574
                    xN := xE + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8575
                    eR ~= 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8576
                        errorArray     at:xN put:(errorArray at:xN) + eR.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8577
                    ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8578
                    eRB ~= 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8579
                        nextErrorArray at:xN put:(nextErrorArray at:xN) + eRB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8580
                    ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8581
                    eB ~= 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8582
                        nextErrorArray at:xE put:(nextErrorArray at:xE) + eB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8583
                    ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8584
                    eLB ~= 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8585
                        xN := xE - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8586
                        nextErrorArray at:xN put:(nextErrorArray at:xN) + eLB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8587
                    ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8588
                ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8589
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8590
                bitCnt := bitCnt - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8591
                bitCnt == 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8592
                    monoBits at:dstIndex put:byte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8593
                    dstIndex := dstIndex + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8594
                    byte := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8595
                    bitCnt := 8.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8596
                ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8597
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8598
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8599
            bitCnt ~~ 8 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8600
                byte := byte bitShift:bitCnt.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8601
                monoBits at:dstIndex put:byte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8602
                bitCnt := 8.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8603
                byte := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8604
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8605
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8606
            dstIndex := nextDst.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8607
        ].
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8608
    ].
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8609
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8610
    ^ monoBits
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8611
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8612
    "Created: 8.6.1996 / 16:39:46 / cg"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8613
    "Modified: 10.6.1996 / 15:12:11 / cg"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8614
!
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8615
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8616
nearestPaintDepth8BitsColors:fixColors nRed:nRed nGreen:nGreen nBlue:nBlue
879
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8617
    "return a nearest paint bitmap from the receiver picture,
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8618
     which must be a depth-8 image.
879
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8619
     This is a special-cased dither method for 8-bit palette images being displayed on
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8620
     an 8-bit pseudoColor display, AND fixColor dithering is used.
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8621
     Use the colors in the fixColors array, which must be fixR x fixG x fixB
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8622
     colors assigned to aDevice, such as the preallocated colors of the
884
d7cc8a20505b oops - nearest paint color conversion can be done much faster
Claus Gittinger <cg@exept.de>
parents: 883
diff changeset
  8623
     Color class."
879
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8624
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8625
    |pseudoBits
879
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8626
     fixR    "{Class: SmallInteger }"
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8627
     fixG    "{Class: SmallInteger }"
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8628
     fixB    "{Class: SmallInteger }"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8629
     fixGfixB
884
d7cc8a20505b oops - nearest paint color conversion can be done much faster
Claus Gittinger <cg@exept.de>
parents: 883
diff changeset
  8630
     r       "{Class: SmallInteger }"
d7cc8a20505b oops - nearest paint color conversion can be done much faster
Claus Gittinger <cg@exept.de>
parents: 883
diff changeset
  8631
     g       "{Class: SmallInteger }"
d7cc8a20505b oops - nearest paint color conversion can be done much faster
Claus Gittinger <cg@exept.de>
parents: 883
diff changeset
  8632
     b       "{Class: SmallInteger }"
d7cc8a20505b oops - nearest paint color conversion can be done much faster
Claus Gittinger <cg@exept.de>
parents: 883
diff changeset
  8633
     idx     "{Class: SmallInteger }"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8634
     idMap lastColor
879
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8635
     clr|
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8636
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8637
    self depth ~~ 8 ifTrue:[^ nil].
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8638
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8639
    photometric == #palette ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8640
        lastColor := colorMap size - 1
879
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8641
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8642
        lastColor := 255.
879
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8643
    ].
884
d7cc8a20505b oops - nearest paint color conversion can be done much faster
Claus Gittinger <cg@exept.de>
parents: 883
diff changeset
  8644
    idMap := ByteArray uninitializedNew:256.
d7cc8a20505b oops - nearest paint color conversion can be done much faster
Claus Gittinger <cg@exept.de>
parents: 883
diff changeset
  8645
3915
dd2dae91c068 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3914
diff changeset
  8646
    (nRed isNil or:[nGreen isNil or:[nBlue isNil]]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8647
        0 to:lastColor do:[:pix |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8648
            |clr repClr|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8649
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8650
            clr := self colorFromValue:pix.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8651
            repClr := clr nearestIn:fixColors.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8652
            idMap at:(pix+1) put:(fixColors identityIndexOf:repClr)-1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8653
        ].
3914
875c38aa66ab *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3913
diff changeset
  8654
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8655
        fixR := nRed.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8656
        fixR == 0 ifTrue:[ ^ nil].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8657
        fixG := nGreen.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8658
        fixG == 0 ifTrue:[ ^ nil].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8659
        fixB := nBlue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8660
        fixB == 0 ifTrue:[ ^ nil].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8661
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8662
        "/ simple check
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8663
        (fixR * fixG * fixB) ~~ fixColors size ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8664
            self error:'invalid color array passed'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8665
            ^ nil
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8666
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8667
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8668
        "/
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8669
        "/ collect colorIds
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8670
        "/
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8671
        fixGfixB := fixG * fixB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8672
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8673
        0 to:lastColor do:[:pix |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8674
            clr := self colorFromValue:pix.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8675
            r := clr redByte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8676
            g := clr greenByte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8677
            b := clr blueByte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8678
            idx := ((r * (fixR-1) + 128) // 255) * fixGfixB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8679
            idx := idx + (((g * (fixG-1) + 128) // 255) * fixB).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8680
            idx := idx + ((b * (fixB-1) + 128) // 255).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8681
            idMap at:(pix+1) put:(fixColors at:(idx+1)) colorId.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8682
        ].
879
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8683
    ].
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8684
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8685
    pseudoBits := ByteArray uninitializedNew:(width * height).
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8686
884
d7cc8a20505b oops - nearest paint color conversion can be done much faster
Claus Gittinger <cg@exept.de>
parents: 883
diff changeset
  8687
    "/ translate
d7cc8a20505b oops - nearest paint color conversion can be done much faster
Claus Gittinger <cg@exept.de>
parents: 883
diff changeset
  8688
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
  8689
    self bits
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8690
        expandPixels:8         "xlate only"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8691
        width:width height:height
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8692
        into:pseudoBits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8693
        mapping:idMap.
879
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8694
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8695
    ^ pseudoBits
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8696
884
d7cc8a20505b oops - nearest paint color conversion can be done much faster
Claus Gittinger <cg@exept.de>
parents: 883
diff changeset
  8697
    "Modified: 18.6.1996 / 09:18:09 / cg"
879
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8698
!
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8699
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8700
nfloydSteinbergDitheredDepth8BitsColors:colors
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8701
    "return a floyd-steinberg dithered bitmap from the receiver picture,
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8702
     which must be a depth-8 image.
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8703
     This method expects an array of colors to be used for dithering
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8704
     (which need not be a colorCubes colors)."
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8705
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8706
    |pseudoBits
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8707
     rgbBytes
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8708
     ditherRGBBytes ditherColors
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8709
     w       "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8710
     h       "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8711
     index   "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8712
     numR    "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8713
     numG    "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8714
     numB    "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8715
     bitsR    "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8716
     bitsG    "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8717
     bitsB    "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8718
     maxBits  "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8719
     maskR    "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8720
     maskG    "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8721
     maskB    "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8722
     shR      "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8723
     shG      "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8724
     shB      "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8725
     ditherIds failed map lastColor colorsByDistance qScramble
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8726
     clrLookup lookupPos cube nCube
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8727
     dR  "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8728
     dG  "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8729
     dB  "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8730
     iR    "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8731
     iRG   "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8732
     iRGB  "{Class: SmallInteger }"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8733
     clr
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8734
     rI  "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8735
     gI  "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8736
     bI  "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8737
     maxIDX  "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8738
     subCubeColorCollection
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8739
     error
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8740
     dl "{Class: SmallInteger }"|
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8741
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8742
    self depth ~~ 8 ifTrue:[^ nil].
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8743
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8744
    "/
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8745
    "/ collect color components as integer values (for integer arithmetic)
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8746
    "/
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8747
    rgbBytes := ByteArray uninitializedNew:256 * 3.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8748
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8749
    photometric == #palette ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8750
        lastColor := colorMap size - 1
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8751
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8752
        lastColor := 255.
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8753
    ].
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8754
    index := 1.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8755
    0 to:lastColor do:[:pix |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8756
        clr := self colorFromValue:pix.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8757
        rgbBytes at:index put:(clr redByte).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8758
        rgbBytes at:index+1 put:(clr greenByte).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8759
        rgbBytes at:index+2 put:(clr blueByte).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8760
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8761
        index := index + 3.
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8762
    ].
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8763
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8764
    "/ collect valid ditherColors ...
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8765
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8766
    ditherColors := colors select:[:clr | clr notNil].
1845
6860bd2c4684 care to not use invalid ditherColors in nfloyd*
Claus Gittinger <cg@exept.de>
parents: 1815
diff changeset
  8767
    ditherColors := ditherColors select:[:clr | clr colorId notNil].
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8768
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8769
    "/ collect ditherColor components
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8770
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8771
    lastColor := ditherColors size.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8772
    ditherIds := ByteArray uninitializedNew:lastColor.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8773
    ditherRGBBytes := ByteArray uninitializedNew:(lastColor * 3).
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8774
    index := 1.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8775
    1 to:lastColor do:[:pix |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8776
        clr := ditherColors at:pix.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8777
        ditherRGBBytes at:index put:(clr redByte).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8778
        ditherRGBBytes at:index+1 put:(clr greenByte).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8779
        ditherRGBBytes at:index+2 put:(clr blueByte).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8780
        ditherIds at:pix put:clr colorId.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8781
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8782
        index := index + 3.
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8783
    ].
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8784
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8785
    "/ place the ditherColor positions into a color cube
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8786
    bitsR := 5.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8787
    bitsG := 6.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8788
    bitsB := 4.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8789
    maxBits := 6.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8790
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8791
"/    bitsR := 4.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8792
"/    bitsG := 4.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8793
"/    bitsB := 3.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8794
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8795
    numR := 1 bitShift:bitsR.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8796
    numG := 1 bitShift:bitsG.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8797
    numB := 1 bitShift:bitsB.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8798
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8799
    maskR := (numR-1) bitShift:(bitsG + bitsB).
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8800
    maskG := (numG-1) bitShift:bitsB.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8801
    maskB := numB-1.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8802
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8803
    shR := -16+bitsR+bitsG+bitsB.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8804
    shG := -16+bitsG+bitsB.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8805
    shB := -16+bitsB.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8806
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8807
    maxIDX := numR*numG*numB.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8808
    cube := Array new:maxIDX.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8809
    1 to:lastColor do:[:clrIdx |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8810
        clr := ditherColors at:clrIdx.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8811
        rI := clr scaledRed. rI := (rI bitShift:shR) bitAnd:maskR.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8812
        gI := clr scaledGreen. gI := (gI bitShift:shG) bitAnd:maskG.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8813
        bI := clr scaledBlue. bI := (bI bitShift:shB) bitAnd:maskB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8814
        index := rI + gI + bI + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8815
        subCubeColorCollection := cube at:index.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8816
        subCubeColorCollection isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8817
            subCubeColorCollection := OrderedCollection new.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8818
            cube at:index put:subCubeColorCollection.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8819
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8820
        subCubeColorCollection add:(clrIdx - 1).
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8821
    ].
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8822
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8823
    shR := 1 bitShift:(bitsG+bitsB).
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8824
    shG := 1 bitShift:(bitsB).
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8825
    shB := 1.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8826
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8827
    1 to:maxIDX do:[:i |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8828
        subCubeColorCollection := cube at:i.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8829
        subCubeColorCollection notNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8830
            cube at:i put:(subCubeColorCollection asByteArray)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8831
        ]
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8832
    ].
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8833
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8834
"/    nCube := cube copy.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8835
"/
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8836
"/    cube keysAndValuesDo:[:i :indices |
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8837
"/        indices notNil ifTrue:[
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8838
"/            nCube at:i put:(indices asByteArray)
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8839
"/        ] ifFalse:[
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8840
"/            "/ find nearest color
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8841
"/
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8842
"/            dl := 1.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8843
"/            [dl < maxBits] whileTrue:[
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8844
"/                dR := dl negated.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8845
"/                [dR <= dl] whileTrue:[
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8846
"/                    iR := i + (dR * shR).
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8847
"/                    (iR > 0 and:[iR < maxIDX]) ifTrue:[
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8848
"/                        dG := dl negated.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8849
"/                        [dG < dl] whileTrue:[
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8850
"/                            iRG := iR + (dG * shG).
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8851
"/                            (iRG > 0 and:[iRG < maxIDX]) ifTrue:[
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8852
"/                                dB := dl negated.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8853
"/                                [dB < dl] whileTrue:[
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8854
"/                                    iRGB := iRG + dB.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8855
"/                                    (iRG > 0 and:[iRG < maxIDX]) ifTrue:[
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8856
"/                                        (cube at:iRGB) notNil ifTrue:[
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8857
"/                                            nCube at:i put:(cube at:iRGB).
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8858
"/                                            dB := dG := dR := dl := 999.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8859
"/                                        ]
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8860
"/                                    ].
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8861
"/                                    dB := dB + 1.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8862
"/                                ]
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8863
"/                            ].
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8864
"/                            dG := dG + 1.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8865
"/                        ]
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8866
"/                    ].
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8867
"/                    dR := dR + 1.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8868
"/                ].
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8869
"/                dl := dl + 1.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8870
"/            ]
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8871
"/        ]
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8872
"/    ].
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8873
"/self halt.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8874
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8875
    "/ now, cube contains collections of colors which are
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8876
    "/ positioned in a subCube; quickly accessed by a lookup
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8877
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8878
    pseudoBits := ByteArray uninitializedNew:(width * height).
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8879
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8880
    w := width.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8881
    h := height.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8882
    error := ByteArray new:(w+2)*3*2.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8883
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8884
%{
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8885
#define BITSR   5
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8886
#define BITSG   6
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8887
#define BITSB   4
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8888
#define MAXBITS 6
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8889
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8890
#define xBITSR   4
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8891
#define xBITSG   4
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8892
#define xBITSB   3
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8893
#define xMAXBITS 4
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8894
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8895
#define NR      32 /* (1<<BITSR) */
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8896
#define NG      64 /* (1<<BITSG) */
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8897
#define NB      16 /* (1<<BITSB) */
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8898
#define MAXRGB  64 /* (1<<MAXBITS) */
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8899
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8900
#define SHR     (BITSG+BITSB)
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8901
#define SHG     BITSB
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8902
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8903
#define REMEMBER_SEARCH
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8904
#define xNO_FLOYD_STEINBERG
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8905
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8906
    int __x, __y;
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8907
    int __eR, __eG, __eB;
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8908
    unsigned char *srcP, *dstP;
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8909
    unsigned char *rgbP;
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8910
    unsigned char *idP;
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8911
    short *errP, *eP;
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8912
    int __fR, __fG, __fB;
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8913
    int idx;
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8914
    int __w = __intVal(w);
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8915
    int __h = __intVal(h);
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8916
    int __nColors = __intVal(lastColor);
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8917
    int __wR = -1, __wG, __wB;
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8918
    OBJ *__cube;
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8919
    int cubeIndex, cubeIndex2;
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8920
5476
06e08505bc6f __isByteArray() to __isByteArrayLike() in primitive code
Stefan Vogel <sv@exept.de>
parents: 5352
diff changeset
  8921
    if (__isByteArrayLike(__INST(bytes))
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8922
     && __isByteArray(pseudoBits)
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8923
     && __isByteArray(rgbBytes)
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8924
     && __isByteArray(ditherRGBBytes)
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8925
     && __isByteArray(ditherIds)
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8926
     && __isByteArray(error)) {
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8927
        failed = false;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8928
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8929
        srcP = __ByteArrayInstPtr(__INST(bytes))->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8930
        dstP = __ByteArrayInstPtr(pseudoBits)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8931
        rgbP = __ByteArrayInstPtr(rgbBytes)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8932
        idP = __ByteArrayInstPtr(ditherIds)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8933
        errP = (short *) __ByteArrayInstPtr(error)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8934
        __cube = __ArrayInstPtr(cube)->a_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8935
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8936
        eP = errP;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8937
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8938
        for (__y=__h; __y>0; __y--) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8939
            eP = &(errP[3]);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8940
            __eR = eP[0];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8941
            __eG = eP[1];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8942
            __eB = eP[2];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8943
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8944
            for (__x=__w; __x>0; __x--) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8945
                int __want;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8946
                int pix;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8947
                int __wantR, __wantG, __wantB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8948
                int idx;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8949
                int tR, tG, tB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8950
                int nR, nG, nB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8951
                int __dR, __dG, __dB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8952
                int minDelta, bestIdx;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8953
                int __iR, __iG, __iB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8954
                int cR, cG, cB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8955
                int delta;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8956
                OBJ subCubeColors;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8957
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8958
                pix = *srcP++;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8959
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8960
                /*
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8961
                 * wR, wG and wB is the wanted r/g/b value;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8962
                 */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8963
                idx = pix+pix+pix;  /* pix * 3 */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8964
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8965
                __wR = __wantR = rgbP[idx] + __eR;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8966
                __wG = __wantG = rgbP[idx+1] + __eG;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8967
                __wB = __wantB = rgbP[idx+2] + __eB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8968
                if(__wR > 255) __wR = 255;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8969
                else if (__wR < 0) __wR = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8970
                if(__wG > 255) __wG = 255;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8971
                else if (__wG < 0) __wG = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8972
                if(__wB > 255) __wB = 255;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8973
                else if (__wB < 0) __wB = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8974
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8975
                __iR = __wR >> (8-BITSR);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8976
                __iG = __wG >> (8-BITSG);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8977
                __iB = __wB >> (8-BITSB);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8978
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8979
                cubeIndex = (__iR<<SHR) + (__iG<<SHG) + __iB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8980
                subCubeColors = __cube[cubeIndex];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8981
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8982
                if (subCubeColors == nil) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8983
                    /* search around in spirals, for the first match */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8984
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8985
                    delta = 1;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8986
                    while (delta < MAXRGB) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8987
                        /* check plane above */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8988
                        cR = __iR + delta;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8989
                        if ((unsigned)cR < NR) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8990
                            for (cG=__iG-delta; cG<=__iG+delta; cG++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8991
                                if ((unsigned)cG < NG) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8992
                                    for (cB=__iB-delta; cB<=__iB+delta; cB++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8993
                                        if ((unsigned)cB < NB) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8994
                                            cubeIndex2 = (cR<<SHR) + (cG<<SHG) + cB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8995
                                            subCubeColors = __cube[cubeIndex2];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8996
                                            if (__isNonNilObject(subCubeColors)) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8997
                                                goto found;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8998
                                            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8999
                                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9000
                                    }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9001
                                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9002
                            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9003
                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9004
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9005
                        /* check plane below */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9006
                        cR = __iR - delta;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9007
                        if ((unsigned)cR < NR) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9008
                            for (cG=__iG-delta; cG<=__iG+delta; cG++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9009
                                if ((unsigned)cG < NG) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9010
                                    for (cB=__iB-delta; cB<=__iB+delta; cB++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9011
                                        if ((unsigned)cB < NB) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9012
                                            cubeIndex2 = (cR<<SHR) + (cG<<SHG) + cB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9013
                                            subCubeColors = __cube[cubeIndex2];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9014
                                            if (__isNonNilObject(subCubeColors)) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9015
                                                goto found;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9016
                                            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9017
                                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9018
                                    }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9019
                                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9020
                            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9021
                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9022
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9023
                        /* check plane to the right */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9024
                        cG = __iG + delta;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9025
                        if ((unsigned)cG < NG) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9026
                            for (cR=__iR-delta+1; cR<=__iR+delta-1; cR++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9027
                                if ((unsigned)cR < NR) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9028
                                    for (cB=__iB-delta; cB<=__iB+delta; cB++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9029
                                        if ((unsigned)cB < NB) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9030
                                            cubeIndex2 = (cR<<SHR) + (cG<<SHG) + cB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9031
                                            subCubeColors = __cube[cubeIndex2];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9032
                                            if (__isNonNilObject(subCubeColors)) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9033
                                                goto found;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9034
                                            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9035
                                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9036
                                    }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9037
                                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9038
                            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9039
                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9040
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9041
                        /* check plane to the left */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9042
                        cG = __iG - delta;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9043
                        if ((unsigned)cG < NG) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9044
                            for (cR=__iR-delta+1; cR<=__iR+delta-1; cR++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9045
                                if ((unsigned)cR < NR) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9046
                                    for (cB=__iB-delta; cB<=__iB+delta; cB++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9047
                                        if ((unsigned)cB < NB) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9048
                                            cubeIndex2 = (cR<<SHR) + (cG<<SHG) + cB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9049
                                            subCubeColors = __cube[cubeIndex2];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9050
                                            if (__isNonNilObject(subCubeColors)) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9051
                                                goto found;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9052
                                            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9053
                                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9054
                                    }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9055
                                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9056
                            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9057
                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9058
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9059
                        /* check plane at back */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9060
                        cB = __iB + delta;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9061
                        if ((unsigned)cB < NB) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9062
                            for (cR=__iR-delta+1; cR<=(__iR+delta-1); cR++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9063
                                if ((unsigned)cR < NR) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9064
                                    for (cG=__iG-delta+1; cG<=(__iG+delta-1); cG++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9065
                                        if ((unsigned)cG < NG) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9066
                                            cubeIndex2 = (cR<<SHR) + (cG<<SHG) + cB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9067
                                            subCubeColors = __cube[cubeIndex2];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9068
                                            if (__isNonNilObject(subCubeColors)) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9069
                                                goto found;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9070
                                            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9071
                                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9072
                                    }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9073
                                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9074
                            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9075
                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9076
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9077
                        /* check plane at front */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9078
                        cB = __iB - delta;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9079
                        if ((unsigned)cB < NB) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9080
                            for (cR=__iR-delta+1; cR<=(__iR+delta-1); cR++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9081
                                if ((unsigned)cR < NR) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9082
                                    for (cG=__iG-delta+1; cG<=(__iG+delta-1); cG++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9083
                                        if ((unsigned)cG < NG) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9084
                                            cubeIndex2 = (cR<<SHR) + (cG<<SHG) + cB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9085
                                            subCubeColors = __cube[cubeIndex2];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9086
                                            if (__isNonNilObject(subCubeColors)) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9087
                                                goto found;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9088
                                            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9089
                                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9090
                                    }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9091
                                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9092
                            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9093
                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9094
                        delta = delta + 1;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9095
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9096
                    }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9097
                    /* cannot happen - will lead to a segmentation violation ... */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9098
                    subCubeColors = nil;
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9099
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9100
    found:
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9101
                    __iR = cR;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9102
                    __iG = cG;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9103
                    __iB = cB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9104
                    bestIdx = __ByteArrayInstPtr(subCubeColors)->ba_element[0];
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9105
#ifdef REMEMBER_SEARCH
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9106
                    __cube[cubeIndex] = __MKSMALLINT(bestIdx);
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9107
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9108
                } else {
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9109
#ifdef REMEMBER_SEARCH
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9110
                    if (__isSmallInteger(subCubeColors)) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9111
                        bestIdx = __intVal(subCubeColors);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9112
                    } else
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9113
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9114
                    {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9115
                        bestIdx = __ByteArrayInstPtr(subCubeColors)->ba_element[0];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9116
                    }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9117
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9118
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9119
                /*
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9120
                 * ok, now, we have found a collection of nearby
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9121
                 * colors in subCubeColors.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9122
                 *
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9123
                 * since the error is at most 1/16 (i.e. roughly 6%),
7659
01fe20eef85d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7640
diff changeset
  9124
                 * don't care for searching the best - simply take the
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9125
                 * first color found there.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9126
                 * (statistic reduces the error to even a smaller value).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9127
                 * There is no real problem due to that error, since
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9128
                 * it will be diffused anyway ...
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9129
                 */
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9130
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9131
#ifndef NO_FLOYD_STEINBERG
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9132
                {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9133
                    unsigned char *dp;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9134
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9135
                    /*
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9136
                     * fetch that colors r/g/b components
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9137
                     */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9138
                    dp = __ByteArrayInstPtr(ditherRGBBytes)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9139
                    dp += bestIdx * 3;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9140
                    __dR = dp[0];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9141
                    __dG = dp[1];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9142
                    __dB = dp[2];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9143
                }
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9144
#endif
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9145
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9146
/*
4725
c8896df7bd3f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4717
diff changeset
  9147
console_fprintf(stderr, "want: %d/%d/%d (%d/%d/%d) got: %d/%d/%d\n",
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9148
                __wantR, __wantG, __wantB,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9149
                __wR, __wG, __wB,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9150
                __dR, __dG, __dB);
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9151
*/
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9152
                /*
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9153
                 * store the corresponding dither colors colorId
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9154
                 */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9155
                *dstP++ = idP[bestIdx];
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9156
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9157
#ifndef NO_FLOYD_STEINBERG
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9158
                /*
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9159
                 * the new error & distribute the error
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9160
                 */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9161
                __eR = __wantR - __dR;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9162
                if (__eR) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9163
                    tR = __eR >> 4;  /* 16th of error */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9164
                    nR = eP[3] + (tR * 7);/* from accu: error for (x+1 / y) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9165
                    eP[0] = tR*5;         /* 5/16th for (x / y+1) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9166
                    eP[-3] = tR*3;        /* 3/16th for (x-1 / y+1) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9167
                    eP[3] = __eR - (tR*15);  /* 1/16th for (x+1 / y+1) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9168
                    __eR = nR;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9169
                } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9170
                    __eR = eP[3];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9171
                    eP[0] = eP[-3] = eP[3] = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9172
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9173
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9174
                __eG = __wantG - __dG;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9175
                if (__eG) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9176
                    tG = __eG >> 4;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9177
                    nG = eP[4] + (tG * 7);/* plus 7/16'th of this error */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9178
                    eP[1] = tG*5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9179
                    eP[-2] = tG*3;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9180
                    eP[4] = __eG - (tG*15);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9181
                    __eG = nG;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9182
                } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9183
                    __eG = eP[4];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9184
                    eP[1] = eP[-2] = eP[4] = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9185
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9186
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9187
                __eB = __wantB - __dB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9188
                if (__eB) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9189
                    tB = __eB >> 4;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9190
                    nB = eP[5] + (tB * 7);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9191
                    eP[2] = tB*5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9192
                    eP[-1] = tB*3;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9193
                    eP[5] = __eB - (tB*15);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9194
                    __eB = nB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9195
                } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9196
                    __eB = eP[5];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9197
                    eP[2] = eP[-1] = eP[5] = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9198
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9199
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9200
                eP += 3;
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9201
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9202
            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9203
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9204
            /*
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9205
             * allow for an interrupt after every row.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9206
             * but care to refetch C variables
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9207
             */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9208
            if (InterruptPending) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9209
                int d_srcP = srcP - __ByteArrayInstPtr(__INST(bytes))->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9210
                int d_dstP = dstP - __ByteArrayInstPtr(pseudoBits)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9211
                int d_errP = errP - (short *) __ByteArrayInstPtr(error)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9212
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9213
                __interrupt__();
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9214
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9215
                srcP = __ByteArrayInstPtr(__INST(bytes))->ba_element + d_srcP;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9216
                dstP = __ByteArrayInstPtr(pseudoBits)->ba_element + d_dstP;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9217
                rgbP = __ByteArrayInstPtr(rgbBytes)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9218
                idP = __ByteArrayInstPtr(ditherIds)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9219
                errP = (short *) __ByteArrayInstPtr(error)->ba_element + d_errP;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9220
                __cube = __ArrayInstPtr(cube)->a_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9221
            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9222
        }
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9223
    }
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9224
%}.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9225
    failed ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9226
        self primitiveFailed.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9227
        ^ nil
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9228
    ].
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9229
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9230
    ^ pseudoBits
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9231
!
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9232
1782
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  9233
orderedDitheredGrayBitsDepth:depth
861
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
  9234
    "return the bitmap for a dithered depth-bitmap from the image"
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
  9235
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
  9236
    ^ self
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9237
        orderedDitheredGrayBitsWithDitherMatrix:(self class orderedDitherMatrixOfSize:8)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9238
        ditherWidth:8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9239
        depth:depth.
1782
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  9240
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  9241
    "Created: 24.6.1997 / 22:20:12 / cg"
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  9242
!
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  9243
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  9244
orderedDitheredGrayBitsWithDitherMatrix:ditherMatrix ditherWidth:dW depth:depth
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9245
    "return the bitmap for a dithered depth-bitmap from the image;
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9246
     with a constant ditherMatrix, this can be used for thresholding.
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  9247
     Works for any source depths / photometric,
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9248
     but very very slow since each pixel is processed individually.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9249
     Redefined by some subclasses for more performance (D8Image)"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9250
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  9251
    |dH nDither
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9252
     greyLevels greyValues greyPixels greyErrors
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9253
     dstIndex        "{Class: SmallInteger }"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  9254
     nextDst
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9255
     bytesPerOutRow  "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9256
     pixelsPerByte   "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9257
     outBits
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9258
     w               "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9259
     h               "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9260
     bitCnt          "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9261
     byte            "{Class: SmallInteger }" |
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9262
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9263
    depth > 8 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9264
        'IMAGE: unimplemented orderedDither conversion' errorPrintCR.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9265
        ^ nil
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9266
    ].
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9267
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9268
    nDither := ditherMatrix size.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9269
    dH := nDither / dW.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9270
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9271
    w := width.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9272
    h := height.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9273
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9274
    greyLevels := 1 bitShift:depth.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9275
    pixelsPerByte := 8 / depth.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9276
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9277
    bytesPerOutRow := (w * depth + 7) // 8.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9278
    outBits := ByteArray uninitializedNew:(bytesPerOutRow * h).
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9279
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9280
    dstIndex := 1.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9281
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9282
    self bitsPerPixel <= 12 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9283
        "/ fetch scaled brightness values outside of loop into a table;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9284
        "/ use table-value in loop
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9285
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9286
        greyValues := self greyMapForRange:(greyLevels-1).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9287
        greyPixels := greyValues collect:[:v | v isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9288
                                                   0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9289
                                               ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9290
                                                   v truncated]].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9291
        greyPixels := ByteArray withAll:greyPixels.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9292
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9293
        greyErrors := greyValues collect:[:v | v isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9294
                                                   0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9295
                                               ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9296
                                                   ((v - v truncated) * nDither) rounded
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9297
                                               ]].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9298
        greyErrors := ByteArray withAll:greyErrors.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9299
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9300
        0 to:(h-1) do:[:y |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9301
            nextDst := dstIndex + bytesPerOutRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9302
            byte := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9303
            bitCnt := 8.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9304
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9305
            self valuesAtY:y from:0 to:(w-1) do:[:x :value |
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9306
%{
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9307
                int __dW = __intVal(dW);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9308
                int __byte = __intVal(byte);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9309
                /* Note: __value is reserved in Visual C++ 8 (2005) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9310
                int __val = __intVal(value);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9311
                int __dT;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9312
                int __dstIdx;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9313
                int __pixel, __grey;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9314
                int __bitCnt = __intVal(bitCnt);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9315
                unsigned char *__greyPixels = __ByteArrayInstPtr(greyPixels)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9316
                unsigned char *__greyErrors = __ByteArrayInstPtr(greyErrors)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9317
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9318
                __pixel = __greyPixels[__val];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9319
                __grey = __greyErrors[__val];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9320
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9321
                __dT = __ByteArrayInstPtr(ditherMatrix)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9322
                            ->ba_element[__intVal(x) % __dW
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9323
                                         + (__intVal(y) % __intVal(dH)) * __dW];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9324
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9325
                if (__grey > __dT) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9326
                    __pixel++;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9327
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9328
                __byte = (__byte << __intVal(depth)) | __pixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9329
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9330
                __bitCnt = __bitCnt - __intVal(depth);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9331
                if (__bitCnt == 0) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9332
                    __dstIdx = __intVal(dstIndex);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9333
                    __ByteArrayInstPtr(outBits)->ba_element[__dstIdx-1] = __byte;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9334
                    __dstIdx = __dstIdx + 1;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9335
                    dstIndex = __MKSMALLINT(__dstIdx);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9336
                    __byte = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9337
                    __bitCnt = 8;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9338
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9339
                byte = __MKSMALLINT(__byte);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9340
                bitCnt = __MKSMALLINT(__bitCnt);
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9341
%}.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9342
                0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9343
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9344
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9345
            bitCnt ~~ 8 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9346
                byte := byte bitShift:bitCnt.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9347
                outBits at:dstIndex put:byte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9348
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9349
            dstIndex := nextDst.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9350
        ].
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9351
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9352
        'Image [info]: slow ordered dither ..' infoPrintCR.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9353
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9354
        0 to:(h-1) do:[:y |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9355
            nextDst := dstIndex + bytesPerOutRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9356
            byte := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9357
            bitCnt := 8.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9358
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9359
            "/ this is the representaion independent (but slow)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9360
            "/ inner loop - it extracts colors from the receiver
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9361
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9362
            self colorsAtY:y from:0 to:(w-1) do:[:x :clr |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9363
                |dstClr grey dT pixel|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9364
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9365
                "/ get the colors grey value [0 .. 1]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9366
                grey := clr brightness.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9367
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9368
                "/ remap into [0 .. greyLevels-1]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9369
                grey := grey * (greyLevels-1).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9370
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9371
                "/ get threshold pixel [0 .. greyLevels-1]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9372
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9373
                pixel := grey truncated.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9374
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9375
                "/ compute the error [0..1]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9376
                grey := grey - pixel.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9377
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9378
                "/ map into dither space [0 .. nDither]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9379
                grey := (grey * (nDither)) rounded.
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9380
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9381
%{
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9382
                int __dW = __intVal(dW);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9383
                int __byte = __intVal(byte);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9384
                int __dT;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9385
                int __dstIdx;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9386
                int __pixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9387
                int __bitCnt = __intVal(bitCnt);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9388
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9389
                __dT = __ByteArrayInstPtr(ditherMatrix)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9390
                            ->ba_element[__intVal(x) % __dW
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9391
                                         + (__intVal(y) % __intVal(dH)) * __dW];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9392
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9393
                __pixel = __intVal(pixel);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9394
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9395
                if (__intVal(grey) > __dT) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9396
                    __pixel++;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9397
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9398
                __byte = (__byte << __intVal(depth)) | __pixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9399
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9400
                __bitCnt = __bitCnt - __intVal(depth);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9401
                if (__bitCnt == 0) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9402
                    __dstIdx = __intVal(dstIndex);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9403
                    __ByteArrayInstPtr(outBits)->ba_element[__dstIdx-1] = __byte;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9404
                    __dstIdx = __dstIdx + 1;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9405
                    dstIndex = __MKSMALLINT(__dstIdx);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9406
                    __byte = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9407
                    __bitCnt = 8;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9408
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9409
                byte = __MKSMALLINT(__byte);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9410
                bitCnt = __MKSMALLINT(__bitCnt);
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9411
%}.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9412
                0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9413
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9414
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9415
            bitCnt ~~ 8 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9416
                byte := byte bitShift:bitCnt.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9417
                outBits at:dstIndex put:byte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9418
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9419
            dstIndex := nextDst.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9420
        ].
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9421
    ].
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9422
    ^ outBits
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9423
!
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9424
831
ceb4e9f32262 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  9425
orderedDitheredMonochromeBits
ceb4e9f32262 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  9426
    "return the bitmap for a dithered monochrome bitmap from the image;
ceb4e9f32262 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  9427
     using a default ditherMatrix."
ceb4e9f32262 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  9428
ceb4e9f32262 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  9429
    ^ self
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9430
        orderedDitheredMonochromeBitsWithDitherMatrix:(self class orderedDitherMatrixOfSize:8)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9431
        ditherWidth:8
831
ceb4e9f32262 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  9432
ceb4e9f32262 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  9433
    "Created: 11.6.1996 / 16:48:57 / cg"
ceb4e9f32262 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  9434
!
ceb4e9f32262 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  9435
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9436
orderedDitheredMonochromeBitsWithDitherMatrix:ditherMatrix ditherWidth:dW
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9437
    "return the bitmap for a dithered monochrome bitmap from the image;
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9438
     with a constant ditherMatrix, this can be used for thresholding.
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  9439
     Works for any source depths / photometric,
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9440
     but very very slow since each pixel is processed individually.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9441
     Redefined by some subclasses for more performance (D8Image)"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9442
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  9443
    |dH nDither
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9444
     greyValues
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9445
     dstIndex        "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9446
     nextDst         "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9447
     bytesPerMonoRow "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9448
     monoBits
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9449
     w               "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9450
     h               "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9451
     bitCnt          "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9452
     byte            "{Class: SmallInteger }" |
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9453
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9454
    nDither := ditherMatrix size.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9455
    dH := nDither / dW.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9456
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9457
    w := width.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9458
    h := height.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9459
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9460
    bytesPerMonoRow := (w + 7) // 8.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9461
    monoBits := ByteArray uninitializedNew:(bytesPerMonoRow * h).
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9462
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9463
    dstIndex := 1.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9464
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9465
    self bitsPerPixel <= 12 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9466
        "/ fetch scaled brightness values outside of loop into a table;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9467
        "/ use table-value in loop
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9468
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9469
        greyValues := self greyByteMapForRange:nDither.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9470
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9471
        0 to:(h-1) do:[:y |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9472
            nextDst := dstIndex + bytesPerMonoRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9473
            byte := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9474
            bitCnt := 8.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9475
            self valuesAtY:y from:0 to:(w-1) do:[:x :value |
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9476
%{
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9477
                int __dW = __intVal(dW);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9478
                int __byte = __intVal(byte);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9479
                int __dT;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9480
                int __dstIdx;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9481
                int __bitCnt = __intVal(bitCnt);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9482
                int __grey;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9483
                unsigned char *__greyValues = __ByteArrayInstPtr(greyValues)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9484
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9485
                __grey = __greyValues[__intVal(value)];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9486
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9487
                __dT = __ByteArrayInstPtr(ditherMatrix)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9488
                            ->ba_element[__intVal(x) % __dW
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9489
                                         + (__intVal(y) % __intVal(dH)) * __dW];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9490
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9491
                __byte = __byte << 1;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9492
                if (__grey > __dT) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9493
                    __byte = __byte | 1;            /* white */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9494
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9495
                __bitCnt = __bitCnt - 1;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9496
                if (__bitCnt == 0) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9497
                    __dstIdx = __intVal(dstIndex);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9498
                    __ByteArrayInstPtr(monoBits)->ba_element[__dstIdx-1] = __byte;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9499
                    __dstIdx = __dstIdx + 1;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9500
                    dstIndex = __MKSMALLINT(__dstIdx);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9501
                    __byte = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9502
                    __bitCnt = 8;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9503
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9504
                byte = __MKSMALLINT(__byte);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9505
                bitCnt = __MKSMALLINT(__bitCnt);
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9506
%}.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9507
                0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9508
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9509
            bitCnt ~~ 8 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9510
                byte := byte bitShift:bitCnt.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9511
                monoBits at:dstIndex put:byte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9512
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9513
            dstIndex := nextDst.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9514
        ].
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9515
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9516
        'Image [info]: slow ordered dither ..' infoPrintCR.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9517
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9518
        0 to:(h-1) do:[:y |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9519
            nextDst := dstIndex + bytesPerMonoRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9520
            byte := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9521
            bitCnt := 8.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9522
            self colorsAtY:y from:0 to:(w-1) do:[:x :clr |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9523
                |dstClr grey dT|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9524
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9525
                "/ get the colors grey value [0 .. 1]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9526
                grey := clr brightness.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9527
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9528
                "/ map into dither space [0 .. nDither]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9529
                grey := (grey * (nDither)) rounded.
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9530
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9531
%{
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9532
                int __dW = __intVal(dW);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9533
                int __byte = __intVal(byte);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9534
                int __dT;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9535
                int __dstIdx;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9536
                int __bitCnt = __intVal(bitCnt);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9537
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9538
                __dT = __ByteArrayInstPtr(ditherMatrix)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9539
                            ->ba_element[__intVal(x) % __dW
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9540
                                         + (__intVal(y) % __intVal(dH)) * __dW];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9541
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9542
                __byte = __byte << 1;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9543
                if (__intVal(grey) > __dT) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9544
                    __byte = __byte | 1;            /* white */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9545
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9546
                __bitCnt = __bitCnt - 1;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9547
                if (__bitCnt == 0) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9548
                    __dstIdx = __intVal(dstIndex);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9549
                    __ByteArrayInstPtr(monoBits)->ba_element[__dstIdx-1] = __byte;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9550
                    __dstIdx = __dstIdx + 1;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9551
                    dstIndex = __MKSMALLINT(__dstIdx);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9552
                    __byte = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9553
                    __bitCnt = 8;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9554
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9555
                byte = __MKSMALLINT(__byte);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9556
                bitCnt = __MKSMALLINT(__bitCnt);
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9557
%}.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9558
                0
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9559
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9560
"/                dT := ditherMatrix at:(x \\ dW) + (y \\ dH * dW) + 1.
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  9561
"/
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9562
"/                byte := byte bitShift:1.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9563
"/                grey < dT ifTrue:[
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9564
"/                    byte := byte bitOr:1.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9565
"/                ].
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9566
"/                bitCnt := bitCnt - 1.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9567
"/                bitCnt == 0 ifTrue:[
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9568
"/                    monoBits at:dstIndex put:byte.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9569
"/                    dstIndex := dstIndex + 1.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9570
"/                    byte := 0.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9571
"/                    bitCnt := 8.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9572
"/                ].
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9573
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9574
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9575
            bitCnt ~~ 8 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9576
                byte := byte bitShift:bitCnt.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9577
                monoBits at:dstIndex put:byte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9578
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9579
            dstIndex := nextDst.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9580
        ].
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9581
    ].
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9582
    ^ monoBits
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9583
!
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9584
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9585
stevensonArceDitheredMonochromeBits
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9586
    "return the bitmap for a dithered monochrome bitmap from the image.
6311
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
  9587
     Works for any source depths / photometric.
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
  9588
     TODO: move to separate dither helper class"
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9589
1063
ba1bf8091bc1 unused variable cleanup
Claus Gittinger <cg@exept.de>
parents: 1057
diff changeset
  9590
    |dstIndex        "{Class: SmallInteger }"
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9591
     nextDst         "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9592
     bytesPerMonoRow "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9593
     monoBits greyValues
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9594
     errorArray
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9595
     errorArray1 errorArray2 errorArray3
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9596
     e t
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9597
     w               "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9598
     h               "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9599
     bitCnt          "{Class: SmallInteger }"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  9600
     byte            "{Class: SmallInteger }"
1063
ba1bf8091bc1 unused variable cleanup
Claus Gittinger <cg@exept.de>
parents: 1057
diff changeset
  9601
     grey
ba1bf8091bc1 unused variable cleanup
Claus Gittinger <cg@exept.de>
parents: 1057
diff changeset
  9602
     xE              "{Class: SmallInteger }" |
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9603
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9604
    self depth > 12 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9605
        ^ self floydSteinbergDitheredMonochromeBits
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9606
    ].
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9607
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9608
    w := width.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9609
    h := height.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9610
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9611
    bytesPerMonoRow := (w + 7) // 8.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9612
    monoBits := ByteArray uninitializedNew:(bytesPerMonoRow * h).
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9613
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9614
    errorArray := Array new:(w+6).
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9615
    errorArray1 := Array new:(w+6) withAll:0.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9616
    errorArray2 := Array new:(w+6) withAll:0.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9617
    errorArray3 := Array new:(w+6) withAll:0.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9618
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9619
    dstIndex := 1.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9620
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9621
    "/ fetch scaled brightness values outside of loop into a table;
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9622
    "/ use table-value in loop
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9623
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9624
    greyValues := self greyMapForRange:(255 * 1024).
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  9625
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9626
    0 to:(h-1) do:[:y |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9627
        nextDst := dstIndex + bytesPerMonoRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9628
        byte := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9629
        bitCnt := 8.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9630
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9631
        t := errorArray.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9632
        errorArray := errorArray1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9633
        errorArray1 := errorArray2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9634
        errorArray2 := errorArray3.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9635
        errorArray3 := t.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9636
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9637
        errorArray3 atAllPut:0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9638
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9639
        self valuesAtY:y from:0 to:(w-1) do:[:x :pixel |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9640
            |eP eD|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9641
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9642
            "/ get the colors grey value [0 .. 1]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9643
            grey := greyValues at:(pixel + 1).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9644
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9645
            "/ adjust error
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9646
            xE := x + 3 + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9647
            grey := (grey + (errorArray at:xE)).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9648
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9649
            byte := byte bitShift:1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9650
            grey > (127 * 1024) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9651
                byte := byte bitOr:1.      "/ white
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9652
                e := grey - (255 * 1024)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9653
            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9654
                e := grey                  "/ black
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9655
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9656
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9657
            e ~= 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9658
                "/ distribute the error:
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9659
                "/                  XX    32
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9660
                "/         12    26    30    16
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9661
                "/            12    26    12
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9662
                "/          5    12    12     5
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9663
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9664
                eD := e.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9665
                e := e // 200.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9666
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9667
                eP := e * 32. eD := eD - eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9668
                errorArray at:xE+2 put:(errorArray at:xE+2) + eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9669
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9670
                eP := e * 30. eD := eD - eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9671
                errorArray1 at:xE+1 put:(errorArray1 at:xE+1) + eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9672
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9673
                eP := e * 16. eD := eD - eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9674
                errorArray1 at:xE+3 put:(errorArray1 at:xE+3) + eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9675
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9676
                eP := e * 26. eD := eD - eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9677
                errorArray1 at:xE-1 put:(errorArray1 at:xE-1) + eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9678
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9679
                eD := eD - eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9680
                errorArray2 at:xE put:(errorArray2 at:xE) + eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9681
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9682
                eP := e * 12. eD := eD - eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9683
                errorArray1 at:xE-3 put:(errorArray1 at:xE-3) + eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9684
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9685
                eD := eD - eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9686
                errorArray2 at:xE-2 put:(errorArray2 at:xE-2) + eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9687
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9688
                eD := eD - eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9689
                errorArray2 at:xE+2 put:(errorArray2 at:xE+2) + eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9690
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9691
                eD := eD - eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9692
                errorArray3 at:xE-1 put:(errorArray3 at:xE-1) + eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9693
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9694
                eD := eD - eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9695
                errorArray3 at:xE+1 put:(errorArray3 at:xE+1) + eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9696
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9697
                eP := e * 5. eD := eD - eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9698
                errorArray3 at:xE-3 put:(errorArray3 at:xE-3) + eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9699
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9700
                eP := eD.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9701
                errorArray3 at:xE+3 put:(errorArray3 at:xE+3) + eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9702
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9703
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9704
            bitCnt := bitCnt - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9705
            bitCnt == 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9706
                monoBits at:dstIndex put:byte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9707
                dstIndex := dstIndex + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9708
                byte := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9709
                bitCnt := 8.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9710
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9711
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9712
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9713
        bitCnt ~~ 8 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9714
            byte := byte bitShift:bitCnt.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9715
            monoBits at:dstIndex put:byte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9716
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9717
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9718
        dstIndex := nextDst.
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9719
    ].
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9720
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9721
    ^ monoBits
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9722
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9723
    "Created: 10.6.1996 / 12:38:35 / cg"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9724
    "Modified: 10.6.1996 / 12:52:20 / cg"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9725
! !
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9726
861
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
  9727
!Image methodsFor:'drawing'!
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
  9728
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
  9729
displayArcOrigin:origin corner:corner from:startAngle angle:angle withColor:aColor
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
  9730
    "draw a circle with some pixel value.
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
  9731
     By using a tempForm, we assure that the same pixel algorithm is used as in a window"
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
  9732
5138
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9733
    self displayArcOrigin:origin corner:corner from:startAngle angle:angle withValue:(self valueFromColor:aColor)
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9734
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9735
    "
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9736
     |cm i|
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9737
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9738
     cm :=  Array with:Color white with:Color black with:Color red.
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9739
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9740
     i := Depth8Image extent:300@400 depth:8 palette:cm.
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 6037
diff changeset
  9741
     i displayArcOrigin:100@100 corner:200@200 from:0 angle:90 withColor:Color red.
5138
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9742
     i inspect.
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9743
    "
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9744
!
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9745
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9746
displayArcOrigin:origin corner:corner from:startAngle angle:angle withValue:aPixelValueOrNil
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9747
    "draw a circle with some pixel value.
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9748
     By using a tempForm, we assure that the same pixel algorithm is used as in a window.
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9749
     If aPixelValueOrNil is nil, the mask pixel will be set to 0 (transparent),
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9750
     otherwise to 1. (used by the bitmap editor)"
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9751
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
  9752
    |tempForm wI "{ Class: SmallInteger }"
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
  9753
     hI "{ Class: SmallInteger }" tempImage|
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
  9754
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
  9755
    wI := self width.
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
  9756
    hI := self height.
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
  9757
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
  9758
    tempForm := Form width:wI height:hI depth:1 onDevice:Screen current.
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  9759
    tempForm
7480
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
  9760
        paint:(Color colorId:1) on:(Color colorId:0);
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
  9761
        clear.
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
  9762
    tempForm displayArcOrigin:origin corner:corner from:startAngle angle:angle.
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
  9763
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
  9764
    tempImage := tempForm asImage.
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
  9765
    0 to:hI-1 do:[:yRun|
7480
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
  9766
        0 to:wI-1 do:[:xRun|
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
  9767
            (tempImage pixelAtX:xRun y:yRun) == 1 ifTrue:[
7480
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
  9768
                self atImageAndMask:xRun@yRun putValue:aPixelValueOrNil.
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
  9769
            ].
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
  9770
        ].
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
  9771
    ].
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
  9772
    tempForm destroy.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
  9773
    tempImage close.
5352
82a42045e996 changed:8 methods
Claus Gittinger <cg@exept.de>
parents: 5341
diff changeset
  9774
    self release. "/ device-image is no longer valid
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
  9775
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
  9776
    "
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
  9777
     |cm i|
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
  9778
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
  9779
     cm :=  Array with:Color white with:Color black with:Color red.
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
  9780
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
  9781
     i := Depth8Image extent:300@400 depth:8 palette:cm.
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 6037
diff changeset
  9782
     i displayArcOrigin:100@100 corner:200@200 from:0 angle:90 withColor:Color red.
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
  9783
     i inspect.
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
  9784
    "
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
  9785
!
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
  9786
8164
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
  9787
drawEllipse:aRectangle with:aColorOrPixelValue
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
  9788
    "draw a circle with some pixel value or color.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
  9789
     By using a tempForm, we assure that the same pixel algorithm is used as in a window"
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
  9790
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
  9791
    |pixelValue|
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
  9792
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
  9793
    (pixelValue := aColorOrPixelValue) isInteger ifFalse:[
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
  9794
        pixelValue := (self valueFromColor:aColorOrPixelValue).
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
  9795
    ].
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
  9796
    self drawEllipse:aRectangle withValue:pixelValue.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
  9797
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
  9798
    "Created: / 05-09-2017 / 14:54:52 / cg"
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
  9799
!
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
  9800
4994
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
  9801
drawEllipse:aRectangle withColor:aColor
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
  9802
    "draw a circle with some pixel value.
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
  9803
     By using a tempForm, we assure that the same pixel algorithm is used as in a window"
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
  9804
7961
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9805
    self drawEllipse:aRectangle withValue:(self valueFromColor:aColor) lineWidth:nil
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9806
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9807
    "
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9808
     |i|
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9809
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9810
     i := Depth8Image extent:300@400 depth:8 palette:{ Color white . Color black  . Color red }.
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9811
     i drawEllipse:(0@0 corner:80@100) withColor:Color red.
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9812
     i inspect.
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9813
    "
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9814
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9815
    "Modified: / 26-02-2017 / 17:13:47 / cg"
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9816
!
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9817
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9818
drawEllipse:aRectangle withColor:aColor lineWidth:lw
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9819
    "draw a circle with some pixel value.
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9820
     By using a tempForm, we assure that the same pixel algorithm is used as in a window"
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9821
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9822
    self drawEllipse:aRectangle withValue:(self valueFromColor:aColor) lineWidth:lw
5138
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9823
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9824
    "
7905
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
  9825
     |i|
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
  9826
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
  9827
     i := Depth8Image extent:300@400 depth:8 palette:{ Color white . Color black  . Color red }.
5138
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9828
     i drawEllipse:(0@0 corner:80@100) withColor:Color red.
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9829
     i inspect.
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9830
    "
7905
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
  9831
7961
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9832
    "Created: / 26-02-2017 / 17:12:37 / cg"
5138
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9833
!
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9834
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9835
drawEllipse:aRectangle withValue:aPixelValueOrNil
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9836
    "draw a circle with some pixel value.
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9837
     By using a tempForm, we assure that the same pixel algorithm is used as in a window.
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9838
     If aPixelValueOrNil is nil, the mask pixel will be set to 0 (transparent),
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9839
     otherwise to 1. (used by the bitmap editor)"
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9840
7961
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9841
    self drawEllipse:aRectangle withValue:aPixelValueOrNil lineWidth:nil
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9842
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9843
    "
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9844
     |i|
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9845
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9846
     i := Depth8Image extent:300@400 depth:8 palette:{ Color white . Color black  . Color red }.
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9847
     i drawEllipse:(0@0 corner:80@100) withColor:Color red.
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9848
     i inspect.
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9849
    "
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9850
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9851
    "Modified: / 26-02-2017 / 17:13:36 / cg"
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9852
!
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9853
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9854
drawEllipse:aRectangle withValue:aPixelValueOrNil lineWidth:lineWidthOrNil
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9855
    "draw a circle with some pixel value.
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9856
     By using a tempForm, we assure that the same pixel algorithm is used as in a window.
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9857
     If aPixelValueOrNil is nil, the mask pixel will be set to 0 (transparent),
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9858
     otherwise to 1. (used by the bitmap editor)"
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9859
4994
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
  9860
    |tempForm xI "{ Class: SmallInteger }"
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
  9861
     yI "{ Class: SmallInteger }"
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
  9862
     wI "{ Class: SmallInteger }"
7961
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9863
     hI "{ Class: SmallInteger }" 
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9864
     tempImage lw|
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9865
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9866
    lw := lineWidthOrNil ? 1.
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9867
     
4994
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
  9868
    wI := aRectangle width.
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
  9869
    hI := aRectangle height.
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
  9870
7961
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9871
    tempForm := Form width:wI+lw height:hI+lw depth:1 onDevice:Screen current.
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  9872
    tempForm
7480
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
  9873
        paint:(Color colorId:1) on:(Color colorId:0);
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
  9874
        clear.
7961
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9875
    tempForm lineWidth:lw.
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9876
    tempForm displayArcIn:((lw@lw)//2 extent:wI@hI) from:0 angle:360.
4994
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
  9877
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
  9878
    xI := aRectangle left.
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
  9879
    yI := aRectangle top.
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
  9880
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
  9881
    tempImage := tempForm asImage.
7961
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9882
    0 to:hI+lw-1 do:[:yRun|
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9883
        0 to:wI+lw-1 do:[:xRun|
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
  9884
            (tempImage pixelAtX:xRun y:yRun) == 1 ifTrue:[
7480
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
  9885
                self atImageAndMask: (xI+xRun)@(yI+yRun) putValue:aPixelValueOrNil.
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
  9886
            ].
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
  9887
        ].
4994
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
  9888
    ].
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
  9889
    tempForm destroy.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
  9890
    tempImage close.
5352
82a42045e996 changed:8 methods
Claus Gittinger <cg@exept.de>
parents: 5341
diff changeset
  9891
    self release. "/ device-image is no longer valid
4994
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
  9892
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
  9893
    "
7905
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
  9894
     |i|
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
  9895
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
  9896
     i := Depth8Image extent:300@400 depth:8 palette:{ Color white . Color black  . Color red }.
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
  9897
     i drawEllipse:(0@0 corner:80@100) withColor:Color red.
4994
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
  9898
     i inspect.
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
  9899
    "
7961
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9900
    "
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9901
     |i|
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9902
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9903
     i := Depth8Image extent:300@400 depth:8 palette:{ Color white . Color black  . Color red }.
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9904
     i drawEllipse:(0@0 corner:80@100) withColor:Color red lineWidth:4.
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9905
     i inspect.
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9906
    "
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9907
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
  9908
    "Created: / 26-02-2017 / 17:13:16 / cg"
4994
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
  9909
!
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
  9910
8164
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
  9911
drawLineFrom:startPoint to:endPoint with:aColorOrPixelValue
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
  9912
    "draw a line with some pixel value.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
  9913
     This is in no way tuned, as normally, display-forms are used to draw.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
  9914
     The only use for this is when we have to generate images in a headless webService
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
  9915
     (such as the HumanReadableImageGenerator)"
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
  9916
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
  9917
    |pixelValue|
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
  9918
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
  9919
    (pixelValue := aColorOrPixelValue) isInteger ifFalse:[
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
  9920
        pixelValue := self valueFromColor:aColorOrPixelValue
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
  9921
    ].
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
  9922
    self drawLineFrom:startPoint to:endPoint withValue:pixelValue
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
  9923
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
  9924
    "
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
  9925
     |i|
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
  9926
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
  9927
     i := Depth1Image extent:100@100 depth:1 palette:nil.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
  9928
     i photometric:#blackIs0.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
  9929
     i drawLineFrom:5@5 to:94@5 withColor:1.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
  9930
     i drawLineFrom:94@5 to:94@94 withColor:1.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
  9931
     i drawLineFrom:94@94 to:5@94 withColor:1.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
  9932
     i drawLineFrom:5@94 to:5@5 withColor:1.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
  9933
     i drawLineFrom:10@10 to:90@90 withColor:1.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
  9934
     i drawLineFrom:90@10 to:10@90 withColor:1.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
  9935
     i inspect.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
  9936
    "
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
  9937
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
  9938
    "Created: / 05-09-2017 / 14:55:50 / cg"
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
  9939
!
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
  9940
5235
e9ab91666ebf *** empty log message ***
sr
parents: 5216
diff changeset
  9941
drawLineFrom:startPoint to:endPoint withColor:aColorOrPixelValue
4955
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
  9942
    "draw a line with some pixel value.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
  9943
     This is in no way tuned, as normally, display-forms are used to draw.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
  9944
     The only use for this is when we have to generate images in a headless webService
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
  9945
     (such as the HumanReadableImageGenerator)"
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
  9946
5235
e9ab91666ebf *** empty log message ***
sr
parents: 5216
diff changeset
  9947
    |pixelValue|
e9ab91666ebf *** empty log message ***
sr
parents: 5216
diff changeset
  9948
e9ab91666ebf *** empty log message ***
sr
parents: 5216
diff changeset
  9949
    pixelValue := aColorOrPixelValue.
e9ab91666ebf *** empty log message ***
sr
parents: 5216
diff changeset
  9950
    pixelValue isInteger ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9951
        pixelValue := self valueFromColor:aColorOrPixelValue
5235
e9ab91666ebf *** empty log message ***
sr
parents: 5216
diff changeset
  9952
    ].
e9ab91666ebf *** empty log message ***
sr
parents: 5216
diff changeset
  9953
    self drawLineFrom:startPoint to:endPoint withValue:pixelValue
5138
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9954
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9955
    "
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9956
     |i|
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9957
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9958
     i := Depth1Image extent:100@100 depth:1 palette:nil.
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9959
     i photometric:#blackIs0.
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9960
     i drawLineFrom:5@5 to:94@5 withColor:1.
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9961
     i drawLineFrom:94@5 to:94@94 withColor:1.
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9962
     i drawLineFrom:94@94 to:5@94 withColor:1.
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9963
     i drawLineFrom:5@94 to:5@5 withColor:1.
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9964
     i drawLineFrom:10@10 to:90@90 withColor:1.
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9965
     i drawLineFrom:90@10 to:10@90 withColor:1.
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9966
     i inspect.
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9967
    "
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9968
!
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9969
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9970
drawLineFrom:startPoint to:endPoint withValue:aPixelValueOrNil
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9971
    "draw a line with some pixel value.
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9972
     This is in no way tuned, as normally, display-forms are used to draw.
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9973
     The only use for this is when we have to generate images in a headless webService
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9974
     (such as the HumanReadableImageGenerator).
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9975
     If aPixelValueOrNil is nil, the mask pixel will be set to 0 (transparent),
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9976
     otherwise to 1. (used by the bitmap editor)"
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9977
4955
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
  9978
    |x0 x1 y0 y1 t steep deltax deltay error deltaerr ystep y|
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
  9979
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
  9980
    x0 := startPoint x.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
  9981
    y0 := startPoint y.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
  9982
    x1 := endPoint x.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
  9983
    y1 := endPoint y.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
  9984
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
  9985
    steep := (y1 - y0) abs > (x1 - x0) abs.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
  9986
    steep ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9987
        t := x0. x0 := y0. y0 := t.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9988
        t := x1. x1 := y1. y1 := t.
4955
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
  9989
    ].
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
  9990
    x0 > x1 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9991
        t := x0. x0 := x1. x1 := t.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9992
        t := y0. y0 := y1. y1 := t.
4955
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
  9993
    ].
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
  9994
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
  9995
    deltax := x1 - x0.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
  9996
    deltay := (y1 - y0) abs.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
  9997
5352
82a42045e996 changed:8 methods
Claus Gittinger <cg@exept.de>
parents: 5341
diff changeset
  9998
    deltax == 0 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9999
        y0 to: y1 do:[:y |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10000
            self atImageAndMask:x0@y putValue:aPixelValueOrNil.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10001
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10002
        ^ self.
5352
82a42045e996 changed:8 methods
Claus Gittinger <cg@exept.de>
parents: 5341
diff changeset
 10003
    ].
82a42045e996 changed:8 methods
Claus Gittinger <cg@exept.de>
parents: 5341
diff changeset
 10004
    deltay == 0 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10005
        x0 to: x1 do:[:x |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10006
            self atImageAndMask:x@y0 putValue:aPixelValueOrNil.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10007
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10008
        ^ self.
5352
82a42045e996 changed:8 methods
Claus Gittinger <cg@exept.de>
parents: 5341
diff changeset
 10009
    ].
82a42045e996 changed:8 methods
Claus Gittinger <cg@exept.de>
parents: 5341
diff changeset
 10010
4955
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10011
    error := 0.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10012
    deltaerr := deltay / deltax.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10013
    y := y0.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10014
    y0 < y1 ifTrue:[ ystep := 1 ] ifFalse:[ ystep := -1 ].
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10015
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10016
    x0 to: x1 do:[:x |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10017
        steep ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10018
            self atImageAndMask:y@x putValue:aPixelValueOrNil.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10019
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10020
            self atImageAndMask:x@y putValue:aPixelValueOrNil.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10021
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10022
        error := error + deltaerr.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10023
        error >= 0.5 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10024
            y := y + ystep.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10025
            error := error - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10026
        ]
4955
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10027
    ].
5352
82a42045e996 changed:8 methods
Claus Gittinger <cg@exept.de>
parents: 5341
diff changeset
 10028
    self release. "/ device-image is no longer valid
4955
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10029
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10030
    "
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10031
     |i|
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10032
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10033
     i := Depth1Image extent:100@100 depth:1 palette:nil.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10034
     i photometric:#blackIs0.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10035
     i drawLineFrom:5@5 to:94@5 withColor:1.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10036
     i drawLineFrom:94@5 to:94@94 withColor:1.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10037
     i drawLineFrom:94@94 to:5@94 withColor:1.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10038
     i drawLineFrom:5@94 to:5@5 withColor:1.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10039
     i drawLineFrom:10@10 to:90@90 withColor:1.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10040
     i drawLineFrom:90@10 to:10@90 withColor:1.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10041
     i inspect.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10042
    "
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10043
!
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10044
8164
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10045
drawRectangle: aRectangle with:aColorOrPixelValue
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10046
    "draw a rectangle with some pixel value.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10047
     By using #atImageAndMask:put: it also works on images with mono masks."
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10048
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10049
    |pixelValue|
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10050
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10051
    (pixelValue := aColorOrPixelValue) isInteger ifFalse:[
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10052
        pixelValue := self valueFromColor:aColorOrPixelValue
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10053
    ].
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10054
    self drawRectangle:aRectangle withValue:pixelValue
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10055
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10056
    "
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10057
     |i|
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10058
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10059
     i := Depth1Image extent:100@100 depth:1 palette:nil.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10060
     i photometric:#blackIs0.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10061
     i drawRectangle:(10@10 corner:90@90) withColor:1.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10062
     i inspect.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10063
    "
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10064
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10065
    "Created: / 05-09-2017 / 14:58:10 / cg"
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10066
!
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10067
2801
9f71b58c0726 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2772
diff changeset
 10068
drawRectangle: aRectangle withColor:aColor
9f71b58c0726 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2772
diff changeset
 10069
    "draw a rectangle with some pixel value.
9f71b58c0726 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2772
diff changeset
 10070
     By using #atImageAndMask:put: it also works on images with mono masks."
9f71b58c0726 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2772
diff changeset
 10071
5138
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10072
    self drawRectangle:aRectangle withValue:(self valueFromColor:aColor)
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10073
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10074
    "
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10075
     |i|
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10076
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10077
     i := Depth1Image extent:100@100 depth:1 palette:nil.
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10078
     i photometric:#blackIs0.
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10079
     i drawRectangle:(10@10 corner:90@90) withColor:1.
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10080
     i inspect.
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10081
    "
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10082
!
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10083
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10084
drawRectangle: aRectangle withValue:aPixelValueOrNil
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10085
    "draw a rectangle with some pixel value.
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10086
     By using #atImageAndMask:put: it also works on images with mono masks.
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10087
     If aPixelValueOrNil is nil, the mask pixel will be set to 0 (transparent),
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10088
     otherwise to 1. (used by the bitmap editor)"
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10089
7918
ad5373d62245 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7916
diff changeset
 10090
    |xLeft  "{ Class: SmallInteger }"
ad5373d62245 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7916
diff changeset
 10091
     xRight "{ Class: SmallInteger }"
ad5373d62245 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7916
diff changeset
 10092
     yTop   "{ Class: SmallInteger }"
ad5373d62245 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7916
diff changeset
 10093
     yBot   "{ Class: SmallInteger }"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 10094
     wI "{ Class: SmallInteger }"
2801
9f71b58c0726 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2772
diff changeset
 10095
     hI "{ Class: SmallInteger }"|
9f71b58c0726 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2772
diff changeset
 10096
9f71b58c0726 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2772
diff changeset
 10097
    wI := aRectangle width.
9f71b58c0726 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2772
diff changeset
 10098
    hI := aRectangle height.
9f71b58c0726 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2772
diff changeset
 10099
7918
ad5373d62245 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7916
diff changeset
 10100
    xLeft := aRectangle left.
ad5373d62245 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7916
diff changeset
 10101
    xRight := xLeft+wI-1.
ad5373d62245 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7916
diff changeset
 10102
    yTop := aRectangle top.
ad5373d62245 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7916
diff changeset
 10103
    yBot := yTop+hI-1.
ad5373d62245 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7916
diff changeset
 10104
ad5373d62245 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7916
diff changeset
 10105
    xLeft to:xLeft+wI-1 do:[:xRun|
ad5373d62245 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7916
diff changeset
 10106
        self atImageAndMask: xRun@yTop put:aPixelValueOrNil.
ad5373d62245 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7916
diff changeset
 10107
        self atImageAndMask: xRun@yBot put:aPixelValueOrNil
ad5373d62245 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7916
diff changeset
 10108
    ].
ad5373d62245 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7916
diff changeset
 10109
    yTop+1 to:yTop+hI-2 do:[:yRun|
ad5373d62245 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7916
diff changeset
 10110
        self atImageAndMask: xLeft@yRun put:aPixelValueOrNil.
ad5373d62245 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7916
diff changeset
 10111
        self atImageAndMask: xRight@yRun put:aPixelValueOrNil
4955
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10112
    ].
5352
82a42045e996 changed:8 methods
Claus Gittinger <cg@exept.de>
parents: 5341
diff changeset
 10113
    self release. "/ device-image is no longer valid
4955
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10114
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10115
    "
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10116
     |i|
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10117
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10118
     i := Depth1Image extent:100@100 depth:1 palette:nil.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10119
     i photometric:#blackIs0.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10120
     i drawRectangle:(10@10 corner:90@90) withColor:1.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10121
     i inspect.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10122
    "
7918
ad5373d62245 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7916
diff changeset
 10123
ad5373d62245 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7916
diff changeset
 10124
    "Modified: / 21-02-2017 / 01:41:39 / cg"
2801
9f71b58c0726 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2772
diff changeset
 10125
!
9f71b58c0726 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2772
diff changeset
 10126
5135
0a2a850a20cc *** empty log message ***
sr
parents: 5126
diff changeset
 10127
fillAntiAliasedArc:origin radius:r from:startAngle angle:angle withColor:aColor colorDictionary:colorDictionary blendStart:blendStart
7905
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10128
    "fill an antialiased circle with some pixel value.
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10129
     By using a tempForm, we assure that the same pixel algorithm is used as in a window.
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10130
     Compare the output of the example code at the end to the output from fillArc:radius:from:angle:withColor:"
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 10131
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 10132
    |tempForm wI "{ Class: SmallInteger }"
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 10133
     hI "{ Class: SmallInteger }"
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10134
     colorValue tempImage|
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 10135
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 10136
    wI := self width.
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 10137
    hI := self height.
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 10138
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 10139
    tempForm := Form width:wI height:hI depth:1 onDevice:Screen current.
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 10140
    tempForm
7480
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10141
        paint:(Color colorId:1) on:(Color colorId:0);
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10142
        clear.
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 10143
    tempForm fillArc:origin radius:r from:startAngle angle:angle.
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 10144
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 10145
    colorValue := self valueFromColor:aColor.
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10146
    tempImage := tempForm asImage.
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 10147
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 10148
    0 to:hI-1 do:[:yRun|
7480
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10149
        0 to:wI-1 do:[:xRun|
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10150
            (tempImage pixelAtX:xRun y:yRun) == 1 ifTrue:[
7480
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10151
                self atImageAndMask:xRun@yRun putValue:colorValue.
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10152
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10153
                #(left right) do:[:aHorizontal |
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10154
                    #(top bottom) do:[:aVertical |
7905
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10155
                        self virtualAntiAliasedAlongXvertical:aVertical horizontal:aHorizontal form:tempImage color:aColor xRun:xRun yRun:yRun colorDictionary:colorDictionary blendStart:blendStart.
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10156
                        self virtualAntiAliasedAlongYhorizontal:aHorizontal vertical:aVertical form:tempImage color:aColor xRun:xRun yRun:yRun colorDictionary:colorDictionary blendStart:blendStart.
7480
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10157
                    ].
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10158
                ].
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10159
            ].
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10160
        ].
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10161
    ].
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10162
    tempForm destroy.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10163
    tempImage close.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10164
    self release. "/ device-image is no longer valid
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10165
7480
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10166
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10167
    "
7905
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10168
        |aaImgArray|
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10169
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10170
        aaImgArray := Depth8Image extent:200@200 depth:8 antiAliasedPalette:{ Color white . Color black  . Color red . Color blue} bgColor:Color white.
7484
ac97ca090d0c #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 7483
diff changeset
 10171
        aaImgArray last fillAntiAliasedArc:105@95 radius:80 from:0 angle:90 withColor:Color red
7480
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10172
            colorDictionary:aaImgArray first
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10173
            blendStart:aaImgArray second.
7484
ac97ca090d0c #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 7483
diff changeset
 10174
        aaImgArray last fillAntiAliasedArc:100@100 radius:80 from:90 angle:270 withColor:Color blue
7480
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10175
            colorDictionary:aaImgArray first
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10176
            blendStart:aaImgArray second.
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10177
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10178
        aaImgArray last inspect.
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 6037
diff changeset
 10179
    "
7905
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10180
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10181
    "Modified (comment): / 16-02-2017 / 20:12:59 / cg"
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 6037
diff changeset
 10182
!
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 6037
diff changeset
 10183
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 6037
diff changeset
 10184
fillArc:origin radius:r from:startAngle angle:angle withColor:aColorOrIndex
7905
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10185
    "fill a circle with some pixel value.
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10186
     By using a tempForm, we assure that the same pixel algorithm is used as in a window"
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10187
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10188
    |tempForm tempImage
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10189
     wI "{ Class: SmallInteger }"
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10190
     hI "{ Class: SmallInteger }"
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10191
     colorValue|
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10192
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10193
    wI := self width.
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10194
    hI := self height.
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10195
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10196
    tempForm := Form width:wI height:hI depth:1 onDevice:Screen current.
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 10197
    tempForm
7480
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10198
        paint:(Color colorId:1) on:(Color colorId:0);
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10199
        clear.
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10200
    tempForm fillArc:origin radius:r from:startAngle angle:angle.
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10201
4997
15d53562d4e8 changed #fillArc:radius:from:angle:withColor:
sr
parents: 4996
diff changeset
 10202
    aColorOrIndex isInteger ifTrue:[
7480
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10203
        colorValue := aColorOrIndex.
4997
15d53562d4e8 changed #fillArc:radius:from:angle:withColor:
sr
parents: 4996
diff changeset
 10204
    ] ifFalse:[
7480
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10205
        colorValue := self valueFromColor:aColorOrIndex.
4997
15d53562d4e8 changed #fillArc:radius:from:angle:withColor:
sr
parents: 4996
diff changeset
 10206
    ].
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10207
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10208
    tempImage := tempForm asImage.
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10209
    0 to:hI-1 do:[:yRun|
7480
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10210
        0 to:wI-1 do:[:xRun|
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10211
            (tempImage pixelAtX:xRun y:yRun) == 1 ifTrue:[
7480
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10212
                self atImageAndMask:xRun@yRun putValue:colorValue.
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10213
            ].
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10214
        ].
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10215
    ].
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10216
    tempForm destroy.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10217
    tempImage close.
5352
82a42045e996 changed:8 methods
Claus Gittinger <cg@exept.de>
parents: 5341
diff changeset
 10218
    self release. "/ device-image is no longer valid
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10219
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10220
    "
7905
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10221
     |i|
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10222
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10223
     i := Depth8Image extent:200@200 depth:8 palette:{ Color white . Color black  . Color red . Color blue}.
7484
ac97ca090d0c #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 7483
diff changeset
 10224
     i fillArc:105@95 radius:80 from:0 angle:90 withColor:Color red.
ac97ca090d0c #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 7483
diff changeset
 10225
     i fillArc:100@100 radius:80 from:90 angle:270 withColor:Color blue.
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10226
     i inspect.
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10227
    "
7905
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10228
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10229
    "Modified (comment): / 16-02-2017 / 20:12:37 / cg"
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10230
!
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10231
8164
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10232
fillEllipse:aRectangle with:aColorOrPixelValue
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10233
    "fill a circle with some pixel value or color.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10234
     By using a tempForm, we assure that the same pixel algorithm is used as in a window"
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10235
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10236
    |pixelValue|
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10237
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10238
    (pixelValue := aColorOrPixelValue) isInteger ifFalse:[
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10239
        pixelValue := self valueFromColor:aColorOrPixelValue
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10240
    ].
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10241
    self fillEllipse:aRectangle withValue:pixelValue.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10242
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10243
    "Created: / 05-09-2017 / 14:51:23 / cg"
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10244
!
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10245
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10246
fillEllipse:aRectangle withColor:aColor
8164
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10247
    "fill a circle with some color.
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10248
     By using a tempForm, we assure that the same pixel algorithm is used as in a window"
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10249
5138
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10250
    self fillEllipse:aRectangle withValue:(self valueFromColor:aColor)
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10251
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10252
    "
7905
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10253
     |i|
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10254
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10255
     i := Depth8Image extent:100@100 depth:8 palette:{ Color white . Color black  . Color red }.
5138
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10256
     i fillEllipse:(0@0 corner:80@100) withColor:Color red.
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10257
     i inspect.
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10258
    "
7905
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10259
8164
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10260
    "Modified (comment): / 05-09-2017 / 14:52:08 / cg"
5138
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10261
!
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10262
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10263
fillEllipse:aRectangle withValue:aPixelValueOrNil
8164
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10264
    "fill a circle with some pixel value.
5138
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10265
     By using a tempForm, we assure that the same pixel algorithm is used as in a window.
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10266
     If aPixelValueOrNil is nil, the mask pixel will be set to 0 (transparent),
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10267
     otherwise to 1. (used by the bitmap editor)"
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10268
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10269
    |tempForm xI "{ Class: SmallInteger }"
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10270
     yI "{ Class: SmallInteger }"
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10271
     wI "{ Class: SmallInteger }"
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10272
     hI "{ Class: SmallInteger }" tempImage|
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10273
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10274
    wI := aRectangle width.
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10275
    hI := aRectangle height.
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10276
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10277
    tempForm := Form width:wI height:hI depth:1 onDevice:Screen current.
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 10278
    tempForm
7480
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10279
        paint:(Color colorId:1) on:(Color colorId:0);
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10280
        clear.
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10281
    tempForm fillArcIn:(0@0 extent:wI@hI) from:0 angle:360.
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10282
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10283
    xI := aRectangle left.
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10284
    yI := aRectangle top.
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10285
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10286
    tempImage := tempForm asImage.
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10287
    0 to:hI-1 do:[:yRun|
7480
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10288
        0 to:wI-1 do:[:xRun|
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10289
            (tempImage pixelAtX:xRun y:yRun) == 1 ifTrue:[
7480
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10290
                self atImageAndMask:(xI+xRun)@(yI+yRun) putValue:aPixelValueOrNil.
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10291
            ].
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10292
        ].
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10293
    ].
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10294
    tempForm destroy.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10295
    tempImage close.
5352
82a42045e996 changed:8 methods
Claus Gittinger <cg@exept.de>
parents: 5341
diff changeset
 10296
    self release. "/ device-image is no longer valid
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10297
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10298
    "
7905
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10299
     |i|
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10300
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10301
     i := Depth8Image extent:300@400 depth:8 palette:{ Color white . Color black  . Color red }.
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10302
     i fillEllipse:(0@0 corner:80@100) withColor:Color red.
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10303
     i inspect.
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10304
    "
7905
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10305
8164
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10306
    "Modified (comment): / 05-09-2017 / 14:51:59 / cg"
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10307
!
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10308
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10309
fillRectangle:aRectangle with:aColorOrPixelValue
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10310
    "fill a rectangular area with some or pixel value."
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10311
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10312
    |pixelValue|
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10313
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10314
    (pixelValue := aColorOrPixelValue) isInteger ifFalse:[
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10315
        pixelValue := self valueFromColor:aColorOrPixelValue
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10316
    ].
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10317
    self fillRectangle:aRectangle withValue:pixelValue.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10318
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10319
    "Created: / 05-09-2017 / 14:50:36 / cg"
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10320
!
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10321
4995
3a5cb7a57b0b changed #fillRectangle:aRectangle withColor:aColor
sr
parents: 4994
diff changeset
 10322
fillRectangle:aRectangle withColor:aColor
8164
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10323
    "fill a rectangular area with some color."
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10324
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 6037
diff changeset
 10325
    self
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10326
        fillRectangle:aRectangle
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10327
        withValue:(self valueFromColor:aColor)
8164
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10328
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10329
    "Modified (comment): / 05-09-2017 / 14:51:45 / cg"
5138
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10330
!
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10331
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10332
fillRectangle:aRectangle withValue:aPixelValueOrNil
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10333
    "fill a rectangular area with some pixel value.
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10334
     May be redefined in concrete subclasses for more performance, if req'd.
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10335
     If aPixelValueOrNil is nil, the mask pixel will be set to 0 (transparent),
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10336
     otherwise to 1. (used by the bitmap editor)"
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10337
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 6037
diff changeset
 10338
    self
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10339
        fillRectangleX:aRectangle left y:aRectangle top
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10340
        width:aRectangle width height:aRectangle height
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10341
        withValue:aPixelValueOrNil
1972
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
 10342
!
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
 10343
8164
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10344
fillRectangleX:x y:y width:w height:h with:aColorOrPixelValue
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10345
    "fill a rectangular area with a aColor"
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10346
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10347
    |pixelValue|
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10348
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10349
    (pixelValue := aColorOrPixelValue) isInteger ifFalse:[
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10350
        pixelValue := self valueFromColor:aColorOrPixelValue
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10351
    ].
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10352
    self fillRectangleX:x y:y width:w height:h withValue:pixelValue
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10353
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10354
    "Modified: / 05-09-2017 / 14:57:19 / cg"
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10355
!
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10356
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10357
fillRectangleX:x y:y width:w height:h withColor:aColor
1972
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
 10358
    "fill a rectangular area with a aColor"
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
 10359
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
 10360
    self fillRectangleX:x y:y width:w height:h withValue:(self valueFromColor:aColor)
8164
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10361
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10362
    "Created: / 05-09-2017 / 14:57:05 / cg"
1630
e75c600b1c2a added #isMask query;
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
 10363
!
e75c600b1c2a added #isMask query;
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
 10364
5138
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10365
fillRectangleX:x y:y width:w height:h withValue:aPixelValueOrNil
1630
e75c600b1c2a added #isMask query;
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
 10366
    "fill a rectangular area with some pixel value.
5138
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10367
     May be redefined in concrete subclasses for more performance, if req'd.
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10368
     If aPixelValueOrNil is nil, the mask pixel will be set to 0 (transparent),
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10369
     otherwise to 1. (used by the bitmap editor)"
1630
e75c600b1c2a added #isMask query;
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
 10370
e75c600b1c2a added #isMask query;
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
 10371
    |xI "{ Class: SmallInteger }"
861
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 10372
     yI "{ Class: SmallInteger }"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 10373
     wI "{ Class: SmallInteger }"
5138
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10374
     hI "{ Class: SmallInteger }"
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10375
     p|
861
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 10376
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 10377
    xI := x.
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 10378
    yI := y.
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 10379
    wI := w.
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 10380
    hI := h.
5138
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10381
    p := Point new.
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 10382
861
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 10383
    yI to:yI+hI-1 do:[:yRun |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10384
        xI to:xI+wI-1 do:[:xRun |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10385
            p x:xRun y:yRun.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10386
            self atImageAndMask:p putValue:aPixelValueOrNil.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10387
        ]
5352
82a42045e996 changed:8 methods
Claus Gittinger <cg@exept.de>
parents: 5341
diff changeset
 10388
    ].
82a42045e996 changed:8 methods
Claus Gittinger <cg@exept.de>
parents: 5341
diff changeset
 10389
    self release. "/ device-image is no longer valid
861
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 10390
1630
e75c600b1c2a added #isMask query;
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
 10391
    "Created: 22.4.1997 / 14:02:14 / cg"
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 10392
    "Modified: 24.4.1997 / 17:24:58 / cg"
1972
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
 10393
!
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
 10394
8164
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10395
floodFillAt: aPoint with:aColorOrPixelValue
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10396
    "fill a area with aColor like a flood up to surrounded pixels having different colors.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10397
     By using #atImageAndMask:put: it also works on images with mono masks.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10398
     Currently returns a collection of all pixels which have been modified (needed by imageEditor?),
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10399
     but that should be changed to avoid huge massdata creation (instead, call a block for each)"
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10400
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10401
    |pixelValue|
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10402
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10403
    (pixelValue := aColorOrPixelValue) isInteger ifFalse:[
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10404
        pixelValue := self valueFromColor:aColorOrPixelValue
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10405
    ].
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10406
    ^ self floodFillAt:aPoint withValue:pixelValue
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10407
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10408
    "Created: / 05-09-2017 / 14:57:34 / cg"
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10409
!
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10410
1972
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
 10411
floodFillAt: aPoint withColor: aColor
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
 10412
    "fill a area with aColor like a flood up to surrounded pixels having different colors.
7911
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10413
     By using #atImageAndMask:put: it also works on images with mono masks.
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10414
     Currently returns a collection of all pixels which have been modified (needed by imageEditor?),
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10415
     but that should be changed to avoid huge massdata creation (instead, call a block for each)"
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10416
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10417
    ^ self floodFillAt:aPoint withValue:(self valueFromColor:aColor)
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10418
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10419
    "Modified: / 17-02-2017 / 15:05:29 / cg"
5138
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10420
!
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10421
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10422
floodFillAt:aPoint withValue:aPixelValueOrNil
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10423
    "fill a area with aColor like a flood up to surrounded pixels having different colors.
7911
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10424
     By using #atImageAndMask:put: it also works on images with mono masks.
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10425
     Currently returns a collection of all pixels which have been modified (needed by imageEditor?),
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10426
     but that should be changed to avoid huge massdata creation (instead, call a block for each)"
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10427
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10428
    ^ self floodFillAt:aPoint withValue:aPixelValueOrNil maxDeviationInLight:0 maxDeviationInHue:0
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10429
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10430
    "Modified (format): / 30-01-2017 / 20:57:36 / stefan"
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10431
    "Modified (comment): / 17-02-2017 / 15:05:19 / cg"
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10432
!
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10433
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10434
floodFillAt:aPoint withValue:aPixelValueOrNil maxDeviationInLight:maxLightError maxDeviationInHue:maxHueError
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10435
    "fill an area with aColor like a flood up to surrounded pixels having different colors.
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10436
     If maxLightError/maxLueError are zero, the flood fills only pixels with the same value as the pixel at aPoint;
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10437
     otherwise, a slight error (fraction) in light/hue is allowd, and pixels with a nearby color are also filled.
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10438
     By using #atImageAndMask:put: it also works on images with mono masks.
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10439
     Currently returns a collection of all pixels which have been modified (needed by imageEditor?),
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10440
     but that should be changed to avoid huge massdata creation (instead, call a block for each)"
5138
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10441
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10442
    |surroundingPixelsOfDo detectedPixel detectedMask processPixelToFill
3861
e9cbd4ec6020 flood fill with mask fixed
Claus Gittinger <cg@exept.de>
parents: 3860
diff changeset
 10443
     allDetectedPixelCoordinates enumerateDetectedPixelsAndDo
7911
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10444
     toDo w h drawAction 
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10445
     detectedColor detectedHue detectedLight minHueOK maxHueOK minLightOK maxLightOK
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10446
     almostSamePixel|
2205
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
 10447
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
 10448
    w := self width.
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
 10449
    h := self height.
1972
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
 10450
7911
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10451
    detectedPixel := self pixelAt: aPoint.
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10452
    mask isNil ifTrue:[
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10453
        detectedMask := 1
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10454
    ] ifFalse:[
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10455
        detectedMask := mask pixelAt: aPoint.
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10456
    ].
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10457
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 10458
    surroundingPixelsOfDo :=
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10459
        [:pX :pY :fn |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10460
            |nX nY|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10461
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10462
            nX := pX + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10463
            nY := pY + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10464
            (nY < h) ifTrue: [fn value:pX value:nY].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10465
            (pY > 0) ifTrue: [fn value:pX value:(pY - 1)].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10466
            (nX < w) ifTrue: [fn value:nX value:pY].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10467
            (pX > 0) ifTrue: [fn value:(pX - 1) value:pY].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10468
        ].
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 10469
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 10470
    enumerateDetectedPixelsAndDo :=
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10471
        [:detectedPixels :action |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10472
            |idx|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10473
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10474
            idx := 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10475
            0 to:h-1 do:[:y |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10476
                0 to:w-1 do:[:x |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10477
                    (detectedPixels at:idx) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10478
                        action value:x value:y
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10479
                    ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10480
                    idx := idx + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10481
                ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10482
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10483
        ].
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 6037
diff changeset
 10484
7911
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10485
    (maxLightError = 0 and:[maxHueError = 0]) ifTrue:[ 
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10486
        "/ compare pixels exactly - a faster algorithm
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10487
        processPixelToFill :=
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10488
            [:spX :spY |
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10489
                |samePixel idx|
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10490
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10491
                mask isNil ifTrue:[
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10492
                    samePixel := (self pixelAtX:spX y:spY) == detectedPixel
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10493
                ] ifFalse:[
7911
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10494
                    detectedMask == 0 ifTrue:[
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10495
                        samePixel := (mask pixelAtX:spX y:spY) == 0
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10496
                    ] ifFalse:[
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10497
                        samePixel := ((self pixelAtX:spX y:spY) == detectedPixel)
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10498
                                     and:[ (mask pixelAtX:spX y:spY) == detectedMask ]
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10499
                    ].
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10500
                ].
7911
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10501
                samePixel ifTrue: [
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10502
                    idx := 1 + spX + (spY * w).
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10503
                    (allDetectedPixelCoordinates at:idx) ifFalse:[
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10504
                        allDetectedPixelCoordinates at:idx put:true.
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10505
                        toDo add:spX @ spY.
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10506
                    ].
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10507
                ]
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10508
            ].
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10509
    ] ifFalse:[
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10510
        "/ compare pixels with some error-tolerance - a slow algorithm because we have to compute
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10511
        "/ hue and light for every pixel...
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10512
        detectedColor := self colorFromValue:detectedPixel.
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10513
        detectedHue := detectedColor hue.
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10514
        detectedLight := detectedColor light.
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10515
        detectedHue notNil ifTrue:[
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10516
            minHueOK := detectedHue * (1.0 - maxHueError).
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10517
            maxHueOK := detectedHue * (1.0 + maxHueError).
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10518
        ].    
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10519
        minLightOK := detectedLight * (1.0 - maxLightError).   
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10520
        maxLightOK := detectedLight * (1.0 + maxLightError).
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10521
        
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10522
        almostSamePixel := 
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10523
            [:pixelValue |
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10524
                |same pixelColor pixelHue pixelLight errHue errLight|
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10525
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10526
                (same := (pixelColor == detectedPixel)) ifFalse:[
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10527
                    pixelColor := self colorFromValue:pixelValue.
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10528
                    pixelHue := pixelColor hue.
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10529
                    pixelLight := pixelColor light.
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10530
                    detectedHue isNil ifTrue:[
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10531
                        "/ detect gray - what should we do?
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10532
                        same := "(pixelHue isNil) and:["pixelLight between:minLightOK and:maxLightOK"]". 
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10533
                    ] ifFalse:[    
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10534
                        pixelHue isNil ifTrue:[
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10535
                            "/ pixel is gray - what should we do?
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10536
                            "/ same := false.
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10537
                            same := pixelLight between:minLightOK and:maxLightOK.
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10538
                        ] ifFalse:[    
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10539
                            same := (pixelHue between:minHueOK and:maxHueOK) and:[pixelLight between:minLightOK and:maxLightOK]. 
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10540
                        ].
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10541
                    ].
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10542
                ].
7911
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10543
                same
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10544
            ].
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10545
            
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10546
        processPixelToFill :=
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10547
            [:spX :spY |
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10548
                |samePixel idx|
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10549
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10550
                mask isNil ifTrue:[
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10551
                    samePixel := almostSamePixel value:(self pixelAtX:spX y:spY)
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10552
                ] ifFalse:[
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10553
                    detectedMask == 0 ifTrue:[
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10554
                        samePixel := (mask pixelAtX:spX y:spY) == 0
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10555
                    ] ifFalse:[
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10556
                        samePixel := (almostSamePixel value:(self pixelAtX:spX y:spY))
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10557
                                     and:[ (mask pixelAtX:spX y:spY) == detectedMask ]
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10558
                    ].
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10559
                ].
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10560
                samePixel ifTrue: [
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10561
                    idx := 1 + spX + (spY * w).
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10562
                    (allDetectedPixelCoordinates at:idx) ifFalse:[
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10563
                        allDetectedPixelCoordinates at:idx put:true.
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10564
                        toDo add:spX @ spY.
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10565
                    ].
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10566
                ]
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10567
            ].
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10568
    ].
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10569
    
5138
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10570
"/    (mask notNil and: [(mask pixelAt:aPoint) == 0]) ifTrue:[
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10571
"/        allDetectedPixelCoordinates := mask floodFillAt: aPoint withColor: Color white.
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10572
"/        enumerateDetectedPixelsAndDo
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10573
"/                value:allDetectedPixelCoordinates
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10574
"/                value:[:x :y | self atImageAndMask:(x@y) putValue:aPixelValueOrNil].
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10575
"/        ^ allDetectedPixelCoordinates
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10576
"/    ].
3759
5b083b0ad909 fixed stupid flood-fill algorithm
Claus Gittinger <cg@exept.de>
parents: 3729
diff changeset
 10577
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 10578
    allDetectedPixelCoordinates := BooleanArray new:(w * h).
3759
5b083b0ad909 fixed stupid flood-fill algorithm
Claus Gittinger <cg@exept.de>
parents: 3729
diff changeset
 10579
    toDo := OrderedCollection new:1000.
5138
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10580
    allDetectedPixelCoordinates at:((aPoint y * w) + aPoint x + 1) put:true.
3759
5b083b0ad909 fixed stupid flood-fill algorithm
Claus Gittinger <cg@exept.de>
parents: 3729
diff changeset
 10581
    toDo add:aPoint.
5b083b0ad909 fixed stupid flood-fill algorithm
Claus Gittinger <cg@exept.de>
parents: 3729
diff changeset
 10582
5b083b0ad909 fixed stupid flood-fill algorithm
Claus Gittinger <cg@exept.de>
parents: 3729
diff changeset
 10583
    [toDo notEmpty] whileTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10584
        |p|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10585
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10586
        p := toDo removeLast.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10587
        surroundingPixelsOfDo value:p x value:p y value:processPixelToFill.
5138
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10588
    ].
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10589
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10590
    aPixelValueOrNil isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10591
        drawAction := [:x :y |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10592
                               mask pixelAtX:x y:y put:0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10593
                               self pixelAtX:x y:y put:0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10594
                      ].
3805
d87c919fb2a7 oops - care for filling a mask
Claus Gittinger <cg@exept.de>
parents: 3763
diff changeset
 10595
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10596
        drawAction := [:x :y |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10597
                                mask notNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10598
                                    mask pixelAtX:x y:y put:1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10599
                                ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10600
                                self pixelAtX:x y:y put:aPixelValueOrNil].
5138
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10601
    ].
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10602
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10603
    enumerateDetectedPixelsAndDo
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10604
        value:allDetectedPixelCoordinates
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10605
        value:drawAction.
5138
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10606
5352
82a42045e996 changed:8 methods
Claus Gittinger <cg@exept.de>
parents: 5341
diff changeset
 10607
    self release. "/ device-image is no longer valid
3805
d87c919fb2a7 oops - care for filling a mask
Claus Gittinger <cg@exept.de>
parents: 3763
diff changeset
 10608
    ^ allDetectedPixelCoordinates
2205
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
 10609
7911
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10610
    "Created: / 17-02-2017 / 15:03:33 / cg"
1972
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
 10611
!
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
 10612
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
 10613
rectangle: aRectangle withColor:aColor
5216
f7ec910cfce1 Mark obsolete methods
Stefan Vogel <sv@exept.de>
parents: 5200
diff changeset
 10614
    <resource: #obsolete>
1972
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
 10615
    "draw a rectangle with some pixel value.
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
 10616
    By using #atImageAndMask:put: it also works on images with mono masks."
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
 10617
2801
9f71b58c0726 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2772
diff changeset
 10618
    self obsoleteMethodWarning.
9f71b58c0726 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2772
diff changeset
 10619
    self drawRectangle: aRectangle withColor:aColor
1972
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
 10620
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
 10621
861
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 10622
! !
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 10623
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10624
!Image methodsFor:'enumerating'!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10625
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10626
atY:y from:x1 to:x2 do:aBlock
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10627
    "perform aBlock for each pixel from x1 to x2 in row y.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10628
     The block is passed the color at each pixel.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10629
     The code here provides a generic and slow implementation, and
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10630
     should be redefined in concrete subclasses, to avoid some processing
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10631
     when going from pixel to pixel (i.e. the byte-index and mask computations
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10632
     and also the color allocation)."
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10633
3433
809312fa7e4f Use <resource:#obsolete>
Stefan Vogel <sv@exept.de>
parents: 3426
diff changeset
 10634
    <resource:#obsolete>
809312fa7e4f Use <resource:#obsolete>
Stefan Vogel <sv@exept.de>
parents: 3426
diff changeset
 10635
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 10636
    self obsoleteMethodWarning:'use #colorsAtY:from:to:do:'.
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 10637
    self colorsAtY:y from:x1 to:x2 do:aBlock
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 10638
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 10639
    "Modified: 7.6.1996 / 19:13:30 / cg"
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 10640
!
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 10641
5143
72147ced8f3c +colorsAtX:from:to:do:
Claus Gittinger <cg@exept.de>
parents: 5138
diff changeset
 10642
colorsAtX:x from:y1 to:y2 do:aBlock
72147ced8f3c +colorsAtX:from:to:do:
Claus Gittinger <cg@exept.de>
parents: 5138
diff changeset
 10643
    "perform aBlock for each pixel from y1 to y2 in col x.
72147ced8f3c +colorsAtX:from:to:do:
Claus Gittinger <cg@exept.de>
parents: 5138
diff changeset
 10644
     The block is passed the color at each pixel.
72147ced8f3c +colorsAtX:from:to:do:
Claus Gittinger <cg@exept.de>
parents: 5138
diff changeset
 10645
     The code here provides a generic and slow implementation, and
72147ced8f3c +colorsAtX:from:to:do:
Claus Gittinger <cg@exept.de>
parents: 5138
diff changeset
 10646
     should be redefined in concrete subclasses, to avoid some processing
72147ced8f3c +colorsAtX:from:to:do:
Claus Gittinger <cg@exept.de>
parents: 5138
diff changeset
 10647
     when going from pixel to pixel (i.e. the byte-index and mask computations
72147ced8f3c +colorsAtX:from:to:do:
Claus Gittinger <cg@exept.de>
parents: 5138
diff changeset
 10648
     and also the color allocation)."
72147ced8f3c +colorsAtX:from:to:do:
Claus Gittinger <cg@exept.de>
parents: 5138
diff changeset
 10649
72147ced8f3c +colorsAtX:from:to:do:
Claus Gittinger <cg@exept.de>
parents: 5138
diff changeset
 10650
    |yStart "{Class: SmallInteger }"
72147ced8f3c +colorsAtX:from:to:do:
Claus Gittinger <cg@exept.de>
parents: 5138
diff changeset
 10651
     yEnd   "{Class: SmallInteger }"|
72147ced8f3c +colorsAtX:from:to:do:
Claus Gittinger <cg@exept.de>
parents: 5138
diff changeset
 10652
72147ced8f3c +colorsAtX:from:to:do:
Claus Gittinger <cg@exept.de>
parents: 5138
diff changeset
 10653
    yStart := y1.
72147ced8f3c +colorsAtX:from:to:do:
Claus Gittinger <cg@exept.de>
parents: 5138
diff changeset
 10654
    yEnd := y2.
72147ced8f3c +colorsAtX:from:to:do:
Claus Gittinger <cg@exept.de>
parents: 5138
diff changeset
 10655
    yStart to:yEnd do:[:yRun |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10656
        aBlock value:yRun value:(self colorAtX:x y:yRun)
5143
72147ced8f3c +colorsAtX:from:to:do:
Claus Gittinger <cg@exept.de>
parents: 5138
diff changeset
 10657
    ]
72147ced8f3c +colorsAtX:from:to:do:
Claus Gittinger <cg@exept.de>
parents: 5138
diff changeset
 10658
!
72147ced8f3c +colorsAtX:from:to:do:
Claus Gittinger <cg@exept.de>
parents: 5138
diff changeset
 10659
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 10660
colorsAtY:y from:x1 to:x2 do:aBlock
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 10661
    "perform aBlock for each pixel from x1 to x2 in row y.
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 10662
     The block is passed the color at each pixel.
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 10663
     The code here provides a generic and slow implementation, and
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 10664
     should be redefined in concrete subclasses, to avoid some processing
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 10665
     when going from pixel to pixel (i.e. the byte-index and mask computations
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 10666
     and also the color allocation)."
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 10667
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10668
    |xStart "{Class: SmallInteger }"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10669
     xEnd   "{Class: SmallInteger }"|
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10670
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10671
    xStart := x1.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10672
    xEnd := x2.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10673
    xStart to:xEnd do:[:xRun |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10674
        aBlock value:xRun value:(self colorAtX:xRun y:y)
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10675
    ]
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 10676
2380
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
 10677
    "Created: / 7.6.1996 / 19:12:51 / cg"
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
 10678
    "Modified: / 30.9.1998 / 22:14:16 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10679
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10680
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10681
colorsFromX:xStart y:yStart toX:xEnd y:yEnd do:aBlock
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10682
    "perform aBlock for each color in a rectangular area of the image.
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 10683
     Notice that x and y coordinates start at 0@0 for the upper left corner.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10684
     The block is passed the x and y coordinates and pixelValue at each pixel.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10685
     The code here provides a generic and slow implementation, and
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10686
     should be redefined in concrete subclasses, to avoid some processing
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10687
     when going from pixel to pixel (i.e. the byte-index and mask computations,
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10688
     and especially, the color allocations)."
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10689
940
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 10690
    |yS "{Class: SmallInteger }"
7595
c77d718d3d94 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7573
diff changeset
 10691
     yE "{Class: SmallInteger }"|
942
5e45da3c19d3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 940
diff changeset
 10692
5e45da3c19d3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 940
diff changeset
 10693
    yS := yStart.
5e45da3c19d3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 940
diff changeset
 10694
    yE := yEnd.
940
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 10695
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 10696
    yS to:yE do:[:yRun |
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 10697
        self colorsAtY:yRun from:xStart to:xEnd do:[:xRun :color |
7595
c77d718d3d94 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7573
diff changeset
 10698
            aBlock value:xRun value:yRun value:color
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 10699
        ]
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10700
    ]
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 10701
940
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 10702
    "Modified: 11.7.1996 / 19:50:47 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10703
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10704
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10705
rgbValuesAtY:y from:x1 to:x2 do:aBlock
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10706
    "perform aBlock for each rgbValue from x1 to x2 in row y.
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10707
     rgbValues are of the form rrggbb (i.e. red is in the high byte).
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10708
     
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10709
     Notice the difference between rgbValue and pixelValue: rgbValues are always
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10710
     the rgb bytes; pixelvalues depend on the photometric interpretation, and may be
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10711
     indices into a colormap or be non-byte-sized rgb values.
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10712
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10713
     Notice that x and y coordinates start at 0@0 for the upper left corner.
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10714
     The block is passed the x coordinate and the pixelValue at each pixel.
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10715
     (see also Image>>atY:from:to:do:).
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10716
     The code here provides a generic and slow implementation, and
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10717
     should be redefined in concrete subclasses, to avoid some processing
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10718
     when going from pixel to pixel (i.e. the byte-index and mask computations)."
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10719
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10720
    |xStart "{Class: SmallInteger }"
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10721
     xEnd   "{Class: SmallInteger }"|
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10722
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10723
    xStart := x1.
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10724
    xEnd := x2.
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10725
    xStart to:xEnd do:[:xRun |
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10726
        aBlock value:xRun value:(self rgbValueAtX:xRun y:y)
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10727
    ]
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10728
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10729
    "Created: / 29-08-2017 / 14:40:48 / cg"
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10730
!
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10731
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10732
rgbValuesFromX:xStart y:yStart toX:xEnd y:yEnd do:aBlock
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10733
    "perform aBlock for each rgbValue in a rectangular area of the image.
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10734
     rgbValues are of the form rrggbb (i.e. the redByte is in the high byte).
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10735
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10736
     Notice the difference between rgbValue and pixelValue: rgbValues are always
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10737
     the rgb bytes; pixelvalues depend on the photometric interpretation, and may be
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10738
     indices into a colormap or be non-byte-sized rgb values.
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10739
     
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10740
     Notice that x and y coordinates start at 0@0 for the upper left corner.
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10741
     The block is passed the x and y coordinates and pixelValue at each pixel.
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10742
     The code here provides a generic and slow implementation, and
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10743
     should be redefined in concrete subclasses, to avoid some processing
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10744
     when going from pixel to pixel (i.e. the byte-index and mask computations)."
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10745
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10746
    |yS "{Class: SmallInteger }"
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10747
     yE "{Class: SmallInteger }"|
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10748
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10749
    yS := yStart.
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10750
    yE := yEnd.
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10751
    yS to:yE do:[:yRun |
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10752
        self rgbValuesAtY:yRun from:xStart to:xEnd do:[:xRun :rgb |
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10753
            aBlock value:xRun value:yRun value:rgb
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10754
        ]
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10755
    ]
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10756
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10757
    "Created: / 29-08-2017 / 14:39:34 / cg"
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10758
!
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10759
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10760
valueAtY:y from:x1 to:x2 do:aBlock
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10761
    "perform aBlock for each pixelValue from x1 to x2 in row y.
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 10762
     Obsolete - remains for backward compatibility."
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 10763
3433
809312fa7e4f Use <resource:#obsolete>
Stefan Vogel <sv@exept.de>
parents: 3426
diff changeset
 10764
    <resource:#obsolete>
809312fa7e4f Use <resource:#obsolete>
Stefan Vogel <sv@exept.de>
parents: 3426
diff changeset
 10765
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 10766
    self obsoleteMethodWarning:'use #valuesAtY:from:to:do:'.
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 10767
    self valuesAtY:y from:x1 to:x2 do:aBlock
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 10768
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 10769
    "Modified: 7.6.1996 / 19:11:06 / cg"
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 10770
!
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 10771
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 10772
valuesAtY:y from:x1 to:x2 do:aBlock
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10773
    "WARNING: this enumerates pixel values which need photometric interpretation
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10774
     Do not confuse with #rgbValuesAtY:from:to:do:
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10775
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10776
     Perform aBlock for each pixelValue from x1 to x2 in row y.
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10777
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10778
     Notice the difference between rgbValue and pixelValue: rgbValues are always
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10779
     the rgb bytes; pixelvalues depend on the photometric interpretation, and may be
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10780
     indices into a colormap or be non-byte-sized rgb values.
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10781
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 10782
     Notice that x and y coordinates start at 0@0 for the upper left corner.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10783
     The block is passed the x coordinate and the pixelValue at each pixel.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10784
     (see also Image>>atY:from:to:do:).
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10785
     The code here provides a generic and slow implementation, and
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10786
     should be redefined in concrete subclasses, to avoid some processing
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10787
     when going from pixel to pixel (i.e. the byte-index and mask computations)."
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10788
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10789
    |xStart "{Class: SmallInteger }"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10790
     xEnd   "{Class: SmallInteger }"|
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10791
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10792
    xStart := x1.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10793
    xEnd := x2.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10794
    xStart to:xEnd do:[:xRun |
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 10795
        aBlock value:xRun value:(self pixelAtX:xRun y:y)
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10796
    ]
692
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 10797
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10798
    "Created: / 07-06-1996 / 19:09:51 / cg"
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10799
    "Modified: / 24-04-1997 / 16:55:38 / cg"
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10800
    "Modified (comment): / 29-08-2017 / 14:44:50 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10801
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10802
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10803
valuesFromX:xStart y:yStart toX:xEnd y:yEnd do:aBlock
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10804
    "WARNING: this enumerates pixel values which need photometric interpretation
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10805
     Do not confuse with #rgbValuesAtY:from:to:do:
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10806
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10807
     Perform aBlock for each pixelValue in a rectangular area of the image.
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10808
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10809
     Notice the difference between rgbValue and pixelValue: rgbValues are always
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10810
     the rgb bytes; pixelvalues depend on the photometric interpretation, and may be
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10811
     indices into a colormap or be non-byte-sized rgb values.
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10812
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 10813
     Notice that x and y coordinates start at 0@0 for the upper left corner.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10814
     The block is passed the x and y coordinates and pixelValue at each pixel.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10815
     The code here provides a generic and slow implementation, and
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10816
     should be redefined in concrete subclasses, to avoid some processing
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10817
     when going from pixel to pixel (i.e. the byte-index and mask computations)."
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10818
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 10819
    |yS "{Class: SmallInteger }"
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 10820
     yE "{Class: SmallInteger }"|
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 10821
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 10822
    yS := yStart.
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 10823
    yE := yEnd.
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 10824
    yS to:yE do:[:yRun |
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 10825
        self valuesAtY:yRun from:xStart to:xEnd do:[:xRun :pixel |
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 10826
            aBlock value:xRun value:yRun value:pixel
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 10827
        ]
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10828
    ]
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 10829
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 10830
    "Modified: / 07-06-1996 / 19:09:29 / cg"
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 10831
    "Modified: / 31-01-2017 / 14:46:26 / stefan"
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10832
    "Modified (comment): / 29-08-2017 / 14:45:06 / cg"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
 10833
! !
48194c26a46c Initial revision
claus
parents:
diff changeset
 10834
3613
75f91a51b919 Allow #registerForFinalization for classes defining their own Lobby.
Stefan Vogel <sv@exept.de>
parents: 3611
diff changeset
 10835
!Image methodsFor:'finalization'!
75f91a51b919 Allow #registerForFinalization for classes defining their own Lobby.
Stefan Vogel <sv@exept.de>
parents: 3611
diff changeset
 10836
75f91a51b919 Allow #registerForFinalization for classes defining their own Lobby.
Stefan Vogel <sv@exept.de>
parents: 3611
diff changeset
 10837
finalizationLobby
75f91a51b919 Allow #registerForFinalization for classes defining their own Lobby.
Stefan Vogel <sv@exept.de>
parents: 3611
diff changeset
 10838
    "answer the registry used for finalization.
75f91a51b919 Allow #registerForFinalization for classes defining their own Lobby.
Stefan Vogel <sv@exept.de>
parents: 3611
diff changeset
 10839
     Images have their own Registry"
75f91a51b919 Allow #registerForFinalization for classes defining their own Lobby.
Stefan Vogel <sv@exept.de>
parents: 3611
diff changeset
 10840
75f91a51b919 Allow #registerForFinalization for classes defining their own Lobby.
Stefan Vogel <sv@exept.de>
parents: 3611
diff changeset
 10841
    ^ Lobby
75f91a51b919 Allow #registerForFinalization for classes defining their own Lobby.
Stefan Vogel <sv@exept.de>
parents: 3611
diff changeset
 10842
!
75f91a51b919 Allow #registerForFinalization for classes defining their own Lobby.
Stefan Vogel <sv@exept.de>
parents: 3611
diff changeset
 10843
75f91a51b919 Allow #registerForFinalization for classes defining their own Lobby.
Stefan Vogel <sv@exept.de>
parents: 3611
diff changeset
 10844
finalize
7483
0690072b1c56 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 7482
diff changeset
 10845
    "some Image has been collected - nothing to do.
0690072b1c56 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 7482
diff changeset
 10846
0690072b1c56 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 7482
diff changeset
 10847
     The only reason we register Images is, that we can release
0690072b1c56 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 7482
diff changeset
 10848
     their device resources when a GraphicsDevice is closed.
0690072b1c56 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 7482
diff changeset
 10849
0690072b1c56 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 7482
diff changeset
 10850
     (#releaseResourcesOnDevice: at class side)."
3613
75f91a51b919 Allow #registerForFinalization for classes defining their own Lobby.
Stefan Vogel <sv@exept.de>
parents: 3611
diff changeset
 10851
! !
75f91a51b919 Allow #registerForFinalization for classes defining their own Lobby.
Stefan Vogel <sv@exept.de>
parents: 3611
diff changeset
 10852
0
48194c26a46c Initial revision
claus
parents:
diff changeset
 10853
!Image methodsFor:'image manipulations'!
48194c26a46c Initial revision
claus
parents:
diff changeset
 10854
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 10855
applyPixelValuesTo:pixelFunctionBlock in:aRectangle into:newImage
1570
1aeaa96fa6fb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1510
diff changeset
 10856
    "helper for withPixelFunctionAppliedToValues:
1aeaa96fa6fb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1510
diff changeset
 10857
     enumerate pixelValues and evaluate the block for each.
3911
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 10858
     Could be redefined by subclasses for better performance."
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 10859
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 10860
    |w   "{Class: SmallInteger }"
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 10861
     h   "{Class: SmallInteger }"
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 10862
     x0  "{Class: SmallInteger }"
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 10863
     y0  "{Class: SmallInteger }"
3911
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 10864
     y   "{Class: SmallInteger }"
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 10865
     newPixel newPixelRow pixelRow|
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 10866
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 10867
    x0 := aRectangle left.
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 10868
    y0 := aRectangle top.
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 10869
    w := aRectangle width.
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 10870
    h := aRectangle height.
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 10871
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 10872
    newPixelRow := Array new:w.
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 10873
    pixelRow := self pixelArraySpecies new:width.
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 10874
3911
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 10875
    (x0 = 0 and:[w = self width]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10876
        "/ slightly faster
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10877
        y := y0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10878
        h timesRepeat:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10879
            self rowAt:y into:pixelRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10880
            1 to:w do:[:runCol |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10881
                newPixel := pixelFunctionBlock
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10882
                                value:self
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10883
                                value:(pixelRow at:runCol)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10884
                                value:(runCol-1)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10885
                                value:y.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10886
                newPixelRow at:runCol put:newPixel.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10887
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10888
            newImage rowAt:y putAll:newPixelRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10889
            y := y + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10890
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10891
        ^ self.
3911
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 10892
    ].
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 10893
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 10894
    y := y0.
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 10895
    h timesRepeat:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10896
        self rowAt:y into:pixelRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10897
        1 to:w do:[:runCol |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10898
            newPixel := pixelFunctionBlock
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10899
                            value:self
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10900
                            value:(pixelRow at:runCol+x0)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10901
                            value:(runCol+x0-1)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10902
                            value:y.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10903
            newPixelRow at:runCol put:newPixel.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10904
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10905
        pixelRow replaceFrom:x0+1 to:x0+1+w-1 with:newPixelRow startingAt:1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10906
        newImage rowAt:y putAll:pixelRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10907
        y := y + 1.
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 10908
    ].
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 10909
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 10910
    "Modified: 24.4.1997 / 16:18:31 / cg"
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 10911
!
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 10912
3911
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 10913
applyPixelValuesTo:pixelFunctionBlock into:newImage
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 10914
    "helper for withPixelFunctionAppliedToValues:
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 10915
     enumerate pixelValues and evaluate the block for each."
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 10916
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 10917
    ^ self
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10918
        applyPixelValuesTo:pixelFunctionBlock
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10919
        in:(0@0 corner:width@height)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10920
        into:newImage
3911
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 10921
!
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 10922
3256
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 10923
blendWith:aColor
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 10924
    "return a new image which is blended with some color.
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 10925
     The receiver must be a palette image (currently).
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 10926
     CAVEAT: this only works with palette images (i.e. not for rgb or greyScale).
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 10927
     CAVEAT: Need an argument, which specifies by how much it should be lighter."
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 10928
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 10929
     ^ self
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10930
        copyWithColorMapProcessing:[:clr | clr blendWith:aColor]
3256
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 10931
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 10932
    "
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 10933
     (Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') inspect
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 10934
     ((Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') blendWith:Color red) inspect
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 10935
     ((Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') blendWith:Color white) inspect
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 10936
     ((Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') blendWith:Color black) inspect
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 10937
    "
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 10938
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 10939
    "Modified: 24.4.1997 / 18:31:23 / cg"
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 10940
!
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 10941
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10942
colorMapProcessing:aBlock
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10943
    "a helper for all kinds of colormap manipulations.
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 10944
     The argument, aBlock is called for every colormap entry,
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
 10945
     and the returned value will replace the original entry in the map.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10946
     This will fail for non-palette images.
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
 10947
     See examples in Image>>copyWithColorMapProcessing:"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10948
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10949
    |nColors "{ Class: SmallInteger }"|
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10950
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10951
    colorMap isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10952
        self colorsFromX:0 y:0 toX:(self width-1) y:(self height-1) do:[:x :y :clr |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10953
            self colorAtX:x y:y put:(aBlock value:clr)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10954
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10955
        ^ self
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10956
    ].
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10957
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10958
    nColors := colorMap size.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10959
    1 to:nColors do:[:index |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10960
        |clr|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10961
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10962
        clr := colorMap at:index.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10963
        clr notNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10964
            colorMap at:index put:(aBlock value:clr)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10965
        ]
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10966
    ]
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
 10967
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
 10968
    "Modified: 23.4.1996 / 11:13:55 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10969
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10970
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
 10971
copyWithColorMapProcessing:aBlock
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 10972
    "a helper to create & return new images based on the receiver with
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
 10973
     some colorMap processing. The receiver is copied, and the copied images
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
 10974
     colormap is modified by replacing entries with the result of the processing block,
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
 10975
     which is called with the original color values. The block is supposed to return
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 10976
     a color.
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 10977
     CAVEAT: this only works with palette images (i.e. not for rgb or greyScale)"
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 10978
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 10979
    |newImage|
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 10980
4414
2c0f2ca53156 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4390
diff changeset
 10981
    self colorMap isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10982
        ^ self withPixelFunctionApplied:[:orig :clr :x :y | aBlock  value:clr]
4414
2c0f2ca53156 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4390
diff changeset
 10983
"/        self error:'no colormap in image'.
2c0f2ca53156 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4390
diff changeset
 10984
"/        ^ nil
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 10985
    ].
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 10986
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 10987
    "
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 10988
     the code below manipulates the colormap.
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 10989
     For non-palette images, special code is required
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 10990
    "
4414
2c0f2ca53156 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4390
diff changeset
 10991
    newImage := self copy.
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
 10992
    newImage colorMapProcessing:aBlock.
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 10993
    ^ newImage
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 10994
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 10995
    "
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 10996
     leave red component only:
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 10997
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 10998
     (Image fromFile:'goodies/bitmaps/gifImages/claus.gif')
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10999
        copyWithColorMapProcessing:[:clr | Color red:(clr red) green:0 blue:0]
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11000
    "
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
 11001
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11002
    "
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11003
     make it reddish:
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11004
6653
aa954269f3ce class: Image
Claus Gittinger <cg@exept.de>
parents: 6648
diff changeset
 11005
     |img imgYellow imgGreen imgBlue|
aa954269f3ce class: Image
Claus Gittinger <cg@exept.de>
parents: 6648
diff changeset
 11006
     img := (Image fromFile:'../../../expeccoNET/server/data/images/styles/eXept/defects.gif').
aa954269f3ce class: Image
Claus Gittinger <cg@exept.de>
parents: 6648
diff changeset
 11007
     imgYellow := img copyWithColorMapProcessing:[:clr | Color hue:(clr hue ? 0 + 60) light:clr light saturation:clr saturation].
aa954269f3ce class: Image
Claus Gittinger <cg@exept.de>
parents: 6648
diff changeset
 11008
     imgGreen := img copyWithColorMapProcessing:[:clr | Color hue:(clr hue ? 0 + 120) light:clr light saturation:clr saturation].
aa954269f3ce class: Image
Claus Gittinger <cg@exept.de>
parents: 6648
diff changeset
 11009
     imgBlue := img copyWithColorMapProcessing:[:clr | Color hue:(clr hue ? 0 + 240) light:clr light saturation:clr saturation].
aa954269f3ce class: Image
Claus Gittinger <cg@exept.de>
parents: 6648
diff changeset
 11010
     imgBlue
aa954269f3ce class: Image
Claus Gittinger <cg@exept.de>
parents: 6648
diff changeset
 11011
    "
aa954269f3ce class: Image
Claus Gittinger <cg@exept.de>
parents: 6648
diff changeset
 11012
aa954269f3ce class: Image
Claus Gittinger <cg@exept.de>
parents: 6648
diff changeset
 11013
    "
aa954269f3ce class: Image
Claus Gittinger <cg@exept.de>
parents: 6648
diff changeset
 11014
     make it reddish:
aa954269f3ce class: Image
Claus Gittinger <cg@exept.de>
parents: 6648
diff changeset
 11015
aa954269f3ce class: Image
Claus Gittinger <cg@exept.de>
parents: 6648
diff changeset
 11016
     (Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif')
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11017
        copyWithColorMapProcessing:[:clr | Color red:((clr red * 2) min:100) green:clr green blue:clr blue]
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11018
    "
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
 11019
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11020
    "
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11021
     invert:
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11022
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 11023
     (Image fromFile:'bitmaps/gifImages/claus.gif')
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11024
        copyWithColorMapProcessing:[:clr | Color red:(100 - clr red) green:(100 - clr green) blue:(100 - clr green)]
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11025
    "
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
 11026
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11027
    "
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11028
     lighter:
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11029
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 11030
     (Image fromFile:'bitmaps/gifImages/claus.gif')
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11031
        copyWithColorMapProcessing:[:clr | |r g b|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11032
                                                r := clr red.  g := clr green.  b := clr blue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11033
                                                Color red:(r + (100-r//2))
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11034
                                                      green:(g + (100-g//2))
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11035
                                                      blue:(b + (100-b//2))]
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11036
    "
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
 11037
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11038
    "
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11039
     darker:
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11040
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 11041
     (Image fromFile:'bitmaps/gifImages/claus.gif')
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11042
        copyWithColorMapProcessing:[:clr | Color red:(clr red//2) green:(clr green // 2) blue:(clr blue // 2)]
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11043
    "
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11044
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11045
    "Modified: 24.4.1997 / 18:28:05 / cg"
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11046
!
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11047
3457
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 11048
createMask
7995
2538002b8ba4 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7990
diff changeset
 11049
    "create a mask filled with ones (i.e. all pixels opaque)"
7907
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11050
    
3457
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 11051
    |maskArray bytesPerMaskRow|
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 11052
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 11053
    bytesPerMaskRow := (width+7) // 8.
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 11054
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 11055
    maskArray := ByteArray new:(bytesPerMaskRow * height) withAll:2r11111111.
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 11056
    mask := ImageMask width:width height:height fromArray:maskArray.
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 11057
    ^ mask
7907
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11058
7995
2538002b8ba4 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7990
diff changeset
 11059
    "Modified (comment): / 06-04-2017 / 13:05:42 / cg"
7907
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11060
!
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11061
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11062
createMaskForPixelValue:pixelValue
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11063
    "create or modify the mask to be off wherever the pixelValue appears.
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11064
     If there is already a mask, pixels which are already masked remain so.
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11065
     This is a helper for image readers which use a pixel index as mask,
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11066
     instead of a separate mask plane.
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11067
     
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11068
     This is a slow fallback, if it turns out to be timing relevant,
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11069
     redefine in concrete image classes (especially Depth8Image)"
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11070
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11071
    |mr|
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11072
    
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11073
    mask isNil ifTrue:[
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11074
        mask := self createMask.
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11075
    ].
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11076
    0 to:height-1 do:[:y |
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11077
        mr := mask rowAt:y.
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11078
        0 to:width-1 do:[:x |
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11079
            (self pixelAtX:x y:y) == pixelValue ifTrue:[
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11080
                mr at:x+1 put:0
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11081
            ].
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11082
        ].
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11083
        mask rowAt:y putAll:mr
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11084
    ].
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11085
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11086
    "Created: / 17-02-2017 / 11:19:09 / cg"
3457
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 11087
!
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 11088
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11089
darkened
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11090
    "return a new image which is slightly darker than the receiver.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11091
     The receiver must be a palette image (currently).
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11092
     CAVEAT: this only works with palette images (i.e. not for rgb or greyScale).
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
 11093
     CAVEAT: Need an argument, which specifies by how much it should be darker."
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11094
5655
37bd5c7eb765 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 5643
diff changeset
 11095
     ^ self copyWithColorMapProcessing:[:clr | clr darkened]
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11096
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11097
    "
3256
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 11098
     (Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') inspect
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 11099
     (Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') darkened inspect
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11100
    "
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11101
5655
37bd5c7eb765 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 5643
diff changeset
 11102
    "Modified: / 24-11-2010 / 11:06:58 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11103
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11104
7534
0b7e23635791 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7529
diff changeset
 11105
easyRotateBitsInto:destinationImage angle:degrees
7523
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11106
    "helper for rotation - does the actual pixel shuffling.
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11107
     by degrees clockwise. Here, only 90, 180 and 270 degrees
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11108
     are implemented. Hard angles are done in #hardRotate:.
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11109
     The code here is depth-independent (but not too fast);
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11110
     can be redefined in subclasses for more performance"
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11111
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11112
    |w  "{Class: SmallInteger }"
7529
5f77a718b7bd #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7523
diff changeset
 11113
     h  "{Class: SmallInteger }" 
5f77a718b7bd #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7523
diff changeset
 11114
     pixelMover|
7523
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11115
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11116
    w := width - 1.
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11117
    h := height - 1.
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11118
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11119
    degrees = 90 ifTrue:[
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11120
        pixelMover := [:col :row :pixel | destinationImage pixelAtX:(h-row) y:col put:pixel].    
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11121
    ] ifFalse:[
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11122
        degrees = 180 ifTrue:[
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11123
            pixelMover := [:col :row :pixel | destinationImage pixelAtX:(w-col) y:(h-row) put:pixel].    
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11124
        ] ifFalse:[
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11125
            degrees = 270 ifTrue:[
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11126
                pixelMover := [:col :row :pixel | destinationImage pixelAtX:row y:(w-col) put:pixel].    
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11127
            ] ifFalse:[
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11128
                ^ self
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11129
            ].
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11130
        ].
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11131
    ].    
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11132
    self valuesFromX:0 y:0 toX:w y:h do:pixelMover.
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11133
    ^ self.
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11134
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11135
    "
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11136
     |i|
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11137
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11138
     i := Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif'.
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11139
     i inspect.
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11140
     (i rotated:45) inspect.
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11141
     (i rotated:90) inspect.
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11142
     (i rotated:180) inspect.
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11143
     (i rotated:270) inspect.
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11144
    "
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11145
    "
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11146
     |i|
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11147
     i := Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif'.
7529
5f77a718b7bd #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7523
diff changeset
 11148
     i := Depth24Image fromImage:i.
7523
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11149
     Time millisecondsToRun:[ 100 timesRepeat:[ i rotated:90 ] ]
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11150
    "
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11151
    "
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11152
     |i|
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11153
     i := Image fromScreen.
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11154
     Time millisecondsToRun:[ 20 timesRepeat:[ i rotated:90 ] ]
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11155
    "
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11156
    
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11157
    "Created: 23.4.1997 / 14:36:45 / cg"
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11158
    "Modified: 24.4.1997 / 17:26:26 / cg"
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11159
!
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11160
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11161
flipHorizontal
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 11162
    "destructively inplace horizontal flip"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 11163
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 11164
    |h  "{Class: SmallInteger }"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 11165
     pixelArray|
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 11166
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11167
    h := height - 1.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11168
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 11169
    pixelArray := self pixelArraySpecies new:width.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 11170
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11171
    0 to:h do:[:row |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11172
        self rowAt:row into:pixelArray.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11173
        pixelArray reverse.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11174
        self rowAt:row putAll:pixelArray.
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 11175
    ].
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 11176
1386
51967fde82b7 also flip mask if present
Claus Gittinger <cg@exept.de>
parents: 1385
diff changeset
 11177
    mask notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11178
        mask flipHorizontal
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 11179
    ].
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 11180
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 11181
    "/ flush device info
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
 11182
    self release
1386
51967fde82b7 also flip mask if present
Claus Gittinger <cg@exept.de>
parents: 1385
diff changeset
 11183
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11184
    "
3476
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 11185
     (Image fromFile:'goodies/bitmaps/gifImages/garfield.gif') flipHorizontal inspect
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11186
    "
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11187
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11188
    "Modified: 24.4.1997 / 18:29:13 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11189
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11190
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11191
flipVertical
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11192
    "inplace vertical flip"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11193
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11194
    |h           "{Class: SmallInteger }"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11195
     bytesPerRow "{Class: SmallInteger }"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 11196
     buffer
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11197
     indexLow    "{Class: SmallInteger }"
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
 11198
     indexHi     "{Class: SmallInteger }"
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
 11199
     bytes|
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
 11200
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
 11201
    bytes := self bits.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11202
    bytesPerRow := self bytesPerRow.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11203
    buffer := ByteArray new:bytesPerRow.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11204
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11205
    h := height - 1.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11206
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11207
    indexLow := 1.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11208
    indexHi := bytesPerRow * h + 1.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11209
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11210
    0 to:(h // 2) do:[:row |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11211
        buffer replaceFrom:1 to:bytesPerRow with:bytes startingAt:indexLow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11212
        bytes replaceFrom:indexLow to:(indexLow + bytesPerRow - 1) with:bytes startingAt:indexHi.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11213
        bytes replaceFrom:indexHi to:(indexHi + bytesPerRow - 1) with:buffer startingAt:1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11214
        indexLow := indexLow + bytesPerRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11215
        indexHi := indexHi - bytesPerRow.
1386
51967fde82b7 also flip mask if present
Claus Gittinger <cg@exept.de>
parents: 1385
diff changeset
 11216
    ].
51967fde82b7 also flip mask if present
Claus Gittinger <cg@exept.de>
parents: 1385
diff changeset
 11217
    mask notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11218
        mask flipVertical
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11219
    ].
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11220
    "flush device info"
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
 11221
    self release
1386
51967fde82b7 also flip mask if present
Claus Gittinger <cg@exept.de>
parents: 1385
diff changeset
 11222
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11223
    "
3476
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 11224
     (Image fromFile:'goodies/bitmaps/gifImages/garfield.gif') flipVertical inspect
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11225
    "
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11226
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11227
    "Modified: 24.4.1997 / 18:29:36 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11228
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11229
1739
34165a3bb10b antiAliasing
Claus Gittinger <cg@exept.de>
parents: 1737
diff changeset
 11230
hardAntiAliasedMagnifiedBy:scalePoint
34165a3bb10b antiAliasing
Claus Gittinger <cg@exept.de>
parents: 1737
diff changeset
 11231
    "return a new image magnified and antiAliased by scalePoint, aPoint.
34165a3bb10b antiAliasing
Claus Gittinger <cg@exept.de>
parents: 1737
diff changeset
 11232
     This converts into a depth24Image before doing the antiAlias-magnify.
34165a3bb10b antiAliasing
Claus Gittinger <cg@exept.de>
parents: 1737
diff changeset
 11233
     It is definitely slower than the non antiAliasing/integral magnification methods."
34165a3bb10b antiAliasing
Claus Gittinger <cg@exept.de>
parents: 1737
diff changeset
 11234
8132
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11235
    ^ (Depth24Image fromImage:self) hardAntiAliasedMagnifiedBy:scalePoint
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11236
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11237
    "
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11238
     |i i1 i2|
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11239
     
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11240
     i := Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif'.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11241
     Transcript showCR:(
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11242
        Time millisecondsToRun:[
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11243
            i1 := i hardMagnifiedBy:3
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11244
        ]
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11245
     ).    
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11246
     i1 inspect.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11247
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11248
     Transcript showCR:(
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11249
        Time millisecondsToRun:[
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11250
            i2 := i hardAntiAliasedMagnifiedBy:3
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11251
        ]
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11252
     ).    
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11253
     i2 inspect.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11254
    "
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11255
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11256
    "Modified: / 02-06-1997 / 13:19:57 / cg"
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11257
    "Created: / 02-06-1997 / 15:53:34 / cg"
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11258
    "Modified (comment): / 30-08-2017 / 13:55:10 / cg"
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11259
!
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11260
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11261
hardMagnifiedBy:scaleArg
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11262
    "return a new image magnified by scalePoint, aPoint.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11263
     This is the general magnification method, handling non-integral values.
8132
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11264
     It is slower than the integral magnification method.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11265
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11266
     Notice: this is a naive algorithm, which simply samples the pixel value
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11267
     at the corresponding original pixel's point, without taking neighbors into
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11268
     consideration (i.e. it does not compute an average of those pixels).
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11269
     As a consequence, this will generate bad shrunk images when the original contains
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11270
     sharp lines."
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11271
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11272
    |scalePoint mX mY
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11273
     newWidth  "{ Class: SmallInteger }"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11274
     newHeight "{ Class: SmallInteger }"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11275
     w         "{ Class: SmallInteger }"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11276
     h         "{ Class: SmallInteger }"
906
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
 11277
     newImage newBits bitsPerPixel newBytesPerRow newMask
8132
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11278
     value srcRow pixelArray|
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11279
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11280
    scalePoint := scaleArg asPoint. 
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11281
    mX := scalePoint x.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11282
    mY := scalePoint y.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11283
    ((mX < 0) or:[mY < 0]) ifTrue:[^ nil].
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11284
    ((mX = 1) and:[mY = 1]) ifTrue:[^ self].
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11285
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11286
    newWidth := (width * mX) truncated.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11287
    newHeight := (height * mY) truncated.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11288
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11289
    bitsPerPixel := self depth.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11290
    newBytesPerRow := ((newWidth * bitsPerPixel) + 7) // 8.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11291
    newBits := ByteArray uninitializedNew:(newBytesPerRow * newHeight).
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11292
906
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
 11293
    mask notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11294
        newMask := (mask magnifiedBy:scalePoint)
906
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
 11295
    ].
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
 11296
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11297
    newImage := self species new.
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 11298
    newImage
8132
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11299
        width:newWidth height:newHeight photometric:photometric
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11300
        samplesPerPixel:samplesPerPixel bitsPerSample:bitsPerSample
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11301
        colorMap:colorMap copy
8132
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11302
        bits:newBits mask:newMask.
905
228d503775d9 everywhere you go: always magnify the mask with you ...
Claus Gittinger <cg@exept.de>
parents: 904
diff changeset
 11303
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11304
    "walk over destination image fetching pixels from source image"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11305
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11306
    w := newWidth - 1.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11307
    h := newHeight - 1.
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 11308
    pixelArray := newImage pixelArraySpecies new:newWidth.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11309
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11310
    0 to:h do:[:row |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11311
        srcRow := (row // mY).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11312
        0 to:w do:[:col |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11313
            value := self pixelAtX:(col // mX) y:srcRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11314
            pixelArray at:(col+1) put:value.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11315
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11316
        newImage rowAt:row putAll:pixelArray.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11317
    ].
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11318
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11319
    ^ newImage
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11320
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 11321
    "
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 11322
     |i|
8132
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11323
     i := Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif'.
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 11324
     Time millisecondsToRun:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11325
         i := i hardMagnifiedBy:0.5@0.5
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11326
     ].
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11327
     i
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11328
    "
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11329
8132
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11330
    "Modified (comment): / 30-08-2017 / 13:31:20 / cg"
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11331
!
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11332
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11333
hardMagnifiedBy:scaleArg smooth:smoothBoolean
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11334
    "return a new image magnified by scalePoint, aPoint.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11335
     This is the general magnification method, handling non-integral values.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11336
     It is slower than the integral magnification method.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11337
     
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11338
     If smoothBoolean is true, an improved algorithm is used, 
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11339
     which averages the pixels if shrinking or interpolates if expanding 
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11340
     (i.e. it smoothens when resampling) and this should generate nicer shrunk 
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11341
     images when the original contains sharp lines.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11342
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11343
     If it is false, a naive subsampling is performed, which is much faster, 
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11344
     but produces ugly magnifications (and especially: ugly shrunk versions)
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11345
     "
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11346
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11347
    smoothBoolean ifFalse:[
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11348
        ^ self hardMagnifiedBy:scaleArg
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11349
    ].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11350
    ^ self hardSmoothingMagnifiedBy:scaleArg
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11351
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11352
    "Created: / 30-08-2017 / 13:29:22 / cg"
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11353
    "Modified: / 30-08-2017 / 15:04:48 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11354
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11355
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11356
hardRotated:degrees
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11357
    "return a new image from the old one, by rotating the image
4953
b5017336aa26 comment
Claus Gittinger <cg@exept.de>
parents: 4952
diff changeset
 11358
     degrees clockwise (around its center).
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11359
     Warning: the returned image will be larger than the original image."
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11360
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11361
    |p r a aN p1 p2 p3 p4 maxX minX maxY minY
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 11362
     newImage
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11363
     newWidth  "{ Class: SmallInteger }"
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11364
     newHeight "{ Class: SmallInteger }"
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11365
     myDepth   "{ Class: SmallInteger }"
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11366
     newBytesPerRow newBits
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11367
     blackPixel halfW halfH radians t bad
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11368
     bytesPerRow maskBits
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11369
     pX pY srcX srcY pix nX nY newMask|
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 11370
4108
117f170e2122 Use #theta inseat of obsolete #angle.
Stefan Vogel <sv@exept.de>
parents: 4033
diff changeset
 11371
    radians := degrees degreesToRadians.
117f170e2122 Use #theta inseat of obsolete #angle.
Stefan Vogel <sv@exept.de>
parents: 4033
diff changeset
 11372
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11373
    "/ placing the image at the origin,
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11374
    "/ compute the diagonal and angle.
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11375
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11376
    p := ((width - 1) / 2) @ ((height - 1) / 2).
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11377
    r := p r.
4108
117f170e2122 Use #theta inseat of obsolete #angle.
Stefan Vogel <sv@exept.de>
parents: 4033
diff changeset
 11378
    a := p theta.
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11379
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 11380
    "/ add the rotation
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11381
    "/ (sigh - subtract, we defined things clockwise ...
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11382
    "/  ... in contrast to point which thinks counter-clockwise)
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11383
4108
117f170e2122 Use #theta inseat of obsolete #angle.
Stefan Vogel <sv@exept.de>
parents: 4033
diff changeset
 11384
    aN := a - radians.
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11385
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11386
    "/ compute new corner points
4108
117f170e2122 Use #theta inseat of obsolete #angle.
Stefan Vogel <sv@exept.de>
parents: 4033
diff changeset
 11387
    p1 := Point r:r theta:aN.         "/ rotated topRight
117f170e2122 Use #theta inseat of obsolete #angle.
Stefan Vogel <sv@exept.de>
parents: 4033
diff changeset
 11388
    p2 := Point r:r theta:aN-a-a.     "/ rotated bottomRight
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11389
    p3 := p1 negated.                 "/ rotated bottomLeft
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11390
    p4 := p2 negated.                 "/ rotated topLeft
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11391
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11392
    "/ compute the boundary of the new image
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11393
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11394
    maxX := minX := p1 x.
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11395
    (t := p2 x) > maxX ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11396
        maxX := t
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11397
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11398
        t < minX ifTrue:[minX := t].
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11399
    ].
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11400
    (t := p3 x) > maxX ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11401
        maxX := t
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11402
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11403
        t < minX ifTrue:[minX := t].
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11404
    ].
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11405
    (t := p4 x) > maxX ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11406
        maxX := t
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11407
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11408
        t < minX ifTrue:[minX := t].
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11409
    ].
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11410
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11411
    maxY := minY := p1 y.
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11412
    (t := p2 y) > maxY ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11413
        maxY := t
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11414
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11415
        t < minY ifTrue:[minY := t].
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11416
    ].
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11417
    (t := p3 y) > maxY ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11418
        maxY := t
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11419
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11420
        t < minY ifTrue:[minY := t].
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11421
    ].
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11422
    (t := p4 y) > maxY ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11423
        maxY := t
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11424
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11425
        t < minY ifTrue:[minY := t].
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11426
    ].
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11427
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11428
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11429
    newWidth := (maxX - minX) rounded + 1.
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11430
    newHeight := (maxY - minY) rounded + 1.
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11431
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11432
    myDepth := self depth.
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11433
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11434
    mask notNil ifTrue:[
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11435
        newMask := mask rotated:degrees.
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11436
    ] ifFalse:[
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11437
        (myDepth ~~ 1 and:[self isMask not]) ifTrue:[
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11438
            newMask := ImageMask width:width height:height.
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11439
            newMask bits:(maskBits := ByteArray new:(newMask bytesPerRow * height)).
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11440
            maskBits atAllPut:16rFF.
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11441
            newMask := newMask rotated:degrees.
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11442
        ].
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11443
    ].
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11444
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11445
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11446
    newImage := self species new.
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11447
    newImage 
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11448
        width:newWidth
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11449
        height:newHeight
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11450
        photometric:photometric
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11451
        samplesPerPixel:samplesPerPixel
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11452
        bitsPerSample:bitsPerSample
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11453
        colorMap:colorMap copy
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11454
        bits:nil
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11455
        mask:newMask;
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11456
        maskedPixelsAre0:self maskedPixelsAre0;
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11457
        createPixelStore.
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11458
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11459
    newBytesPerRow := newImage bytesPerRow.
3912
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
 11460
    newBits := newImage bits.
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11461
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11462
    (myDepth == 1 or:[self maskedPixelsAre0 or:[self isMask]]) ifTrue:[
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11463
        blackPixel := 0.
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11464
    ] ifFalse:[
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11465
        blackPixel := self valueFromColor:Color black.
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11466
        blackPixel isNil ifTrue:[
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11467
            blackPixel := self valueFromColor:Color white.
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11468
            blackPixel isNil ifTrue:[
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11469
                blackPixel := 0.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11470
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11471
        ]
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11472
    ].
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11473
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11474
"/ already filled with 0
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11475
"/    newBits atAllPut:0.
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11476
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11477
    "/ now, walk over destination pixels,
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 11478
    "/ fetching from source.
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 11479
    "/ (if we walked over the source, we could get holes
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 11480
    "/  in the destination image ...)
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11481
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11482
    halfW := (width - 1) / 2.0.
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11483
    halfH := (height - 1) / 2.0.
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11484
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11485
    bytesPerRow := self bytesPerRow.
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11486
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11487
%{
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 11488
    double sin(), cos();
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11489
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11490
    bad = true;
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11491
    if (1
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 11492
     && __isFloat(minX)
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11493
     && __isFloat(minY)
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11494
     && __isFloat(radians)
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11495
     && __isFloat(halfW)
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11496
     && __isFloat(halfH)
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11497
     && __isByteArray(newBits)
5476
06e08505bc6f __isByteArray() to __isByteArrayLike() in primitive code
Stefan Vogel <sv@exept.de>
parents: 5352
diff changeset
 11498
     && __isByteArrayLike(__INST(bytes))) {
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11499
        int __dstX, __dstY, __dstMask;
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11500
        unsigned char *__dstPtr;
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11501
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11502
        int __newHeight = __intVal(newHeight);
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11503
        int __newWidth = __intVal(newWidth);
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11504
        int __height = __intVal(__INST(height));
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11505
        int __width = __intVal(__INST(width));
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11506
        int __depth = __intVal(myDepth);
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11507
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11508
        unsigned char *__srcBytes = __ByteArrayInstPtr(__INST(bytes))->ba_element;
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11509
        unsigned char *__dstBytes = __ByteArrayInstPtr(newBits)->ba_element;
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11510
        int __nSrcBytes = __byteArraySize(__INST(bytes));
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11511
        int __nDstBytes = __byteArraySize(newBits);
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11512
        int __srcBytesPerRow = __intVal(bytesPerRow);
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11513
        int __dstBytesPerRow = __intVal(newBytesPerRow);
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11514
        int __blackPixel = __intVal(blackPixel);
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11515
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11516
        double __radians = - __floatVal(radians);   /* sigh: clock-wise */
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11517
        double __sin = sin(__radians);
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11518
        double __cos = cos(__radians);
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11519
        double __minX = __floatVal(minX);
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11520
        double __minY = __floatVal(minY);
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11521
        double __halfW = __floatVal(halfW);
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11522
        double __halfH = __floatVal(halfH);
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11523
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11524
        unsigned char *__dstRowPtr = __dstBytes;
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11525
        unsigned char *__dstEndPtr = __dstBytes + __nDstBytes;
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 11526
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 11527
#       define EARLY_OUT
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 11528
#       define FAST_ADVANCE 5
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 11529
#       define FAST_ADVANCE2
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 11530
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11531
        switch (__depth) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11532
            case 8:
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11533
                for (__dstY = 0; __dstY < __newHeight; __dstY++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11534
                    double __pY, __sinPY, __cosPY;
1639
c47081269ada faster rotation - early break from loop
Claus Gittinger <cg@exept.de>
parents: 1638
diff changeset
 11535
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11536
                    int didFetchInRow = 0;
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 11537
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11538
                    __pY = (double)(__dstY + __minY);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11539
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11540
                    __sinPY = __sin * __pY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11541
                    __cosPY = __cos * __pY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11542
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11543
                    __dstPtr = __dstRowPtr;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11544
                    __dstRowPtr += __dstBytesPerRow;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11545
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11546
                    for (__dstX = 0; __dstX < __newWidth; __dstX++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11547
                        double __pX, __nX;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11548
                        unsigned __pix;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11549
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11550
                        /* translate X in destination (center to 0/0) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11551
                        __pX = (double)(__dstX + __minX);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11552
                        /* rotate X */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11553
                        __nX = (__cos * __pX) - __sinPY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11554
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11555
                        /* translate X in source (origin to 0/0) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11556
                        __nX = __nX + __halfW + 0.5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11557
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11558
                        /* inside ? */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11559
                        if (__nX < 0) {
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 11560
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11561
                            if (didFetchInRow) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11562
                                break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11563
                            }
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 11564
#endif
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 11565
#ifdef FAST_ADVANCE
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11566
                            if (__blackPixel == 0) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11567
                                do {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11568
                                    /* try advance by FAST_ADVANCE pixels ... */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11569
                                    __dstX += FAST_ADVANCE; __dstPtr += FAST_ADVANCE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11570
                                    if (__dstX >= __newWidth) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11571
                                        break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11572
                                    }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11573
                                    __pX = (double)(__dstX + __minX);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11574
                                    __nX = (__cos * __pX) - __sinPY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11575
                                    __nX = __nX + __halfW + 0.5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11576
                                } while (__nX < 0);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11577
                                __dstX -= FAST_ADVANCE; __dstPtr -= FAST_ADVANCE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11578
                            }
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 11579
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11580
                            __pix = __blackPixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11581
                        } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11582
                            int __srcX;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11583
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11584
                            __srcX = (int)__nX;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11585
                            /* inside ? */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11586
                            if (__srcX >= __width) {
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 11587
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11588
                                if (didFetchInRow) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11589
                                    break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11590
                                }
1639
c47081269ada faster rotation - early break from loop
Claus Gittinger <cg@exept.de>
parents: 1638
diff changeset
 11591
#endif
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 11592
#ifdef FAST_ADVANCE2
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11593
                                if (__blackPixel == 0) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11594
                                    do {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11595
                                        /* try advance by FAST_ADVANCE pixels ... */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11596
                                        __dstX += FAST_ADVANCE; __dstPtr += FAST_ADVANCE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11597
                                        if (__dstX >= __newWidth) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11598
                                            break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11599
                                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11600
                                        __pX = (double)(__dstX + __minX);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11601
                                        __nX = (__cos * __pX) - __sinPY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11602
                                        __nX = __nX + __halfW + 0.5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11603
                                        __srcX = (int)__nX;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11604
                                    } while (__srcX >= __width);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11605
                                    __dstX -= FAST_ADVANCE; __dstPtr -= FAST_ADVANCE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11606
                                }
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 11607
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11608
                                __pix = __blackPixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11609
                            } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11610
                                double __nY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11611
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11612
                                /* rotate Y */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11613
                                __nY = (__sin * __pX) + __cosPY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11614
                                /* translate Y in source (origin to 0/0) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11615
                                __nY = __nY + __halfH + 0.5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11616
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11617
                                /* inside ? */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11618
                                if (__nY < 0) {
1639
c47081269ada faster rotation - early break from loop
Claus Gittinger <cg@exept.de>
parents: 1638
diff changeset
 11619
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11620
                                    if (didFetchInRow) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11621
                                        break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11622
                                    }
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 11623
#endif
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 11624
#ifdef FAST_ADVANCE2
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11625
                                    if (__blackPixel == 0) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11626
                                        do {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11627
                                            /* try advance by FAST_ADVANCE pixels ... */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11628
                                            __dstX += FAST_ADVANCE; __dstPtr += FAST_ADVANCE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11629
                                            if (__dstX >= __newWidth) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11630
                                                break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11631
                                            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11632
                                            __pX = (double)(__dstX + __minX);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11633
                                            __nY = (__sin * __pX) + __cosPY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11634
                                            __nY = __nY + __halfH + 0.5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11635
                                        } while (__nY < 0);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11636
                                        __dstX -= FAST_ADVANCE; __dstPtr -= FAST_ADVANCE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11637
                                    }
1639
c47081269ada faster rotation - early break from loop
Claus Gittinger <cg@exept.de>
parents: 1638
diff changeset
 11638
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11639
                                    __pix = __blackPixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11640
                                } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11641
                                    int __srcY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11642
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11643
                                    __srcY = (int)__nY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11644
                                    /* inside ? */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11645
                                    if (__srcY >= __height) {
1639
c47081269ada faster rotation - early break from loop
Claus Gittinger <cg@exept.de>
parents: 1638
diff changeset
 11646
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11647
                                        if (didFetchInRow) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11648
                                            break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11649
                                        }
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11650
#endif
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 11651
#ifdef FAST_ADVANCE
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11652
                                        if (__blackPixel == 0) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11653
                                            do {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11654
                                                /* try advance by FAST_ADVANCE pixels ... */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11655
                                                __dstX += FAST_ADVANCE; __dstPtr += FAST_ADVANCE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11656
                                                if (__dstX >= __newWidth) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11657
                                                    break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11658
                                                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11659
                                                __pX = (double)(__dstX + __minX);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11660
                                                __nY = (__sin * __pX) + __cosPY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11661
                                                __nY = __nY + __halfH + 0.5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11662
                                                __srcY = (int)__nY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11663
                                            } while (__srcY >= __height);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11664
                                            __dstX -= FAST_ADVANCE; __dstPtr -= FAST_ADVANCE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11665
                                        }
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 11666
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11667
                                        __pix = __blackPixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11668
                                    } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11669
                                        /* fetch source pixel */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11670
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11671
                                        int idx;
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 11672
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11673
                                        didFetchInRow = 1;
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 11674
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11675
                                        idx = __srcY * __srcBytesPerRow + __srcX;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11676
                                        if ((unsigned)idx < __nSrcBytes) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11677
                                            __pix = __srcBytes[idx];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11678
                                        } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11679
                                            __pix = __blackPixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11680
                                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11681
                                    }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11682
                                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11683
                            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11684
                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11685
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11686
                        if (__pix != 0) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11687
                            *__dstPtr = __pix;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11688
                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11689
                        __dstPtr++;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11690
                    }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11691
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11692
                break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11693
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11694
            case 1:
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11695
                for (__dstY = 0; __dstY < __newHeight; __dstY++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11696
                    double __pY, __sinPY, __cosPY;
1639
c47081269ada faster rotation - early break from loop
Claus Gittinger <cg@exept.de>
parents: 1638
diff changeset
 11697
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11698
                    int didFetchInRow = 0;
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 11699
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11700
                    __pY = (double)(__dstY + __minY);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11701
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11702
                    __sinPY = __sin * __pY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11703
                    __cosPY = __cos * __pY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11704
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11705
                    __dstPtr = __dstRowPtr;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11706
                    __dstMask = 0x80;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11707
                    __dstRowPtr += __dstBytesPerRow;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11708
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11709
                    for (__dstX = 0; __dstX < __newWidth; __dstX++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11710
                        double __pX, __nX;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11711
                        int __pix;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11712
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11713
                        /* translate X in destination (center to 0/0) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11714
                        __pX = (double)(__dstX + __minX);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11715
                        /* rotate X */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11716
                        __nX = (__cos * __pX) - __sinPY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11717
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11718
                        /* translate X in source (origin to 0/0) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11719
                        __nX = __nX + __halfW + 0.5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11720
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11721
                        /* inside ? */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11722
                        if (__nX < 0) {
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 11723
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11724
                            if (didFetchInRow) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11725
                                break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11726
                            }
1653
7ab13998d4cd d24 rotation fixed
Claus Gittinger <cg@exept.de>
parents: 1650
diff changeset
 11727
#endif
7ab13998d4cd d24 rotation fixed
Claus Gittinger <cg@exept.de>
parents: 1650
diff changeset
 11728
#ifdef FAST_ADVANCE
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11729
                            if (__blackPixel == 0) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11730
                                do {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11731
                                    /* try advance by 8 pixels ... */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11732
                                    __dstX += 8; __dstPtr ++;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11733
                                    if (__dstX >= __newWidth) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11734
                                        break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11735
                                    }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11736
                                    __pX = (double)(__dstX + __minX);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11737
                                    __nX = (__cos * __pX) - __sinPY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11738
                                    __nX = __nX + __halfW + 0.5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11739
                                } while (__nX < 0);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11740
                                __dstX -= 8; __dstPtr--;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11741
                            }
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11742
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11743
                            __pix = __blackPixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11744
                        } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11745
                            int __srcX;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11746
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11747
                            __srcX = (int)__nX;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11748
                            /* inside ? */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11749
                            if (__srcX >= __width) {
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 11750
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11751
                                if (didFetchInRow) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11752
                                    break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11753
                                }
1653
7ab13998d4cd d24 rotation fixed
Claus Gittinger <cg@exept.de>
parents: 1650
diff changeset
 11754
#endif
7ab13998d4cd d24 rotation fixed
Claus Gittinger <cg@exept.de>
parents: 1650
diff changeset
 11755
#ifdef FAST_ADVANCE2
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11756
                                if (__blackPixel == 0) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11757
                                    do {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11758
                                        /* try advance by 8 pixels ... */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11759
                                        __dstX += 8; __dstPtr++;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11760
                                        if (__dstX >= __newWidth) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11761
                                            break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11762
                                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11763
                                        __pX = (double)(__dstX + __minX);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11764
                                        __nX = (__cos * __pX) - __sinPY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11765
                                        __nX = __nX + __halfW + 0.5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11766
                                        __srcX = (int)__nX;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11767
                                    } while (__srcX >= __width);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11768
                                    __dstX -= 8; __dstPtr--;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11769
                                }
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 11770
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11771
                                __pix = __blackPixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11772
                            } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11773
                                double __nY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11774
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11775
                                /* rotate Y */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11776
                                __nY = (__sin * __pX) + __cosPY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11777
                                /* translate Y in source (origin to 0/0) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11778
                                __nY = __nY + __halfH + 0.5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11779
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11780
                                /* inside ? */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11781
                                if (__nY < 0) {
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 11782
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11783
                                    if (didFetchInRow) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11784
                                        break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11785
                                    }
1653
7ab13998d4cd d24 rotation fixed
Claus Gittinger <cg@exept.de>
parents: 1650
diff changeset
 11786
#endif
7ab13998d4cd d24 rotation fixed
Claus Gittinger <cg@exept.de>
parents: 1650
diff changeset
 11787
#ifdef FAST_ADVANCE2
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11788
                                    if (__blackPixel == 0) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11789
                                        do {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11790
                                            /* try advance by 8 pixels ... */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11791
                                            __dstX += 8; __dstPtr++;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11792
                                            if (__dstX >= __newWidth) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11793
                                                break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11794
                                            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11795
                                            __pX = (double)(__dstX + __minX);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11796
                                            __nY = (__sin * __pX) + __cosPY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11797
                                            __nY = __nY + __halfH + 0.5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11798
                                        } while (__nY < 0);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11799
                                        __dstX -= 8; __dstPtr--;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11800
                                    }
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 11801
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11802
                                    __pix = __blackPixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11803
                                } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11804
                                    int __srcY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11805
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11806
                                    __srcY = (int)__nY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11807
                                    /* inside ? */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11808
                                    if (__srcY >= __height) {
1639
c47081269ada faster rotation - early break from loop
Claus Gittinger <cg@exept.de>
parents: 1638
diff changeset
 11809
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11810
                                        if (didFetchInRow) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11811
                                            break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11812
                                        }
1653
7ab13998d4cd d24 rotation fixed
Claus Gittinger <cg@exept.de>
parents: 1650
diff changeset
 11813
#endif
7ab13998d4cd d24 rotation fixed
Claus Gittinger <cg@exept.de>
parents: 1650
diff changeset
 11814
#ifdef FAST_ADVANCE
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11815
                                        if (__blackPixel == 0) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11816
                                            do {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11817
                                                /* try advance by 8 pixels ... */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11818
                                                __dstX += 8; __dstPtr++;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11819
                                                if (__dstX >= __newWidth) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11820
                                                    break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11821
                                                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11822
                                                __pX = (double)(__dstX + __minX);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11823
                                                __nY = (__sin * __pX) + __cosPY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11824
                                                __nY = __nY + __halfH + 0.5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11825
                                                __srcY = (int)__nY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11826
                                            } while (__srcY >= __height);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11827
                                            __dstX -= 8; __dstPtr--;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11828
                                        }
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 11829
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11830
                                        __pix = __blackPixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11831
                                    } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11832
                                        /* fetch source pixel */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11833
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11834
                                        int idx, pV;
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 11835
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11836
                                        didFetchInRow = 1;
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 11837
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11838
                                        idx = __srcY * __srcBytesPerRow + (__srcX >> 3);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11839
                                        if ((unsigned)idx < __nSrcBytes) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11840
                                            pV = __srcBytes[idx];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11841
                                            __pix = (pV & (0x80 >> (__srcX & 7))) ? 1 : 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11842
                                        } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11843
                                            __pix = __blackPixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11844
                                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11845
                                    }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11846
                                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11847
                            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11848
                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11849
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11850
                        /* store pixel */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11851
                        if (__pix != 0) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11852
                            *__dstPtr |= __dstMask;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11853
                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11854
                        __dstMask >>= 1;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11855
                        if (__dstMask == 0) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11856
                            __dstMask = 0x80;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11857
                            __dstPtr++;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11858
                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11859
                    }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11860
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11861
                break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11862
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11863
            case 24:
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11864
                for (__dstY = 0; __dstY < __newHeight; __dstY++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11865
                    double __pY, __sinPY, __cosPY;
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 11866
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11867
                    int didFetchInRow = 0;
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 11868
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11869
                    __pY = (double)(__dstY + __minY);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11870
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11871
                    __sinPY = __sin * __pY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11872
                    __cosPY = __cos * __pY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11873
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11874
                    __dstPtr = __dstRowPtr;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11875
                    __dstRowPtr += __dstBytesPerRow;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11876
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11877
                    for (__dstX = 0; __dstX < __newWidth; __dstX++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11878
                        double __pX, __nX;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11879
                        unsigned __pix;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11880
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11881
                        /* translate X in destination (center to 0/0) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11882
                        __pX = (double)(__dstX + __minX);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11883
                        /* rotate X */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11884
                        __nX = (__cos * __pX) - __sinPY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11885
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11886
                        /* translate X in source (origin to 0/0) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11887
                        __nX = __nX + __halfW + 0.5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11888
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11889
                        /* inside ? */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11890
                        if (__nX < 0) {
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 11891
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11892
                            if (didFetchInRow) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11893
                                break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11894
                            }
1639
c47081269ada faster rotation - early break from loop
Claus Gittinger <cg@exept.de>
parents: 1638
diff changeset
 11895
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11896
                            __pix = __blackPixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11897
                        } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11898
                            int __srcX;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11899
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11900
                            __srcX = (int)__nX;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11901
                            /* inside ? */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11902
                            if (__srcX >= __width) {
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 11903
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11904
                                if (didFetchInRow) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11905
                                    break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11906
                                }
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 11907
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11908
                                __pix = __blackPixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11909
                            } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11910
                                double __nY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11911
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11912
                                /* rotate Y */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11913
                                __nY = (__sin * __pX) + __cosPY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11914
                                /* translate Y in source (origin to 0/0) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11915
                                __nY = __nY + __halfH + 0.5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11916
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11917
                                /* inside ? */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11918
                                if (__nY < 0) {
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 11919
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11920
                                    if (didFetchInRow) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11921
                                        break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11922
                                    }
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 11923
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11924
                                    __pix = __blackPixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11925
                                } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11926
                                    int __srcY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11927
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11928
                                    __srcY = (int)__nY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11929
                                    /* inside ? */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11930
                                    if (__srcY >= __height) {
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 11931
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11932
                                        if (didFetchInRow) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11933
                                            break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11934
                                        }
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 11935
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11936
                                        __pix = __blackPixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11937
                                    } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11938
                                        /* fetch source pixel */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11939
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11940
                                        int idx;
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 11941
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11942
                                        didFetchInRow = 1;
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 11943
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11944
                                        idx = __srcY * __srcBytesPerRow + __srcX + __srcX + __srcX;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11945
                                        if ((unsigned)idx < __nSrcBytes) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11946
                                            __pix = __srcBytes[idx];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11947
                                            __pix = (__pix<<8) | __srcBytes[idx+1];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11948
                                            __pix = (__pix<<8) | __srcBytes[idx+2];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11949
                                        } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11950
                                            __pix = __blackPixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11951
                                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11952
                                    }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11953
                                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11954
                            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11955
                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11956
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11957
                        /* store pixel */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11958
                        if (__pix != 0) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11959
                            __dstPtr[0] = (__pix >> 16 & 0xFF);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11960
                            __dstPtr[1] = (__pix >> 8) & 0xFF;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11961
                            __dstPtr[2] = __pix & 0xFF;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11962
                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11963
                        __dstPtr += 3;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11964
                    }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11965
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11966
                break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11967
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11968
            default:
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11969
                for (__dstY = 0; __dstY < __newHeight; __dstY++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11970
                    double __pY, __sinPY, __cosPY;
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 11971
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11972
                    int didFetchInRow = 0;
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 11973
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11974
                    __pY = (double)(__dstY + __minY);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11975
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11976
                    __sinPY = __sin * __pY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11977
                    __cosPY = __cos * __pY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11978
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11979
                    __dstPtr = __dstRowPtr;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11980
                    __dstMask = 0x80;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11981
                    __dstRowPtr += __dstBytesPerRow;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11982
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11983
                    for (__dstX = 0; __dstX < __newWidth; __dstX++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11984
                        double __pX, __nX;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11985
                        OBJ __pix;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11986
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11987
                        /* translate X in destination (center to 0/0) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11988
                        __pX = (double)(__dstX + __minX);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11989
                        /* rotate X */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11990
                        __nX = (__cos * __pX) - __sinPY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11991
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11992
                        /* translate X in source (origin to 0/0) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11993
                        __nX = __nX + __halfW + 0.5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11994
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11995
                        /* inside ? */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11996
                        if (__nX < 0) {
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 11997
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11998
                            if (didFetchInRow) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11999
                                break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12000
                            }
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 12001
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12002
                            __pix = blackPixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12003
                        } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12004
                            int __srcX;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12005
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12006
                            __srcX = (int)__nX;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12007
                            /* inside ? */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12008
                            if (__srcX >= __width) {
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 12009
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12010
                                if (didFetchInRow) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12011
                                    break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12012
                                }
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 12013
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12014
                                __pix = blackPixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12015
                            } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12016
                                double __nY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12017
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12018
                                /* rotate Y */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12019
                                __nY = (__sin * __pX) + __cosPY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12020
                                /* translate Y in source (origin to 0/0) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12021
                                __nY = __nY + __halfH + 0.5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12022
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12023
                                /* inside ? */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12024
                                if (__nY < 0) {
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 12025
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12026
                                    if (didFetchInRow) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12027
                                        break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12028
                                    }
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 12029
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12030
                                    __pix = blackPixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12031
                                } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12032
                                    int __srcY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12033
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12034
                                    __srcY = (int)__nY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12035
                                    /* inside ? */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12036
                                    if (__srcY >= __height) {
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 12037
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12038
                                        if (didFetchInRow) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12039
                                            break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12040
                                        }
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 12041
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12042
                                        __pix = blackPixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12043
                                    } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12044
                                        /* fetch source pixel */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12045
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12046
                                        static struct inlineCache valAt = _ILC2;
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12047
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12048
                                        didFetchInRow = 1;
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12049
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12050
                                        __pix = (*valAt.ilc_func)(self,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12051
                                                              @symbol(pixelAtX:y:),
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12052
                                                              nil, &valAt,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12053
                                                              __MKSMALLINT(__srcX),
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12054
                                                              __MKSMALLINT(__srcY));
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12055
                                    }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12056
                                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12057
                            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12058
                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12059
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12060
                        /* store pixel */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12061
                        {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12062
                            static struct inlineCache atPutVal = _ILC3;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12063
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12064
                            if (__pix != __MKSMALLINT(0)) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12065
                                (*atPutVal.ilc_func)(newImage,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12066
                                                      @symbol(pixelAtX:y:put:),
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12067
                                                      nil, &atPutVal,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12068
                                                      __MKSMALLINT(__dstX),
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12069
                                                      __MKSMALLINT(__dstY),
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12070
                                                      __pix
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12071
                                                     );
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12072
                            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12073
                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12074
                    }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12075
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12076
                break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12077
        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12078
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12079
        bad = false;
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12080
    }
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12081
%}.
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12082
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12083
    bad ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12084
        "/ should not happen
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12085
        self primitiveFailed
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12086
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12087
"/        sinRot := radians negated sin.
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12088
"/        cosRot := radians negated cos.
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12089
"/
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12090
"/        0 to:newHeight-1 do:[:dstY |
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12091
"/            pY := (dstY + minY).
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12092
"/            sinPY := (sinRot * pY).
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12093
"/            cosPY := (cosRot * pY).
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12094
"/
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12095
"/            0 to:newWidth-1 do:[:dstX |
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12096
"/
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12097
"/                "/ translate center to origin
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12098
"/                pX := (dstX + minX).
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12099
"/
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12100
"/                nX := (cosRot * pX) - sinPY.
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12101
"/
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12102
"/                "/ translate in source
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12103
"/                srcX := nX + halfW.
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12104
"/                srcX := srcX rounded.
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12105
"/                "/ inside ?
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12106
"/
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12107
"/                (srcX >= 0 and:[srcX < width]) ifTrue:[
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12108
"/                    nY := (sinRot * pX) + cosPY.
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12109
"/                    srcY := nY + halfH.
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12110
"/                    srcY := srcY rounded.
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12111
"/
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12112
"/                    "/ inside ?
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12113
"/                    (srcY >= 0 and:[srcY < height]) ifTrue:[
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 12114
"/                        pix := self pixelAtX:srcX y:srcY
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12115
"/                    ] ifFalse:[
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 12116
"/                        pix := blackPixel.
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12117
"/                    ].
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12118
"/                ] ifFalse:[
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 12119
"/                    pix := blackPixel.
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12120
"/                ].
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12121
"/                pix ~~ blackPixel ifTrue:[
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 12122
"/                    newImage pixelAtX:dstX y:dstY put:pix.
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12123
"/                ]
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12124
"/            ].
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12125
"/        ].
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12126
    ].
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12127
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12128
    ^ newImage
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12129
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12130
    "
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12131
     |i|
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12132
7906
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 12133
     i := Smalltalk imageFromFileNamed:'../../goodies/bitmaps/xpmBitmaps/misc_icons/BOOK.xpm' inPackage:'stx:goodies'.
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12134
     i inspect.
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12135
     (i rotated:45) inspect.
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12136
     (i rotated:90) inspect.
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12137
     (i rotated:91) inspect.
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12138
     (i rotated:95) inspect.
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12139
    "
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12140
    "
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12141
     |i|
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12142
7906
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 12143
     i := Smalltalk imageFromFileNamed:'../../goodies/bitmaps/gifImages/garfield.gif' inPackage:'stx:goodies'.
1653
7ab13998d4cd d24 rotation fixed
Claus Gittinger <cg@exept.de>
parents: 1650
diff changeset
 12144
     i := Depth24Image fromImage:i.
7ab13998d4cd d24 rotation fixed
Claus Gittinger <cg@exept.de>
parents: 1650
diff changeset
 12145
     (i rotated:200) inspect
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12146
    "
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12147
    "
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12148
     |i|
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12149
7906
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 12150
     i := Smalltalk imageFromFileNamed:'../../goodies/bitmaps/gifImages/garfield.gif' inPackage:'stx:goodies'.
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12151
     Transcript showCR:(
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12152
        Time millisecondsToRun:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12153
           i rotated:45.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12154
        ]
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12155
     ).
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12156
    "
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12157
    "
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12158
     |v i rI rot|
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12159
7906
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 12160
     i := Smalltalk imageFromFileNamed:'../../goodies/bitmaps/xpmBitmaps/misc_icons/BOOK.xpm' inPackage:'stx:goodies'.
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12161
     v := View new extent:(i width max:100)@(i height max:100).
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12162
     v openAndWait.
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12163
     rot := 0.
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12164
     [true] whileTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12165
        rI := i rotated:rot.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12166
        rI := rI onDevice:v device.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12167
        v clear.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12168
        v displayForm:rI x:(v width-rI width)//2 y:(v height-rI height)//2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12169
        rot := rot + 5.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12170
        rI close.
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12171
     ]
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12172
    "
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12173
    "
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12174
     |v i rI rot|
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12175
7906
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 12176
     i := Smalltalk imageFromFileNamed:'../../goodies/bitmaps/gifImages/claus.gif' inPackage:'stx:goodies'.
1653
7ab13998d4cd d24 rotation fixed
Claus Gittinger <cg@exept.de>
parents: 1650
diff changeset
 12177
     v := View new extent:400@400.
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12178
     v openAndWait.
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12179
     rot := 0.
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12180
     [true] whileTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12181
        rI := i rotated:rot.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12182
        rI := rI onDevice:v device.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12183
        v clear.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12184
        v displayForm:rI x:(v width-rI width)//2 y:(v height-rI height)//2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12185
        rot := rot + 5.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12186
        rI close.
4952
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12187
     ]
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12188
    "
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12189
    "
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12190
     |v i rI rot|
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12191
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12192
     i := Form width:200 height:100 onDevice:Screen current.
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12193
     i clear.
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12194
     i displayLineFrom:(0@0) to:(199@0).
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12195
     i displayLineFrom:(199@0) to:(199@99).
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12196
     i displayLineFrom:(199@99) to:(0@99).
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12197
     i displayLineFrom:(0@99) to:(0@0).
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12198
     i displayLineFrom:(0@0) to:(199@100).
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12199
     i displayLineFrom:(199@0) to:(0@100).
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12200
     i := Image fromForm:i.
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12201
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12202
     v := View new extent:400@400.
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12203
     v openAndWait.
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12204
     rot := 0.
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12205
     [true] whileTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12206
        rI := i rotated:rot.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12207
        rI := rI onDevice:v device.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12208
        v clear.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12209
        v displayForm:rI x:(v width-rI width)//2 y:(v height-rI height)//2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12210
        rot := rot + 5.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12211
        rI close.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12212
        Delay waitForSeconds:0.1.
4952
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12213
     ]
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12214
    "
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12215
    "
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12216
     |v i rI rot|
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12217
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12218
     i := Form width:200 height:100 onDevice:Screen current.
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12219
     i clear.
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12220
     i displayLineFrom:(0@0) to:(199@0).
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12221
     i displayLineFrom:(199@0) to:(199@99).
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12222
     i displayLineFrom:(199@99) to:(0@99).
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12223
     i displayLineFrom:(0@99) to:(0@0).
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12224
     i displayLineFrom:(0@0) to:(199@100).
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12225
     i displayLineFrom:(199@0) to:(0@100).
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12226
     i := Image fromForm:i.
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12227
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12228
     v := View new extent:400@400.
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12229
     v openAndWait.
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12230
     rot := 0.
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12231
     [true] whileTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12232
        rI := i rotated:rot.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12233
        rI := rI onDevice:v device.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12234
        v clear.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12235
        v displayForm:rI x:(v width-rI width)//2 y:(v height-rI height)//2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12236
        rot := rot + 30.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12237
        rI close.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12238
        Delay waitForSeconds:0.3.
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12239
     ]
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12240
    "
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12241
7906
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 12242
    "Modified (comment): / 16-02-2017 / 20:40:52 / cg"
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 12243
    "Modified: / 19-07-2017 / 12:30:39 / stefan"
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 12244
!
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 12245
8132
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12246
hardSmoothingMagnifiedBy:scaleArg
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12247
    "return a new image magnified by scalePoint, aPoint.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12248
     This is the general magnification method, handling non-integral values.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12249
     It is slower than the integral magnification method,
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12250
     and slower than the old hardMagnifiedBy: method.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12251
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12252
     Notice: this is an improved algorithm, which averages the pixels if shrinking
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12253
     or interpolates if expanding.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12254
     As a consequence, this should generate nicer shrunk images when the original contains sharp lines."
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12255
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12256
    |scalePoint mX mY
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12257
     newWidth  "{ Class: SmallInteger }"
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12258
     newHeight "{ Class: SmallInteger }"
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12259
     w         "{ Class: SmallInteger }"
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12260
     h         "{ Class: SmallInteger }"
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12261
     newImage newBits bitsPerPixel newBytesPerRow newMask
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12262
     value srcRow pixelArray shrink|
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12263
8136
e18855468edd #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8132
diff changeset
 12264
    photometric == #rgb ifFalse:[
e18855468edd #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8132
diff changeset
 12265
        "/ self assert:false message:'only works with rgb images'.
e18855468edd #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8132
diff changeset
 12266
        ^ (Depth32Image fromImage:self photometric:#rgb)
e18855468edd #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8132
diff changeset
 12267
            hardSmoothingMagnifiedBy:scaleArg
e18855468edd #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8132
diff changeset
 12268
    ].
8132
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12269
    
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12270
    scalePoint := scaleArg asPoint. 
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12271
    mX := scalePoint x.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12272
    mY := scalePoint y.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12273
    ((mX < 0) or:[mY < 0]) ifTrue:[^ nil].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12274
    ((mX = 1) and:[mY = 1]) ifTrue:[^ self].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12275
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12276
    ((mX <= 1) and:[mY <= 1]) ifTrue:[
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12277
        "/ shrinking in both directions 
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12278
        shrink := true.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12279
    ] ifFalse:[
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12280
        ((mX >= 1) and:[mY >= 1]) ifTrue:[
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12281
            "/ shrinking in both directions    
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12282
            shrink := false.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12283
        ] ifFalse:[
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12284
            "/ mixed - do it in two steps
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12285
            mX > 0 ifTrue:[
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12286
                ^ (self hardSmoothingMagnifiedBy:(mX @ 1) )
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12287
                        hardSmoothingMagnifiedBy:(1 @ mY) 
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12288
            ].    
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12289
            ^ (self hardSmoothingMagnifiedBy:(1 @ mY) )
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12290
                    hardSmoothingMagnifiedBy:(mY @ 1) 
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12291
        ]
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12292
    ].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12293
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12294
    newWidth := (width * mX) truncated.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12295
    newHeight := (height * mY) truncated.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12296
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12297
    bitsPerPixel := self depth.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12298
    newBytesPerRow := ((newWidth * bitsPerPixel) + 7) // 8.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12299
    newBits := ByteArray uninitializedNew:(newBytesPerRow * newHeight).
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12300
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12301
    mask notNil ifTrue:[
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12302
        newMask := (mask magnifiedBy:scalePoint)
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12303
    ].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12304
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12305
    newImage := self species new.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12306
    newImage
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12307
        width:newWidth height:newHeight photometric:photometric
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12308
        samplesPerPixel:samplesPerPixel bitsPerSample:bitsPerSample
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12309
        colorMap:colorMap copy
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12310
        bits:newBits mask:newMask.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12311
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12312
    w := newWidth - 1.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12313
    h := newHeight - 1.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12314
    pixelArray := newImage pixelArraySpecies new:newWidth.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12315
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12316
    shrink ifTrue:[
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12317
        |rX rY|
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12318
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12319
        "/ rI is radius (nr. of pixels) to consider when averaging
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12320
        rX := 1.0 / mX.  "/ mI are <= 1 -> rI are >= 1
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12321
        rY := 1.0 / mY.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12322
        rX := rX / 2.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12323
        rY := rY / 2.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12324
        0 to:h do:[:row |
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12325
            srcRow := (row / mY).
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12326
            0 to:w do:[:col |
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12327
                |srcCol rgb sumRed sumGreen sumBlue sumWeight
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12328
                 red green blue|
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12329
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12330
                sumRed := sumGreen := sumBlue := sumWeight := 0.0.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12331
                
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12332
                srcCol := col / mX.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12333
                srcCol-rX to:srcCol+rX do:[:srcX |
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12334
                    srcRow-rY to:srcRow+rY do:[:srcY |
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12335
                        |pX pY d weight rgb|
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12336
                        pX := (srcX rounded max:0) min:width-1.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12337
                        pY := (srcY rounded max:0) min:height-1.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12338
                        rgb := self rgbValueAtX:pX y:pY.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12339
                        "/ d := (srcX @ srcY) dist:(pX @ pY).
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12340
                        "/ scale according to distance.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12341
                        "/ weight := 1 / (1+d).
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12342
                        weight := 1.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12343
                        sumRed := sumRed + (weight * ((rgb rightShift:16) bitAnd:16rFF)).
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12344
                        sumGreen := sumGreen + (weight * ((rgb rightShift:8) bitAnd:16rFF)).
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12345
                        sumBlue := sumBlue + (weight * (rgb bitAnd:16rFF)).
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12346
                        sumWeight := sumWeight + weight.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12347
                    ].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12348
                ].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12349
                red := (sumRed / sumWeight) rounded.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12350
                green := (sumGreen / sumWeight) rounded.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12351
                blue := (sumBlue / sumWeight) rounded. 
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12352
                rgb := (((red bitShift:8) bitOr:green) bitShift:8) bitOr:blue.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12353
                pixelArray at:col+1 put:rgb.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12354
            ].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12355
            newImage rowAt:row putAll:pixelArray.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12356
        ].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12357
    ] ifFalse:[    
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12358
        0 to:h do:[:row |
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12359
            srcRow := (row // mY).
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12360
            0 to:w do:[:col |
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12361
                value := self pixelAtX:(col // mX) y:srcRow.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12362
                pixelArray at:(col+1) put:value.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12363
            ].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12364
            newImage rowAt:row putAll:pixelArray.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12365
        ].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12366
    ].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12367
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12368
    ^ newImage 
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12369
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12370
    "compare the two:
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12371
     |i i1 i2|
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12372
     i := Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif'.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12373
     i := Depth24Image fromImage:i.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12374
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12375
     Time millisecondsToRun:[
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12376
         i1 := i hardSmoothingMagnifiedBy:0.1
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12377
     ].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12378
     i1 inspect.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12379
     Time millisecondsToRun:[
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12380
         i2 := i magnifiedBy:0.1 
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12381
     ].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12382
     i2 inspect.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12383
    "
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12384
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12385
    "compare the two:
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12386
     |i i1 i2|
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12387
     i := Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif'.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12388
     i := Depth24Image fromImage:i.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12389
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12390
     Time millisecondsToRun:[
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12391
         i1 := i hardSmoothingMagnifiedBy:0.999
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12392
     ].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12393
     i1 inspect.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12394
     Time millisecondsToRun:[
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12395
         i2 := i magnifiedBy:0.999 
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12396
     ].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12397
     i2 inspect.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12398
    "
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12399
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12400
    "compare the two:
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12401
     |i i1 i2|
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12402
     i := Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif'.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12403
     i := Depth24Image fromImage:i.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12404
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12405
     Time millisecondsToRun:[
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12406
         i1 := i hardSmoothingMagnifiedBy:0.3
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12407
     ].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12408
     i1 inspect.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12409
     Time millisecondsToRun:[
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12410
         i2 := i magnifiedBy:0.3 
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12411
     ].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12412
     i2 inspect.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12413
    "
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12414
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12415
    "
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12416
     |i|
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12417
     i := Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif'.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12418
     i := i asGrayImageDepth:8.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12419
     i := Depth24Image fromImage:i.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12420
     
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12421
     Time millisecondsToRun:[
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12422
         i := i hardSmoothingMagnifiedBy:0.2 
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12423
     ].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12424
     i inspect
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12425
    "
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12426
    
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12427
    "
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12428
     |i|
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12429
     i := Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif'.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12430
     i := Depth24Image fromImage:i.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12431
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12432
     Time millisecondsToRun:[
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12433
         i := i hardSmoothingMagnifiedBy:0.3 
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12434
     ].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12435
     i inspect
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12436
    "
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12437
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12438
    "Created: / 30-08-2017 / 15:01:53 / cg"
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12439
!
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12440
54
29a6b2f8e042 *** empty log message ***
claus
parents: 46
diff changeset
 12441
lightened
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
 12442
    "return a new image which is slightly brighter than the receiver.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
 12443
     The receiver must be a palette image (currently).
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 12444
     CAVEAT: this only works with palette images (i.e. not for rgb or greyScale).
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
 12445
     CAVEAT: Need an argument, which specifies by how much it should be lighter."
54
29a6b2f8e042 *** empty log message ***
claus
parents: 46
diff changeset
 12446
5655
37bd5c7eb765 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 5643
diff changeset
 12447
    ^ self copyWithColorMapProcessing:[:clr | clr lightened]
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 12448
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 12449
    "
3256
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 12450
     (Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') inspect
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 12451
     (Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') lightened inspect
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 12452
     (Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') darkened inspect
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 12453
     (Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') darkened darkened inspect
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 12454
    "
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 12455
5655
37bd5c7eb765 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 5643
diff changeset
 12456
    "Modified: / 24-11-2010 / 11:17:55 / cg"
54
29a6b2f8e042 *** empty log message ***
claus
parents: 46
diff changeset
 12457
!
29a6b2f8e042 *** empty log message ***
claus
parents: 46
diff changeset
 12458
134
claus
parents: 132
diff changeset
 12459
magnifiedBy:scale
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 12460
    "return a new image magnified by scalePoint, aPoint.
72
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
 12461
     If non-integral magnify is asked for, pass the work on to 'hardMagnifyBy:'
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
 12462
     while simple (integral) magnifications are handled here."
0
48194c26a46c Initial revision
claus
parents:
diff changeset
 12463
8169
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12464
    ^ self magnifiedBy:scale smooth:false
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12465
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12466
    "
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12467
     (Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif') inspect.
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12468
     ((Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif') magnifiedBy:1@2) inspect.
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12469
    "
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12470
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12471
    "Modified (comment): / 11-09-2017 / 09:10:13 / cg"
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12472
!
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12473
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12474
magnifiedBy:scale smooth:smooth
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12475
    "return a new image magnified by scalePoint, aPoint.
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12476
     If non-integral magnify is asked for, pass the work on to 'hardMagnifyBy:'
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12477
     while simple (integral) magnifications are handled here."
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12478
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 12479
    |scalePoint mX mY
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
 12480
     magX      "{ Class: SmallInteger }"   "new version of stc can find this out itself..."
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
 12481
     magY      "{ Class: SmallInteger }"
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
 12482
     srcOffset "{ Class: SmallInteger }"
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
 12483
     dstOffset "{ Class: SmallInteger }"
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
 12484
     w         "{ Class: SmallInteger }"
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
 12485
     h         "{ Class: SmallInteger }"
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
 12486
     first
906
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
 12487
     newWidth newHeight newImage newBits newMask
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
 12488
     bitsPerPixel newBytesPerRow oldBytesPerRow
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
 12489
     bytes|
0
48194c26a46c Initial revision
claus
parents:
diff changeset
 12490
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 12491
    scalePoint := scale asPoint.
2772
e8ceedf9aeab code cleanup & a few more SmallInteger type hints
Claus Gittinger <cg@exept.de>
parents: 2760
diff changeset
 12492
    mX := scalePoint x.
e8ceedf9aeab code cleanup & a few more SmallInteger type hints
Claus Gittinger <cg@exept.de>
parents: 2760
diff changeset
 12493
    mY := scalePoint y.
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
 12494
    ((mX <= 0) or:[mY <= 0]) ifTrue:[^ nil].
0
48194c26a46c Initial revision
claus
parents:
diff changeset
 12495
    ((mX = 1) and:[mY = 1]) ifTrue:[^ self].
48194c26a46c Initial revision
claus
parents:
diff changeset
 12496
8169
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12497
    smooth ifTrue:[
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12498
        ^ self hardSmoothingMagnifiedBy:scalePoint
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12499
    ].
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
 12500
    ((mX isMemberOf:SmallInteger) and:[mY isMemberOf:SmallInteger]) ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12501
        ^ self hardMagnifiedBy:scalePoint
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
 12502
    ].
8169
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12503
    
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
 12504
    bytes := self bits.
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
 12505
    bitsPerPixel := self depth.
0
48194c26a46c Initial revision
claus
parents:
diff changeset
 12506
    oldBytesPerRow := ((width * bitsPerPixel) + 7) // 8.
48194c26a46c Initial revision
claus
parents:
diff changeset
 12507
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
 12508
    w := width.
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
 12509
    h := height.
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
 12510
    magX := mX.
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
 12511
    magY := mY.
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
 12512
2772
e8ceedf9aeab code cleanup & a few more SmallInteger type hints
Claus Gittinger <cg@exept.de>
parents: 2760
diff changeset
 12513
    newWidth := w * magX.
e8ceedf9aeab code cleanup & a few more SmallInteger type hints
Claus Gittinger <cg@exept.de>
parents: 2760
diff changeset
 12514
    newHeight := h * magY.
0
48194c26a46c Initial revision
claus
parents:
diff changeset
 12515
    newBytesPerRow := ((newWidth * bitsPerPixel) + 7) // 8.
48194c26a46c Initial revision
claus
parents:
diff changeset
 12516
    newBits := ByteArray uninitializedNew:(newBytesPerRow * newHeight).
48194c26a46c Initial revision
claus
parents:
diff changeset
 12517
906
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
 12518
    mask notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12519
        newMask := (mask magnifiedBy:scalePoint)
906
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
 12520
    ].
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
 12521
0
48194c26a46c Initial revision
claus
parents:
diff changeset
 12522
    newImage := self species new.
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 12523
    newImage
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12524
        width:newWidth
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12525
        height:newHeight
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12526
        photometric:photometric
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12527
        samplesPerPixel:samplesPerPixel
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12528
        bitsPerSample:bitsPerSample
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12529
        colorMap:colorMap copy
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12530
        bits:newBits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12531
        mask:newMask.
0
48194c26a46c Initial revision
claus
parents:
diff changeset
 12532
48194c26a46c Initial revision
claus
parents:
diff changeset
 12533
    mX = 1 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12534
        "expand rows only"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12535
        srcOffset := 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12536
        dstOffset := 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12537
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12538
        1 to:h do:[:row |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12539
            1 to:magY do:[:i |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12540
                newBits replaceFrom:dstOffset
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12541
                        to:(dstOffset + oldBytesPerRow - 1)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12542
                        with:bytes
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12543
                        startingAt:srcOffset.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12544
                dstOffset := dstOffset + newBytesPerRow
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12545
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12546
            srcOffset := srcOffset + oldBytesPerRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12547
        ].
0
48194c26a46c Initial revision
claus
parents:
diff changeset
 12548
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12549
        "expand cols"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12550
        (mX > 1) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12551
            dstOffset := 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12552
            srcOffset := 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12553
            1 to:h do:[:row |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12554
                self magnifyRowFrom:bytes
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12555
                     offset:srcOffset
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12556
                     into:newBits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12557
                     offset:dstOffset
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12558
                     factor:mX.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12559
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12560
                first := dstOffset.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12561
                dstOffset := dstOffset + newBytesPerRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12562
                " and copy for row expansion "
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12563
                2 to:magY do:[:i |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12564
                    newBits replaceFrom:dstOffset
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12565
                            to:(dstOffset + newBytesPerRow - 1)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12566
                            with:newBits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12567
                            startingAt:first.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12568
                    dstOffset := dstOffset + newBytesPerRow
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12569
                ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12570
                srcOffset := srcOffset + oldBytesPerRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12571
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12572
        ]
0
48194c26a46c Initial revision
claus
parents:
diff changeset
 12573
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
 12574
    ^ newImage
48194c26a46c Initial revision
claus
parents:
diff changeset
 12575
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 12576
    "
3476
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 12577
     ((Image fromFile:'goodies/bitmaps/gifImages/claus.gif') magnifiedBy:1@2)
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 12578
    "
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 12579
8169
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12580
    "Created: / 10-09-2017 / 17:10:34 / cg"
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
 12581
!
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
 12582
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 12583
magnifiedPreservingRatioTo:anExtent
154
claus
parents: 153
diff changeset
 12584
    "return a new image magnified to fit into anExtent,
7242
bf3a75233d55 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 7230
diff changeset
 12585
     preserving the receiver's width/height ratio.
154
claus
parents: 153
diff changeset
 12586
     (i.e. not distorting the image).
claus
parents: 153
diff changeset
 12587
     See also #magnifiedTo: and #magnifiedBy:"
claus
parents: 153
diff changeset
 12588
claus
parents: 153
diff changeset
 12589
    |rX rY|
claus
parents: 153
diff changeset
 12590
claus
parents: 153
diff changeset
 12591
    rX := anExtent x / self width.
claus
parents: 153
diff changeset
 12592
    rY := anExtent y / self height.
claus
parents: 153
diff changeset
 12593
    ^ self magnifiedBy:(rX min:rY)
claus
parents: 153
diff changeset
 12594
claus
parents: 153
diff changeset
 12595
    "
7990
0850e1d5bc13 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7989
diff changeset
 12596
     ((Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif') magnifiedPreservingRatioTo:100@100)
154
claus
parents: 153
diff changeset
 12597
claus
parents: 153
diff changeset
 12598
    in contrast to:
claus
parents: 153
diff changeset
 12599
7990
0850e1d5bc13 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7989
diff changeset
 12600
     ((Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif') magnifiedTo:100@100)
0850e1d5bc13 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7989
diff changeset
 12601
    "
0850e1d5bc13 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7989
diff changeset
 12602
0850e1d5bc13 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7989
diff changeset
 12603
    "Modified: / 22-04-1997 / 12:33:46 / cg"
0850e1d5bc13 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7989
diff changeset
 12604
    "Modified (comment): / 26-03-2017 / 21:47:36 / cg"
154
claus
parents: 153
diff changeset
 12605
!
claus
parents: 153
diff changeset
 12606
8169
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12607
magnifiedPreservingRatioTo:anExtent smooth:smoothBoolean
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12608
    "return a new image magnified to fit into anExtent,
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12609
     preserving the receiver's width/height ratio.
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12610
     (i.e. not distorting the image).
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12611
     See also #magnifiedTo: and #magnifiedBy:"
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12612
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12613
    |rX rY|
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12614
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12615
    rX := anExtent x / self width.
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12616
    rY := anExtent y / self height.
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12617
    ^ self magnifiedBy:(rX min:rY) smooth:smoothBoolean
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12618
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12619
    "
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12620
     ((Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif') magnifiedPreservingRatioTo:100@100)
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12621
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12622
    in contrast to:
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12623
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12624
     ((Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif') magnifiedTo:100@100)
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12625
    "
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12626
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12627
    "Created: / 10-09-2017 / 17:08:57 / cg"
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12628
!
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12629
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 12630
magnifiedTo:anExtent
154
claus
parents: 153
diff changeset
 12631
    "return a new image magnified to have the size specified by extent.
claus
parents: 153
diff changeset
 12632
     This may distort the image if the arguments ratio is not the images ratio.
claus
parents: 153
diff changeset
 12633
     See also #magnifiedPreservingRatioTo: and #magnifiedBy:"
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
 12634
134
claus
parents: 132
diff changeset
 12635
    ^ self magnifiedBy:(anExtent / self extent)
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
 12636
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
 12637
    "
4168
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
 12638
     ((Image fromFile:'goodies/bitmaps/gifImages/garfield.gif') magnifiedTo:100@100)
154
claus
parents: 153
diff changeset
 12639
claus
parents: 153
diff changeset
 12640
    in contrast to:
claus
parents: 153
diff changeset
 12641
4168
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
 12642
     ((Image fromFile:'goodies/bitmaps/gifImages/garfield.gif') magnifiedPreservingRatioTo:100@100)
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
 12643
    "
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
 12644
!
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
 12645
3256
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 12646
mixed:amount with:aColor
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 12647
    "return a new image which is blended with some color;
3256
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 12648
     amount determines how much of the blending color is applied (0..)
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 12649
     where 0 means: blending color pure.
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 12650
     The receiver must be a palette image (currently).
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 12651
     CAVEAT: this only works with palette images (i.e. not for rgb or greyScale).
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 12652
     CAVEAT: Need an argument, which specifies by how much it should be lighter."
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 12653
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 12654
     ^ self
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12655
        copyWithColorMapProcessing:[:clr | clr mixed:amount with:aColor]
3256
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 12656
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 12657
    "
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 12658
     (Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') inspect
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 12659
     ((Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') mixed:0.0 with:Color red) inspect
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 12660
     ((Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') mixed:0.1 with:Color red) inspect
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 12661
     ((Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') mixed:0.25 with:Color red) inspect
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 12662
     ((Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') mixed:0.5 with:Color red) inspect
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 12663
     ((Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') mixed:1 with:Color red) inspect
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 12664
     ((Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') mixed:2 with:Color red) inspect
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 12665
     ((Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') mixed:10 with:Color red) inspect
8164
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 12666
     ((Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') mixed:20 with:Color red) inspect
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 12667
    "
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 12668
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 12669
    "Modified: / 24-04-1997 / 18:31:23 / cg"
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 12670
    "Modified (comment): / 05-09-2017 / 14:36:39 / cg"
3256
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 12671
!
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 12672
1762
061f5a57000a added #negative
Claus Gittinger <cg@exept.de>
parents: 1746
diff changeset
 12673
negative
061f5a57000a added #negative
Claus Gittinger <cg@exept.de>
parents: 1746
diff changeset
 12674
    "return a new image which is a negative of the receiver.
061f5a57000a added #negative
Claus Gittinger <cg@exept.de>
parents: 1746
diff changeset
 12675
     The receiver must be a palette image (currently)."
061f5a57000a added #negative
Claus Gittinger <cg@exept.de>
parents: 1746
diff changeset
 12676
1763
761b4d05ac99 more #negative
Claus Gittinger <cg@exept.de>
parents: 1762
diff changeset
 12677
    |newImage|
761b4d05ac99 more #negative
Claus Gittinger <cg@exept.de>
parents: 1762
diff changeset
 12678
761b4d05ac99 more #negative
Claus Gittinger <cg@exept.de>
parents: 1762
diff changeset
 12679
    colorMap isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12680
        photometric == #blackIs0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12681
            newImage := self copy.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12682
            newImage photometric:#whiteIs0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12683
            ^ newImage
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12684
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12685
        photometric == #whiteIs0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12686
            newImage := self copy.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12687
            newImage photometric:#blackIs0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12688
            ^ newImage
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12689
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12690
        ^ nil
1763
761b4d05ac99 more #negative
Claus Gittinger <cg@exept.de>
parents: 1762
diff changeset
 12691
    ].
761b4d05ac99 more #negative
Claus Gittinger <cg@exept.de>
parents: 1762
diff changeset
 12692
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 12693
     ^ self
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12694
        copyWithColorMapProcessing:[:clr |
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 12695
                Color
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 12696
                    redByte:(255 - clr redByte)
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 12697
                    greenByte:(255 - clr greenByte)
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 12698
                    blueByte:(255 - clr blueByte)
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 12699
            ]
3476
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 12700
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 12701
    "
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 12702
     (Image fromFile:'goodies/bitmaps/gifImages/claus.gif') inspect
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 12703
     (Image fromFile:'goodies/bitmaps/gifImages/claus.gif') negative inspect
1762
061f5a57000a added #negative
Claus Gittinger <cg@exept.de>
parents: 1746
diff changeset
 12704
    "
061f5a57000a added #negative
Claus Gittinger <cg@exept.de>
parents: 1746
diff changeset
 12705
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 12706
    "Created: / 20-06-1997 / 13:13:41 / cg"
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 12707
    "Modified: / 31-01-2017 / 14:43:19 / stefan"
1762
061f5a57000a added #negative
Claus Gittinger <cg@exept.de>
parents: 1746
diff changeset
 12708
!
061f5a57000a added #negative
Claus Gittinger <cg@exept.de>
parents: 1746
diff changeset
 12709
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
 12710
rotated:degrees
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
 12711
    "return a new image from the old one, by rotating the image
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12712
     degrees clockwise.
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 12713
     Notice that the resulting image has a different extent.
1646
48ab44c4664f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1644
diff changeset
 12714
     If rotation is heavily used, the workHorse methods
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 12715
     (#easyRotateBitsInto:angle: and #hardRotated:) may
1646
48ab44c4664f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1644
diff changeset
 12716
     be redefined in concrete image subclasses."
48ab44c4664f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1644
diff changeset
 12717
3912
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
 12718
    |nW nH newImage d|
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
 12719
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 12720
    d := degrees truncated.
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
 12721
    [d < 0] whileTrue:[d := d + 360].
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
 12722
    d >= 360 ifTrue:[d := d \\ 360].
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 12723
    d = 0 ifTrue:[
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 12724
        ^ self
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 12725
    ].
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12726
    d = 180 ifTrue:[
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 12727
        nW := width.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 12728
        nH := height.
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 12729
    ] ifFalse:[(d = 90 or:[d = 270]) ifTrue:[
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 12730
        nW := height.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 12731
        nH := width.
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 12732
    ] ifFalse:[
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 12733
        ^ self hardRotated:d
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 12734
    ]].
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
 12735
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
 12736
    newImage := self species new.
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 12737
    newImage 
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 12738
        width:nW
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 12739
        height:nH
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 12740
        photometric:photometric
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 12741
        samplesPerPixel:samplesPerPixel
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 12742
        bitsPerSample:bitsPerSample
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 12743
        colorMap:colorMap copy
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 12744
        bits:nil
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 12745
        mask:(mask ifNotNil:[mask rotated:degrees]);
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 12746
        createPixelStore.
1646
48ab44c4664f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1644
diff changeset
 12747
7534
0b7e23635791 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7529
diff changeset
 12748
    self easyRotateBitsInto:newImage angle:d.
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12749
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
 12750
    ^ newImage
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
 12751
692
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 12752
    "
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 12753
     |i|
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 12754
7529
5f77a718b7bd #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7523
diff changeset
 12755
     i := Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif'.
7534
0b7e23635791 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7529
diff changeset
 12756
     i inspect.
0b7e23635791 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7529
diff changeset
 12757
     (i rotated:45) inspect.
0b7e23635791 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7529
diff changeset
 12758
     (i rotated:90) inspect.
0b7e23635791 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7529
diff changeset
 12759
     (i rotated:180) inspect.
0b7e23635791 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7529
diff changeset
 12760
     (i rotated:270) inspect.
0b7e23635791 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7529
diff changeset
 12761
    "
0b7e23635791 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7529
diff changeset
 12762
    "
0b7e23635791 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7529
diff changeset
 12763
     |i|
0b7e23635791 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7529
diff changeset
 12764
0b7e23635791 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7529
diff changeset
 12765
     i := Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif'.
7529
5f77a718b7bd #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7523
diff changeset
 12766
     i := Depth24Image fromImage:i.
692
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 12767
     i inspect.
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 12768
     (i rotated:45) inspect.
692
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 12769
     (i rotated:90) inspect.
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 12770
     (i rotated:180) inspect.
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 12771
     (i rotated:270) inspect.
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 12772
    "
1646
48ab44c4664f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1644
diff changeset
 12773
    "
48ab44c4664f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1644
diff changeset
 12774
     |i|
48ab44c4664f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1644
diff changeset
 12775
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 12776
     i := Smalltalk imageFromFileNamed:'../../goodies/bitmaps/xpmBitmaps/misc_icons/BOOK.xpm' inPackage:'stx:goodies'.
1646
48ab44c4664f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1644
diff changeset
 12777
     i inspect.
48ab44c4664f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1644
diff changeset
 12778
     (i rotated:90) inspect.
48ab44c4664f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1644
diff changeset
 12779
     (i rotated:180) inspect.
48ab44c4664f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1644
diff changeset
 12780
     (i rotated:270) inspect.
48ab44c4664f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1644
diff changeset
 12781
    "
48ab44c4664f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1644
diff changeset
 12782
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 12783
    "Modified: / 24-04-1997 / 18:33:42 / cg"
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 12784
    "Modified (comment): / 19-07-2017 / 12:50:55 / stefan"
692
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 12785
!
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 12786
6624
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 12787
slightlyDarkened
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 12788
    "return a new image which is slightly darker than the receiver.
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 12789
     The receiver must be a palette image (currently).
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 12790
     CAVEAT: this only works with palette images (i.e. not for rgb or greyScale).
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 12791
     CAVEAT: Need an argument, which specifies by how much it should be lighter."
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 12792
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 12793
    ^ self copyWithColorMapProcessing:[:clr | clr slightlyDarkened]
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 12794
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 12795
    "
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 12796
     (Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') inspect
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 12797
     (Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') lightened inspect
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 12798
     (Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') darkened inspect
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 12799
     (Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') darkened darkened inspect
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 12800
    "
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 12801
!
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 12802
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 12803
slightlyLightened
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 12804
    "return a new image which is slightly brighter than the receiver.
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 12805
     The receiver must be a palette image (currently).
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 12806
     CAVEAT: this only works with palette images (i.e. not for rgb or greyScale).
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 12807
     CAVEAT: Need an argument, which specifies by how much it should be lighter."
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 12808
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 12809
    ^ self copyWithColorMapProcessing:[:clr | clr slightlyLightened]
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 12810
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 12811
    "
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 12812
     (Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') inspect
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 12813
     (Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') lightened inspect
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 12814
     (Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') darkened inspect
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 12815
     (Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') darkened darkened inspect
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 12816
    "
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 12817
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 12818
    "Modified: / 24-11-2010 / 11:17:55 / cg"
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 12819
!
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 12820
8169
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12821
smoothingMagnifiedBy:scale
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12822
    "return a new image magnified by scalePoint, aPoint.
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12823
     If non-integral magnify is asked for, pass the work on to 'hardMagnifyBy:'
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12824
     while simple (integral) magnifications are handled here."
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12825
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12826
    ^ self hardSmoothingMagnifiedBy:scale
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12827
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12828
    "Created: / 10-09-2017 / 11:47:22 / cg"
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12829
!
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12830
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12831
smoothingMagnifiedPreservingRatioTo:anExtent
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12832
    "return a new image magnified to fit into anExtent,
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12833
     preserving the receiver's width/height ratio.
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12834
     (i.e. not distorting the image).
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12835
     See also #magnifiedTo: and #magnifiedBy:"
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12836
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12837
    |rX rY|
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12838
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12839
    rX := anExtent x / self width.
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12840
    rY := anExtent y / self height.
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12841
    ^ self hardSmoothingMagnifiedBy:(rX min:rY)
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12842
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12843
    "
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12844
     ((Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif') magnifiedPreservingRatioTo:100@100)
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12845
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12846
    in contrast to:
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12847
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12848
     ((Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif') magnifiedTo:100@100)
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12849
    "
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12850
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12851
    "Created: / 10-09-2017 / 11:45:58 / cg"
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12852
!
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12853
4972
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12854
threeDProjected:fraction1 and:fraction2
7906
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 12855
    "return a 3D-projected version.
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 12856
     Not really 3D, but good enough to create screenshots for webpages...
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 12857
     TODO: kick out this q&d hack, and write something real..."
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 12858
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 12859
    |dx1 dx2 newImage newBits 
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 12860
     blackPixel halfH m myDepth maskBits pix fr fl ml mr dm fractX my fy dstX dstY o1 df|
4972
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12861
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12862
    newImage := self species new.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12863
    newImage width:width.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12864
    newImage height:height.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12865
    newImage createPixelStore.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12866
    newBits := newImage bits.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12867
    newImage photometric:photometric.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12868
    newImage samplesPerPixel:samplesPerPixel.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12869
    newImage bitsPerSample:bitsPerSample.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12870
    newImage colorMap:colorMap copy.
7906
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 12871
    newImage maskedPixelsAre0:self maskedPixelsAre0.
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 12872
    
4972
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12873
    mask notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12874
        newImage mask:(mask threeDProjected:fraction1 and:fraction2)
4972
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12875
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12876
        self isMask ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12877
            self depth ~~ 1 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12878
                m := ImageMask width:width height:height.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12879
                m bits:(maskBits := ByteArray new:(m bytesPerRow * height)).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12880
                maskBits atAllPut:16rFF.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12881
                newImage mask:(m threeDProjected:fraction1 and:fraction2)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12882
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12883
        ]
4972
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12884
    ].
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12885
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12886
    myDepth := self depth.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12887
    myDepth == 1 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12888
        blackPixel := 0.
4972
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12889
    ] ifFalse:[
7906
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 12890
        self maskedPixelsAre0 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12891
            blackPixel := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12892
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12893
            blackPixel := self valueFromColor:Color black.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12894
            blackPixel isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12895
                blackPixel := self valueFromColor:Color white.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12896
                blackPixel isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12897
                    blackPixel := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12898
                ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12899
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12900
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12901
        self isMask ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12902
            blackPixel := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12903
        ].
4972
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12904
    ].
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12905
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12906
    newBits atAllPut:0.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12907
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12908
    "/ now, walk over destination pixels,
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12909
    "/ fetching from source.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12910
    halfH := (height - 1) / 2.0.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12911
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12912
    "/  --------------------------------------------------------------
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12913
    "/  |**************                                              |
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12914
    "/  |              ************                                  | dx1
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12915
    "/  |                          *************                     |
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12916
    "/  |                                       **********           |
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 6037
diff changeset
 12917
    "/  |fl                          fy                   ***********|
4972
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12918
    "/  |                                                            | fr
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12919
    "/  |                                                            | Mr  (!!= Ml)      |
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12920
    "/  |Ml                          my                              | fr               | dm (=Mr-Ml)
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12921
    "/  |                                                     *******|                  |
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12922
    "/  |                            fy              *********       |
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 6037
diff changeset
 12923
    "/  |fl                                 *********                |
4972
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12924
    "/  |                          *********                         | dx2
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 6037
diff changeset
 12925
    "/  |                 *********                                  |
4972
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12926
    "/  |        *********                                           |
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12927
    "/  |********                                                    |
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12928
    "/  --------------------------------------------------------------
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12929
    dx1 := height * fraction1.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12930
    dx2 := height * fraction2.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12931
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12932
    fr := (height - dx1 - dx2) / 2.0.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12933
    fl := (height) / 2.0.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12934
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12935
    ml := height / 2.0.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12936
    mr := dx1+fr.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12937
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12938
    dm := mr-ml.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12939
    df := fr-fl.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12940
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12941
    0 to:width-1 do:[:srcX |
7906
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 12942
        dstX := srcX * 0.75.
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 12943
        
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12944
        fractX := srcX / width.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12945
        my := ml + (dm * fractX).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12946
        fy := fl + (df * fractX).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12947
        o1 := dx1 * fractX.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12948
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12949
        0 to:height-1 do:[:srcY |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12950
            srcY < halfH ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12951
                dstY := o1 + (fy * (srcY / halfH)).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12952
            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12953
                dstY := my + (fy * ((srcY-halfH) / halfH)).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12954
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12955
            pix := self pixelAtX:srcX y:srcY.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12956
            dstY < 0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12957
                ifTrue:[dstY := 0]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12958
                ifFalse:[ dstY >= height ifTrue:[dstY := height-1]].
7906
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 12959
            newImage pixelAtX:dstX truncated y:dstY truncated put:pix.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12960
        ].
4972
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12961
    ].
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12962
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12963
    ^ newImage
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12964
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12965
    "
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12966
     |i|
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12967
7906
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 12968
     i := Smalltalk imageFromFileNamed:'../../goodies/bitmaps/gifImages/garfield.gif' inPackage:'stx:goodies'.
4972
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12969
     i := Depth24Image fromImage:i.
7906
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 12970
     (i threeDProjected:0.1 and:0.3) inspect.
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 12971
     (i threeDProjected:0.1 and:0.1) inspect.
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 12972
    "
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 12973
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 12974
    "
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 12975
     |i|
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 12976
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 12977
     Transcript topView raiseDeiconified.
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 12978
     i := Image fromView:Transcript topView.
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 12979
     i := Depth24Image fromImage:i.
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 12980
     (i threeDProjected:0.1 and:0.2) inspect.
4972
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12981
    "
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 12982
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 12983
    "Modified: / 31-01-2017 / 15:04:22 / stefan"
7906
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 12984
    "Modified: / 16-02-2017 / 20:38:53 / cg"
4972
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12985
!
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 12986
3905
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 12987
withColorResolutionReducedBy:numBits
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 12988
    "return a new image with the same picture as the receiver, but reduced colorResolution;
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 12989
     that is, the lower numBits are cleared in the r/g/b color components.
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 12990
     If anything fails, return nil."
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 12991
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 12992
    |xMax yMax r g b nR nG nB clr pix map revMap n_clr n_pix mask anyChange
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 12993
     newColors newColorArray newImage extMask extBits newPixelValue|
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 12994
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 12995
    numBits > 7 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12996
        ^ nil
3905
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 12997
    ].
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 12998
    mask := (16rFF bitShift:numBits) bitAnd:16rFF.
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 12999
    extMask := (1 bitShift:numBits).
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13000
    extBits := extMask - 1.
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13001
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13002
    anyChange := false.
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13003
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13004
    newColors := Set new.
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13005
    newColorArray := OrderedCollection new.
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13006
    map := Array new:256.
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13007
    revMap := OrderedCollection new.
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13008
4317
a24172a52a76 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4296
diff changeset
 13009
    newImage := self class width:width height:height depth:self depth.
3905
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13010
    newImage photometric:photometric.
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13011
    newImage colorMap:(self colorMap copy).
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13012
    newImage bits:(self bits copy).
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13013
    newImage mask:(self mask copy).
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13014
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13015
    xMax := width - 1.
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13016
    yMax := height - 1.
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13017
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 13018
    newPixelValue :=
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13019
        [:image :pixelValue |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13020
            |r g b nR nG nB|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13021
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13022
            r := image redBitsOf:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13023
            g := image greenBitsOf:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13024
            b := image blueBitsOf:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13025
            nR := r bitAnd:mask. (nR bitAnd:extMask)~~0 ifTrue:[nR := nR bitOr:extBits].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13026
            nG := g bitAnd:mask. (nG bitAnd:extMask)~~0 ifTrue:[nG := nG bitOr:extBits].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13027
            nB := b bitAnd:mask. (nB bitAnd:extMask)~~0 ifTrue:[nB := nB bitOr:extBits].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13028
            image valueFromRedBits:nR greenBits:nG blueBits:nB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13029
        ].
3905
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13030
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13031
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 13032
    photometric ~~ #palette ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13033
        "/ direct manipulation of the pixels
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13034
        0 to:yMax do:[:y |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13035
            0 to:xMax do:[:x |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13036
                pix := self pixelAtX:x y:y.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13037
                n_pix := newPixelValue value:self value:pix.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13038
                n_pix ~= pix ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13039
                    newImage pixelAtX:x y:y put:n_pix.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13040
                    anyChange := true.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13041
                ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13042
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13043
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13044
        anyChange ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13045
            ^ nil
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13046
        ].
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 13047
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13048
        "/ manipulate the colormap
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13049
        0 to:yMax do:[:y |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13050
            0 to:xMax do:[:x |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13051
                pix := self pixelAtX:x y:y.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13052
                (n_pix := map at:pix+1) isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13053
                    clr := self colorAtX:x y:y.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13054
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13055
                    r := clr redByte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13056
                    g := clr greenByte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13057
                    b := clr blueByte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13058
                    nR := r bitAnd:mask. (nR bitAnd:extMask)~~0 ifTrue:[nR := nR bitOr:extBits].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13059
                    nG := g bitAnd:mask. (nR bitAnd:extMask)~~0 ifTrue:[nR := nR bitOr:extBits].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13060
                    nB := b bitAnd:mask. (nR bitAnd:extMask)~~0 ifTrue:[nR := nR bitOr:extBits].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13061
                    n_clr := Color redByte:nR greenByte:nG blueByte:nB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13062
                    (newColors includes:n_clr) ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13063
                        newColors add:n_clr.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13064
                        newColorArray add:n_clr.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13065
                        revMap add:pix.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13066
                        map at:pix+1 put:(n_pix := revMap size - 1).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13067
                    ] ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13068
                        "/ mhmh - multiple pixels mapped to the same color
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13069
                        n_pix := (newColorArray indexOf:n_clr) - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13070
                        map at:pix+1 put:n_pix.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13071
                    ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13072
                ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13073
                newImage pixelAtX:x y:y put:n_pix.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13074
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13075
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13076
        revMap size == self colorMap size ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13077
            revMap = (0 to:revMap size-1) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13078
                ^ nil
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13079
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13080
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13081
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13082
        newImage colorMap:(MappedPalette withColors:newColorArray).
3905
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13083
    ].
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13084
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13085
    ^ newImage
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 13086
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 13087
    "Modified: / 30-01-2017 / 20:15:02 / stefan"
3905
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13088
!
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13089
692
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13090
withPixelFunctionApplied:pixelFunctionBlock
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13091
    "return a new image from the old one, by applying a pixel processor
1509
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13092
     on the pixel colors.
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 13093
     Notice: this method is very slow - either apply pixel values
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 13094
     (#withPixelFunctionAppliedToPixels:) or redefine this method in
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 13095
     a concrete subclass.
3860
571f1cd259f5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3855
diff changeset
 13096
     (read `Beyond photography, by Gerard J. Holzmann;
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13097
           ISBM 0-13-074410-7)
692
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13098
     See blurred / oilPointed as examples ...)"
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13099
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13100
    |w  "{Class: SmallInteger }"
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13101
     h  "{Class: SmallInteger }"
4160
6d31e4e6a432 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4159
diff changeset
 13102
     newImage "newBits newBytesPerRow"|
692
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13103
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13104
    newImage := self species new.
3912
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
 13105
    newImage depth:self depth.
692
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13106
    newImage width:width.
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13107
    newImage height:height.
3912
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
 13108
"/    newBytesPerRow := ((width * self depth) + 7) // 8.
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
 13109
"/    newBits := ByteArray uninitializedNew:(newBytesPerRow * height).
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
 13110
    newImage createPixelStore. "/ bits:newBits.
692
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13111
    newImage photometric:photometric.
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13112
    newImage samplesPerPixel:samplesPerPixel.
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13113
    newImage bitsPerSample:bitsPerSample.
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13114
    newImage colorMap:colorMap copy.
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13115
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13116
    w := width - 1.
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13117
    h := height - 1.
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13118
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13119
    0 to:h do:[:y |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13120
        0 to:w do:[:x |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13121
            newImage colorAtX:x y:y put:(pixelFunctionBlock
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13122
                                                value:self
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13123
                                                value:(self colorAtX:x y:y)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13124
                                                value:x
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13125
                                                value:y)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13126
        ]
692
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13127
    ].
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13128
    ^ newImage
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13129
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 13130
    "black out everything except for some rectangle:
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 13131
1570
1aeaa96fa6fb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1510
diff changeset
 13132
     |i black|
692
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13133
3476
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 13134
     i := Image fromFile:'goodies/bitmaps/gifImages/claus.gif'.
692
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13135
     i inspect.
1570
1aeaa96fa6fb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1510
diff changeset
 13136
1aeaa96fa6fb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1510
diff changeset
 13137
     black := Color black.
1aeaa96fa6fb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1510
diff changeset
 13138
     (i withPixelFunctionApplied:[:oldImage :oldColor :x :y |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13139
                        ((x between:100 and:200)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13140
                        and:[y between:100 and:200]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13141
                            oldColor
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13142
                        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13143
                            black.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13144
                        ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13145
                     ]) inspect.
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 13146
    "
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 13147
    "brighten a frame:
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 13148
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 13149
     |i black w h|
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 13150
3476
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 13151
     i := Image fromFile:'goodies/bitmaps/gifImages/claus.gif'.
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 13152
     i inspect.
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 13153
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 13154
     w := i width.
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 13155
     h := i height.
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 13156
     (i withPixelFunctionApplied:[:oldImage :oldColor :x :y |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13157
                        ((x between:0 and:10)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13158
                        or:[(y between:0 and:10)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13159
                        or:[(x between:w-10 and:w)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13160
                        or:[y between:h-10 and:h]]]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13161
                            oldColor lightened nearestIn:i colorMap
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13162
                        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13163
                            oldColor.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13164
                        ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13165
                     ]) inspect.
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 13166
    "
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 13167
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 13168
    "Modified: 24.4.1997 / 18:36:59 / cg"
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 13169
!
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 13170
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 13171
withPixelFunctionAppliedToPixels:pixelFunctionBlock
1509
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13172
    "return a new image from the old one, by applying a pixel processor
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13173
     on the pixel values.
4296
240f73781089 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4226
diff changeset
 13174
     (read `Beyond photography, by Gerard J. Holzmann;
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13175
           ISBM 0-13-074410-7)
3911
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13176
     See blurred / oilPointed as examples ...)"
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13177
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 13178
    ^ self
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13179
        withPixelFunctionAppliedToPixels:pixelFunctionBlock
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13180
        in:(0@0 corner:width@height)
3911
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13181
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13182
    "oil painting effect:
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13183
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13184
     |i w h|
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13185
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13186
     i := Image fromFile:'goodies/bitmaps/gifImages/claus.gif'.
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13187
     i inspect.
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13188
     w := i width - 1.
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13189
     h := i height - 1.
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13190
     (i withPixelFunctionAppliedToPixels:[:oldImage :oldPixel :x :y |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13191
                        |b p max xMin xMax yMin yMax|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13192
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13193
                        b := Bag identityNew:10.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13194
                        xMin := x-3 max:0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13195
                        xMax := x+3 min:w.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13196
                        yMin := y-3 max:0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13197
                        yMax := y+3 min:h.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13198
                        xMin to:xMax do:[:tx|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13199
                          yMin to:yMax do:[:ty|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13200
                            b add:(oldImage pixelAtX:tx y:ty)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13201
                          ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13202
                        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13203
                        max := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13204
                        b contents keysAndValuesDo:[:pixel :n |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13205
                            n > max ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13206
                                p := pixel.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13207
                                max := n
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13208
                            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13209
                        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13210
                        p
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13211
                     ]) inspect.
3911
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13212
    "
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13213
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13214
    "fisheye effect:
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13215
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13216
     |i w h w2 h2 R white|
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13217
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13218
     i := Image fromFile:'goodies/bitmaps/gifImages/claus.gif'.
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13219
     i inspect.
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13220
     w := i width - 1.
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13221
     h := i height - 1.
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13222
     w2 := w // 2.
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13223
     h2 := h // 2.
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13224
     R := w2.
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13225
     white := i valueFromColor:Color white.
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13226
     (i withPixelFunctionAppliedToPixels:[:oldImage :oldPixel :x :y |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13227
                        |p r a nR nP nX nY|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13228
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13229
                        p := (x-w2)@(y-h2).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13230
                        r := p r.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13231
                        a := p theta.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13232
                        nR := r * r / R.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13233
                        nP := Point r:nR theta:a.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13234
                        nX := ((nP x+w2) rounded max:0) min:w.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13235
                        nY := ((nP y+h2) rounded max:0) min:h.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13236
                        (nX > w or:[nX < 0]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13237
                            white
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13238
                        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13239
                            (nY > h or:[nY < 0]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13240
                                white
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13241
                            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13242
                                oldImage pixelAtX:nX y:nY
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13243
                            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13244
                        ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13245
                     ]) inspect.
3911
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13246
    "
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13247
    "fisheye effect:
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13248
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13249
     |i w h w2 h2 R white|
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13250
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13251
     i := Image fromFile:'goodies/bitmaps/gifImages/claus.gif'.
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13252
     i inspect.
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13253
     w := i width - 1.
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13254
     h := i height - 1.
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13255
     w2 := w // 2.
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13256
     h2 := h // 2.
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13257
     R := w2.
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13258
     white := i valueFromColor:Color white.
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13259
     (i withPixelFunctionAppliedToPixels:[:oldImage :oldPixel :x :y |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13260
                        |p r a nR nP nX nY|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13261
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13262
                        p := (x-w2)@(y-h2).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13263
                        r := p r.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13264
                        a := p theta.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13265
                        nR := r * r / R.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13266
                        nP := Point r:nR theta:a.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13267
                        nX := (nP x+w2) rounded.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13268
                        nY := (nP y+h2) rounded.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13269
                        (nX > w or:[nX < 0]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13270
                            white
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13271
                        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13272
                            (nY > h or:[nY < 0]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13273
                                white
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13274
                            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13275
                                oldImage pixelAtX:nX y:nY
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13276
                            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13277
                        ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13278
                     ]) inspect.
3911
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13279
    "
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13280
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13281
    "Created: 24.4.1997 / 18:37:17 / cg"
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13282
    "Modified: 24.4.1997 / 18:40:02 / cg"
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13283
!
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13284
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13285
withPixelFunctionAppliedToPixels:pixelFunctionBlock in:aRectangle
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13286
    "return a new image from the old one, by applying a pixel processor
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13287
     on the pixel values.
4160
6d31e4e6a432 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4159
diff changeset
 13288
     (read `Beyond photography, by Gerard J. Holzmann;
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13289
           ISBM 0-13-074410-7)
1509
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13290
     See blurred / oilPointed as examples ...)"
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13291
4160
6d31e4e6a432 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4159
diff changeset
 13292
    |newImage "newBits newBytesPerRow"|
1509
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13293
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13294
    newImage := self species new.
3912
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
 13295
    newImage depth:self depth.
1509
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13296
    newImage width:width.
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13297
    newImage height:height.
3912
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
 13298
"/    newBytesPerRow := ((width * self depth) + 7) // 8.
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
 13299
"/    newBits := ByteArray uninitializedNew:(newBytesPerRow * height).
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
 13300
    newImage createPixelStore. "/ bits:newBits
1509
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13301
    newImage photometric:photometric.
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13302
    newImage samplesPerPixel:samplesPerPixel.
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13303
    newImage bitsPerSample:bitsPerSample.
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13304
    newImage colorMap:colorMap copy.
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13305
3911
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13306
    self applyPixelValuesTo:pixelFunctionBlock in:aRectangle into:newImage.
1509
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13307
    ^ newImage
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13308
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13309
    "oil painting effect:
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13310
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13311
     |i w h|
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13312
3476
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 13313
     i := Image fromFile:'goodies/bitmaps/gifImages/claus.gif'.
1509
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13314
     i inspect.
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13315
     w := i width - 1.
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13316
     h := i height - 1.
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 13317
     (i withPixelFunctionAppliedToPixels:[:oldImage :oldPixel :x :y |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13318
                        |b p max xMin xMax yMin yMax|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13319
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13320
                        b := Bag identityNew:10.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13321
                        xMin := x-3 max:0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13322
                        xMax := x+3 min:w.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13323
                        yMin := y-3 max:0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13324
                        yMax := y+3 min:h.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13325
                        xMin to:xMax do:[:tx|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13326
                          yMin to:yMax do:[:ty|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13327
                            b add:(oldImage pixelAtX:tx y:ty)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13328
                          ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13329
                        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13330
                        max := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13331
                        b contents keysAndValuesDo:[:pixel :n |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13332
                            n > max ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13333
                                p := pixel.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13334
                                max := n
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13335
                            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13336
                        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13337
                        p
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13338
                     ]) inspect.
1509
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13339
    "
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13340
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13341
    "fisheye effect:
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13342
1570
1aeaa96fa6fb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1510
diff changeset
 13343
     |i w h w2 h2 R white|
1509
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13344
3476
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 13345
     i := Image fromFile:'goodies/bitmaps/gifImages/claus.gif'.
1509
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13346
     i inspect.
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13347
     w := i width - 1.
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13348
     h := i height - 1.
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13349
     w2 := w // 2.
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13350
     h2 := h // 2.
1510
8b56c96a9e9d pixel processing
Claus Gittinger <cg@exept.de>
parents: 1509
diff changeset
 13351
     R := w2.
1570
1aeaa96fa6fb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1510
diff changeset
 13352
     white := i valueFromColor:Color white.
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 13353
     (i withPixelFunctionAppliedToPixels:[:oldImage :oldPixel :x :y |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13354
                        |p r a nR nP nX nY|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13355
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13356
                        p := (x-w2)@(y-h2).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13357
                        r := p r.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13358
                        a := p theta.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13359
                        nR := r * r / R.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13360
                        nP := Point r:nR theta:a.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13361
                        nX := ((nP x+w2) rounded max:0) min:w.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13362
                        nY := ((nP y+h2) rounded max:0) min:h.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13363
                        (nX > w or:[nX < 0]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13364
                            white
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13365
                        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13366
                            (nY > h or:[nY < 0]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13367
                                white
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13368
                            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13369
                                oldImage pixelAtX:nX y:nY
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13370
                            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13371
                        ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13372
                     ]) inspect.
1509
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13373
    "
1510
8b56c96a9e9d pixel processing
Claus Gittinger <cg@exept.de>
parents: 1509
diff changeset
 13374
    "fisheye effect:
8b56c96a9e9d pixel processing
Claus Gittinger <cg@exept.de>
parents: 1509
diff changeset
 13375
8b56c96a9e9d pixel processing
Claus Gittinger <cg@exept.de>
parents: 1509
diff changeset
 13376
     |i w h w2 h2 R white|
8b56c96a9e9d pixel processing
Claus Gittinger <cg@exept.de>
parents: 1509
diff changeset
 13377
3476
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 13378
     i := Image fromFile:'goodies/bitmaps/gifImages/claus.gif'.
1510
8b56c96a9e9d pixel processing
Claus Gittinger <cg@exept.de>
parents: 1509
diff changeset
 13379
     i inspect.
8b56c96a9e9d pixel processing
Claus Gittinger <cg@exept.de>
parents: 1509
diff changeset
 13380
     w := i width - 1.
8b56c96a9e9d pixel processing
Claus Gittinger <cg@exept.de>
parents: 1509
diff changeset
 13381
     h := i height - 1.
8b56c96a9e9d pixel processing
Claus Gittinger <cg@exept.de>
parents: 1509
diff changeset
 13382
     w2 := w // 2.
8b56c96a9e9d pixel processing
Claus Gittinger <cg@exept.de>
parents: 1509
diff changeset
 13383
     h2 := h // 2.
8b56c96a9e9d pixel processing
Claus Gittinger <cg@exept.de>
parents: 1509
diff changeset
 13384
     R := w2.
8b56c96a9e9d pixel processing
Claus Gittinger <cg@exept.de>
parents: 1509
diff changeset
 13385
     white := i valueFromColor:Color white.
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 13386
     (i withPixelFunctionAppliedToPixels:[:oldImage :oldPixel :x :y |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13387
                        |p r a nR nP nX nY|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13388
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13389
                        p := (x-w2)@(y-h2).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13390
                        r := p r.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13391
                        a := p theta.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13392
                        nR := r * r / R.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13393
                        nP := Point r:nR theta:a.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13394
                        nX := (nP x+w2) rounded.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13395
                        nY := (nP y+h2) rounded.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13396
                        (nX > w or:[nX < 0]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13397
                            white
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13398
                        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13399
                            (nY > h or:[nY < 0]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13400
                                white
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13401
                            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13402
                                oldImage pixelAtX:nX y:nY
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13403
                            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13404
                        ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13405
                     ]) inspect.
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 13406
    "
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 13407
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 13408
    "Created: 24.4.1997 / 18:37:17 / cg"
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 13409
    "Modified: 24.4.1997 / 18:40:02 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13410
! !
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13411
3870
8245e3f37feb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3868
diff changeset
 13412
!Image methodsFor:'initialization'!
8245e3f37feb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3868
diff changeset
 13413
3912
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
 13414
createPixelStore
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
 13415
    |bytesPerRow|
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
 13416
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
 13417
    bytesPerRow := self bytesPerRow.
5643
bf38d077884a changed:
Claus Gittinger <cg@exept.de>
parents: 5533
diff changeset
 13418
    self bits:(ByteArray new:(bytesPerRow * self height)).
bf38d077884a changed:
Claus Gittinger <cg@exept.de>
parents: 5533
diff changeset
 13419
bf38d077884a changed:
Claus Gittinger <cg@exept.de>
parents: 5533
diff changeset
 13420
    "Modified: / 02-11-2010 / 20:57:11 / cg"
3912
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
 13421
!
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
 13422
3871
a7867fb8d880 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3870
diff changeset
 13423
initialize
3870
8245e3f37feb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3868
diff changeset
 13424
    self photometric:(self class defaultPhotometric)
8245e3f37feb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3868
diff changeset
 13425
! !
8245e3f37feb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3868
diff changeset
 13426
5037
2e515c9ee849 changed #valueFromColor:
Claus Gittinger <cg@exept.de>
parents: 4998
diff changeset
 13427
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13428
!Image methodsFor:'instance release'!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13429
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 13430
close
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 13431
    "release device resources; destroy any device-resources"
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 13432
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 13433
    deviceForm notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13434
        deviceForm destroy.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13435
        deviceForm := nil.
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 13436
    ].
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 13437
    monoDeviceForm notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13438
        monoDeviceForm destroy.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13439
        monoDeviceForm := nil.
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 13440
    ].
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 13441
    fullColorDeviceForm notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13442
        fullColorDeviceForm destroy.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13443
        fullColorDeviceForm := nil.
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 13444
    ].
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 13445
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 13446
    device := nil.
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 13447
    mask notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13448
        mask close.
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 13449
    ].
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 13450
    Lobby unregister:self.
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 13451
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 13452
    "Modified: 21.6.1996 / 19:08:19 / cg"
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 13453
    "Created: 24.4.1997 / 11:55:20 / cg"
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 13454
!
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 13455
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13456
release
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13457
    "release device resources"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13458
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13459
    device := nil.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13460
    deviceForm := nil.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13461
    monoDeviceForm := nil.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13462
    fullColorDeviceForm := nil.
901
6cacd0f4eef0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 896
diff changeset
 13463
    mask notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13464
        mask release.
901
6cacd0f4eef0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 896
diff changeset
 13465
    ].
6cacd0f4eef0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 896
diff changeset
 13466
    Lobby unregister:self.
1746
72a583dd30bd must not forget super release
Claus Gittinger <cg@exept.de>
parents: 1739
diff changeset
 13467
    super release.
72a583dd30bd must not forget super release
Claus Gittinger <cg@exept.de>
parents: 1739
diff changeset
 13468
72a583dd30bd must not forget super release
Claus Gittinger <cg@exept.de>
parents: 1739
diff changeset
 13469
    "Modified: 11.6.1997 / 13:20:04 / cg"
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
 13470
!
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
 13471
4226
dcd06fa84d2c *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4187
diff changeset
 13472
releaseFromDevice
dcd06fa84d2c *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4187
diff changeset
 13473
    "release device resources"
dcd06fa84d2c *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4187
diff changeset
 13474
dcd06fa84d2c *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4187
diff changeset
 13475
    device := nil.
dcd06fa84d2c *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4187
diff changeset
 13476
    deviceForm := nil.
dcd06fa84d2c *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4187
diff changeset
 13477
    monoDeviceForm := nil.
dcd06fa84d2c *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4187
diff changeset
 13478
    fullColorDeviceForm := nil.
dcd06fa84d2c *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4187
diff changeset
 13479
7573
656c59bc93ad #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7565
diff changeset
 13480
4226
dcd06fa84d2c *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4187
diff changeset
 13481
    "Modified: 16.1.1997 / 19:33:01 / cg"
dcd06fa84d2c *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4187
diff changeset
 13482
!
dcd06fa84d2c *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4187
diff changeset
 13483
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13484
restored
7895
cd3eef1d2398 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7887
diff changeset
 13485
    "flush device specifics after a snapin or binary restore.
cd3eef1d2398 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7887
diff changeset
 13486
     Also to flush any cached device forms, after drawing into the pixel store"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13487
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13488
    self release
7895
cd3eef1d2398 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7887
diff changeset
 13489
cd3eef1d2398 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7887
diff changeset
 13490
    "Modified (comment): / 16-02-2017 / 12:36:26 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13491
! !
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13492
2227
7aa9e2a8d321 added #edit - to open an image editor.
Claus Gittinger <cg@exept.de>
parents: 2212
diff changeset
 13493
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
 13494
!Image methodsFor:'obsolete'!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
 13495
3911
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13496
applyPixelValuesTo:pixelFunctionBlock into:newImage in:aRectangle
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13497
    "helper for withPixelFunctionAppliedToValues:
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13498
     enumerate pixelValues and evaluate the block for each.
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13499
     To be redefined by subclasses for better performance."
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13500
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 13501
    ^ self applyPixelValuesTo:pixelFunctionBlock in:aRectangle into:newImage
3911
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13502
!
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13503
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
 13504
magnifyBy:scale
5216
f7ec910cfce1 Mark obsolete methods
Stefan Vogel <sv@exept.de>
parents: 5200
diff changeset
 13505
    <resource: #obsolete>
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
 13506
    "obsolete: has been renamed to magnifiedBy: for ST-80 compatibility
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
 13507
     and name consistency ..."
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
 13508
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
 13509
    self obsoleteMethodWarning.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
 13510
    ^ self magnifiedBy:scale
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
 13511
! !
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
 13512
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13513
!Image methodsFor:'pixel copying'!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13514
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13515
copyFrom:anImage x:srcX y:srcY toX:dstX y:dstY width:w height:h
1248
6afcdec18986 commentary
Claus Gittinger <cg@exept.de>
parents: 1230
diff changeset
 13516
    "replace a rectangular area by pixels from another image.
7552
6d862b1829d9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7551
diff changeset
 13517
     The source's colors must be present in the destination's
1764
01101be8bd5c obsolete warning messages
Claus Gittinger <cg@exept.de>
parents: 1763
diff changeset
 13518
     colorMap - otherwise, an error will be reported.
4955
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13519
     Any mask is copied from the source.
1764
01101be8bd5c obsolete warning messages
Claus Gittinger <cg@exept.de>
parents: 1763
diff changeset
 13520
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13521
     WARNING:
1764
01101be8bd5c obsolete warning messages
Claus Gittinger <cg@exept.de>
parents: 1763
diff changeset
 13522
       This implementation is a very slow fallback general algorithm
01101be8bd5c obsolete warning messages
Claus Gittinger <cg@exept.de>
parents: 1763
diff changeset
 13523
       (the loop over the source pixels is very slow).
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 13524
       If this method is used heavily, you may want to redefine it in
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 13525
       concrete subclasses for the common case of of copying from an Image
1764
01101be8bd5c obsolete warning messages
Claus Gittinger <cg@exept.de>
parents: 1763
diff changeset
 13526
       with the same depth & palette.
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 13527
       If you do heavy image processing, specialized versions are even req'd
1764
01101be8bd5c obsolete warning messages
Claus Gittinger <cg@exept.de>
parents: 1763
diff changeset
 13528
       for other cases, rewriting the inner loops as inline C-code."
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13529
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13530
    |dX dY|
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13531
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13532
    dX := srcX-dstX.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13533
    dY := srcY-dstY.
1248
6afcdec18986 commentary
Claus Gittinger <cg@exept.de>
parents: 1230
diff changeset
 13534
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13535
    ((photometric == anImage photometric)
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13536
     and:[self bitsPerPixel == anImage bitsPerPixel
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13537
     and:[colorMap = anImage colorMap]]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13538
        "/ can loop over values
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13539
        anImage valuesFromX:srcX  y:srcY
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13540
                        toX:srcX+w-1 y:srcY+h-1
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13541
                         do:[:x :y :pixelValue |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13542
            self pixelAtX:x-dX y:y-dY put:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13543
        ]
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13544
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13545
        "/ must loop over colors - horribly slow
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13546
        anImage colorsFromX:srcX  y:srcY
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13547
                        toX:srcX+w-1 y:srcY+h-1
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13548
                         do:[:x :y :clr |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13549
            self colorAtX:x-dX y:y-dY put:clr.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13550
        ]
3457
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 13551
    ].
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 13552
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 13553
    (mask isNil and:[anImage mask notNil]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13554
        "/ I have no mask; copied image has
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13555
        self createMask.
3457
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 13556
    ].
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 13557
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 13558
    mask notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13559
        anImage mask notNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13560
            "/ both have a mask
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13561
            mask copyFrom:anImage mask x:srcX y:srcY toX:dstX y:dstY width:w height:h
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13562
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13563
            "/ I have a mask - copied image has not
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13564
            mask fillRectangleX:dstX y:dstY width:w height:h withValue:1
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13565
        ]
3457
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 13566
"/    ] ifFalse:[
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 13567
"/        anImage mask notNil ifTrue:[
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 13568
"/            "/ I have no mask; copied image has (already handled)
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 13569
"/        ] ifFalse:[
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 13570
"/            "/ none has a mask - nothing to do.
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 13571
"/        ]
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 13572
    ].
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 13573
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13574
    "
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13575
     |i1 i8 i4|
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13576
7552
6d862b1829d9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7551
diff changeset
 13577
     i8 := Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif'.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13578
     i8 inspect.
7552
6d862b1829d9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7551
diff changeset
 13579
     i1 := Image fromFile:'../../libtool/bitmaps/SBrowser.xbm'.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13580
     i1 inspect.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13581
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13582
     i4 := Depth4Image fromImage:i8.
1764
01101be8bd5c obsolete warning messages
Claus Gittinger <cg@exept.de>
parents: 1763
diff changeset
 13583
     i4 copyFrom:i1 x:0 y:0 toX:20 y:20 width:20 height:20.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13584
     i4 inspect.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13585
    "
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13586
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13587
    "Created: 20.9.1995 / 10:14:01 / claus"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13588
    "Modified: 20.9.1995 / 10:25:31 / claus"
1764
01101be8bd5c obsolete warning messages
Claus Gittinger <cg@exept.de>
parents: 1763
diff changeset
 13589
    "Modified: 21.6.1997 / 13:15:31 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13590
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13591
4955
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13592
copyFrom:anImage x:srcX y:srcY toX:dstX y:dstY width:w height:h masked:maskedCopy
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13593
    "replace a rectangular area by pixels from another image.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13594
     The sources colors must be present in the destinations
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13595
     colorMap - otherwise, an error will be reported.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13596
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13597
     WARNING:
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13598
       This implementation is a very slow fallback general algorithm
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13599
       (the loop over the source pixels is very slow).
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13600
       If this method is used heavily, you may want to redefine it in
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13601
       concrete subclasses for the common case of of copying from an Image
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13602
       with the same depth & palette.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13603
       If you do heavy image processing, specialized versions are even req'd
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13604
       for other cases, rewriting the inner loops as inline C-code."
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13605
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13606
    maskedCopy ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13607
        self
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13608
            copyMaskedFrom:anImage x:srcX y:srcY toX:dstX y:dstY width:w height:h
4955
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13609
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13610
        self
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13611
            copyFrom:anImage x:srcX y:srcY toX:dstX y:dstY width:w height:h
4955
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13612
    ].
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13613
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13614
    "
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13615
     |i1 i8 i4|
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13616
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13617
     i8 := Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif'.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13618
     i8 inspect.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13619
     i1 := Image fromFile:'../../goodies/bitmaps/xbmBitmaps/TicTacToe.xbm'.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13620
     i1 inspect.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13621
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13622
     i4 := Depth4Image fromImage:i8.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13623
     i4 copyFrom:i1 x:0 y:0 toX:20 y:20 width:20 height:20.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13624
     i4 inspect.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13625
    "
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13626
!
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13627
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13628
copyMaskedFrom:anImage x:srcX y:srcY toX:dstX y:dstY width:w height:h
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13629
    "replace a rectangular area by pixels from another image.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13630
     The sources colors must be present in the destinations
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13631
     colorMap - otherwise, an error will be reported.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13632
     Only unmasked pixels are copied from the source.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13633
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13634
     WARNING:
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13635
       This implementation is a very slow fallback general algorithm
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13636
       (the loop over the source pixels is very slow).
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13637
       If this method is used heavily, you may want to redefine it in
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13638
       concrete subclasses for the common case of of copying from an Image
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13639
       with the same depth & palette.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13640
       If you do heavy image processing, specialized versions are even req'd
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13641
       for other cases, rewriting the inner loops as inline C-code."
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13642
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13643
    |dX dY|
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13644
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13645
    dX := srcX-dstX.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13646
    dY := srcY-dstY.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13647
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13648
    ((photometric == anImage photometric)
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13649
     and:[self bitsPerPixel == anImage bitsPerPixel
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13650
     and:[colorMap = anImage colorMap]]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13651
        "/ can loop over values
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13652
        anImage valuesFromX:srcX  y:srcY
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13653
                        toX:srcX+w-1 y:srcY+h-1
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13654
                         do:[:x :y :pixelValue |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13655
            (anImage maskAtX:x y:y) ~~ 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13656
                self pixelAtX:x-dX y:y-dY put:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13657
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13658
        ]
4955
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13659
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13660
        "/ must loop over colors - horribly slow
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13661
        anImage colorsFromX:srcX  y:srcY
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13662
                        toX:srcX+w-1 y:srcY+h-1
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13663
                         do:[:x :y :clr |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13664
            (anImage maskAtX:x y:y) ~~ 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13665
                self colorAtX:x-dX y:y-dY put:clr.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13666
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13667
        ]
4955
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13668
    ].
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13669
!
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13670
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13671
subImageIn:aRectangle
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13672
    "create and return a new image consisting of a subArea of myself"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13673
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13674
    ^ self class fromSubImage:self in:aRectangle
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13675
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13676
    "
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13677
     |i|
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13678
4168
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
 13679
     i := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13680
     i inspect.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13681
     (i subImageIn:(300@160 corner:340@200)) inspect
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13682
    "
7551
a58984867d2f #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7537
diff changeset
 13683
    "
a58984867d2f #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7537
diff changeset
 13684
     |i|
a58984867d2f #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7537
diff changeset
 13685
a58984867d2f #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7537
diff changeset
 13686
     i := Image fromFile:'/Volumes/tmp/fillimage.ok.png'.
a58984867d2f #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7537
diff changeset
 13687
     i inspect.
a58984867d2f #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7537
diff changeset
 13688
     (i subImageIn:(0@0 corner:i width@i height)) inspect
a58984867d2f #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7537
diff changeset
 13689
    "
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13690
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13691
    "Created: 20.9.1995 / 01:24:20 / claus"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13692
! !
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13693
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13694
!Image methodsFor:'pixel functions'!
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13695
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13696
computeBitsFromPixelFunction
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13697
    "compute the bits from the pixelfunction"
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13698
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 13699
    |bpr|
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13700
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13701
    bpr := self bytesPerRow.
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13702
    bytes := ByteArray new:(bpr * height).
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13703
    0 to:height-1 do:[:y |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13704
        0 to:width-1 do:[:x |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13705
            self pixelAtX:x y:y put:(pixelFunction value:x value:y).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13706
        ]
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13707
    ].
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 13708
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 13709
    "Modified: / 31-01-2017 / 14:39:26 / stefan"
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13710
!
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13711
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13712
pixelFunction
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13713
    ^ pixelFunction
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13714
!
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13715
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13716
pixelFunction:aTwoArgFunction
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13717
    "set the pixel function. This is used to define a functional image,
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13718
     where pixel values are computed via a function instead of coming
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13719
     from a bits array (although a pixel array could also be seen as
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13720
     a pixel function).
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13721
     The pixelFunction will map (x E [0 .. width]) x (y E [0 .. height]) -> pixel"
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13722
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13723
    pixelFunction := aTwoArgFunction.
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13724
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13725
    "
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13726
     |i|
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13727
     i := Depth1Image extent:256@256.
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13728
     i pixelFunction:[:x :y | ((x // 16) bitXor:(y // 16)) odd asInteger].
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13729
     i inspect.
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13730
    "
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13731
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13732
    "
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13733
     |i|
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13734
     i := Depth8Image extent:256@256.
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13735
     i photometric:#blackIs0.
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13736
     i pixelFunction:[:x :y | x  ].
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13737
     i inspect.
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13738
    "
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13739
!
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13740
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13741
pixelFunction:aTwoArgFunction inX:xInterval y:yInterval
7373
61933c223183 added metaData instVar (for free use by image reader)
Claus Gittinger <cg@exept.de>
parents: 7363
diff changeset
 13742
    "set the pixel function and a viewport.
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13743
     This is used to define a functional image,
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13744
     where pixel values are computed via a function instead of coming
7373
61933c223183 added metaData instVar (for free use by image reader)
Claus Gittinger <cg@exept.de>
parents: 7363
diff changeset
 13745
     from a bits array.
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13746
     The pixelFunction will map (x E xInterval) x (y E yInterval) -> pixel"
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13747
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13748
    |sX sY tX tY|
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13749
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13750
    "/ intervals are typically 0..1
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13751
    sX := (xInterval stop - xInterval start) asFloat / width.
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13752
    sY := (yInterval stop - yInterval start) asFloat / height.
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13753
    tX := xInterval start.
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13754
    tY := yInterval start.
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13755
7373
61933c223183 added metaData instVar (for free use by image reader)
Claus Gittinger <cg@exept.de>
parents: 7363
diff changeset
 13756
    pixelFunction :=
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13757
        [:x :y |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13758
            aTwoArgFunction value:(x * sX + tX) value:(y * sY + tY)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13759
        ]
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13760
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13761
    "
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13762
     |i|
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13763
     i := Depth8Image extent:256@256.
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13764
     i photometric:#blackIs0.
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13765
     i pixelFunction:[:x :y | ((x@y) r * 255) truncated min:255] inX:(-1 to:1) y:(-1 to:1).
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13766
     i inspect.
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13767
    "
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13768
! !
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 13769
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13770
!Image methodsFor:'printing & storing'!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13771
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13772
storeOn:aStream
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
 13773
    "append a printed representation of the receiver to aStream,
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
 13774
     from which a copy of it can be reconstructed."
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
 13775
6900
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
 13776
    |colors usedValues colorMapArray needBPS needSemi|
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
 13777
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
 13778
    needSemi := false.
7373
61933c223183 added metaData instVar (for free use by image reader)
Claus Gittinger <cg@exept.de>
parents: 7363
diff changeset
 13779
    aStream nextPutAll:('(%1 width:%2 height:%3'
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13780
                            bindWith:self class name
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13781
                            with:width
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13782
                            with:height).
6311
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
 13783
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
 13784
    "/ avoiding some unneeded stuff here makes object files with many images a bit smaller.
6900
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
 13785
    "/ no need for the photometric, if it's the default anyway
6311
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
 13786
    photometric ~= self class defaultPhotometric ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13787
        (colorMap isNil or:[photometric ~~ #palette]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13788
            aStream nextPutAll:' photometric:('. photometric storeOn:aStream. aStream nextPut:$).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13789
        ].
6311
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
 13790
    ].
7349
361f96216120 #OTHER by stefan
Stefan Vogel <sv@exept.de>
parents: 7292
diff changeset
 13791
    aStream nextPut:$).
6311
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
 13792
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
 13793
    "/ no need to store bitPerSample/samplesPerPixel in all situations
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
 13794
    needBPS := true.
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
 13795
7373
61933c223183 added metaData instVar (for free use by image reader)
Claus Gittinger <cg@exept.de>
parents: 7363
diff changeset
 13796
    self depth == 1
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13797
        ifTrue:[ needBPS := false ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13798
        ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13799
            ((photometric == #palette)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13800
                and:[ (bitsPerSample size == 1)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13801
                and:[ ((bitsPerSample at:1) == self depth)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13802
                and:[ samplesPerPixel == 1 ]]])
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13803
            ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13804
                needBPS := false.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13805
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13806
        ].
6311
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
 13807
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
 13808
    needBPS ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13809
        needSemi ifTrue:[aStream nextPutAll:';'].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13810
        aStream nextPutAll:' bitsPerSample:('. bitsPerSample storeOn:aStream. aStream nextPutAll:')'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13811
        samplesPerPixel ~= bitsPerSample size ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13812
            aStream nextPutAll:'; samplesPerPixel:('. samplesPerPixel storeOn:aStream. aStream nextPutAll:')'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13813
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13814
        needSemi := true.
6311
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
 13815
    ].
5533
2e7c216c76cf comment/format in: #storeOn:
Claus Gittinger <cg@exept.de>
parents: 5508
diff changeset
 13816
2e7c216c76cf comment/format in: #storeOn:
Claus Gittinger <cg@exept.de>
parents: 5508
diff changeset
 13817
    "/ assert that all bits are there...
2e7c216c76cf comment/format in: #storeOn:
Claus Gittinger <cg@exept.de>
parents: 5508
diff changeset
 13818
    "/ self assert:(self bits size) >= (self bytesPerRow * height).
2e7c216c76cf comment/format in: #storeOn:
Claus Gittinger <cg@exept.de>
parents: 5508
diff changeset
 13819
    "/ self bits:((ByteArray new:self bytesPerRow * height) replaceFrom:1 with:self bits).
2e7c216c76cf comment/format in: #storeOn:
Claus Gittinger <cg@exept.de>
parents: 5508
diff changeset
 13820
6900
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
 13821
    needSemi ifTrue:[aStream nextPutAll:';'].
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
 13822
    aStream nextPutAll:' bits:(ByteArray fromPackedString:'. self bits asPackedString storeOn:aStream.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
 13823
    aStream nextPutAll:')'.
2068
3bc8754883ae store on the color map in an array of rgb-byte values
tz
parents: 2059
diff changeset
 13824
4187
411b7b76a8bb fixedPalette has more functionality
Claus Gittinger <cg@exept.de>
parents: 4175
diff changeset
 13825
    colorMap notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13826
        self depth <= 8 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13827
            "/ cut off unused colors ...
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13828
            usedValues := self usedValues.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13829
            colors := colorMap copyFrom:1 to:((usedValues max+1) min:colorMap size).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13830
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13831
            colorMapArray := OrderedCollection new.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13832
            colors do:[:clr| colorMapArray add:(clr redByte); add:(clr greenByte); add:(clr blueByte)].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13833
            aStream cr; spaces:12; nextPutAll:'colorMapFromArray:'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13834
            colorMapArray asByteArray storeOn:aStream.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13835
        ] ifFalse:[
7834
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
 13836
            false ifTrue:[
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
 13837
                aStream cr; spaces:12; nextPutAll:'colorMap:('.
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
 13838
                colorMap storeOn:aStream.
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
 13839
                aStream nextPutAll:')'
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
 13840
            ]
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13841
        ]
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 13842
    ].
4187
411b7b76a8bb fixedPalette has more functionality
Claus Gittinger <cg@exept.de>
parents: 4175
diff changeset
 13843
    mask notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13844
        aStream cr; spaces:12; nextPutAll:'mask:('.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13845
        mask storeOn:aStream.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13846
        aStream nextPutAll:')'.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13847
    ].
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13848
    aStream nextPutAll:'; yourself'
2266
72460683cc97 fixed maskedPixelsAre0 flag setting when copying images.
Claus Gittinger <cg@exept.de>
parents: 2249
diff changeset
 13849
7834
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
 13850
    "Modified: / 03-02-2017 / 16:56:29 / cg"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
 13851
! !
48194c26a46c Initial revision
claus
parents:
diff changeset
 13852
48194c26a46c Initial revision
claus
parents:
diff changeset
 13853
!Image methodsFor:'private'!
48194c26a46c Initial revision
claus
parents:
diff changeset
 13854
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
 13855
bestSupportedImageFormatFor:aDevice
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
 13856
    "scan through the image formats as supported by aDevice,
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
 13857
     and return the best to use when the receiver is to be represented
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
 13858
     on it. The best format is the one with the same number or more bits per
235
579f3f804a46 padding info in supportedFormats
Claus Gittinger <cg@exept.de>
parents: 230
diff changeset
 13859
     pixel. Here, the smallest format found which can represent enough pixels is taken."
579f3f804a46 padding info in supportedFormats
Claus Gittinger <cg@exept.de>
parents: 230
diff changeset
 13860
2530
81b8ffe7662f use new supportedImageFormat query from Device
Claus Gittinger <cg@exept.de>
parents: 2527
diff changeset
 13861
    |bestDeviceDepth
81b8ffe7662f use new supportedImageFormat query from Device
Claus Gittinger <cg@exept.de>
parents: 2527
diff changeset
 13862
     bestDeviceBitsPerPixel "{ Class: SmallInteger }"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 13863
     "maxDepth"
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 13864
     bestInfo maxInfo
2530
81b8ffe7662f use new supportedImageFormat query from Device
Claus Gittinger <cg@exept.de>
parents: 2527
diff changeset
 13865
     myDepth                "{ Class: SmallInteger }"
81b8ffe7662f use new supportedImageFormat query from Device
Claus Gittinger <cg@exept.de>
parents: 2527
diff changeset
 13866
     maxBitsPerPixel        "{ Class: SmallInteger }"|
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
 13867
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
 13868
    myDepth := self bitsPerPixel.
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
 13869
    maxBitsPerPixel := 0.
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
 13870
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
 13871
    aDevice supportedImageFormats do:[:entry |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13872
        |deviceImageDepth        "{ Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13873
         deviceImageBitsPerPixel "{ Class: SmallInteger }" |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13874
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13875
        deviceImageDepth := entry at:#depth.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13876
        deviceImageBitsPerPixel := entry at:#bitsPerPixel.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13877
8141
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
 13878
        "/ for now, ignore all depth's which are neither 1 nor the device's depth.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13879
        "/ (actually, many devices can handle other pixMap formats,
8141
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
 13880
        "/  but I don't know (yet) how to pass the correct color info)
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13881
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13882
        ((deviceImageDepth == 1) or:[deviceImageDepth == aDevice depth]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13883
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13884
            deviceImageBitsPerPixel > maxBitsPerPixel ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13885
                maxInfo := entry.
8141
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
 13886
                "/ maxBitsPerPixel := deviceImageBitsPerPixel.
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
 13887
                "/ maxDepth := deviceImageDepth.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13888
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13889
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13890
            deviceImageDepth >= myDepth ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13891
                deviceImageDepth == myDepth ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13892
                    "/ take the better one ...
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13893
                    (bestDeviceDepth isNil
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13894
                     or:[(bestDeviceBitsPerPixel ~~ bestDeviceDepth)
8141
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
 13895
                        and:[deviceImageDepth == deviceImageBitsPerPixel]]
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
 13896
                    ) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13897
                        bestInfo := entry.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13898
                        bestDeviceDepth := deviceImageDepth.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13899
                        bestDeviceBitsPerPixel := deviceImageBitsPerPixel.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13900
                    ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13901
                ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13902
                    "/ take the next-larger depth
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13903
                    (bestDeviceDepth isNil
8141
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
 13904
                     or:[deviceImageBitsPerPixel < bestDeviceBitsPerPixel]
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
 13905
                    ) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13906
                        bestInfo := entry.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13907
                        bestDeviceDepth := deviceImageDepth.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13908
                        bestDeviceBitsPerPixel := deviceImageBitsPerPixel.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13909
                    ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13910
                ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13911
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13912
        ].
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
 13913
    ].
851
c9511f8945ce fixed bug in bestSupportedImageFormat (with 15-bit trueColor servers)
Claus Gittinger <cg@exept.de>
parents: 841
diff changeset
 13914
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
 13915
    bestDeviceDepth isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13916
        maxBitsPerPixel == 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13917
            "/
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13918
            "/ oops - nothing appropriate
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13919
            "/
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13920
            maxInfo notNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13921
                ^ maxInfo
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13922
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13923
            bestDeviceDepth := bestDeviceBitsPerPixel := aDevice depth.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13924
            bestInfo := IdentityDictionary new.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13925
            bestInfo at:#depth put:bestDeviceDepth.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13926
            bestInfo at:#bitsPerPixel put:bestDeviceBitsPerPixel.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13927
            bestInfo at:#padding put:32.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13928
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13929
            bestInfo := maxInfo.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13930
        ]
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
 13931
    ].
235
579f3f804a46 padding info in supportedFormats
Claus Gittinger <cg@exept.de>
parents: 230
diff changeset
 13932
    ^ bestInfo
579f3f804a46 padding info in supportedFormats
Claus Gittinger <cg@exept.de>
parents: 230
diff changeset
 13933
2050
d1f21c75b5eb when asking a device for its supported pixmap formats,
Claus Gittinger <cg@exept.de>
parents: 2043
diff changeset
 13934
    "Modified: / 7.2.1998 / 11:23:24 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13935
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13936
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13937
colormapFromImage:anImage
7242
bf3a75233d55 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 7230
diff changeset
 13938
    "setup the receiver's colormap from another image.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13939
     Color precision may be lost, if conversion is from a higher depth
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13940
     image. This does not convert any pixel values; it is  non-public helper
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13941
     for fromImage:/fromSubImake:"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13942
3259
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
 13943
    self colormapFromImage:anImage photometric:nil
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
 13944
!
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
 13945
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
 13946
colormapFromImage:anImage photometric:photometricOrNil
7242
bf3a75233d55 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 7230
diff changeset
 13947
    "setup the receiver's colormap from another image.
3259
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
 13948
     Color precision may be lost, if conversion is from a higher depth
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
 13949
     image. This does not convert any pixel values; it is  non-public helper
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
 13950
     for fromImage:/fromSubImake:"
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
 13951
2447
5b3d802d602b allow Image fromImage with rgb source-image and palette receiver
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
 13952
    |usedColors|
5b3d802d602b allow Image fromImage with rgb source-image and palette receiver
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
 13953
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13954
    samplesPerPixel == 3 ifTrue:[
7916
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 13955
        photometric := photometricOrNil ? #rgb.
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 13956
        ^ self.
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 13957
    ].
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 13958
    samplesPerPixel == 4 ifTrue:[
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 13959
        photometric := photometricOrNil ? #rgba.
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 13960
        ^ self.
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 13961
    ].
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 13962
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 13963
    photometricOrNil isNil ifTrue:[
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 13964
        photometric := anImage photometric.
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 13965
    ] ifFalse:[
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 13966
        photometric := photometricOrNil.
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 13967
    ].
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 13968
    
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 13969
    photometric == #palette ifTrue:[
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 13970
        self setColorMap:(anImage colorMap copy).
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 13971
        "
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 13972
         must generate/compress the colormap, if source image has higher depth
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 13973
         than myself.
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 13974
        "
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 13975
        (colorMap isNil
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 13976
        or:[anImage bitsPerPixel > self bitsPerPixel]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13977
            "
7916
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 13978
             get used colors are extracted into our colorMap
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 13979
             (the at-put below will set the pixelValue according the
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 13980
             new colorIndex
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 13981
            "
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 13982
            self setColorMap:(anImage usedColors asArray).
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 13983
            colorMap size > (1 bitShift:self bitsPerPixel) ifTrue:[
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 13984
                'Image [warning]: possibly too many colors in image' errorPrintCR
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13985
            ]
7916
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 13986
        ].
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 13987
        ^ self.
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 13988
    ].
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 13989
    
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 13990
    (photometric == #blackIs0 or:[ photometric == #whiteIs0 ]) ifTrue:[
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 13991
        ^ self. "/ nothing to do
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 13992
    ].
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 13993
    
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 13994
    usedColors := anImage usedColors asArray.
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 13995
    usedColors size > (1 bitShift:self bitsPerPixel) ifTrue:[
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 13996
        'Image [warning]: possibly too many colors in image' errorPrintCR.
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 13997
        usedColors := usedColors copyTo:(1 bitShift:self bitsPerPixel).
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 13998
    ].
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 13999
    self setColorMap:usedColors.
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14000
    photometric := #palette
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14001
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14002
    "Created: / 20-09-1995 / 00:58:42 / claus"
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14003
    "Modified: / 20-02-2017 / 18:16:26 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14004
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14005
7637
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 14006
fromDeviceForm:aForm maskForm:aMaskFormOrNil
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 14007
    device := aForm device.
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 14008
    self assert:device notNil.
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 14009
    photometric := aForm photometric.
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 14010
    deviceForm := aForm.
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 14011
    width := aForm width.
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 14012
    height := aForm height.
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 14013
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 14014
    aMaskFormOrNil notNil ifTrue:[
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 14015
        mask := Image fromDeviceForm:aMaskFormOrNil maskForm:nil.
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 14016
    ].
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 14017
!
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 14018
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14019
greyByteMapForRange:range
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 14020
    "return a collection to map from pixelValues to greyLevels
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 14021
     in the range 0..range.
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14022
     Range must be < 256 (for elements to fit into a ByteArray).
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14023
     The values are rounded towards the nearest pixel."
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 14024
1403
4b132381579e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1386
diff changeset
 14025
    |d clr val greyMap r
4b132381579e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1386
diff changeset
 14026
     n "{ Class: SmallInteger }"|
808
f548a3c6ca8c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 804
diff changeset
 14027
f548a3c6ca8c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 804
diff changeset
 14028
    r := range.
f548a3c6ca8c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 804
diff changeset
 14029
    r == 256 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14030
        r := 255
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 14031
    ].
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 14032
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 14033
    photometric == #palette ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14034
        n := colorMap size.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14035
        greyMap := ByteArray new:n.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14036
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14037
        1 to:n do:[:i |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14038
            (clr := colorMap at:i) isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14039
                "/ an unused color
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14040
                val := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14041
            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14042
                val := (r * clr brightness) rounded
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14043
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14044
            greyMap at:i put:val
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14045
        ].
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 14046
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14047
        d := self bitsPerPixel.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14048
        n := 1 bitShift:d.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14049
        n >= 4096 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14050
            self error:'size not supported - too large'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14051
            ^ nil
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14052
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14053
        greyMap := ByteArray new:n.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14054
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14055
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14056
        photometric == #rgb ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14057
            1 to:n do:[:i |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14058
                greyMap at:i put:(r * (self colorFromValue:i-1) brightness) rounded
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14059
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14060
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14061
            1 to:n do:[:i |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14062
                greyMap at:i put:(r / (n-1) * (i-1)) rounded
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14063
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14064
            photometric == #blackIs0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14065
                "/ we are done
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14066
            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14067
                photometric == #whiteIs0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14068
                    greyMap reverse
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14069
                ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14070
                    self error:'invalid format'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14071
                    ^ nil
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14072
                ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14073
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14074
        ].
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14075
    ].
808
f548a3c6ca8c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 804
diff changeset
 14076
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14077
    ^ greyMap
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14078
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14079
    "
808
f548a3c6ca8c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 804
diff changeset
 14080
     Depth8Image new greyByteMapForRange:256
f548a3c6ca8c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 804
diff changeset
 14081
f548a3c6ca8c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 804
diff changeset
 14082
     Depth8Image new greyByteMapForRange:64
f548a3c6ca8c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 804
diff changeset
 14083
     Depth4Image new greyByteMapForRange:64
f548a3c6ca8c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 804
diff changeset
 14084
f548a3c6ca8c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 804
diff changeset
 14085
     Depth4Image new greyByteMapForRange:1
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14086
    "
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14087
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14088
    "Created: 8.6.1996 / 08:34:14 / cg"
1403
4b132381579e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1386
diff changeset
 14089
    "Modified: 1.3.1997 / 17:24:45 / cg"
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14090
!
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14091
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14092
greyMapForRange:range
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14093
    "return a collection to map from pixelValues to greyLevels
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14094
     in the range 0..range. The brightness values are not rounded."
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14095
1403
4b132381579e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1386
diff changeset
 14096
    |d r clr val
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
 14097
     n "{Class: SmallInteger }"
1927
d1bbdf03e5a1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1919
diff changeset
 14098
     n2 "{Class: SmallInteger }"
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
 14099
     greyArray|
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14100
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14101
    d := self bitsPerPixel.
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14102
    n := 1 bitShift:d.
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14103
    n >= 4096 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14104
        self error:'size not supported - too large'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14105
        ^ nil
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14106
    ].
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14107
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
 14108
    greyArray := Array new:n.
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14109
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14110
    photometric == #palette ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14111
        n2 := colorMap size.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14112
        1 to:n2 do:[:i |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14113
            (clr := colorMap at:i) isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14114
                "/ an unused color
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14115
                val := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14116
            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14117
                val := range * clr brightness
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14118
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14119
            greyArray at:i put:val
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14120
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14121
        n2 < n ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14122
            greyArray from:n2+1 to:n put:0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14123
        ]
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14124
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14125
        photometric == #rgb ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14126
            1 to:n do:[:i |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14127
                greyArray at:i put:(range * (self colorFromValue:(i-1)) brightness)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14128
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14129
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14130
            r := range asFloat.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14131
            1 to:n do:[:i |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14132
                greyArray at:i put:(r / (n-1) * (i-1))
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14133
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14134
            photometric == #blackIs0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14135
                "/ we are done
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14136
            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14137
                photometric == #whiteIs0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14138
                    greyArray reverse
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14139
                ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14140
                    self error:'invalid format'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14141
                    ^ nil
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14142
                ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14143
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14144
        ]
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 14145
    ].
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
 14146
    ^ greyArray
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 14147
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 14148
    "
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 14149
     Depth8Image new greyMapForRange:64
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 14150
     Depth4Image new greyMapForRange:64
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 14151
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
 14152
     Depth16Image new greyMapForRange:1
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 14153
     Depth4Image new greyMapForRange:1
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
 14154
     Depth2Image new greyMapForRange:1
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
 14155
    "
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
 14156
1403
4b132381579e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1386
diff changeset
 14157
    "Modified: 1.3.1997 / 15:48:49 / cg"
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 14158
!
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 14159
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 14160
magnifyRowFrom:srcBytes offset:srcStart
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14161
          into:dstBytes offset:dstStart factor:mX
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14162
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14163
    "magnify a single pixel row - can only magnify by integer factors,
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14164
     can only magnify 1,2,4,8 and 24 bit-per-pixel images. But this is done fast."
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14165
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14166
    ^ self subclassResponsibility
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
 14167
!
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
 14168
816
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14169
makeDeviceGrayPixmapOn:aDevice depth:depth fromArray:bits
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14170
    "given the bits of a grey/color bitmap, 8-bit padded and
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 14171
     pixels interpreted as greyValues, 0 is black,
816
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14172
     create a device form for it"
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14173
7755
75f5eba88e77 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 7689
diff changeset
 14174
    |f gcId|
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
 14175
4780
03c3e810a584 Change senders of obsolete messages Form>>...on: to ...onDevice:
Stefan Vogel <sv@exept.de>
parents: 4769
diff changeset
 14176
    f := Form width:width height:height depth:depth onDevice:aDevice.
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
 14177
    f isNil ifTrue:[^ nil].
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
 14178
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
 14179
    f bits:bits.
7755
75f5eba88e77 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 7689
diff changeset
 14180
    gcId := f initGC.
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
 14181
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
 14182
    (aDevice blackpixel ~~ 0) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14183
        "/ have to invert bits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14184
        f function:#copyInverted
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
 14185
    ].
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 14186
    aDevice
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14187
        drawBits:bits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14188
        depth:depth
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14189
        padding:8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14190
        width:width height:height
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14191
        x:0 y:0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14192
        into:(f id)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14193
        x:0 y:0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14194
        width:width height:height
7755
75f5eba88e77 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 7689
diff changeset
 14195
        with:gcId.
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
 14196
    ^ f
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
 14197
816
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14198
    "Created: 10.6.1996 / 20:10:31 / cg"
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14199
!
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14200
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14201
makeDeviceMonochromeBitmapOn:aDevice fromArray:monoBits
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14202
    "given the bits of a monochrome bitmap, 8-bit padded and
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14203
     0-bits as black, create a device form for it"
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14204
1608
edf60801e6c0 comments
Claus Gittinger <cg@exept.de>
parents: 1605
diff changeset
 14205
"/    monoBits invert.
4769
0cabcf1481a0 Use Form class>>#width:height:fromArray:onDevice: instead of obsolete
Stefan Vogel <sv@exept.de>
parents: 4762
diff changeset
 14206
    ^ (Form width:width height:height fromArray:monoBits onDevice:aDevice)
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14207
        colorMap:(Array with:Color black with:Color white).
816
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14208
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14209
    "Created: 10.6.1996 / 20:18:09 / cg"
1608
edf60801e6c0 comments
Claus Gittinger <cg@exept.de>
parents: 1605
diff changeset
 14210
    "Modified: 17.4.1997 / 01:07:38 / cg"
816
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14211
!
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14212
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14213
makeDevicePixmapOn:aDevice depth:depth fromArray:bits
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14214
    "given the bits of a grey/color bitmap, 8-bit padded and
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 14215
     pixels interpreted as in the devices colormap,
816
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14216
     create a device form for it"
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14217
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14218
    |f|
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14219
4780
03c3e810a584 Change senders of obsolete messages Form>>...on: to ...onDevice:
Stefan Vogel <sv@exept.de>
parents: 4769
diff changeset
 14220
    f := Form width:width height:height depth:depth onDevice:aDevice.
816
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14221
    f isNil ifTrue:[^ nil].
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14222
    f bits:bits.
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14223
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 14224
    aDevice
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14225
        drawBits:bits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14226
        depth:depth
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14227
        padding:8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14228
        width:width height:height
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14229
        x:0 y:0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14230
        into:(f id)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14231
        x:0 y:0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14232
        width:width height:height
7755
75f5eba88e77 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 7689
diff changeset
 14233
        with:(f initGC).
816
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14234
    ^ f
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14235
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
 14236
    "Created: 10.6.1996 / 17:56:08 / cg"
816
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14237
    "Modified: 10.6.1996 / 20:11:27 / cg"
5237
e28aca881988 repairPhotometric
Claus Gittinger <cg@exept.de>
parents: 5235
diff changeset
 14238
!
e28aca881988 repairPhotometric
Claus Gittinger <cg@exept.de>
parents: 5235
diff changeset
 14239
e28aca881988 repairPhotometric
Claus Gittinger <cg@exept.de>
parents: 5235
diff changeset
 14240
repairPhotometric
e28aca881988 repairPhotometric
Claus Gittinger <cg@exept.de>
parents: 5235
diff changeset
 14241
    "/ kludge: repair a 'should not happen' situation...
e28aca881988 repairPhotometric
Claus Gittinger <cg@exept.de>
parents: 5235
diff changeset
 14242
    photometric isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14243
        (self depth == 24 and:[ bitsPerSample size == 3 ]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14244
            photometric := #rgb
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14245
        ].
5237
e28aca881988 repairPhotometric
Claus Gittinger <cg@exept.de>
parents: 5235
diff changeset
 14246
    ].
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
 14247
! !
0
48194c26a46c Initial revision
claus
parents:
diff changeset
 14248
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14249
!Image methodsFor:'queries'!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14250
3490
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14251
alphaBitsOf:pixel
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14252
    "if the receiver is an rgb-image:
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14253
     return the alpha component of a pixelValue as integer 0..maxAlphaValue.
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14254
     MaxAlphaValue is of course the largest integer representable by the number
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14255
     of alpha bits i.e. (1 bitShift:bitsAlpha)-1.
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14256
     This has to be redefined by subclasses."
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14257
8106
479e731381bd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8103
diff changeset
 14258
    |redBits greenBits blueBits alphaBits alphaMask|
3490
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14259
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14260
    samplesPerPixel >= 4 ifTrue:[
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14261
        photometric == #rgba ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14262
            "/ alpha in low bits
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14263
            alphaBits := bitsPerSample at:4.
8113
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
 14264
            alphaMask := (1 bitShift:alphaBits)-1.
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14265
8106
479e731381bd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8103
diff changeset
 14266
            ^ pixel bitAnd:alphaMask
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14267
        ].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14268
        photometric == #argb ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14269
            "/ alpha in high bits
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14270
            redBits := bitsPerSample at:1.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14271
            greenBits := bitsPerSample at:2.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14272
            blueBits := bitsPerSample at:3.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14273
            alphaBits := bitsPerSample at:4.
8113
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
 14274
            alphaMask := (1 bitShift:alphaBits)-1.
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14275
8106
479e731381bd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8103
diff changeset
 14276
            ^ (pixel rightShift:(redBits + greenBits + blueBits))
479e731381bd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8103
diff changeset
 14277
                    bitAnd:alphaMask
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14278
        ].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14279
        ^ 0
3490
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14280
    ].
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14281
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14282
    self subclassResponsibility
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14283
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14284
    "Created: / 08-06-1996 / 09:44:51 / cg"
8113
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
 14285
    "Modified: / 27-08-2017 / 21:29:46 / cg"
3490
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14286
!
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14287
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14288
alphaMaskForPixelValue
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14289
    "return the mask used with translation from pixelValues to alphaBits"
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14290
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14291
    |alphaBits|
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14292
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14293
    samplesPerPixel >= 4 ifTrue:[
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14294
        photometric == #argb ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14295
            alphaBits := bitsPerSample at:1.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14296
            ^ (1 bitShift:alphaBits)-1
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14297
        ].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14298
        photometric == #rgba ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14299
            alphaBits := bitsPerSample at:4.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14300
            ^ (1 bitShift:alphaBits)-1
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14301
        ].
3490
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14302
    ].
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14303
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14304
    self subclassResponsibility
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14305
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14306
    "Modified: / 22-08-2017 / 17:29:22 / cg"
3490
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14307
!
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14308
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14309
alphaShiftForPixelValue
7921
4989d91f99ac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7918
diff changeset
 14310
    "return the shift amount used with translation from pixelValues to alphaBits.
4989d91f99ac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7918
diff changeset
 14311
     That is the number of bits to shift the alpha value into the pixel value."
3490
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14312
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14313
    |redBits greenBits blueBits|
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14314
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14315
    samplesPerPixel >= 3 ifTrue:[
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14316
        photometric == #argb ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14317
            redBits := bitsPerSample at:2.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14318
            greenBits := bitsPerSample at:3.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14319
            blueBits := bitsPerSample at:4.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14320
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14321
            ^ (greenBits + blueBits + redBits)
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14322
        ].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14323
        "/ rgba or rgb
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14324
        ^ 0
3490
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14325
    ].
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14326
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14327
    self subclassResponsibility
7921
4989d91f99ac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7918
diff changeset
 14328
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14329
    "Modified (comment): / 22-08-2017 / 17:26:16 / cg"
3490
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14330
!
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14331
3813
662c6386828e ascentOn:
Claus Gittinger <cg@exept.de>
parents: 3811
diff changeset
 14332
ascentOn:aGC
662c6386828e ascentOn:
Claus Gittinger <cg@exept.de>
parents: 3811
diff changeset
 14333
    "I will not draw myself above the baseline"
662c6386828e ascentOn:
Claus Gittinger <cg@exept.de>
parents: 3811
diff changeset
 14334
662c6386828e ascentOn:
Claus Gittinger <cg@exept.de>
parents: 3811
diff changeset
 14335
    ^ 0
662c6386828e ascentOn:
Claus Gittinger <cg@exept.de>
parents: 3811
diff changeset
 14336
!
662c6386828e ascentOn:
Claus Gittinger <cg@exept.de>
parents: 3811
diff changeset
 14337
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14338
averageColor
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14339
    "return the average color of the image.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14340
     This usually only makes sense for textures and patterns
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14341
     (i.e. to compute shadow & light colors for viewBackgrounds).
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 14342
     Notice that for the above purpose, it is usually ok to process
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14343
     a subImage - i.e. use Image>>averageColorIn: on a smaller rectangle"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14344
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14345
    ^ self averageColorIn:(0@0 corner:(width-1)@(height-1))
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14346
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14347
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14348
averageColorIn:aRectangle
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14349
    "return the images average color in an area.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14350
     The implementation below is slow - so you may want to
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14351
     create tuned versions for DepthXImage if you plan to do
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 14352
     heavy image processing ...
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14353
     (also, creating tuned versions of the enumeration messages helps a lot)"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14354
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14355
    |x0 "{ Class:SmallInteger }"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14356
     y0 "{ Class:SmallInteger }"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14357
     x1 "{ Class:SmallInteger }"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14358
     y1 "{ Class:SmallInteger }"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14359
     sumRed sumGreen sumBlue n|
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14360
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 14361
    sumRed := sumGreen := sumBlue := 0.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14362
    y0 := aRectangle top.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14363
    y1 := aRectangle bottom.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14364
    x0 := aRectangle left.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14365
    x1 := aRectangle right.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14366
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 14367
    n := (x1 - x0 + 1) * (y1 - y0 + 1).
3761
44b96cd84bb8 ignore masked pixels when computing the average
Claus Gittinger <cg@exept.de>
parents: 3760
diff changeset
 14368
    mask isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14369
        self colorsFromX:x0 y:y0 toX:x1 y:y1 do:[:x :y :colorAtXY |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14370
            sumRed := sumRed + colorAtXY red.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14371
            sumGreen := sumGreen + colorAtXY green.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14372
            sumBlue := sumBlue + colorAtXY blue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14373
        ].
3761
44b96cd84bb8 ignore masked pixels when computing the average
Claus Gittinger <cg@exept.de>
parents: 3760
diff changeset
 14374
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14375
        "/ masked pixels are not counted.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14376
        self colorsFromX:x0 y:y0 toX:x1 y:y1 do:[:x :y :colorAtXY |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14377
            (mask pixelAtX:x y:y) == 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14378
                n := n - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14379
            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14380
                sumRed := sumRed + colorAtXY red.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14381
                sumGreen := sumGreen + colorAtXY green.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14382
                sumBlue := sumBlue + colorAtXY blue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14383
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14384
        ].
3761
44b96cd84bb8 ignore masked pixels when computing the average
Claus Gittinger <cg@exept.de>
parents: 3760
diff changeset
 14385
    ].
44b96cd84bb8 ignore masked pixels when computing the average
Claus Gittinger <cg@exept.de>
parents: 3760
diff changeset
 14386
    n == 0 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14387
        "/ all masked
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14388
        ^ Color black
3761
44b96cd84bb8 ignore masked pixels when computing the average
Claus Gittinger <cg@exept.de>
parents: 3760
diff changeset
 14389
    ].
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14390
    ^ Color red:(sumRed / n) green:(sumGreen / n) blue:(sumBlue / n)
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14391
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14392
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14393
bitsPerPixel
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14394
    "return the number of bits per pixel"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14395
5926
95dab34aeea2 changed: #bitsPerPixel
Stefan Vogel <sv@exept.de>
parents: 5919
diff changeset
 14396
    ^ bitsPerSample sum
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14397
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14398
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14399
bitsPerRow
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14400
    "return the number of bits in one scanline of the image"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14401
3868
e47cf114c824 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3867
diff changeset
 14402
    ^ width * (self bitsPerPixel).
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14403
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14404
2890
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14405
blackComponentOfCMYK:pixel
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14406
    "if the receiver is a cmyk-image:
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 14407
     return the black component scaled to a percentage (0 .. 100) of a pixelValue."
2890
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14408
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14409
    samplesPerPixel == 4 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14410
        "/ assume that the cyan bits are the leftMost bits (cmyk)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14411
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 14412
        (#[8 8 8 8] isSameSequenceAs:bitsPerSample) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14413
            ^ 100.0 / 255 * (pixel bitAnd:16rFF)
8130
3f89522ad9fb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8116
diff changeset
 14414
        ].
3f89522ad9fb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8116
diff changeset
 14415
        (#[16 16 16 16] isSameSequenceAs:bitsPerSample)ifTrue:[
3f89522ad9fb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8116
diff changeset
 14416
            ^ 100.0 / 16rFFFF * (pixel bitAnd:16rFFFF)
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14417
        ]
2890
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14418
    ].
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14419
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14420
    self subclassResponsibility
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14421
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 14422
    "Modified (format): / 31-01-2017 / 13:15:23 / stefan"
8130
3f89522ad9fb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8116
diff changeset
 14423
    "Modified: / 29-08-2017 / 22:56:29 / cg"
2890
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14424
!
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14425
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14426
blueBitsOf:pixel
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14427
    "if the receiver is an rgb-image:
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 14428
     return the blue bits of a pixelValue as integer 0..maxBlueValue.
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 14429
     MaxGreenValue is of course the largest integer representable by the number
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 14430
     of blue bits i.e. (1 bitShift:bitsBlue)-1.
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14431
     This has to be redefined by subclasses."
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14432
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14433
    |alphaBits blueBits blueMask|
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14434
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14435
    blueBits := self numBlueBits.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14436
    blueMask := (1 bitShift:blueBits)-1.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14437
    
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14438
    samplesPerPixel >= 3 ifTrue:[
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14439
        photometric == #rgba ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14440
            "/ alpha in low bits
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14441
            alphaBits := self numAlphaBits.
8106
479e731381bd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8103
diff changeset
 14442
            ^ (pixel rightShift:alphaBits) bitAnd:blueMask
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14443
        ].
8091
e3a77cae0843 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8088
diff changeset
 14444
        ^ pixel bitAnd:blueMask
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14445
    ].
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14446
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14447
    self subclassResponsibility
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14448
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14449
    "Created: / 08-06-1996 / 09:44:21 / cg"
8106
479e731381bd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8103
diff changeset
 14450
    "Modified: / 25-08-2017 / 12:23:20 / cg"
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14451
!
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14452
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14453
blueComponentOf:pixel
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14454
    "if the receiver is an rgb-image:
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 14455
     return the blue component scaled to a percentage (0 .. 100) of a pixelValue.
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14456
     This has to be redefined by subclasses."
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14457
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
 14458
    |blueBits  "{ Class: SmallInteger }"
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
 14459
     s         "{ Class: SmallInteger }"|
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14460
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14461
    samplesPerPixel >= 3 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14462
        "/ assume that the red bits are the leftMost bits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14463
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14464
        blueBits := bitsPerSample at:3.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14465
        blueBits == 0 ifTrue:[^ 0].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14466
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14467
        s := (1 bitShift:blueBits) - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14468
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14469
        ^ 100.0 / s * (pixel bitAnd:(1 bitShift:blueBits)-1)
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14470
    ].
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14471
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14472
    self subclassResponsibility
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14473
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14474
    "Created: 8.6.1996 / 08:45:22 / cg"
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
 14475
    "Modified: 10.6.1996 / 14:55:39 / cg"
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14476
!
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14477
3490
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14478
blueMaskForPixelValue
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14479
    "return the mask used with translation from pixelValues to blueBits"
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14480
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14481
    |blueBits|
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14482
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14483
    samplesPerPixel >= 3 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14484
        blueBits := bitsPerSample at:3.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14485
        ^ (1 bitShift:blueBits)-1
3490
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14486
    ].
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14487
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14488
    self subclassResponsibility
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14489
!
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14490
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14491
blueShiftForPixelValue
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14492
    "return the shift amount used with translation from pixelValues to blueBits"
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14493
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14494
    samplesPerPixel >= 3 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14495
        ^ 0
3490
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14496
    ].
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14497
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14498
    self subclassResponsibility
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14499
!
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14500
680
a905d02dcb82 added #bounds (for VisualComponent protocol compatibility)
Claus Gittinger <cg@exept.de>
parents: 674
diff changeset
 14501
bounds
a905d02dcb82 added #bounds (for VisualComponent protocol compatibility)
Claus Gittinger <cg@exept.de>
parents: 674
diff changeset
 14502
    "return my bounds (added to make images usable as VisualComponents)"
a905d02dcb82 added #bounds (for VisualComponent protocol compatibility)
Claus Gittinger <cg@exept.de>
parents: 674
diff changeset
 14503
a905d02dcb82 added #bounds (for VisualComponent protocol compatibility)
Claus Gittinger <cg@exept.de>
parents: 674
diff changeset
 14504
    ^ Rectangle left:0 top:0 width:width height:height
a905d02dcb82 added #bounds (for VisualComponent protocol compatibility)
Claus Gittinger <cg@exept.de>
parents: 674
diff changeset
 14505
a905d02dcb82 added #bounds (for VisualComponent protocol compatibility)
Claus Gittinger <cg@exept.de>
parents: 674
diff changeset
 14506
    "Created: 13.5.1996 / 10:27:06 / cg"
a905d02dcb82 added #bounds (for VisualComponent protocol compatibility)
Claus Gittinger <cg@exept.de>
parents: 674
diff changeset
 14507
!
a905d02dcb82 added #bounds (for VisualComponent protocol compatibility)
Claus Gittinger <cg@exept.de>
parents: 674
diff changeset
 14508
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14509
brightness
6755
cee1206f74db class: Image
Claus Gittinger <cg@exept.de>
parents: 6653
diff changeset
 14510
    "return the (average) brightness of the image as number in 0..1.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14511
     This usually only makes sense for textures and patterns
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14512
     (i.e. to compute shadow & light colors for viewBackgrounds).
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 14513
     Notice that for the above purpose, only a subimage is inspected here"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14514
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14515
    ^ (self averageColorIn:(0@0 corner:7@7)) brightness
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14516
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14517
    "Modified: 8.6.1996 / 08:46:46 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14518
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14519
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14520
bytesPerRow
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14521
    "return the number of bytes in one scanline of the image"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14522
7898
05e286976596 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7895
diff changeset
 14523
    ^ self class bytesPerRowForWidth:width bitsPerPixel:(self bitsPerPixel)
05e286976596 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7895
diff changeset
 14524
05e286976596 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7895
diff changeset
 14525
    "Modified: / 16-02-2017 / 16:17:59 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14526
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14527
1993
b3cf63f64e15 added query for padded bytesPerLine
Claus Gittinger <cg@exept.de>
parents: 1975
diff changeset
 14528
bytesPerRowPaddedTo:padding
b3cf63f64e15 added query for padded bytesPerLine
Claus Gittinger <cg@exept.de>
parents: 1975
diff changeset
 14529
    "return the number of bytes in one scanline of the image,
b3cf63f64e15 added query for padded bytesPerLine
Claus Gittinger <cg@exept.de>
parents: 1975
diff changeset
 14530
     if scanlines are to be padded to padding-bits."
b3cf63f64e15 added query for padded bytesPerLine
Claus Gittinger <cg@exept.de>
parents: 1975
diff changeset
 14531
2005
525f712084b3 oops - padding stuff was wrong (16-bit display)
tz
parents: 2001
diff changeset
 14532
    ^ self class
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14533
        bytesPerRowForWidth:width depth:(self bitsPerPixel) padding:padding
1993
b3cf63f64e15 added query for padded bytesPerLine
Claus Gittinger <cg@exept.de>
parents: 1975
diff changeset
 14534
!
b3cf63f64e15 added query for padded bytesPerLine
Claus Gittinger <cg@exept.de>
parents: 1975
diff changeset
 14535
1935
b71d2b3766b3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1932
diff changeset
 14536
center
b71d2b3766b3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1932
diff changeset
 14537
    "for compatibility with GC protocol - return the centerPoint"
b71d2b3766b3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1932
diff changeset
 14538
b71d2b3766b3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1932
diff changeset
 14539
    ^ (width // 2) @ (height // 2)
b71d2b3766b3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1932
diff changeset
 14540
b71d2b3766b3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1932
diff changeset
 14541
    "Created: 22.10.1997 / 23:52:40 / cg"
b71d2b3766b3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1932
diff changeset
 14542
!
b71d2b3766b3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1932
diff changeset
 14543
8111
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14544
chromaBlueOfYCbCr:pixel
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14545
    "if the receiver is an YCbCr-image:
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14546
     return the blue-chroma (Cb) component, scaled to (0 .. 1)"
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14547
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14548
    |cbBits "{ Class: SmallInteger }"
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14549
     crBits "{ Class: SmallInteger }"
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14550
     s      "{ Class: SmallInteger }"|
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14551
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14552
    photometric == #YCbCr ifTrue:[ 
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14553
        samplesPerPixel == 3 ifTrue:[
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14554
            "/ assume that the Y bits are the leftMost bits 
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14555
            cbBits := bitsPerSample at:2.
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14556
            cbBits == 0 ifTrue:[^ 0].
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14557
            crBits := bitsPerSample at:3.
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14558
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14559
            s := (1 bitShift:cbBits) - 1.
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14560
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14561
            ^ 1.0 / s * ((pixel rightShift:crBits) bitAnd:(1 bitShift:cbBits)-1)
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14562
        ].
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14563
    ].
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14564
    self subclassResponsibility
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14565
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14566
    "Created: / 26-08-2017 / 22:09:31 / cg"
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14567
!
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14568
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14569
chromaRedOfYCbCr:pixel
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14570
    "if the receiver is an YCbCr-image:
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14571
     return the red-chroma (Cr) component, scaled to (0 .. 1)"
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14572
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14573
    |crBits    "{ Class: SmallInteger }"
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14574
     s         "{ Class: SmallInteger }"|
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14575
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14576
    samplesPerPixel >= 3 ifTrue:[
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14577
        "/ assume that the red bits are the leftMost bits
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14578
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14579
        crBits := bitsPerSample at:3.
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14580
        crBits == 0 ifTrue:[^ 0].
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14581
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14582
        s := (1 bitShift:crBits) - 1.
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14583
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14584
        ^ 1.0 / s * (pixel bitAnd:(1 bitShift:crBits)-1)
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14585
    ].
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14586
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14587
    self subclassResponsibility
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14588
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14589
    "
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14590
     (self basicNew
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14591
        bitsPerSample:#(8 8 8);
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14592
        photometric:#YCbCr;
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14593
        samplesPerPixel:3;
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14594
        yourself
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14595
     ) chromaRedOfYCbCr: 16r10107F
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14596
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14597
     (self basicNew
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14598
        bitsPerSample:#(8 8 8);
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14599
        photometric:#YCbCr;
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14600
        samplesPerPixel:3;
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14601
        yourself
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14602
     ) chromaRedOfYCbCr: 16r1010FF
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14603
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14604
     (self basicNew
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14605
        bitsPerSample:#(8 8 8);
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14606
        photometric:#YCbCr;
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14607
        samplesPerPixel:3;
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14608
        yourself
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14609
     ) chromaBlueOfYCbCr: 16r107F10
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14610
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14611
     (self basicNew
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14612
        bitsPerSample:#(8 8 8);
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14613
        photometric:#YCbCr;
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14614
        samplesPerPixel:3;
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14615
        yourself
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14616
     ) chromaBlueOfYCbCr: 16r10FF10
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14617
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14618
     (self basicNew
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14619
        bitsPerSample:#(8 8 8);
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14620
        photometric:#YCbCr;
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14621
        samplesPerPixel:3;
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14622
        yourself
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14623
     ) lumaOfYCbCr: 16r7F1010
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14624
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14625
     (self basicNew
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14626
        bitsPerSample:#(8 8 8);
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14627
        photometric:#YCbCr;
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14628
        samplesPerPixel:3;
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14629
        yourself
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14630
     ) lumaOfYCbCr: 16rFF1010
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14631
    "
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14632
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14633
    "Created: / 26-08-2017 / 22:11:31 / cg"
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14634
!
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14635
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14636
colorFromValue:pixelValue
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14637
    "given a pixel value, return the corresponding color.
4117
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 14638
     Pixel values start with 0.
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 14639
     The implementation below is generic and slow
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 14640
     - this method is typically redefined in subclasses."
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14641
5126
d3f2baf80581 color conversions fixed (16bit images)
Claus Gittinger <cg@exept.de>
parents: 5074
diff changeset
 14642
    |p maxPixel clr r g b c m y k a
d3f2baf80581 color conversions fixed (16bit images)
Claus Gittinger <cg@exept.de>
parents: 5074
diff changeset
 14643
     numRedBits numGreenBits numBlueBits numAlphaBits|
1289
bcce666a0f35 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1288
diff changeset
 14644
bcce666a0f35 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1288
diff changeset
 14645
    p := photometric.
bcce666a0f35 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1288
diff changeset
 14646
    p isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14647
        colorMap notNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14648
            p := #palette
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14649
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14650
            "/ 'Image [warning]: no photometric - assume greyscale' infoPrintCR
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14651
            p := #blackIs0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14652
        ]
1289
bcce666a0f35 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1288
diff changeset
 14653
    ].
bcce666a0f35 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1288
diff changeset
 14654
bcce666a0f35 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1288
diff changeset
 14655
    p == #blackIs0 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14656
        maxPixel := (1 bitShift:self bitsPerPixel) - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14657
        ^ Color gray:(pixelValue * (100 / maxPixel)).
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14658
    ].
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14659
1289
bcce666a0f35 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1288
diff changeset
 14660
    p == #whiteIs0 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14661
        maxPixel := (1 bitShift:self bitsPerPixel) - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14662
        ^ Color gray:100 - (pixelValue * (100 / maxPixel)).
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14663
    ].
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14664
1289
bcce666a0f35 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1288
diff changeset
 14665
    p == #palette ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14666
        pixelValue >= colorMap size ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14667
            ^ Color black
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14668
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14669
        clr := colorMap at:(pixelValue + 1).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14670
        clr isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14671
            ^ Color black.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14672
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14673
        ^ clr.
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14674
    ].
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14675
1289
bcce666a0f35 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1288
diff changeset
 14676
    p == #rgb ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14677
        r := self redBitsOf:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14678
        g := self greenBitsOf:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14679
        b := self blueBitsOf:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14680
        "/ scale...
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14681
        numRedBits := bitsPerSample at:1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14682
        numGreenBits := bitsPerSample at:2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14683
        numBlueBits := bitsPerSample at:3.
7595
c77d718d3d94 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7573
diff changeset
 14684
        (r ~~ 0) ifTrue:[ r := 100 / ((1 bitShift:numRedBits) - 1) * r].
c77d718d3d94 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7573
diff changeset
 14685
        (g ~~ 0) ifTrue:[ g := 100 / ((1 bitShift:numGreenBits) - 1) * g].
c77d718d3d94 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7573
diff changeset
 14686
        (b ~~ 0) ifTrue:[ b := 100 / ((1 bitShift:numBlueBits) - 1) * b].
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14687
        ^ Color redPercent:r greenPercent:g bluePercent:b
4788
0d07247aee8b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4780
diff changeset
 14688
    ].
0d07247aee8b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4780
diff changeset
 14689
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14690
    (p == #rgba) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14691
        r := self redBitsOf:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14692
        g := self greenBitsOf:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14693
        b := self blueBitsOf:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14694
        a := self alphaBitsOf:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14695
        "/ scale...
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14696
        numRedBits := bitsPerSample at:1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14697
        numGreenBits := bitsPerSample at:2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14698
        numBlueBits := bitsPerSample at:3.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14699
        numAlphaBits := bitsPerSample at:4.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14700
        (r == 0) ifFalse:[ r := (100 / ((1 bitShift:numRedBits)-1) * r)].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14701
        (g == 0) ifFalse:[ g := (100 / ((1 bitShift:numGreenBits)-1) * g)].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14702
        (b == 0) ifFalse:[ b := (100 / ((1 bitShift:numBlueBits)-1) * b)].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14703
        (a == 0) ifFalse:[ a := (100 / ((1 bitShift:numAlphaBits)-1) * a)].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14704
        ^ Color redPercent:r greenPercent:g bluePercent:b alphaPercent:a
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14705
    ].
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14706
    (p == #argb) ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14707
        r := self redBitsOf:pixelValue.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14708
        g := self greenBitsOf:pixelValue.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14709
        b := self blueBitsOf:pixelValue.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14710
        a := self alphaBitsOf:pixelValue.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14711
        "/ scale...
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14712
        numAlphaBits := bitsPerSample at:1.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14713
        numRedBits := bitsPerSample at:2.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14714
        numGreenBits := bitsPerSample at:3.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14715
        numBlueBits := bitsPerSample at:4.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14716
        (r == 0) ifFalse:[ r := (100 / ((1 bitShift:numRedBits)-1) * r)].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14717
        (g == 0) ifFalse:[ g := (100 / ((1 bitShift:numGreenBits)-1) * g)].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14718
        (b == 0) ifFalse:[ b := (100 / ((1 bitShift:numBlueBits)-1) * b)].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14719
        (a == 0) ifFalse:[ a := (100 / ((1 bitShift:numAlphaBits)-1) * a)].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14720
        ^ Color redPercent:r greenPercent:g bluePercent:b alphaPercent:a
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14721
    ].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14722
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14723
2890
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14724
    p == #cmyk ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14725
        c := self cyanComponentOfCMYK:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14726
        m := self magentaComponentOfCMYK:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14727
        y := self yellowComponentOfCMYK:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14728
        k := self blackComponentOfCMYK:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14729
        ^ Color cyan:c magenta:m yellow:y black:k.
2890
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14730
    ].
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14731
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14732
    p == #cmy ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14733
        c := self cyanComponentOfCMY:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14734
        m := self magentaComponentOfCMY:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14735
        y := self yellowComponentOfCMY:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14736
        ^ Color cyan:c magenta:m yellow:y.
2890
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14737
    ].
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14738
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14739
    self error:'invalid (unsupported) photometric'
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14740
4788
0d07247aee8b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4780
diff changeset
 14741
    "Created: / 08-06-1996 / 08:46:18 / cg"
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14742
    "Modified: / 22-08-2017 / 16:58:39 / cg"
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14743
!
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14744
2890
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14745
cyanComponentOfCMY:pixel
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14746
    "if the receiver is a cmy-image:
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 14747
     return the cyan component scaled to a percentage (0 .. 100) of a pixelValue."
2890
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14748
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14749
    samplesPerPixel == 3 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14750
        "/ assume that the cyan bits are the leftMost bits (cmy)
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 14751
        (#[8 8 8] isSameSequenceAs:bitsPerSample)ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14752
            ^ 100.0 / 255 * ((pixel bitShift:-16) bitAnd:16rFF)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14753
        ]
2890
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14754
    ].
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14755
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14756
    self subclassResponsibility
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14757
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 14758
    "Modified (format): / 31-01-2017 / 13:15:56 / stefan"
2890
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14759
!
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14760
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14761
cyanComponentOfCMYK:pixel
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14762
    "if the receiver is a cmyk-image:
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 14763
     return the cyan component scaled to a percentage (0 .. 100) of a pixelValue."
2890
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14764
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14765
    samplesPerPixel == 4 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14766
        "/ assume that the cyan bits are the leftMost bits (cmyk)
8115
6b4a08f7e951 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8113
diff changeset
 14767
        pixel == 0 ifTrue:[^ 0].
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 14768
        (#[8 8 8 8] isSameSequenceAs:bitsPerSample)ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14769
            ^ 100.0 / 255 * ((pixel bitShift:-24) bitAnd:16rFF)
8130
3f89522ad9fb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8116
diff changeset
 14770
        ].
3f89522ad9fb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8116
diff changeset
 14771
        (#[16 16 16 16] isSameSequenceAs:bitsPerSample)ifTrue:[
3f89522ad9fb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8116
diff changeset
 14772
            ^ 100.0 / 16rFFFF * ((pixel bitShift:-48) bitAnd:16rFFFF)
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14773
        ]
2890
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14774
    ].
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14775
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14776
    self subclassResponsibility
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14777
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 14778
    "Modified: / 31-01-2017 / 13:16:14 / stefan"
8130
3f89522ad9fb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8116
diff changeset
 14779
    "Modified: / 29-08-2017 / 22:55:41 / cg"
2890
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14780
!
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14781
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14782
greenBitsOf:pixel
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14783
    "if the receiver is an rgb-image:
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 14784
     return the green bits of a pixelValue as integer 0..maxGreenValue.
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 14785
     MaxGreenValue is of course the largest integer representable by the number
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 14786
     of green bits i.e. (1 bitShift:bitsGreen)-1.
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14787
     This has to be redefined by subclasses."
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14788
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14789
    |blueBits greenBits greenMask alphaBits|
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14790
8087
24c87d7fdfdf #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8086
diff changeset
 14791
    blueBits := self numBlueBits.
24c87d7fdfdf #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8086
diff changeset
 14792
    greenBits := self numGreenBits.
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14793
    greenMask := (1 bitShift:greenBits)-1.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14794
    
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14795
    samplesPerPixel >= 3 ifTrue:[
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14796
        photometric == #rgba ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14797
            alphaBits := self numAlphaBits.
8106
479e731381bd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8103
diff changeset
 14798
            (pixel rightShift:(blueBits + alphaBits)) bitAnd:greenMask.   
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14799
        ].
8091
e3a77cae0843 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8088
diff changeset
 14800
        ^ (pixel bitShift:blueBits negated) bitAnd:greenMask
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14801
    ].
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14802
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14803
    self subclassResponsibility
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14804
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14805
    "Created: / 08-06-1996 / 09:44:37 / cg"
8106
479e731381bd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8103
diff changeset
 14806
    "Modified: / 25-08-2017 / 12:23:29 / cg"
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14807
!
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14808
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14809
greenComponentOf:pixel
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14810
    "if the receiver is an rgb-image:
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 14811
     return the green component scaled to a percentage (0..100) of a pixelValue.
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14812
     This has to be redefined by subclasses."
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14813
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
 14814
    |greenBits "{ Class: SmallInteger }"
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
 14815
     blueBits  "{ Class: SmallInteger }"
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
 14816
     s         "{ Class: SmallInteger }"|
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14817
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14818
    samplesPerPixel >= 3 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14819
        "/ assume that the red bits are the leftMost bits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14820
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14821
        greenBits := bitsPerSample at:2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14822
        greenBits == 0 ifTrue:[^ 0].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14823
        blueBits := bitsPerSample at:3.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14824
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14825
        s := (1 bitShift:greenBits) - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14826
8106
479e731381bd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8103
diff changeset
 14827
        ^ 100.0 / s * ((pixel rightShift:blueBits) bitAnd:(1 bitShift:greenBits)-1)
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14828
    ].
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14829
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14830
    self subclassResponsibility
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14831
8106
479e731381bd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8103
diff changeset
 14832
    "Created: / 08-06-1996 / 08:45:34 / cg"
479e731381bd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8103
diff changeset
 14833
    "Modified: / 25-08-2017 / 12:24:33 / cg"
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14834
!
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14835
3490
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14836
greenMaskForPixelValue
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14837
    "return the mask used with translation from pixelValues to greenBits"
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14838
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14839
    |greenBits|
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14840
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14841
    samplesPerPixel >= 3 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14842
        greenBits := bitsPerSample at:2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14843
        ^ (1 bitShift:greenBits)-1
3490
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14844
    ].
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14845
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14846
    self subclassResponsibility
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14847
!
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14848
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14849
greenShiftForPixelValue
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14850
    "return the shift amount used with translation from pixelValues to greenBits"
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14851
4160
6d31e4e6a432 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4159
diff changeset
 14852
    |greenBits|
3490
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14853
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14854
    samplesPerPixel >= 3 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14855
        greenBits := bitsPerSample at:3.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14856
        ^ greenBits negated
3490
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14857
    ].
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14858
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14859
    self subclassResponsibility
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14860
!
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14861
674
e0f6bd36a99d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 672
diff changeset
 14862
heightOn:aGC
e0f6bd36a99d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 672
diff changeset
 14863
    "return my height, if displayed on aGC;
e0f6bd36a99d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 672
diff changeset
 14864
     since my height is independent of the device (the number of pixels),
e0f6bd36a99d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 672
diff changeset
 14865
     return the pixel-height"
e0f6bd36a99d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 672
diff changeset
 14866
680
a905d02dcb82 added #bounds (for VisualComponent protocol compatibility)
Claus Gittinger <cg@exept.de>
parents: 674
diff changeset
 14867
    ^ height
674
e0f6bd36a99d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 672
diff changeset
 14868
e0f6bd36a99d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 672
diff changeset
 14869
    "Created: 12.5.1996 / 21:35:06 / cg"
680
a905d02dcb82 added #bounds (for VisualComponent protocol compatibility)
Claus Gittinger <cg@exept.de>
parents: 674
diff changeset
 14870
    "Modified: 13.5.1996 / 10:26:36 / cg"
674
e0f6bd36a99d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 672
diff changeset
 14871
!
e0f6bd36a99d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 672
diff changeset
 14872
3700
9b40f1e55270 dummy isDithered - for color compatibility
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
 14873
isDithered
9b40f1e55270 dummy isDithered - for color compatibility
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
 14874
    "for compatibility with color protocol"
9b40f1e55270 dummy isDithered - for color compatibility
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
 14875
9b40f1e55270 dummy isDithered - for color compatibility
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
 14876
    ^ false
9b40f1e55270 dummy isDithered - for color compatibility
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
 14877
!
9b40f1e55270 dummy isDithered - for color compatibility
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
 14878
3507
2edb2b607331 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3490
diff changeset
 14879
isGrayscaleImage
2edb2b607331 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3490
diff changeset
 14880
    ^ (photometric ~= #palette)
2edb2b607331 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3490
diff changeset
 14881
      and:[photometric ~= #rgb]
2edb2b607331 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3490
diff changeset
 14882
2edb2b607331 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3490
diff changeset
 14883
2edb2b607331 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3490
diff changeset
 14884
    "Created: 22.4.1997 / 14:12:02 / cg"
2edb2b607331 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3490
diff changeset
 14885
!
2edb2b607331 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3490
diff changeset
 14886
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14887
isImage
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14888
    "return true, if the receiver is some kind of image;
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14889
     true is returned here - the method is redefined from Object."
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14890
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14891
    ^ true
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14892
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14893
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14894
isImageOrForm
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14895
    "return true, if the receiver is some kind of image or form;
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14896
     true is returned here - the method is redefined from Object."
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14897
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14898
    ^ true
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14899
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14900
1630
e75c600b1c2a added #isMask query;
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
 14901
isMask
e75c600b1c2a added #isMask query;
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
 14902
    ^ false
e75c600b1c2a added #isMask query;
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
 14903
e75c600b1c2a added #isMask query;
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
 14904
    "Created: 22.4.1997 / 14:12:02 / cg"
e75c600b1c2a added #isMask query;
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
 14905
!
e75c600b1c2a added #isMask query;
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
 14906
8111
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14907
lumaOfYCbCr:pixel
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14908
    "if the receiver is an YCbCr-image:
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14909
     return the luma (Y) component, scaled to (0 .. 1)"
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14910
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14911
    photometric == #YCbCr ifTrue:[ 
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14912
        samplesPerPixel == 3 ifTrue:[
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14913
            "/ assume that the Y bits are the leftMost bits 
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14914
            (#[8 8 8] isSameSequenceAs:bitsPerSample)ifTrue:[
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14915
                ^ 1.0 / 255 * ((pixel bitShift:-16) bitAnd:16rFF)
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14916
            ]
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14917
        ].
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14918
    ].
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14919
    self subclassResponsibility
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14920
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14921
    "Created: / 26-08-2017 / 22:06:36 / cg"
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14922
!
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14923
2890
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14924
magentaComponentOfCMY:pixel
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14925
    "if the receiver is a cmy-image:
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 14926
     return the magenta component scaled to a percentage (0 .. 100) of a pixelValue."
2890
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14927
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14928
    samplesPerPixel == 3 ifTrue:[
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 14929
        (#[8 8 8] isSameSequenceAs:bitsPerSample)ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14930
            ^ 100.0 / 255 * ((pixel bitShift:-8) bitAnd:16rFF)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14931
        ]
2890
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14932
    ].
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14933
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14934
    self subclassResponsibility
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14935
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 14936
    "Modified (format): / 31-01-2017 / 13:19:06 / stefan"
2890
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14937
!
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14938
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14939
magentaComponentOfCMYK:pixel
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14940
    "if the receiver is a cmyk-image:
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 14941
     return the magenta component scaled to a percentage (0 .. 100) of a pixelValue."
2890
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14942
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14943
    samplesPerPixel == 4 ifTrue:[
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 14944
        (#[8 8 8 8] isSameSequenceAs:bitsPerSample)ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14945
            ^ 100.0 / 255 * ((pixel bitShift:-16) bitAnd:16rFF)
8130
3f89522ad9fb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8116
diff changeset
 14946
        ].
3f89522ad9fb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8116
diff changeset
 14947
        (#[16 16 16 16] isSameSequenceAs:bitsPerSample)ifTrue:[
3f89522ad9fb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8116
diff changeset
 14948
            ^ 100.0 / 16rFFFF * ((pixel bitShift:-32) bitAnd:16rFFFF)
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14949
        ]
2890
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14950
    ].
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14951
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14952
    self subclassResponsibility
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14953
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 14954
    "Modified (format): / 31-01-2017 / 13:19:11 / stefan"
8130
3f89522ad9fb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8116
diff changeset
 14955
    "Modified: / 29-08-2017 / 22:56:02 / cg"
2890
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14956
!
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14957
7596
9e63984bd73f #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7595
diff changeset
 14958
nColorsUsed
9e63984bd73f #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7595
diff changeset
 14959
    ^ self realUsedValues size
9e63984bd73f #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7595
diff changeset
 14960
!
9e63984bd73f #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7595
diff changeset
 14961
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14962
numAlphaBits
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14963
    photometric == #rgba ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14964
        "/ alpha in low bits
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14965
        ^ bitsPerSample at:4.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14966
    ].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14967
    photometric == #argb ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14968
        "/ alpha in high bits
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14969
        ^ bitsPerSample at:1.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14970
    ].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14971
    ^ 0.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14972
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14973
    "Created: / 22-08-2017 / 17:34:38 / cg"
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14974
!
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14975
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14976
numBlueBits
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14977
    photometric == #rgba ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14978
        "/ alpha in low bits
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14979
        ^ bitsPerSample at:3.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14980
    ].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14981
    photometric == #argb ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14982
        "/ alpha in high bits
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14983
        ^ bitsPerSample at:4.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14984
    ].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14985
    photometric == #rgb ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14986
        "/ no alpha
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14987
        ^ bitsPerSample at:3.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14988
    ].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14989
    self subclassResponsibility
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14990
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14991
    "Created: / 22-08-2017 / 17:35:24 / cg"
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14992
!
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14993
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14994
numGreenBits
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14995
    photometric == #rgba ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14996
        "/ alpha in low bits
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14997
        ^ bitsPerSample at:2.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14998
    ].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14999
    photometric == #argb ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15000
        "/ alpha in high bits
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15001
        ^ bitsPerSample at:3.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15002
    ].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15003
    photometric == #rgb ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15004
        "/ no alpha
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15005
        ^ bitsPerSample at:2.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15006
    ].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15007
    self subclassResponsibility
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15008
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15009
    "Created: / 22-08-2017 / 17:35:52 / cg"
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15010
!
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15011
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15012
numRedBits
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15013
    photometric == #rgba ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15014
        "/ alpha in low bits
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15015
        ^ bitsPerSample at:1.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15016
    ].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15017
    photometric == #argb ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15018
        "/ alpha in high bits
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15019
        ^ bitsPerSample at:2.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15020
    ].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15021
    photometric == #rgb ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15022
        "/ no alpha
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15023
        ^ bitsPerSample at:1.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15024
    ].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15025
    self subclassResponsibility
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15026
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15027
    "Created: / 22-08-2017 / 17:36:15 / cg"
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15028
!
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15029
1433
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
 15030
pixelArraySpecies
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
 15031
    "return the kind of pixel-value container in rowAt:/rowAt:put: methods"
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
 15032
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 15033
    self depth <= 8 ifTrue:[^ ByteArray].
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 15034
    "/ (d := self depth) <= 8 ifTrue:[^ ByteArray].
6648
dc88bb5f9231 class: Image
Claus Gittinger <cg@exept.de>
parents: 6624
diff changeset
 15035
    "/ d <= 16 ifTrue:[^ WordArray].
dc88bb5f9231 class: Image
Claus Gittinger <cg@exept.de>
parents: 6624
diff changeset
 15036
    "/ ^ IntegerArray
dc88bb5f9231 class: Image
Claus Gittinger <cg@exept.de>
parents: 6624
diff changeset
 15037
    ^ Array
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 15038
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 15039
    "Modified: / 31-01-2017 / 14:52:42 / stefan"
1433
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
 15040
!
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
 15041
940
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15042
realColorMap
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15043
    "return a collection usable as a real colormap of the image.
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 15044
     For palette images, this is the internal colormap;
940
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15045
     for other photometrics (which do not have a real colormap), synthesize one.
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15046
     This is different from #colorMap, which returns nil for non palette images."
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15047
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15048
    |d nEntries "{ Class: SmallInteger }"
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15049
     colorArray|
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15050
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15051
    photometric == #palette ifTrue:[
8099
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
 15052
        "/ should not happen
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
 15053
        colorMap isNil ifTrue:[
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
 15054
            ^ Color vgaColors.
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
 15055
        ].    
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15056
        ^ colorMap asArray
940
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15057
    ].
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15058
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15059
    d := self depth.
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15060
    d > 12 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15061
        self error:'deep palette images not supported'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15062
        ^ nil.
940
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15063
    ].
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15064
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15065
    nEntries := 1 bitShift:d.
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15066
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15067
    colorArray := Array new:nEntries.
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15068
    1 to:nEntries do:[:idx |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15069
        colorArray at:idx put:(self colorFromValue:(idx-1)).
940
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15070
    ].
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15071
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15072
    ^ colorArray
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15073
8099
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
 15074
    "Created: / 11-07-1996 / 20:20:35 / cg"
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
 15075
    "Modified: / 24-08-2017 / 17:27:31 / cg"
940
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15076
!
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15077
3273
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15078
realUsedColors
3964
31e7b1921e24 comments
Claus Gittinger <cg@exept.de>
parents: 3940
diff changeset
 15079
    "return a collection of colors which are really used in the receiver.
31e7b1921e24 comments
Claus Gittinger <cg@exept.de>
parents: 3940
diff changeset
 15080
     This goes through the pixels and adds up colors as present in the image
31e7b1921e24 comments
Claus Gittinger <cg@exept.de>
parents: 3940
diff changeset
 15081
     (as opposed to #usedColors, which looks at the colorMap if present)"
3273
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15082
6379
a8d53c1947f2 class: Image
Stefan Vogel <sv@exept.de>
parents: 6375
diff changeset
 15083
    ^ self realUsedValues collect:[:pixel | self colorFromValue:pixel] as:Set
3273
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15084
!
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15085
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15086
realUsedValues
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15087
    "return a collection of color values used in the receiver.
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 15088
     Notice that the interpretation of the pixels depends on the photometric
3273
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15089
     of the image.
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15090
     This is a general and therefore slow implementation; subclasses
3964
31e7b1921e24 comments
Claus Gittinger <cg@exept.de>
parents: 3940
diff changeset
 15091
     may want to redefine this method for more performance.
31e7b1921e24 comments
Claus Gittinger <cg@exept.de>
parents: 3940
diff changeset
 15092
     This goes through the pixels and adds up colors as present in the image
31e7b1921e24 comments
Claus Gittinger <cg@exept.de>
parents: 3940
diff changeset
 15093
     (as opposed to #usedColors, which looks at the colorMap if present)"
3273
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15094
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15095
    |set last|
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15096
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15097
    set := IdentitySet new.
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15098
    self valuesFromX:0 y:0 toX:(self width-1) y:(self height-1) do:[:x :y :pixel |
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 15099
        pixel ~~ last ifTrue:[
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 15100
            set add:pixel.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 15101
            last := pixel.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 15102
        ]
3273
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15103
    ].
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15104
    ^ set
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15105
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15106
    "
4168
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
 15107
     (Image fromFile:'goodies/bitmaps/gifImages/garfield.gif') usedValues
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
 15108
     (Image fromFile:'libtool/bitmaps/SBrowser.xbm') usedValues
3273
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15109
    "
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15110
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15111
    "Modified: / 29.7.1998 / 21:29:44 / cg"
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15112
!
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15113
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15114
redBitsOf:pixel
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15115
    "if the receiver is an rgb-image:
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 15116
     return the red component of a pixelValue as integer 0..maxRedValue.
5126
d3f2baf80581 color conversions fixed (16bit images)
Claus Gittinger <cg@exept.de>
parents: 5074
diff changeset
 15117
     MaxRedValue is the largest integer representable by the number
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 15118
     of red bits i.e. (1 bitShift:bitsRed)-1.
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15119
     This has to be redefined by subclasses."
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15120
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15121
    |redBits greenBits blueBits alphaBits redMask|
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15122
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15123
    redBits := self numRedBits.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15124
    greenBits := self numGreenBits.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15125
    blueBits := self numBlueBits.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15126
    redMask := (1 bitShift:redBits)-1.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15127
    
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15128
    samplesPerPixel >= 3 ifTrue:[
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15129
        photometric == #rgba ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15130
            alphaBits := self numAlphaBits.
8106
479e731381bd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8103
diff changeset
 15131
            ^ (pixel rightShift:(greenBits+blueBits+alphaBits)) bitAnd:redMask.
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15132
        ].
8091
e3a77cae0843 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8088
diff changeset
 15133
        ^ (pixel bitShift:(greenBits+blueBits) negated) bitAnd:redMask.
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15134
    ].
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15135
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15136
    self subclassResponsibility
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15137
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15138
    "Created: / 08-06-1996 / 09:44:51 / cg"
8106
479e731381bd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8103
diff changeset
 15139
    "Modified: / 25-08-2017 / 12:24:40 / cg"
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15140
!
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15141
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15142
redComponentOf:pixel
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15143
    "if the receiver is an rgb-image:
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 15144
     return the red component scaled to a percentage (0..100) of a pixelValue.
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15145
     This has to be redefined by subclasses."
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15146
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
 15147
    |redBits   "{ Class: SmallInteger }"
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
 15148
     greenBits "{ Class: SmallInteger }"
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
 15149
     blueBits  "{ Class: SmallInteger }"
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
 15150
     s         "{ Class: SmallInteger }"|
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15151
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15152
    samplesPerPixel >= 3 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15153
        "/ assume that the red bits are the leftMost bits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15154
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15155
        redBits := bitsPerSample at:1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15156
        redBits == 0 ifTrue:[^ 0].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15157
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15158
        greenBits := bitsPerSample at:2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15159
        blueBits := bitsPerSample at:3.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15160
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15161
        s := (1 bitShift:redBits) - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15162
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15163
        ^ 100.0 / s *
8106
479e731381bd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8103
diff changeset
 15164
          ((pixel rightShift:(greenBits + blueBits))
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15165
           bitAnd:(1 bitShift:redBits)-1)
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15166
    ].
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15167
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15168
    self subclassResponsibility
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15169
8106
479e731381bd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8103
diff changeset
 15170
    "Created: / 08-06-1996 / 08:45:30 / cg"
479e731381bd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8103
diff changeset
 15171
    "Modified: / 25-08-2017 / 12:24:46 / cg"
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15172
!
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15173
3490
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15174
redMaskForPixelValue
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15175
    "return the mask used with translation from pixelValues to redBits"
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15176
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15177
    |redBits|
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15178
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15179
    samplesPerPixel >= 3 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15180
        redBits := bitsPerSample at:1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15181
        ^ (1 bitShift:redBits)-1
3490
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15182
    ].
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15183
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15184
    self subclassResponsibility
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15185
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15186
    "Created: 8.6.1996 / 09:44:51 / cg"
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15187
    "Modified: 10.6.1996 / 14:59:05 / cg"
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15188
!
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15189
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15190
redShiftForPixelValue
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15191
    "return the shift amount used with translation from pixelValues to redBits"
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15192
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15193
    |greenBits blueBits|
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15194
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15195
    samplesPerPixel >= 3 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15196
        greenBits := bitsPerSample at:2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15197
        blueBits := bitsPerSample at:3.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15198
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15199
        ^ (greenBits + blueBits) negated
3490
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15200
    ].
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15201
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15202
    self subclassResponsibility
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15203
!
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15204
4117
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15205
rgbFromValue:pixelValue
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15206
    "given a pixel value, return the corresponding 24bit rgbValue (rrggbb, red is MSB).
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15207
     Pixel value is in 0..2^depth - 1.
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15208
     The implementation below is generic and slow
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15209
     - this method is typically redefined in subclasses."
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15210
8111
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15211
    |p maxPixel clr r g b c m y k cb cr|
4117
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15212
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15213
    p := photometric.
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15214
    p isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15215
        colorMap notNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15216
            p := #palette
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15217
        ] ifFalse:[
4117
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15218
"/            'Image [warning]: no photometric - assume greyscale' infoPrintCR
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15219
            p := #blackIs0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15220
        ]
4117
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15221
    ].
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15222
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15223
    p == #blackIs0 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15224
        maxPixel := (1 bitShift:self bitsPerPixel) - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15225
        b := pixelValue * 255 // maxPixel.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15226
        ^ (((b bitShift:8) bitOr:b) bitShift:8) bitOr:b
4117
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15227
    ].
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15228
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15229
    p == #whiteIs0 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15230
        maxPixel := (1 bitShift:self bitsPerPixel) - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15231
        b := 255 - (pixelValue * 255 // maxPixel).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15232
        ^ (((b bitShift:8) bitOr:b) bitShift:8) bitOr:b
4117
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15233
    ].
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15234
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15235
    p == #palette ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15236
        pixelValue >= colorMap size ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15237
            ^ 0 "/ black
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15238
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15239
        clr := colorMap at:(pixelValue + 1).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15240
        clr isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15241
            ^ 0 "/ black
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15242
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15243
        ^ clr rgbValue.
4117
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15244
    ].
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15245
8091
e3a77cae0843 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8088
diff changeset
 15246
    ((p == #rgb) or:[p == #rgba or:[p == #argb]]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15247
        r := self redBitsOf:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15248
        g := self greenBitsOf:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15249
        b := self blueBitsOf:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15250
        "/ must scale to byte value...
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15251
        r := r bitShift:(8 - (bitsPerSample at:1)).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15252
        g := g bitShift:(8 - (bitsPerSample at:2)).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15253
        b := b bitShift:(8 - (bitsPerSample at:3)).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15254
        ^ (((r bitShift:8) bitOr:g) bitShift:8) bitOr:b
4117
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15255
    ].
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15256
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15257
    p == #cmyk ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15258
        c := self cyanComponentOfCMYK:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15259
        m := self magentaComponentOfCMYK:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15260
        y := self yellowComponentOfCMYK:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15261
        k := self blackComponentOfCMYK:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15262
        ^ (Color cyan:c magenta:m yellow:y black:k) rgbValue.
4117
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15263
    ].
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15264
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15265
    p == #cmy ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15266
        c := self cyanComponentOfCMY:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15267
        m := self magentaComponentOfCMY:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15268
        y := self yellowComponentOfCMY:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15269
        ^ (Color cyan:c magenta:m yellow:y) rgbValue.
4117
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15270
    ].
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15271
8111
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15272
    p == #YCbCr ifTrue:[
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15273
        y := self lumaOfYCbCr:pixelValue.
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15274
        cb := self chromaBlueOfYCbCr:pixelValue.
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15275
        cr := self chromaRedOfYCbCr:pixelValue.
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15276
        ^ (Color luma:y chromaBlue:cb chromaRed:cr) rgbValue. 
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15277
    ].
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15278
    
4117
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15279
    self error:'invalid (unsupported) photometric'
8091
e3a77cae0843 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8088
diff changeset
 15280
8111
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15281
    "
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15282
     (self basicNew
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15283
        bitsPerSample:#(8 8 8);
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15284
        photometric:#YCbCr;
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15285
        samplesPerPixel:3;
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15286
        yourself
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15287
     ) rgbFromValue: 16r7F1010
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15288
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15289
     (self basicNew
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15290
        bitsPerSample:#(8 8 8);
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15291
        photometric:#YCbCr;
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15292
        samplesPerPixel:3;
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15293
        yourself
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15294
     ) rgbFromValue: 16rFF1010
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15295
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15296
     (self basicNew
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15297
        bitsPerSample:#(8 8 8);
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15298
        photometric:#YCbCr;
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15299
        samplesPerPixel:3;
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15300
        yourself
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15301
     ) rgbFromValue: 16rFF0000
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15302
    "
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15303
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15304
    "Modified: / 26-08-2017 / 20:56:49 / cg"
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15305
    "Modified (comment): / 26-08-2017 / 22:18:14 / cg"
4117
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15306
!
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15307
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15308
usedColors
3964
31e7b1921e24 comments
Claus Gittinger <cg@exept.de>
parents: 3940
diff changeset
 15309
    "return a collection of colors used in the receiver.
31e7b1921e24 comments
Claus Gittinger <cg@exept.de>
parents: 3940
diff changeset
 15310
     This looks at the colorMap only if present.
6896
6dde273a9c0b class: Image
Claus Gittinger <cg@exept.de>
parents: 6894
diff changeset
 15311
     (as opposed to #realUsedColors, which goes through the pixels of the bitmap)"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15312
2311
1c7e68532808 better #usedColors for rgb images.
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
 15313
    |colors|
1c7e68532808 better #usedColors for rgb images.
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
 15314
1c7e68532808 better #usedColors for rgb images.
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
 15315
    colors := self usedColorsMax:4096.
1c7e68532808 better #usedColors for rgb images.
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
 15316
    colors isNil ifTrue:[
8159
e24c82c679a0 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8152
diff changeset
 15317
        self error:'too many colors (> 4096) in image'.
2311
1c7e68532808 better #usedColors for rgb images.
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
 15318
    ].
1c7e68532808 better #usedColors for rgb images.
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
 15319
    ^ colors
1c7e68532808 better #usedColors for rgb images.
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
 15320
1c7e68532808 better #usedColors for rgb images.
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
 15321
    "
4168
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
 15322
     (Image fromFile:'goodies/bitmaps/gifImages/garfield.gif') usedColors
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
 15323
     (Image fromFile:'libtool/bitmaps/SBrowser.xbm') usedColors
2311
1c7e68532808 better #usedColors for rgb images.
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
 15324
    "
1c7e68532808 better #usedColors for rgb images.
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
 15325
8159
e24c82c679a0 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8152
diff changeset
 15326
    "Modified: / 31-08-2017 / 14:37:37 / cg"
2311
1c7e68532808 better #usedColors for rgb images.
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
 15327
!
1c7e68532808 better #usedColors for rgb images.
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
 15328
1c7e68532808 better #usedColors for rgb images.
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
 15329
usedColorsMax:nMax
1c7e68532808 better #usedColors for rgb images.
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
 15330
    "return a collection of colors used in the receiver;
3964
31e7b1921e24 comments
Claus Gittinger <cg@exept.de>
parents: 3940
diff changeset
 15331
     This looks at the colorMap only if present
6896
6dde273a9c0b class: Image
Claus Gittinger <cg@exept.de>
parents: 6894
diff changeset
 15332
     (as opposed to #realUsedColors, which goes through the pixels of the bitmap).
3964
31e7b1921e24 comments
Claus Gittinger <cg@exept.de>
parents: 3940
diff changeset
 15333
     However, stop looking for more, if more than nMax colors have been found
2311
1c7e68532808 better #usedColors for rgb images.
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
 15334
     (useful when searching rgb images)."
1c7e68532808 better #usedColors for rgb images.
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
 15335
2199
ac56b54c59a5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2185
diff changeset
 15336
    |usedValues max colors|
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15337
7915
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15338
    (photometric == #rgb or:[photometric == #rgba]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15339
        usedValues := IdentitySet new.
7915
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15340
        (photometric == #rgb) ifTrue:[
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15341
            self valuesFromX:0 y:0 toX:(width-1) y:(height-1)
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15342
              do:[:x :y :pixel |
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15343
                usedValues add:pixel.
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15344
                usedValues size > nMax ifTrue:[
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15345
                    "/ too many to be returned here (think of the mass of
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15346
                    "/ data to be returned by a 24bit image ... ;-)
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15347
                    ^ nil
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15348
                ]
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15349
            ].
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15350
        ] ifFalse:[
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15351
            self valuesFromX:0 y:0 toX:(width-1) y:(height-1)
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15352
              do:[:x :y :pixel |
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15353
                usedValues add:(pixel bitShift:-8).
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15354
                usedValues size > nMax ifTrue:[
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15355
                    "/ too many to be returned here (think of the mass of
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15356
                    "/ data to be returned by a 24bit image ... ;-)
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15357
                    ^ nil
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15358
                ]
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15359
            ].
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15360
        ].    
7595
c77d718d3d94 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7573
diff changeset
 15361
"/        colors := usedValues collect:[:pixel | self colorFromValue:pixel].
c77d718d3d94 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7573
diff changeset
 15362
        "/ this code is slightly faster (but wrong for 16-bit images)...
c77d718d3d94 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7573
diff changeset
 15363
        colors := usedValues collect:[:pixel | 
c77d718d3d94 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7573
diff changeset
 15364
                    |r g b|
c77d718d3d94 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7573
diff changeset
 15365
                    r := self redBitsOf:pixel.
c77d718d3d94 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7573
diff changeset
 15366
                    g := self greenBitsOf:pixel.
c77d718d3d94 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7573
diff changeset
 15367
                    b := self blueBitsOf:pixel.
c77d718d3d94 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7573
diff changeset
 15368
                    "/ must scale to byte value...
c77d718d3d94 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7573
diff changeset
 15369
                    r := r bitShift:(8 - (bitsPerSample at:1)).
c77d718d3d94 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7573
diff changeset
 15370
                    g := g bitShift:(8 - (bitsPerSample at:2)).
c77d718d3d94 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7573
diff changeset
 15371
                    b := b bitShift:(8 - (bitsPerSample at:3)).
c77d718d3d94 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7573
diff changeset
 15372
                    Color redByte:r greenByte:g blueByte:b
c77d718d3d94 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7573
diff changeset
 15373
                 ].
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15374
        ^ colors.
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15375
    ].
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15376
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15377
    usedValues := self usedValues asArray.
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15378
    photometric == #palette ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15379
        colors := usedValues collect:[:val | (colorMap at:val+1 ifAbsent:[Color black])] as:Set.
2199
ac56b54c59a5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2185
diff changeset
 15380
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15381
        "/ (photometric == #blackIs0 or:[photometric == #whiteIs0])
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15382
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15383
        max := (1 bitShift:self depth) - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15384
        colors :=  usedValues collect:[:val | (Color gray:(100 * val / max ))] as:Set.
6037
eea2343b0b1e Refactoring:
Stefan Vogel <sv@exept.de>
parents: 5956
diff changeset
 15385
    ].
eea2343b0b1e Refactoring:
Stefan Vogel <sv@exept.de>
parents: 5956
diff changeset
 15386
    ^ colors
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15387
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15388
    "
4168
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
 15389
     (Image fromFile:'goodies/bitmaps/gifImages/garfield.gif') usedColors
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
 15390
     (Image fromFile:'libtool/bitmaps/SBrowser.xbm') usedColors
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15391
    "
746
f5479d603f64 gray vs. grey
Claus Gittinger <cg@exept.de>
parents: 744
diff changeset
 15392
7915
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15393
    "Created: / 07-09-1998 / 17:54:17 / cg"
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15394
    "Modified: / 20-02-2017 / 10:57:17 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15395
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15396
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15397
usedValues
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15398
    "return a collection of color values used in the receiver.
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 15399
     Notice that the interpretation of the pixels depends on the photometric
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15400
     of the image.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15401
     This is a general and therefore slow implementation; subclasses
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15402
     may want to redefine this method for more performance."
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15403
3273
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15404
    ^ self realUsedValues
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15405
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15406
    "
4168
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
 15407
     (Image fromFile:'goodies/bitmaps/gifImages/garfield.gif') usedValues
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
 15408
     (Image fromFile:'lib tool/bitmaps/SBrowser.xbm') usedValues
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15409
    "
2206
8bf0549762b8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2205
diff changeset
 15410
8bf0549762b8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2205
diff changeset
 15411
    "Modified: / 29.7.1998 / 21:29:44 / cg"
674
e0f6bd36a99d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 672
diff changeset
 15412
!
e0f6bd36a99d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 672
diff changeset
 15413
861
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 15414
valueFromColor:color
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 15415
    "given a color, return the corresponding pixel value.
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 15416
     Non-representable colors return nil."
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 15417
4788
0d07247aee8b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4780
diff changeset
 15418
    |pixel maxPixel redBits greenBits blueBits alphaBits r g b a|
861
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 15419
5051
492727d3e5f3 oops valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 5037
diff changeset
 15420
    color colorId notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15421
        color == Color noColor ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15422
            ^ nil "/ mask
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15423
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15424
        color device isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15425
            ^ color colorId
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15426
        ]
5051
492727d3e5f3 oops valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 5037
diff changeset
 15427
    ].
5037
2e515c9ee849 changed #valueFromColor:
Claus Gittinger <cg@exept.de>
parents: 4998
diff changeset
 15428
861
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 15429
    photometric == #whiteIs0 ifTrue:[
7958
31380068cced #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 7930
diff changeset
 15430
        samplesPerPixel isNil ifTrue:[self breakPoint:#cg. samplesPerPixel := 1].
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15431
        maxPixel := (1 bitShift:self bitsPerPixel) - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15432
        ^ maxPixel - (color brightness * maxPixel) rounded.
861
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 15433
    ].
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 15434
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 15435
    photometric == #blackIs0 ifTrue:[
7958
31380068cced #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 7930
diff changeset
 15436
        samplesPerPixel isNil ifTrue:[self breakPoint:#cg. samplesPerPixel := 1].
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15437
        maxPixel := (1 bitShift:self bitsPerPixel) - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15438
        ^ (color brightness * maxPixel) rounded.
861
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 15439
    ].
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 15440
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 15441
    photometric == #palette ifTrue:[
7958
31380068cced #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 7930
diff changeset
 15442
        samplesPerPixel isNil ifTrue:[self breakPoint:#cg. samplesPerPixel := 1].
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15443
        colorMap isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15444
            "/ same as blackIs0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15445
            maxPixel := (1 bitShift:self bitsPerPixel) - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15446
            ^ (color brightness * maxPixel) rounded.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15447
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15448
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15449
        pixel := colorMap indexOf:color.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15450
        pixel == 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15451
            "
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15452
             the color is not in the image's colormap
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15453
            "
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15454
            ^ nil
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15455
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15456
        ^ pixel - 1
861
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 15457
    ].
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 15458
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 15459
    photometric == #rgb ifTrue:[
7958
31380068cced #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 7930
diff changeset
 15460
        samplesPerPixel isNil ifTrue:[self breakPoint:#cg. samplesPerPixel := 3].
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15461
        samplesPerPixel >= 3 ifTrue:[
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15462
            redBits := self numRedBits.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15463
            greenBits := self numGreenBits.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15464
            blueBits := self numBlueBits.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15465
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15466
            "/ map r/g/b to 0..255
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15467
            r := (color red / 100.0 * ((1 bitShift:redBits)-1)) rounded.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15468
            g := (color green / 100.0 * ((1 bitShift:greenBits)-1)) rounded.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15469
            b := (color blue / 100.0 * ((1 bitShift:blueBits)-1)) rounded.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15470
            pixel := (((r bitShift:greenBits) + g) bitShift:blueBits) + b.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15471
            ^ pixel
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15472
        ]
861
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 15473
    ].
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 15474
4788
0d07247aee8b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4780
diff changeset
 15475
    photometric == #rgba ifTrue:[
7958
31380068cced #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 7930
diff changeset
 15476
        samplesPerPixel isNil ifTrue:[self breakPoint:#cg. samplesPerPixel := 4].
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15477
        samplesPerPixel >= 4 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15478
            redBits := bitsPerSample at:1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15479
            greenBits := bitsPerSample at:2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15480
            blueBits := bitsPerSample at:3.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15481
            alphaBits := bitsPerSample at:4.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15482
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15483
            "/ map r/g/b/a to 0..255
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15484
            r := (color red / 100.0 * ((1 bitShift:redBits)-1)) rounded.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15485
            g := (color green / 100.0 * ((1 bitShift:greenBits)-1)) rounded.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15486
            b := (color blue / 100.0 * ((1 bitShift:blueBits)-1)) rounded.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15487
            a := (color alpha * ((1 bitShift:alphaBits)-1)) rounded.
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15488
            pixel := (((((r bitShift:greenBits) + g) bitShift:blueBits) + b) bitShift:alphaBits) + a.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15489
            ^ pixel
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15490
        ]
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15491
    ].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15492
    photometric == #argb ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15493
        samplesPerPixel isNil ifTrue:[self breakPoint:#cg. samplesPerPixel := 4].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15494
        samplesPerPixel >= 4 ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15495
            alphaBits := bitsPerSample at:1.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15496
            redBits := bitsPerSample at:2.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15497
            greenBits := bitsPerSample at:3.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15498
            blueBits := bitsPerSample at:4.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15499
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15500
            "/ map r/g/b/a to 0..255
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15501
            r := (color red / 100.0 * ((1 bitShift:redBits)-1)) rounded.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15502
            g := (color green / 100.0 * ((1 bitShift:greenBits)-1)) rounded.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15503
            b := (color blue / 100.0 * ((1 bitShift:blueBits)-1)) rounded.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15504
            a := (color alpha * ((1 bitShift:alphaBits)-1)) rounded.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15505
            pixel := (((((a bitShift:redBits) + r) bitShift:greenBits) + g) bitShift:blueBits) + b.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15506
            ^ pixel
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15507
        ]
4788
0d07247aee8b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4780
diff changeset
 15508
    ].
2380
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
 15509
    ImageErrorSignal raiseErrorString:'format not supported'.
861
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 15510
    ^ nil
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 15511
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15512
    "Modified (format): / 22-08-2017 / 17:52:39 / cg"
861
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 15513
!
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 15514
4858
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
 15515
valueFromRGB:rgb
8108
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15516
    "given a color as rgb-value, with 8 bits per component, 
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15517
     return the corresponding pixel value.
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15518
     The red component is in the high 8 bits.
4858
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
 15519
     Non-representable colors return nil."
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
 15520
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15521
    |pixel redBits greenBits blueBits alphaBits r g b a|
4858
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
 15522
8108
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15523
    b := rgb bitAnd:16rFF.
4858
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
 15524
    g := (rgb bitShift:-8) bitAnd:16rFF.
8108
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15525
    r := (rgb bitShift:-16) bitAnd:16rFF.
7123
320a7ec771f3 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7101
diff changeset
 15526
    a := 255.
4858
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
 15527
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
 15528
    photometric == #rgb ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15529
        samplesPerPixel >= 3 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15530
            "/ r,g,b  b at low end
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15531
            redBits := bitsPerSample at:1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15532
            greenBits := bitsPerSample at:2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15533
            blueBits := bitsPerSample at:3.
8108
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15534
            ((redBits == 8) and:[(greenBits == 8) and:[(blueBits == 8) ]]) ifTrue:[
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15535
                pixel := (((r bitShift:greenBits) + g) bitShift:blueBits) + b.
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15536
                ^ pixel
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15537
            ]
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15538
        ]
4858
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
 15539
    ].
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
 15540
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15541
    photometric == #argb ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15542
        samplesPerPixel >= 4 ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15543
            "/ a,r,g,b  b at low end
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15544
            "/ alphaBits := bitsPerSample at:1.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15545
            redBits := bitsPerSample at:2.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15546
            greenBits := bitsPerSample at:3.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15547
            blueBits := bitsPerSample at:4.
8108
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15548
            ((redBits == 8) and:[(greenBits == 8) and:[(blueBits == 8) ]]) ifTrue:[
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15549
                pixel := (((((a bitShift:redBits) + r) bitShift:greenBits) + g) bitShift:blueBits) + b.
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15550
                ^ pixel
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15551
            ]
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15552
        ]
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15553
    ].
4858
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
 15554
    photometric == #rgba ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15555
        samplesPerPixel >= 4 ifTrue:[
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15556
            "/ r,g,b,a  a at low end
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15557
            redBits := bitsPerSample at:1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15558
            greenBits := bitsPerSample at:2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15559
            blueBits := bitsPerSample at:3.
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15560
            alphaBits := bitsPerSample at:4.
8108
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15561
            ((redBits == 8) and:[(greenBits == 8) and:[(blueBits == 8) ]]) ifTrue:[
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15562
                pixel := (((((r bitShift:greenBits) + g) bitShift:blueBits) + b) bitShift:alphaBits) + a.
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15563
            ].
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15564
            ^ pixel
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15565
        ]
4858
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
 15566
    ].
8108
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15567
    
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15568
    photometric == #palette ifTrue:[
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15569
        colorMap notNil ifTrue:[
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15570
            pixel := colorMap indexOf:(Color rgbValue:rgb).
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15571
            pixel == 0 ifTrue:[
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15572
                "/ the color is not in the image's colormap
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15573
                ^ nil
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15574
            ].    
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15575
            ^ pixel - 1
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15576
        ].
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15577
    ].
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15578
4858
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
 15579
    ImageErrorSignal raiseErrorString:'format not supported'.
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
 15580
    ^ nil
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
 15581
8108
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15582
    "
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15583
     |img|
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15584
     img := Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif'.
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15585
     img valueFromRGB:16r55AAFF.
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15586
    "
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15587
4858
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
 15588
    "Created: / 15-01-2008 / 15:55:08 / cg"
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 15589
    "Modified: / 31-01-2017 / 14:45:00 / stefan"
8108
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15590
    "Modified (comment): / 26-08-2017 / 13:07:56 / cg"
4858
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
 15591
!
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
 15592
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 15593
valueFromRedBits:redBits greenBits:greenBits blueBits:blueBits
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 15594
    "given a rgb bits, each in 0..maxXXXValue (i.e. according to
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 15595
     r/g/b channels number of bits, return the corresponding pixel value.
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 15596
     For now, only useful with RGB images"
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 15597
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 15598
    |pixel numGreenBits numBlueBits|
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 15599
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 15600
    photometric == #rgb ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15601
        samplesPerPixel >= 3 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15602
            numGreenBits := bitsPerSample at:2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15603
            numBlueBits := bitsPerSample at:3.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15604
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15605
            pixel := (((redBits bitShift:numGreenBits) + greenBits) bitShift:numBlueBits) + blueBits.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15606
            ^ pixel
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15607
        ]
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 15608
    ].
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 15609
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 15610
    ImageErrorSignal raiseErrorString:'format not supported'.
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 15611
    ^ nil
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 15612
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 15613
    "Modified: / 30.9.1998 / 22:03:50 / cg"
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 15614
!
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 15615
674
e0f6bd36a99d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 672
diff changeset
 15616
widthOn:aGC
e0f6bd36a99d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 672
diff changeset
 15617
    "return my width, if displayed on aGC;
e0f6bd36a99d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 672
diff changeset
 15618
     since my width is independent of the device (the number of pixels),
e0f6bd36a99d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 672
diff changeset
 15619
     return the pixel-width"
e0f6bd36a99d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 672
diff changeset
 15620
680
a905d02dcb82 added #bounds (for VisualComponent protocol compatibility)
Claus Gittinger <cg@exept.de>
parents: 674
diff changeset
 15621
    ^ width
674
e0f6bd36a99d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 672
diff changeset
 15622
e0f6bd36a99d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 672
diff changeset
 15623
    "Created: 12.5.1996 / 21:34:59 / cg"
680
a905d02dcb82 added #bounds (for VisualComponent protocol compatibility)
Claus Gittinger <cg@exept.de>
parents: 674
diff changeset
 15624
    "Modified: 13.5.1996 / 10:26:42 / cg"
2890
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15625
!
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15626
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15627
yellowComponentOfCMY:pixel
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15628
    "if the receiver is a cmy-image:
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 15629
     return the yellow component scaled to a percentage (0 .. 100) of a pixelValue."
2890
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15630
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15631
    samplesPerPixel == 3 ifTrue:[
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 15632
        (#[8 8 8] isSameSequenceAs:bitsPerSample)ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15633
            ^ 100.0 / 255 * (pixel bitAnd:16rFF)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15634
        ]
2890
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15635
    ].
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15636
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15637
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15638
    self subclassResponsibility
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15639
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 15640
    "Modified (format): / 31-01-2017 / 13:18:47 / stefan"
2890
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15641
!
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15642
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15643
yellowComponentOfCMYK:pixel
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15644
    "if the receiver is a cmyk-image:
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 15645
     return the yellow component scaled to a percentage (0 .. 100) of a pixelValue."
2890
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15646
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15647
    samplesPerPixel == 4 ifTrue:[
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 15648
        (#[8 8 8 8] isSameSequenceAs:bitsPerSample)ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15649
            ^ 100.0 / 255 * ((pixel bitShift:-8) bitAnd:16rFF)
8130
3f89522ad9fb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8116
diff changeset
 15650
        ].
3f89522ad9fb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8116
diff changeset
 15651
        (#[16 16 16 16] isSameSequenceAs:bitsPerSample)ifTrue:[
3f89522ad9fb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8116
diff changeset
 15652
            ^ 100.0 / 16rFFFF * ((pixel bitShift:-16) bitAnd:16rFFFF)
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15653
        ]
2890
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15654
    ].
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15655
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15656
    self subclassResponsibility
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15657
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 15658
    "Modified: / 31-01-2017 / 13:19:00 / stefan"
8130
3f89522ad9fb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8116
diff changeset
 15659
    "Modified: / 29-08-2017 / 22:56:17 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15660
! !
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15661
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15662
!Image methodsFor:'saving on file'!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15663
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15664
saveOn:aFileName
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 15665
    "save the image in aFileName. The suffix of the filename controls the format.
3913
25e103c84773 comments
Claus Gittinger <cg@exept.de>
parents: 3912
diff changeset
 15666
     Currently, not all formats may be supported
1573
61046386f41f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1572
diff changeset
 15667
     (see ImageReader subclasses implementing save:onFile:).
3913
25e103c84773 comments
Claus Gittinger <cg@exept.de>
parents: 3912
diff changeset
 15668
     May raise a signal, if the image cannot be written by the reader."
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15669
7173
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15670
    ^ self saveOn:aFileName quality:nil
1175
5595569cfbd3 newStyle info & error messages
Claus Gittinger <cg@exept.de>
parents: 1170
diff changeset
 15671
1385
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
 15672
    "
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
 15673
     |image|
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
 15674
3476
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 15675
     image := Image fromFile:'goodies/bitmaps/RCube.tiff'.
1385
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
 15676
     image saveOn:'myImage.tiff'.
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
 15677
     image saveOn:'myImage.xbm'.
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
 15678
     image saveOn:'myImage.xpm'.
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
 15679
     image saveOn:'myImage.xwd'.
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
 15680
    "
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
 15681
1799
054302440308 moved all mime-knowledge to MIMETypes
Claus Gittinger <cg@exept.de>
parents: 1786
diff changeset
 15682
    "Modified: 30.6.1997 / 22:06:34 / cg"
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
 15683
!
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
 15684
7173
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15685
saveOn:aFileName quality:qualityPercentOrNil
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15686
    "save the image in aFileName. The suffix of the filename controls the format.
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15687
     Currently, not all formats may be supported
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15688
     (see ImageReader subclasses implementing save:onFile:).
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15689
     May raise a signal, if the image cannot be written by the reader."
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15690
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15691
    |suffix readerClass|
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15692
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15693
    "/
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15694
    "/ from the extension, get the imageReader class
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15695
    "/ (which should know how to write images as well)
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15696
    "/
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15697
    suffix := aFileName asFilename suffix.
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15698
    readerClass := MIMETypes imageReaderForSuffix:suffix.
7373
61933c223183 added metaData instVar (for free use by image reader)
Claus Gittinger <cg@exept.de>
parents: 7363
diff changeset
 15699
    readerClass isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15700
        "/
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15701
        "/ no known extension - could ask user for the format here.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15702
        "/ currently default to tiff format.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15703
        "/
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15704
        readerClass := self class defaultImageFileWriter.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15705
        'Image [warning]: unknown extension - cannot figure out format - using default (',readerClass name,')' errorPrintCR.
7173
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15706
    ].
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15707
    ^ self saveOn:aFileName quality:qualityPercentOrNil using:readerClass
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15708
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15709
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15710
    "
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15711
     |image|
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15712
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15713
     image := Image fromFile:'goodies/bitmaps/RCube.tiff'.
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15714
     image saveOn:'myImage.tiff'.
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15715
     image saveOn:'myImage.xbm'.
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15716
     image saveOn:'myImage.xpm'.
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15717
     image saveOn:'myImage.xwd'.
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15718
    "
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15719
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15720
    "Modified: 30.6.1997 / 22:06:34 / cg"
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15721
!
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15722
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15723
saveOn:aFileName quality:qualityPercentOrNil using:readerClass
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 15724
    "save the receiver using the representation class
3476
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 15725
     (which is usually a concrete subclasses of ImageReader).
3913
25e103c84773 comments
Claus Gittinger <cg@exept.de>
parents: 3912
diff changeset
 15726
     May raise a signal, if the image cannot be written by the reader."
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15727
7173
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15728
    ^ readerClass save:self onFile:aFileName quality:qualityPercentOrNil
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15729
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15730
    "
1573
61046386f41f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1572
diff changeset
 15731
     |anImage|
61046386f41f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1572
diff changeset
 15732
3476
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 15733
     anImage := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
1573
61046386f41f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1572
diff changeset
 15734
     anImage saveOn:'myImage.tiff' using:TIFFReader.
1575
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 15735
    "
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 15736
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 15737
    "
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 15738
     |anImage|
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 15739
3476
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 15740
     anImage := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
1573
61046386f41f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1572
diff changeset
 15741
     anImage saveOn:'myImage.xbm' using:XBMReader.
1575
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 15742
    "
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 15743
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 15744
    "
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 15745
     |anImage|
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 15746
3476
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 15747
     anImage := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
1575
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 15748
     Image cannotRepresentImageSignal handle:[:ex |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15749
        self warn:'cannot save the image in this format'
1575
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 15750
     ] do:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15751
        anImage saveOn:'myImage.xbm' using:XBMReader.
7173
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15752
     ]
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15753
    "
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15754
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15755
    "
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15756
     |anImage|
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15757
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15758
     anImage := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15759
     anImage saveOn:'myImage.xpm' using:XPMReader.
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15760
    "
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15761
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15762
    "
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15763
     |anImage|
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15764
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15765
     anImage := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15766
     anImage saveOn:'myImage.gif' using:GIFReader.
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15767
    "
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15768
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15769
    "Modified: 10.4.1997 / 17:49:26 / cg"
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15770
!
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15771
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15772
saveOn:aFileName using:readerClass
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15773
    "save the receiver using the representation class
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15774
     (which is usually a concrete subclasses of ImageReader).
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15775
     May raise a signal, if the image cannot be written by the reader."
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15776
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15777
    ^ readerClass save:self onFile:aFileName quality:nil
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15778
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15779
    "
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15780
     |anImage|
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15781
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15782
     anImage := Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif'.
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15783
     anImage saveOn:'myImage.tiff' using:TIFFReader.
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15784
     (Depth24Image fromImage:anImage) saveOn:'myImage.jpg' using:JPEGReader.
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15785
     anImage saveOn:'myImage50.tiff' quality:50 using:TIFFReader.
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15786
     (Depth24Image fromImage:anImage) saveOn:'myImage50.jpg' quality:50 using:JPEGReader.
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15787
    "
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15788
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15789
    "
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15790
     |anImage|
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15791
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15792
     anImage := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15793
     anImage saveOn:'myImage.xbm' using:XBMReader.
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15794
    "
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15795
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15796
    "
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15797
     |anImage|
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15798
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15799
     anImage := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15800
     Image cannotRepresentImageSignal handle:[:ex |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15801
        self warn:'cannot save the image in this format'
7173
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 15802
     ] do:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15803
        anImage saveOn:'myImage.xbm' using:XBMReader.
1575
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 15804
     ]
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 15805
    "
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 15806
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 15807
    "
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 15808
     |anImage|
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 15809
3476
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 15810
     anImage := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
1573
61046386f41f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1572
diff changeset
 15811
     anImage saveOn:'myImage.xpm' using:XPMReader.
1575
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 15812
    "
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 15813
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 15814
    "
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 15815
     |anImage|
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 15816
3476
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 15817
     anImage := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
1573
61046386f41f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1572
diff changeset
 15818
     anImage saveOn:'myImage.gif' using:GIFReader.
61046386f41f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1572
diff changeset
 15819
    "
61046386f41f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1572
diff changeset
 15820
1575
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 15821
    "Modified: 10.4.1997 / 17:49:26 / cg"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
 15822
! !
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15823
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15824
!Image methodsFor:'screen capture'!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15825
924
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 15826
from:aDrawable in:aRectangle
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 15827
    "read an image from aDrawable.
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 15828
     This may be a device Form, a view or the rootView.
7227
3aaeb922a454 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 7224
diff changeset
 15829
     If it's a view or rootView, it must be completely visible (or have
924
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 15830
     the backingStore option turned on). Otherwise, only the clipped contents
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 15831
     is returned. This is a common helper for form-to-image conversion,
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 15832
     and to read hardcopy images from the screen."
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15833
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 15834
    | visType
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15835
     x        "{ Class: SmallInteger }"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15836
     y        "{ Class: SmallInteger }"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15837
     w        "{ Class: SmallInteger }"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15838
     h        "{ Class: SmallInteger }"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 15839
     dstIndex "{ Class: SmallInteger }"
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 15840
     srcIndex "{ Class: SmallInteger }"
399
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
 15841
     srcRow   "{ Class: SmallInteger }"
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
 15842
     dstRow   "{ Class: SmallInteger }"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 15843
     inData tmpData usedPixels mapSize
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 15844
     map bytesPerLine
2534
35d91dcc4604 removed unused local
Claus Gittinger <cg@exept.de>
parents: 2533
diff changeset
 15845
     bitOrder spaceBitsPerPixel
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 15846
     info bitsPerPixelIn bytesPerLineIn
3561
e2c3f84ff31f fixed pixmap readout for win32, where red and green are exchanged
Claus Gittinger <cg@exept.de>
parents: 3518
diff changeset
 15847
     bitsR "{ Class: SmallInteger }"
e2c3f84ff31f fixed pixmap readout for win32, where red and green are exchanged
Claus Gittinger <cg@exept.de>
parents: 3518
diff changeset
 15848
     bitsG "{ Class: SmallInteger }"
e2c3f84ff31f fixed pixmap readout for win32, where red and green are exchanged
Claus Gittinger <cg@exept.de>
parents: 3518
diff changeset
 15849
     bitsB "{ Class: SmallInteger }"
399
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
 15850
     maskR "{ Class: SmallInteger }"
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
 15851
     maskG "{ Class: SmallInteger }"
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
 15852
     maskB "{ Class: SmallInteger }"
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
 15853
     shR "{ Class: SmallInteger }"
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
 15854
     shG "{ Class: SmallInteger }"
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
 15855
     shB "{ Class: SmallInteger }"
401
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
 15856
     shR2 "{ Class: SmallInteger }"
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
 15857
     shG2 "{ Class: SmallInteger }"
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
 15858
     shB2 "{ Class: SmallInteger }"
399
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
 15859
     r "{ Class: SmallInteger }"
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
 15860
     g "{ Class: SmallInteger }"
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
 15861
     b "{ Class: SmallInteger }"
2019
0de58c8e3262 fixed screen-capture (for 16bit)
Claus Gittinger <cg@exept.de>
parents: 2008
diff changeset
 15862
     word "{ Class: SmallInteger }"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 15863
     lword
7180
40dcb4638d93 #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 7176
diff changeset
 15864
     device ddepth isMSB bpp|
2019
0de58c8e3262 fixed screen-capture (for 16bit)
Claus Gittinger <cg@exept.de>
parents: 2008
diff changeset
 15865
0de58c8e3262 fixed screen-capture (for 16bit)
Claus Gittinger <cg@exept.de>
parents: 2008
diff changeset
 15866
    depth := self depth.
7180
40dcb4638d93 #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 7176
diff changeset
 15867
    bpp := "bitsPerPixel :=" self bitsPerPixel.
924
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 15868
927
c4bc2a7ff733 use #graphicsDevice instead of #device.
Claus Gittinger <cg@exept.de>
parents: 924
diff changeset
 15869
    device := aDrawable graphicsDevice.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15870
7637
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 15871
    aDrawable isForm ifTrue:[
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 15872
        aDrawable depth == 1 ifTrue:[
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 15873
            "/ a monochrome bitmap ?
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 15874
            visType := #StaticGray.
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 15875
            ddepth := 1.
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 15876
        ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15877
            visType := aDrawable photometric.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15878
            ddepth := aDrawable depth.
7637
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 15879
        ]. 
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15880
        photometric := aDrawable photometric.
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 15881
        samplesPerPixel := ddepth == 24 ifTrue:[3] ifFalse:[1].
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 15882
        bitsPerSample := ddepth == 24 ifTrue:[#[8 8 8]] ifFalse:[ByteArray with:bpp].
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15883
    ] ifFalse:[
7637
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 15884
        "get some attributes of the display device"
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 15885
        visType := device visualType.
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 15886
        ddepth := device depth.
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 15887
        "/ kludge for 15bit XFree server
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 15888
        ddepth == 15 ifTrue:[
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 15889
            ddepth := 16
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 15890
        ].
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15891
        (visType == #StaticGray) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15892
            (device blackpixel == 0) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15893
                photometric := #blackIs0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15894
            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15895
                photometric := #whiteIs0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15896
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15897
            samplesPerPixel := 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15898
            bpp := "bitsPerPixel :=" ddepth.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15899
            bitsPerSample := ByteArray with:bpp.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15900
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15901
            ((visType == #PseudoColor) or:[(visType == #StaticColor) or:[visType == #GrayScale]]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15902
                photometric := #palette.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15903
                samplesPerPixel := 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15904
                bpp := "bitsPerPixel :=" ddepth.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15905
                bitsPerSample := ByteArray with:bpp.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15906
            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15907
                ((visType == #TrueColor) or:[visType == #DirectColor]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15908
                    photometric := #rgb.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15909
                    samplesPerPixel := 3.
7180
40dcb4638d93 #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 7176
diff changeset
 15910
    "/                bpp := "bitsPerPixel :=" depth.
4421
bcc5886c989c form -> image conversion fixes
james
parents: 4420
diff changeset
 15911
    "/                bitsPerSample := ByteArray with:device bitsRed
bcc5886c989c form -> image conversion fixes
james
parents: 4420
diff changeset
 15912
    "/                                       with:device bitsGreen
bcc5886c989c form -> image conversion fixes
james
parents: 4420
diff changeset
 15913
    "/                                       with:device bitsBlue
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15914
                    bpp := "bitsPerPixel :=" 24.
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 15915
                    bitsPerSample := #[8 8 8].
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15916
                ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15917
                    self error:'screen visual not supported'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15918
                    ^ nil
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15919
                ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15920
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15921
        ].
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 15922
    ].
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 15923
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 15924
    "
7227
3aaeb922a454 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 7224
diff changeset
 15925
     don't know yet, how the display pads; assume worst case,
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15926
     offering enough space for 32 bit padding
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15927
    "
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15928
    w := width := aRectangle width.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15929
    h := height := aRectangle height.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15930
    x := aRectangle left.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15931
    y := aRectangle top.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15932
399
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
 15933
    "
7180
40dcb4638d93 #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 7176
diff changeset
 15934
     a kludge: we don't know in advance how much we are going to need
399
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
 15935
     (its too late when info is present ...)
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
 15936
    "
7180
40dcb4638d93 #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 7176
diff changeset
 15937
    spaceBitsPerPixel := bpp.
40dcb4638d93 #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 7176
diff changeset
 15938
    (bpp > 8) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15939
        spaceBitsPerPixel := 16.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15940
        (bpp > 16) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15941
            spaceBitsPerPixel := 32.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15942
            (bpp > 32) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15943
                spaceBitsPerPixel := bpp.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15944
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15945
        ]
399
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
 15946
    ].
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
 15947
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
 15948
    bytesPerLine := (w * spaceBitsPerPixel + 31) // 32 * 4.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15949
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15950
    "
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15951
     get the pixels
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15952
    "
1459
84e80b355553 splitted getBitsFrom into getBitsFromPixmap
Claus Gittinger <cg@exept.de>
parents: 1446
diff changeset
 15953
    aDrawable isForm ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15954
        (aDrawable id isNil and:[aDrawable bits notNil]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15955
            info := Dictionary new
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15956
                        at:#bitsPerPixel put:(aDrawable depth);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15957
                        at:#byteOrder put:#msbFirst;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15958
                        at:#bitOrder put:#msbFirst;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15959
                        at:#bytesPerLine put:(aDrawable width * aDrawable depth + 7)//8;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15960
                        yourself.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15961
            inData := aDrawable bits.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15962
        ] ifFalse:[
7637
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 15963
            inData := ByteArray new:(bytesPerLine * height).
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15964
            info := device getBitsFromPixmapId:aDrawable id x:x y:y width:w height:h into:inData.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15965
        ]
1459
84e80b355553 splitted getBitsFrom into getBitsFromPixmap
Claus Gittinger <cg@exept.de>
parents: 1446
diff changeset
 15966
    ] ifFalse:[
7637
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 15967
        inData := ByteArray new:(bytesPerLine * height).
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15968
        info := device getBitsFromViewId:aDrawable id x:x y:y width:w height:h into:inData.
1459
84e80b355553 splitted getBitsFrom into getBitsFromPixmap
Claus Gittinger <cg@exept.de>
parents: 1446
diff changeset
 15969
    ].
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15970
399
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
 15971
    bitsPerPixelIn := info at:#bitsPerPixel.
2533
3af95252b1b3 oops - ISMSB was not assigned
Claus Gittinger <cg@exept.de>
parents: 2532
diff changeset
 15972
7637
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 15973
    isMSB := (info at:#byteOrder) == #msbFirst.
2533
3af95252b1b3 oops - ISMSB was not assigned
Claus Gittinger <cg@exept.de>
parents: 2532
diff changeset
 15974
2029
99961ce13c2a oops - must care for bitOrder, if depth is <= 8
ca
parents: 2023
diff changeset
 15975
    "/
99961ce13c2a oops - must care for bitOrder, if depth is <= 8
ca
parents: 2023
diff changeset
 15976
    "/ check if bitorder is what I like (msbFirst)
99961ce13c2a oops - must care for bitOrder, if depth is <= 8
ca
parents: 2023
diff changeset
 15977
    "/
7206
Claus Gittinger <cg@exept.de>
parents: 7191
diff changeset
 15978
    "/ mhmh - that's not needed
2029
99961ce13c2a oops - must care for bitOrder, if depth is <= 8
ca
parents: 2023
diff changeset
 15979
99961ce13c2a oops - must care for bitOrder, if depth is <= 8
ca
parents: 2023
diff changeset
 15980
    bitsPerPixelIn < 8 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15981
        bitOrder := info at:#bitOrder.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15982
        bitOrder ~~ #msbFirst ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15983
            inData
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15984
                expandPixels:8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15985
                width:(inData size)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15986
                height:1
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15987
                into:inData
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15988
                mapping:(ImageReader reverseBits "TODO: reverseBitsForDepth:bitsPerPixelIn").
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15989
        ].
2029
99961ce13c2a oops - must care for bitOrder, if depth is <= 8
ca
parents: 2023
diff changeset
 15990
    ].
99961ce13c2a oops - must care for bitOrder, if depth is <= 8
ca
parents: 2023
diff changeset
 15991
396
d088e672be8a handle screen image grabbing with depth 16/24 and different byteOrder
Claus Gittinger <cg@exept.de>
parents: 394
diff changeset
 15992
    "
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15993
     check, if the devices padding is different ..
399
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
 15994
     or if the bitsPerPixels are different
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15995
    "
7180
40dcb4638d93 #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 7176
diff changeset
 15996
    bytesPerLineIn := (info at:#bytesPerLine).           "what I got"
40dcb4638d93 #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 7176
diff changeset
 15997
    bytesPerLine := (w * bpp + 7) // 8.                  "what I want"
399
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
 15998
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 15999
    maskR := info at:#redMask ifAbsent:[0].
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 16000
    maskG := info at:#greenMask ifAbsent:[0].
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 16001
    maskB := info at:#blueMask ifAbsent:[0].
3561
e2c3f84ff31f fixed pixmap readout for win32, where red and green are exchanged
Claus Gittinger <cg@exept.de>
parents: 3518
diff changeset
 16002
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 16003
    ((bytesPerLine ~~ bytesPerLineIn)
7637
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 16004
     or:[bitsPerPixelIn ~~ bpp]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16005
        tmpData := inData.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16006
        inData := ByteArray uninitializedNew:(bytesPerLine * height).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16007
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16008
        srcRow := 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16009
        dstRow := 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16010
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16011
        bitsPerPixelIn ~~ bpp ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16012
            "/ for now, only 32 -> 24 is supported
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16013
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16014
            maskR == 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16015
                bitsR := device bitsRed.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16016
                bitsG := device bitsGreen.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16017
                bitsB := device bitsBlue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16018
                maskR := (1 bitShift:bitsR) - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16019
                maskG := (1 bitShift:bitsG) - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16020
                maskB := (1 bitShift:bitsB) - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16021
                shR := device shiftRed negated.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16022
                shG := device shiftGreen negated.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16023
                shB := device shiftBlue negated.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16024
            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16025
                shR := (maskR lowBit - 1) negated.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16026
                bitsR := maskR highBit - maskR lowBit + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16027
                maskR := maskR bitShift:shR.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16028
                shG := (maskG lowBit - 1) negated.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16029
                bitsG := maskG highBit - maskG lowBit + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16030
                maskG := maskG bitShift:shG.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16031
                shB := (maskB lowBit - 1) negated.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16032
                bitsB := maskB highBit - maskB lowBit + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16033
                maskB := maskB bitShift:shB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16034
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16035
            shR2 := (8 - bitsR).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16036
            shG2 := (8 - bitsG).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16037
            shB2 := (8 - bitsB).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16038
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16039
            ((bitsPerPixelIn == 32) and:[bpp == 24]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16040
                "/ 'reformatting 32->24...' printNL.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16041
                1 to:h do:[:hi |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16042
                    srcIndex := srcRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16043
                    dstIndex := dstRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16044
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16045
                    1 to:w do:[:wi |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16046
                        lword := tmpData unsignedInt32At:srcIndex MSB:isMSB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16047
                        r := (lword bitShift:shR) bitAnd:maskR.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16048
                        g := (lword bitShift:shG) bitAnd:maskG.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16049
                        b := (lword bitShift:shB) bitAnd:maskB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16050
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16051
                        inData at:dstIndex   put:r.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16052
                        inData at:dstIndex+1 put:g.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16053
                        inData at:dstIndex+2 put:b.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16054
                        srcIndex := srcIndex + 4.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16055
                        dstIndex := dstIndex + 3.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16056
                    ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16057
                    dstRow := dstRow + bytesPerLine.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16058
                    srcRow := srcRow + bytesPerLineIn
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16059
                ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16060
            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16061
                ((bitsPerPixelIn == 16) and:[bpp == 24]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16062
                    "/ 'reformatting 16->24...' printNL.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16063
                    1 to:h do:[:hi |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16064
                        srcIndex := srcRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16065
                        dstIndex := dstRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16066
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16067
                        1 to:w do:[:wi |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16068
                            word := tmpData unsignedInt16At:srcIndex MSB:isMSB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16069
                            r := (word bitShift:shR) bitAnd:maskR.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16070
                            g := (word bitShift:shG) bitAnd:maskG.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16071
                            b := (word bitShift:shB) bitAnd:maskB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16072
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16073
                            inData at:dstIndex   put:(r bitShift:shR2).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16074
                            inData at:dstIndex+1 put:(g bitShift:shG2).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16075
                            inData at:dstIndex+2 put:(b bitShift:shB2).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16076
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16077
                            srcIndex := srcIndex + 2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16078
                            dstIndex := dstIndex + 3.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16079
                        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16080
                        dstRow := dstRow + bytesPerLine.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16081
                        srcRow := srcRow + bytesPerLineIn
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16082
                    ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16083
                ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16084
                    ('Image [warning]: unsupported depth combination: ' , bitsPerPixelIn printString , ' -> ' ,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16085
                                                        bpp printString) errorPrintCR.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16086
                    self shouldImplement.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16087
                    ^ nil
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16088
                ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16089
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16090
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16091
            "/
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16092
            "/ repad in the buffer
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16093
            "/
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16094
            1 to:h do:[:hi |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16095
                inData replaceFrom:dstRow to:(dstRow + bytesPerLine - 1)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16096
                              with:tmpData startingAt:srcRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16097
                dstRow := dstRow + bytesPerLine.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16098
                srcRow := srcRow + bytesPerLineIn
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16099
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16100
        ]
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16101
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16102
        (bytesPerLine * height) ~~ inData size ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16103
            tmpData := inData.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16104
            inData := ByteArray uninitializedNew:(bytesPerLine * height).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16105
            inData replaceFrom:1 to:bytesPerLine * height with:tmpData startingAt:1
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16106
        ]
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16107
    ].
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
 16108
    self bits:inData.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16109
3864
b04f2f0c5eae *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3863
diff changeset
 16110
    "/
b04f2f0c5eae *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3863
diff changeset
 16111
    "/  if not #palette we are done, the pixel values are the rgb/grey values
b04f2f0c5eae *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3863
diff changeset
 16112
    "/
1975
5b1a7d5e0b6a Fix #from:in: (screen capture) for palette (8 bit) displays.
Stefan Vogel <sv@exept.de>
parents: 1972
diff changeset
 16113
    photometric == #palette ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16114
        "/
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16115
        "/ what we now have are the color numbers - still need the r/g/b values.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16116
        "/ find out, which colors are in the picture
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16117
        "/
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16118
        usedPixels := inData usedValues.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16119
        mapSize := usedPixels max + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16120
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16121
        "get the palette"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16122
        map := Array new:mapSize.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16123
        usedPixels do:[:colorIndex |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16124
            |i|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16125
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16126
            i := colorIndex + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16127
            device
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16128
                getRGBFrom:colorIndex
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16129
                into:[:r :g :b |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16130
                    map at:i put:(Color red:r green:g blue:b)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16131
                ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16132
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16133
        self setColorMap:map.
1644
e06e1c7869fc care for bitOrder, when reading out device bits.
Claus Gittinger <cg@exept.de>
parents: 1642
diff changeset
 16134
    ].
e06e1c7869fc care for bitOrder, when reading out device bits.
Claus Gittinger <cg@exept.de>
parents: 1642
diff changeset
 16135
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 16136
    "Modified: / 07-02-1998 / 18:23:07 / cg"
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 16137
    "Modified: / 31-01-2017 / 15:02:52 / stefan"
924
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 16138
!
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 16139
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 16140
fromScreen:aRectangle
1488
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
 16141
    "read an image from the display screen.
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
 16142
     WARNING: this temporarily grabs the display
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16143
              it may not work from within a buttonMotion
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16144
              (use #fromScreen:on:grab: with a false grabArg then)."
924
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 16145
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 16146
    ^ self
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16147
        fromScreen:aRectangle
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16148
        on:Screen current
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16149
        grab:true
1487
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
 16150
1488
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
 16151
    "Modified: 26.3.1997 / 10:43:34 / cg"
924
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 16152
!
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 16153
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 16154
fromScreen:aRectangle on:aDevice
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 16155
    "read an image from aDevices display screen.
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 16156
     Since I have no other displays, only the MonoChrome, StaticGrey
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 16157
     and PseudoColor cases have been tested ...
924
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 16158
     (especially True- and DirectColor may be wrong).
1488
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
 16159
     Late note: 24bit rgb now also works.
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
 16160
     WARNING: this temporarily grabs the display
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16161
              it may not work from within a buttonMotion
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16162
              (use #fromScreen:on:grab: with a false grabArg then)."
924
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 16163
1487
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
 16164
    ^ self
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16165
        fromScreen:aRectangle
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16166
        on:aDevice
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16167
        grab:true
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 16168
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 16169
    "
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 16170
     Image fromScreen:((0 @ 0) corner:(100 @ 100)) on:Display
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 16171
     Image fromScreen:((0 @ 0) corner:(500 @ 500)) on:Display
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 16172
    "
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 16173
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 16174
    "Modified: 24.4.1997 / 18:25:13 / cg"
1487
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
 16175
!
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
 16176
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
 16177
fromScreen:aRectangle on:aDevice grab:doGrab
7227
3aaeb922a454 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 7224
diff changeset
 16178
    "read an image from aDevice's display screen.
1487
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
 16179
     If the doGrab argument is true, the display
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
 16180
     is grabbed (i.e. blocked for others) and a camera cursor is
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
 16181
     shown while the readout is done.
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 16182
     Since I have no other displays, only the MonoChrome, StaticGrey
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 16183
     and PseudoColor cases have been tested ...
1487
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
 16184
     (especially True- and DirectColor may be wrong).
1488
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
 16185
     Late note: 24bit rgb now also works.
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
 16186
     WARNING: with doGrab true, this temporarily grabs the display
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16187
              and it may not work from within a buttonMotion
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16188
              (use with a false grabArg then)."
4160
6d31e4e6a432 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4159
diff changeset
 16189
6d31e4e6a432 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4159
diff changeset
 16190
    |curs rootView prevGrab|
6d31e4e6a432 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4159
diff changeset
 16191
6613
3b0f0fb40c2c class: Image
Claus Gittinger <cg@exept.de>
parents: 6592
diff changeset
 16192
    curs := nil.
4160
6d31e4e6a432 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4159
diff changeset
 16193
"/    doGrab ifTrue:[ |cid|
3476
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 16194
"/        curs := Cursor sourceForm:(Image fromFile:'bitmaps/Camera.xbm')
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 16195
"/                         maskForm:(Image fromFile:'bitmaps/Camera_m.xbm')
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 16196
"/                          hotSpot:16@16.
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 16197
"/        curs notNil ifTrue:[
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 16198
"/            cid := (curs onDevice:aDevice) id
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 16199
"/        ].
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 16200
"/    ].
924
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 16201
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 16202
    "
7227
3aaeb922a454 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 7224
diff changeset
 16203
     actually have to grabServer ... but that's not yet available
924
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 16204
    "
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 16205
    rootView := aDevice rootView.
1487
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
 16206
    doGrab ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16207
        prevGrab := aDevice activePointerGrab.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16208
        aDevice grabPointerInView:rootView withCursor:curs.
1487
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
 16209
    ].
924
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 16210
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 16211
    "
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 16212
     get the pixels
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 16213
    "
1487
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
 16214
    [
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16215
        self from:rootView in:aRectangle.
3605
b5c70808fc8c #valueNowOrOnUnwindDo: -> #ensure:
Claus Gittinger <cg@exept.de>
parents: 3563
diff changeset
 16216
    ] ensure:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16217
        doGrab ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16218
            aDevice ungrabPointer.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16219
            prevGrab notNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16220
                 aDevice grabPointerInView:prevGrab.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16221
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16222
        ]
1487
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
 16223
    ]
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
 16224
3092
0f1a9ec64574 restore grab after #imageFromUser
ca
parents: 3059
diff changeset
 16225
    "
0f1a9ec64574 restore grab after #imageFromUser
ca
parents: 3059
diff changeset
 16226
     Image fromScreen:((100@100) corner:(200@200)) on:Display grab:false
0f1a9ec64574 restore grab after #imageFromUser
ca
parents: 3059
diff changeset
 16227
     Image fromScreen:((100@100) corner:(200@200)) on:Display grab:true
0f1a9ec64574 restore grab after #imageFromUser
ca
parents: 3059
diff changeset
 16228
    "
936
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16229
!
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16230
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16231
photometricFromScreen:aDevice
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16232
    "read aDevices display photometric and set my colormap for it.
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16233
     This must be used after an images bits have been read from the screen
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16234
     or from an offScreen bitmap, for correct pixel interpretation."
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16235
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16236
    |depth visType bitsPerPixel|
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16237
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16238
    "
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16239
     get some attributes of the display device
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16240
    "
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16241
    visType := aDevice visualType.
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16242
    depth := aDevice depth.
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16243
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16244
    "/ kludge for 15bit XFree server
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16245
    depth == 15 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16246
        depth := 16
936
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16247
    ].
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16248
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16249
    (visType == #StaticGray) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16250
        (aDevice blackpixel == 0) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16251
            photometric := #blackIs0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16252
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16253
            photometric := #whiteIs0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16254
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16255
        samplesPerPixel := 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16256
        bitsPerPixel := depth.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16257
        bitsPerSample := ByteArray with:bitsPerPixel.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16258
        "
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16259
         were done, the pixel values are the grey values
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16260
        "
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16261
        ^ self
936
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16262
    ].
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16263
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16264
    ((visType == #TrueColor) or:[visType == #DirectColor]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16265
        photometric := #rgb.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16266
        samplesPerPixel := 3.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16267
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16268
        "/ for now - only support 24bit TrueColor
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16269
        depth ~~ 24 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16270
            'IMAGE: unsupported display depth' errorPrintCR.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16271
        ].
936
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16272
"/                bitsPerPixel := depth.
4115
0e783379a6b0 Use ByteArray for bitsPerSample (255 should be enough ;-)
Stefan Vogel <sv@exept.de>
parents: 4109
diff changeset
 16273
"/                bitsPerSample := ByteArray with:aDevice bitsRed
936
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16274
"/                                       with:aDevice bitsGreen
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16275
"/                                       with:aDevice bitsBlue
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16276
        bitsPerPixel := 24.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16277
        bitsPerSample := #[8 8 8].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16278
        "
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16279
         were done, the pixel values are the rgb values
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16280
        "
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16281
        ^ self
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 16282
    ].
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 16283
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 16284
    ((visType ~~ #PseudoColor)
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 16285
    and:[(visType ~~ #StaticColor)
936
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16286
    and:[visType ~~ #GrayScale]]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16287
        self error:'screen visual not supported'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16288
        ^ nil
936
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16289
    ].
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16290
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16291
    photometric := #palette.
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16292
    samplesPerPixel := 1.
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16293
    bitsPerPixel := depth.
4115
0e783379a6b0 Use ByteArray for bitsPerSample (255 should be enough ;-)
Stefan Vogel <sv@exept.de>
parents: 4109
diff changeset
 16294
    bitsPerSample := ByteArray with:bitsPerPixel.
936
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16295
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16296
    "
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16297
     still need the pixels r/g/b values ...
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16298
    "
3863
b7ba8a04be25 always ensure colorMap is a real colorMap
Claus Gittinger <cg@exept.de>
parents: 3861
diff changeset
 16299
    self setColorMap:aDevice colorMap
936
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16300
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16301
    "Modified: 11.7.1996 / 11:11:34 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16302
! !
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16303
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16304
!Image methodsFor:'virtual anti-aliased'!
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16305
7905
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 16306
virtualAntiAliasedAlongXvertical:bottomOrTop horizontal:leftOrRight form:tempForm color:aColor xRun:xRun yRun:yRun colorDictionary:colorDictionary blendStart:blendStart
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16307
    |isBottom isLeft additionalY workPoint startX endX pixels pixelPos percent distance nearestKey tmp|
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16308
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16309
    isBottom := bottomOrTop sameAs:#bottom.
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16310
    isBottom ifTrue:[
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16311
        additionalY := -1.
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16312
    ] ifFalse:[
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16313
        additionalY := 1.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16314
    ].
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16315
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16316
    isLeft := leftOrRight sameAs:#left.
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16317
    isLeft ifTrue:[
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16318
        workPoint := (xRun - 1)@yRun.
7640
25640118d11f #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7637
diff changeset
 16319
        [
25640118d11f #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7637
diff changeset
 16320
            ((tempForm pixelAtX:workPoint x y:workPoint y) == 0)
25640118d11f #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7637
diff changeset
 16321
            and:[ ((tempForm pixelAtX:workPoint x y:workPoint y + additionalY) == 1) 
25640118d11f #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7637
diff changeset
 16322
            and:[ ((tempForm pixelAtX:workPoint x - 1 y:workPoint y + additionalY) == 1) ]]
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16323
        ] whileTrue:[
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16324
            startX := workPoint x.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16325
            endX isNil ifTrue:[endX := workPoint x].
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16326
            workPoint := (workPoint x - 1)@yRun.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16327
        ].
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16328
    ] ifFalse:[
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16329
        workPoint := (xRun + 1)@yRun.
7640
25640118d11f #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7637
diff changeset
 16330
        [
25640118d11f #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7637
diff changeset
 16331
            ((tempForm pixelAtX:workPoint x y:workPoint y) == 0)
25640118d11f #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7637
diff changeset
 16332
            and:[ ((tempForm pixelAtX:workPoint x y:workPoint y + additionalY) == 1) 
25640118d11f #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7637
diff changeset
 16333
            and:[ ((tempForm pixelAtX:workPoint x + 1 y:workPoint y + additionalY) == 1) ]]
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16334
        ] whileTrue:[
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16335
            endX := workPoint x.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16336
            startX isNil ifTrue:[startX := workPoint x].
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16337
            workPoint := (workPoint x + 1)@yRun.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16338
        ].
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16339
    ].
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16340
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16341
    (startX notNil and:[endX notNil]) ifTrue:[
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16342
        startX = endX ifTrue:[
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16343
            self atImageAndMask:startX@yRun putValue:((colorDictionary at:aColor) at:blendStart).
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16344
        ] ifFalse:[
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16345
            pixels := (endX - startX) + 1.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16346
            startX to:endX do:[:x |
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16347
                isLeft ifTrue:[
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16348
                    pixelPos := (x - startX) + 1.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16349
                ] ifFalse:[
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16350
                    pixelPos := (endX - x) + 1.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16351
                ].
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16352
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16353
                percent := (100 / (pixels / pixelPos)) asFloat / 100.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16354
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16355
                (colorDictionary at:aColor) keys do:[:aKey |
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16356
                    nearestKey isNil ifTrue:[
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16357
                        distance := percent dist:aKey.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16358
                        nearestKey := aKey.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16359
                    ] ifFalse:[
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16360
                        tmp := percent dist:aKey.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16361
                        distance > tmp ifTrue:[
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16362
                            distance := tmp.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16363
                            nearestKey := aKey.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16364
                        ].
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16365
                    ].
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16366
                ].
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16367
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16368
                self atImageAndMask:x@yRun putValue:((colorDictionary at:aColor) at:nearestKey).
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16369
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16370
                distance := nil.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16371
                nearestKey := nil.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16372
            ].
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16373
        ].
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16374
    ].
7905
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 16375
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 16376
    "Created: / 16-02-2017 / 20:02:54 / cg"
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 16377
!
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 16378
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 16379
virtualAntiAliasedAlongYhorizontal:leftOrRight vertical:bottomOrTop form:tempForm color:aColor xRun:xRun yRun:yRun colorDictionary:colorDictionary blendStart:blendStart
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16380
    |isLeft isBottom additionalX workPoint startY endY pixels pixelPos percent distance nearestKey tmp|
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16381
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16382
    isLeft := leftOrRight sameAs:#left.
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16383
    isLeft ifTrue:[
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16384
        additionalX := 1.
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16385
    ] ifFalse:[
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16386
        additionalX := -1.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16387
    ].
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16388
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16389
    isBottom := bottomOrTop sameAs:#bottom.
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16390
    isBottom ifTrue:[
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16391
        workPoint := xRun@(yRun + 1).
7640
25640118d11f #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7637
diff changeset
 16392
        [
25640118d11f #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7637
diff changeset
 16393
            ((tempForm pixelAtX:workPoint x y:workPoint y) == 0) 
25640118d11f #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7637
diff changeset
 16394
            and:[ ((tempForm pixelAtX:workPoint x + additionalX y:workPoint y) == 1) 
25640118d11f #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7637
diff changeset
 16395
            and:[ ((tempForm pixelAtX:workPoint x + additionalX y:workPoint y + 1) == 1) ]]
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16396
        ] whileTrue:[
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16397
            endY := workPoint y.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16398
            startY isNil ifTrue:[startY := workPoint y].
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16399
            workPoint := xRun@(workPoint y + 1).
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16400
        ].
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16401
    ] ifFalse:[
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16402
        workPoint := xRun@(yRun - 1).
7640
25640118d11f #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7637
diff changeset
 16403
        [
25640118d11f #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7637
diff changeset
 16404
            ((tempForm pixelAtX:workPoint x y:workPoint y) == 0) 
25640118d11f #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7637
diff changeset
 16405
            and:[ ((tempForm pixelAtX:workPoint x + additionalX y:workPoint y) == 1) 
25640118d11f #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7637
diff changeset
 16406
            and:[ ((tempForm pixelAtX:workPoint x + additionalX y:workPoint y - 1) == 1) ]]
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16407
        ] whileTrue:[
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16408
            startY := workPoint y.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16409
            endY isNil ifTrue:[endY := workPoint y].
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16410
            workPoint := xRun@(workPoint y - 1).
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16411
        ].
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16412
    ].
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16413
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16414
    (startY notNil and:[endY notNil]) ifTrue:[
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16415
        startY = endY ifTrue:[
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16416
            self atImageAndMask:xRun@startY putValue:((colorDictionary at:aColor) at:blendStart).
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16417
        ] ifFalse:[
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16418
            pixels := (endY - startY) + 1.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16419
            startY to:endY do:[:y |
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16420
                isBottom ifTrue:[
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16421
                    pixelPos := (endY - y) + 1.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16422
                ] ifFalse:[
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16423
                    pixelPos := (y - startY) + 1.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16424
                ].
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16425
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16426
                percent := (100 / (pixels / pixelPos)) asFloat / 100.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16427
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16428
                (colorDictionary at:aColor) keys do:[:aKey |
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16429
                    nearestKey isNil ifTrue:[
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16430
                        distance := percent dist:aKey.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16431
                        nearestKey := aKey.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16432
                    ] ifFalse:[
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16433
                        tmp := percent dist:aKey.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16434
                        distance > tmp ifTrue:[
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16435
                            distance := tmp.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16436
                            nearestKey := aKey.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16437
                        ].
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16438
                    ].
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16439
                ].
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16440
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16441
                self atImageAndMask:xRun@y putValue:((colorDictionary at:aColor) at:nearestKey).
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16442
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16443
                distance := nil.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16444
                nearestKey := nil.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16445
            ].
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16446
        ].
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16447
    ].
7905
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 16448
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 16449
    "Created: / 16-02-2017 / 20:02:41 / cg"
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16450
! !
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16451
1086
269243c32f69 added displayOpaque, for protocol completeness
Claus Gittinger <cg@exept.de>
parents: 1070
diff changeset
 16452
!Image class methodsFor:'documentation'!
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16453
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16454
version
6894
0fc111a48edf class: Image
Claus Gittinger <cg@exept.de>
parents: 6862
diff changeset
 16455
    ^ '$Header$'
5476
06e08505bc6f __isByteArray() to __isByteArrayLike() in primitive code
Stefan Vogel <sv@exept.de>
parents: 5352
diff changeset
 16456
!
06e08505bc6f __isByteArray() to __isByteArrayLike() in primitive code
Stefan Vogel <sv@exept.de>
parents: 5352
diff changeset
 16457
06e08505bc6f __isByteArray() to __isByteArrayLike() in primitive code
Stefan Vogel <sv@exept.de>
parents: 5352
diff changeset
 16458
version_CVS
6894
0fc111a48edf class: Image
Claus Gittinger <cg@exept.de>
parents: 6862
diff changeset
 16459
    ^ '$Header$'
650
14fc51fc3a4e comments
Claus Gittinger <cg@exept.de>
parents: 649
diff changeset
 16460
! !
3759
5b083b0ad909 fixed stupid flood-fill algorithm
Claus Gittinger <cg@exept.de>
parents: 3729
diff changeset
 16461
6037
eea2343b0b1e Refactoring:
Stefan Vogel <sv@exept.de>
parents: 5956
diff changeset
 16462
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16463
Image initialize!