Image.st
author Stefan Vogel <sv@exept.de>
Tue, 28 Apr 2020 15:28:14 +0200
changeset 9038 dd177fea6408
parent 9013 60f67817f21c
permissions -rw-r--r--
#REFACTORING by stefan class: Font changed: #setFamily:face:style:size:sizeUnit:encoding:device:
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
9013
60f67817f21c #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8954
diff changeset
     1
"{ Encoding: utf8 }"
60f67817f21c #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8954
diff changeset
     2
0
48194c26a46c Initial revision
claus
parents:
diff changeset
     3
"
6
7ee0cfde237d *** empty log message ***
claus
parents: 5
diff changeset
     4
 COPYRIGHT (c) 1991 by Claus Gittinger
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
     5
              All Rights Reserved
0
48194c26a46c Initial revision
claus
parents:
diff changeset
     6
48194c26a46c Initial revision
claus
parents:
diff changeset
     7
 This software is furnished under a license and may be used
48194c26a46c Initial revision
claus
parents:
diff changeset
     8
 only in accordance with the terms of that license and with the
48194c26a46c Initial revision
claus
parents:
diff changeset
     9
 inclusion of the above copyright notice.   This software may not
48194c26a46c Initial revision
claus
parents:
diff changeset
    10
 be provided or otherwise made available to, or used by, any
48194c26a46c Initial revision
claus
parents:
diff changeset
    11
 other person.  No title to or ownership of the software is
48194c26a46c Initial revision
claus
parents:
diff changeset
    12
 hereby transferred.
48194c26a46c Initial revision
claus
parents:
diff changeset
    13
"
3256
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
    14
"{ Package: 'stx:libview' }"
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
    15
6755
cee1206f74db class: Image
Claus Gittinger <cg@exept.de>
parents: 6653
diff changeset
    16
"{ NameSpace: Smalltalk }"
cee1206f74db class: Image
Claus Gittinger <cg@exept.de>
parents: 6653
diff changeset
    17
0
48194c26a46c Initial revision
claus
parents:
diff changeset
    18
Object subclass:#Image
7529
5f77a718b7bd #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7523
diff changeset
    19
	instanceVariableNames:'pixelFunction bytes width height bitsPerPixel depth colorMap
5f77a718b7bd #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7523
diff changeset
    20
		maxPixelValue rowByteSize bitsPerSample samplesPerPixel
5f77a718b7bd #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7523
diff changeset
    21
		photometric device deviceForm monoDeviceForm fullColorDeviceForm
5f77a718b7bd #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7523
diff changeset
    22
		mask maskedPixelsAre0 fileName imageSequence metaData'
7834
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
    23
	classVariableNames:'BadImageFormatQuerySignal CannotRepresentImageSignal
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
    24
		CollectGarbageWhenRunningOutOfColors DitherAlgorithm
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
    25
		FileCreationErrorSignal ImageErrorSignal ImageLoadErrorSignal
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
    26
		ImageNotFoundQuerySignal ImageSaveErrorSignal
8303
a8f01dbe8e70 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8301
diff changeset
    27
		InformationLostQuerySignal Lobby
a8f01dbe8e70 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8301
diff changeset
    28
		NoMaskButAlphaSupportedQuerySignal NoMaskSupportedQuerySignal
a8f01dbe8e70 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8301
diff changeset
    29
		NumberOfDitherColors UnrepresentableColorSignal'
7529
5f77a718b7bd #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7523
diff changeset
    30
	poolDictionaries:''
5f77a718b7bd #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7523
diff changeset
    31
	category:'Graphics-Images'
0
48194c26a46c Initial revision
claus
parents:
diff changeset
    32
!
48194c26a46c Initial revision
claus
parents:
diff changeset
    33
1086
269243c32f69 added displayOpaque, for protocol completeness
Claus Gittinger <cg@exept.de>
parents: 1070
diff changeset
    34
!Image class methodsFor:'documentation'!
0
48194c26a46c Initial revision
claus
parents:
diff changeset
    35
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    36
copyright
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    37
"
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    38
 COPYRIGHT (c) 1991 by Claus Gittinger
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
    39
              All Rights Reserved
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    40
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    41
 This software is furnished under a license and may be used
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    42
 only in accordance with the terms of that license and with the
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    43
 inclusion of the above copyright notice.   This software may not
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    44
 be provided or otherwise made available to, or used by, any
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    45
 other person.  No title to or ownership of the software is
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    46
 hereby transferred.
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    47
"
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    48
!
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    49
0
48194c26a46c Initial revision
claus
parents:
diff changeset
    50
documentation
48194c26a46c Initial revision
claus
parents:
diff changeset
    51
"
6284
ebd0dfb1322c cleanup - removed unused instvars
Claus Gittinger <cg@exept.de>
parents: 6256
diff changeset
    52
    this class provides representation for all kinds of images
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
    53
    (monochrome, greyscale and color) and may finally replace Form.
6166
87e576aea243 class: Image
Claus Gittinger <cg@exept.de>
parents: 6066
diff changeset
    54
    Depths of 1, 2, 4, 8, 16, 24 and 32 are supported.
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
    55
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
    56
    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
    57
    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
    58
    The data held keeps all information which was originally present,
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
    59
    even if the display-device has lower resolution.
8100
b5b682da20c5 #DOCUMENTATION by mawalch
mawalch
parents: 8099
diff changeset
    60
    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
    61
    color information.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
    62
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
    63
    Images may be created manually (by providing a pixel array),
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
    64
    by screen capture, by reading a file (using an ImageReader) or
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
    65
    dynamically computed by a pixelFunction (functional image).
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
    66
6166
87e576aea243 class: Image
Claus Gittinger <cg@exept.de>
parents: 6066
diff changeset
    67
    This gives you a device independent image.
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
    68
    For display, a device representation is required, which can be
7404
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
    69
    acquired by sending the 'onDevice:aDevice' message to the image.
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
    70
    This creates a (possibly dithered) device-form,
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
    71
    representing the image using the currently available colors.
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    72
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
    73
    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
    74
    (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
    75
    it the message
7404
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
    76
        'monochromeOn:aDevice'.
6284
ebd0dfb1322c cleanup - removed unused instvars
Claus Gittinger <cg@exept.de>
parents: 6256
diff changeset
    77
ebd0dfb1322c cleanup - removed unused instvars
Claus Gittinger <cg@exept.de>
parents: 6256
diff changeset
    78
    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
    79
    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
    80
    (NeXTCube or 4-plane NeXTStation).
8100
b5b682da20c5 #DOCUMENTATION by mawalch
mawalch
parents: 8099
diff changeset
    81
    You will find a lot of code which deals with color allocation optimizations and dithering.
b5b682da20c5 #DOCUMENTATION by mawalch
mawalch
parents: 8099
diff changeset
    82
    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
    83
    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
    84
    (see examples_dithering for this old code in action)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
    85
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
    86
    An image's pixel interpretation is controlled by the photometric instance variable
286
39ca471bfaf9 commentary
Claus Gittinger <cg@exept.de>
parents: 284
diff changeset
    87
    and (if that is #palette) a colorMap.
39ca471bfaf9 commentary
Claus Gittinger <cg@exept.de>
parents: 284
diff changeset
    88
    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
    89
    (and using specialized colorMaps for b&w / greyScale images).
39ca471bfaf9 commentary
Claus Gittinger <cg@exept.de>
parents: 284
diff changeset
    90
    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
    91
8100
b5b682da20c5 #DOCUMENTATION by mawalch
mawalch
parents: 8099
diff changeset
    92
    To convert pictures from/to external file formats, image readers are used
b5b682da20c5 #DOCUMENTATION by mawalch
mawalch
parents: 8099
diff changeset
    93
    which have the file format knowledge built in.
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
    94
    There are readers for most common formats available
286
39ca471bfaf9 commentary
Claus Gittinger <cg@exept.de>
parents: 284
diff changeset
    95
    (see ImageReader and especially subclasses such as TIFFReader, GIFReader etc.).
39ca471bfaf9 commentary
Claus Gittinger <cg@exept.de>
parents: 284
diff changeset
    96
39ca471bfaf9 commentary
Claus Gittinger <cg@exept.de>
parents: 284
diff changeset
    97
    File formats are handled by subclasses of ImageReader, which understand
39ca471bfaf9 commentary
Claus Gittinger <cg@exept.de>
parents: 284
diff changeset
    98
    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
    99
    to the mapping maintained in the MIMETypes class.
87e576aea243 class: Image
Claus Gittinger <cg@exept.de>
parents: 6066
diff changeset
   100
    (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
   101
39ca471bfaf9 commentary
Claus Gittinger <cg@exept.de>
parents: 284
diff changeset
   102
    Some algorithms used here (especially dithering & color allocation) are
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
   103
    experimental and far from being perfect (some are very slow).
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
   104
    For now, the most common cases have been optimized and perform reasonably
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
   105
    fast - however, with uncommon depth/visualType combinations, you may
6166
87e576aea243 class: Image
Claus Gittinger <cg@exept.de>
parents: 6066
diff changeset
   106
    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
   107
    write a specially tuned (inline-C) version for that case.
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
   108
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
   109
    The pixelFunction enables dynamically computed functional images: instead of
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
   110
    providing a byteArray containing pixel data, a function is used which maps
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
   111
    x/y coordinates to a pixel value (see examples).
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
   112
    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
   113
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
   114
    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
   115
    (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
   116
8100
b5b682da20c5 #DOCUMENTATION by mawalch
mawalch
parents: 8099
diff changeset
   117
    Dithering (read section above) can be controlled by the DitherAlgorithm classVariable:
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
   118
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
   119
       DitherAlgorithm:
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   120
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
   121
       nil                  a simple threshold algorithm
7404
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   122
                            (i.e. for mono, p<0.5 -> black, p>=0.5 -> white)
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   123
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
   124
       #pattern             patterned dither
7404
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   125
                            (for p, take dithered color to fill pixel;
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   126
                             uses dithering in color-class)
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   127
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
   128
       #error               error diffusion dither (Floyd-Steinberg)
7404
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   129
                            planned - not yet implemented.
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
   130
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
   131
6862
e9bd4dc536a4 class: Image
Claus Gittinger <cg@exept.de>
parents: 6840
diff changeset
   132
    Notice:
7404
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   133
        the set of attributes and the way they are stored originated initially
8100
b5b682da20c5 #DOCUMENTATION by mawalch
mawalch
parents: 8099
diff changeset
   134
        from the need to represent tiff images.
b5b682da20c5 #DOCUMENTATION by mawalch
mawalch
parents: 8099
diff changeset
   135
        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
   136
        of which many are unused in other image formats. (so it was sufficient).
7404
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   137
        Later, some VisualWorks compatibility protocol was added (mapped palettes, for
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   138
        example), and some stuff could well be redefined in simpler ways.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   139
        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
   140
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
   141
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
   142
    [instance variables:]
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
   143
7404
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   144
        width               <Integer>       the width in pixels
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   145
        height              <Integer>       the height in pixels
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   146
        bytes               <ByteArray>     the full image information
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   147
        photometric         <Symbol>        #rgb, #palette, #blackIs0 or #whiteIs0
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   148
        samplesPerPixel     <Integer>       the number of planes
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   149
        bitsPerSample       <Array>         the number of bits per plane
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   150
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   151
        colorMap            <Array>         only if photometric is #palette;
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   152
                                            maps pixel values to r/g/b values.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   153
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   154
        device              <Workstation>   the device on which deviceForm,
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   155
                                            monoDeviceForm and lowResDeviceForm are
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   156
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   157
        deviceForm          <Form>          the device form which gives the best
7621
e6755d298330 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7596
diff changeset
   158
                                            possible approximation of the image on
7404
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   159
                                            device using standard colors.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   160
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   161
        monoDeviceForm      <Form>          the device form which gives a monochrome
8100
b5b682da20c5 #DOCUMENTATION by mawalch
mawalch
parents: 8099
diff changeset
   162
                                            approximation of the image on device.
7404
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   163
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   164
        fullColorDeviceForm <Form>          the device form which gives the best
8100
b5b682da20c5 #DOCUMENTATION by mawalch
mawalch
parents: 8099
diff changeset
   165
                                            possible approximation of the image on
7404
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   166
                                            device using private colors.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   167
                                            (not yet implemented)
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   168
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   169
        mask                <ImageMask>     an optional mask;
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   170
                                            if non-nil, only pixels for which the
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   171
                                            corresponding mask bit is non-zero
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   172
                                            are drawn.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   173
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   174
        maskedPixelsAre0    <Boolean>       a hint for image processors and drawers
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   175
                                            if true, masked pixels are known to be
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   176
                                            zero in the pixel bytes.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   177
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   178
        fileName            <String>        the name of the file from which the
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   179
                                            image was loaded - nil otherwise.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   180
                                            Useful for image save functions
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   181
                                            and for the UIPainter utility.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   182
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   183
        imageSequence                       the imageSequence, of which the
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   184
                                            instance is a frame or nil,
7887
3d7974ef8414 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7878
diff changeset
   185
                                            if it's not part of a sequence.
7404
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   186
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   187
        bitsPerPixel                        obsolete - not used in ST/X (kept for a while for subclasses)
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   188
        depth                               - these have been added in instVar-slots
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   189
        maxPixelValue                       - according to the ST-80's image class.
8100
b5b682da20c5 #DOCUMENTATION by mawalch
mawalch
parents: 8099
diff changeset
   190
        rowByteSize                         - to allow loading of ST-80 images
7404
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   191
                                            - (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
   192
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
   193
    [class variables:]
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
   194
7404
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   195
        Lobby               <Registry>      keeps track of known images
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   196
                                            (for resource freeing with garbage collector)
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   197
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   198
        DitherAlgorithm     <Symbol>        defines how to dither
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   199
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   200
        NumberOfDitherColors <Integer>      defines, how many dither colors to use
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   201
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   202
        FileFormats         <Dictionary>    associates filename extensions to
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   203
                                            image reader classes (now set-up in startup-file)
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   204
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   205
        CollectGarbageWhenRunningOutOfColors
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   206
                            <Boolean>       if true, and we run out of available
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   207
                                            device colors during creation of a
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   208
                                            device image, collect garbage for
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   209
                                            possible image reclamation.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   210
                                            If false, proceed immediately.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   211
                                            Default is true.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   212
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   213
        ImageNotFoundQuerySignal
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   214
                            <QuerySignal>   raised, if an image could not be loaded
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   215
                                            from a file. The parameter is the images
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   216
                                            fileName.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   217
                                            A handler may return a replacement
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   218
                                            image or proceed with nil.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   219
                                            If unhandled, a nil is returned from the
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   220
                                            image creation.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   221
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   222
        BadImageFormatQuerySignal
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   223
                            <QuerySignal>   raised, if an image could not be loaded
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   224
                                            from a file due to a file error or
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   225
                                            unsupported format.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   226
                                            A handler may return a replacement
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   227
                                            image or proceed with nil.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   228
                                            If unhandled, a nil is returned from the
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   229
                                            image creation.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   230
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   231
        ImageSaveErrorSignal
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   232
                            <Signal>        parent of errors below.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   233
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   234
        FileCreationErrorSignal
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   235
                            <Signal>        file could not be created when saving an
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   236
                                            image.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   237
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   238
        CannotRepresentImageSignal
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   239
                            <Signal>        the specified ImageReader cannot represent
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   240
                                            the given image.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   241
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   242
        InformationLostQuerySignal
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   243
                            <Signal>        the specified ImageReader can represent
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   244
                                            the given image, but some information
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   245
                                            (typically color resolution) is lost.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   246
                                            If unhandled, the save proceeds as usual.
3872
390fabbc3036 comments and slight cleanup
Claus Gittinger <cg@exept.de>
parents: 3871
diff changeset
   247
390fabbc3036 comments and slight cleanup
Claus Gittinger <cg@exept.de>
parents: 3871
diff changeset
   248
390fabbc3036 comments and slight cleanup
Claus Gittinger <cg@exept.de>
parents: 3871
diff changeset
   249
    caveat:
7404
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   250
        the information in
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   251
            photometric, bitsPerPixel, bitsPerSample, samplesPerPixel, depth , colorMap and maxPixelValue
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   252
        is partially redundant and its handling stupid (not to say: braindamaged ;-).
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   253
        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
   254
        compatibility reasons (mostly coming from tiff format, which was the very first supported format).
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   255
        All of the above belongs into the single colorMap which must migrate from
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   256
        a stupid seqColl to a color-aware real colorMap.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   257
        (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
   258
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
   259
    todo:
7404
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   260
        support alpha masks
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   261
        cleanup the dithering & conversion code
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   262
        cleanup the color/photometric mess
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
   263
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
   264
    [See also:]
7404
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   265
        Form Icon ImageReader
611
e0442439a3c6 documentation
Claus Gittinger <cg@exept.de>
parents: 592
diff changeset
   266
e0442439a3c6 documentation
Claus Gittinger <cg@exept.de>
parents: 592
diff changeset
   267
    [author:]
7404
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   268
        Claus Gittinger
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   269
"
649
38e6d0015137 examples
Claus Gittinger <cg@exept.de>
parents: 622
diff changeset
   270
!
38e6d0015137 examples
Claus Gittinger <cg@exept.de>
parents: 622
diff changeset
   271
38e6d0015137 examples
Claus Gittinger <cg@exept.de>
parents: 622
diff changeset
   272
examples
38e6d0015137 examples
Claus Gittinger <cg@exept.de>
parents: 622
diff changeset
   273
"
38e6d0015137 examples
Claus Gittinger <cg@exept.de>
parents: 622
diff changeset
   274
    reading from a file (many formats are supported):
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   275
    (notice that the bitmaps directory is searched for along
2645
a82f50c19af1 comment
Claus Gittinger <cg@exept.de>
parents: 2534
diff changeset
   276
     the system path - therefore, you may add your own bitmap
a82f50c19af1 comment
Claus Gittinger <cg@exept.de>
parents: 2534
diff changeset
   277
     directory to the beginning of the path and thus override
a82f50c19af1 comment
Claus Gittinger <cg@exept.de>
parents: 2534
diff changeset
   278
     any default bitmaps, or make certain that your application
a82f50c19af1 comment
Claus Gittinger <cg@exept.de>
parents: 2534
diff changeset
   279
     finds its bitmaps - even if they are in a separate directory)
a82f50c19af1 comment
Claus Gittinger <cg@exept.de>
parents: 2534
diff changeset
   280
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   281
                                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   282
        (Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif') inspect
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   283
                                                                                        [exEnd]
7523
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
   284
    Boy, was I young, when writing ST/X... ;-)                                                                                                 
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
   285
                                                                                        [exBegin]
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
   286
        (Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif') inspect
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
   287
        ((Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif') rotated:90) inspect
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
   288
        ((Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif') rotated:45) inspect
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
   289
        ((Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif') rotated:25) inspect
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
   290
                                                                                        [exEnd]
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
   291
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
   292
                                                                                        
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
   293
    better use package relative file names:
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   294
                                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   295
        (Image fromFile:'bitmaps/gifImages/garfield.gif' inPackage:'stx:goodies') inspect
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   296
                                                                                        [exEnd]
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
   297
    various file formats are supported:
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   298
                                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   299
        (Image fromFile:'bitmaps/xpmBitmaps/misc_icons/SmalltalkX_clr.xpm' inPackage:'stx:goodies') inspect
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   300
                                                                                        [exEnd]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   301
                                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   302
        (Image fromFile:'bitmaps/winBitmaps/okSmily_up.bmp' inPackage:'stx:goodies') inspect
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   303
                                                                                        [exEnd]
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
   304
7222
matilk
parents: 7210
diff changeset
   305
    drawing
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   306
                                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   307
        |imageClass image|
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   308
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   309
        imageClass := Image implementorForDepth:24.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   310
        image      := imageClass width: 100 height: 50.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   311
        image bits:(ByteArray new:(image bytesPerRow*50)).
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   312
        image fillRectangle:(0@0 extent:100@50) withColor:Color yellow.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   313
        image drawRectangle:(10@10 extent:20@20) withColor:Color red.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   314
        image fillRectangle:(40@20 extent:20@20) withColor:Color green.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   315
                                                                                        [exEnd]
7222
matilk
parents: 7210
diff changeset
   316
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
   317
    The following examples demonstrate various depth and colorMap variations ...
1774
4241f730e0a6 fixed gunzipped image reading;
Claus Gittinger <cg@exept.de>
parents: 1771
diff changeset
   318
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   319
    inline image:
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   320
      default: depth=1 & #blackIs0
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   321
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   322
        (Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   323
            width:8 height:8
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   324
            fromArray:#( 2r11111111
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
                         2r10000001
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   329
                         2r10000001
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   330
                         2r10000001
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   331
                         2r11111111 )
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   332
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   333
                                                                        [exEnd]
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   334
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   335
      with #whiteIs0 photometric
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   336
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   337
        ((Image width:8 height:8
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   338
               fromArray:#( 2r11111111
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
                            2r10000001
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   343
                            2r10000001
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   344
                            2r10000001
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   345
                            2r11111111 ))
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   346
            photometric:#whiteIs0
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   347
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   348
                                                                        [exEnd]
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   349
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   350
      with a colorMap
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   351
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   352
        ((Image width:8 height:8
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   353
               fromArray:#( 2r11111111
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
                            2r10000001
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   358
                            2r10000001
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   359
                            2r10000001
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   360
                            2r11111111 ))
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   361
            colorMap:(Array with:(Color red)
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   362
                            with:(Color yellow))
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   363
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   364
                                                                        [exEnd]
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   365
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   366
      a depth4 greyScale image:
1774
4241f730e0a6 fixed gunzipped image reading;
Claus Gittinger <cg@exept.de>
parents: 1771
diff changeset
   367
      (default photometric is #blackIs0)
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   368
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   369
        (Depth4Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   370
             width:8
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   371
             height:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   372
             fromArray:#[
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   373
                            16r00 16r11 16r22 16r33
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   374
                            16r44 16r55 16r66 16r77
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   375
                            16r88 16r99 16raa 16rbb
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   376
                            16rcc 16rdd 16ree 16rff
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   377
                        ]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   378
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   379
                                                                        [exEnd]
2645
a82f50c19af1 comment
Claus Gittinger <cg@exept.de>
parents: 2534
diff changeset
   380
      the same, magnified:
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   381
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   382
        ((Depth4Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   383
             width:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   384
             height:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   385
             fromArray:#[
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   386
                            16r01 16r23
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   387
                            16r45 16r67
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   388
                            16r89 16rab
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   389
                            16rcd 16ref
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   390
                        ])
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   391
            magnifiedBy:30
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   392
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   393
                                                                        [exEnd]
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   394
      the following has the same effect:
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   395
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   396
        ((Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   397
             width:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   398
             height:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   399
             depth:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   400
             fromArray:#[
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   401
                            16r01 16r23
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   402
                            16r45 16r67
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   403
                            16r89 16rab
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   404
                            16rcd 16ref
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   405
                        ])
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   406
            magnifiedBy:30
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   407
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   408
                                                                        [exEnd]
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   409
      with reverse grey-interpretation:
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   410
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   411
        ((Depth4Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   412
             width:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   413
             height:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   414
             fromArray:#[
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   415
                            16r01 16r23
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   416
                            16r45 16r67
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   417
                            16r89 16rab
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   418
                            16rcd 16ref
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   419
                        ])
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   420
            photometric:#whiteIs0;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   421
            magnifiedBy:30
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   422
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   423
                                                                        [exEnd]
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   424
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   425
      with 1-bit-per-pixel rgb interpretation:
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   426
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   427
        ((Depth4Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   428
             width:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   429
             height:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   430
             fromArray:#[
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   431
                            16r01 16r23
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   432
                            16r45 16r67
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   433
                            16r89 16rab
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   434
                            16rcd 16ref
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   435
                        ])
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   436
            photometric:#rgb;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   437
            samplesPerPixel:3;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   438
            bitsPerSample:#(1 1 1);
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   439
            magnifiedBy:30
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   440
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   441
                                                                        [exEnd]
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   442
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   443
      with 1/2/1 rgb interpretation:
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   444
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   445
        ((Depth4Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   446
             width:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   447
             height:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   448
             fromArray:#[
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   449
                            16r01 16r23
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   450
                            16r45 16r67
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   451
                            16r89 16rab
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   452
                            16rcd 16ref
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   453
                        ])
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   454
            photometric:#rgb;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   455
            samplesPerPixel:3;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   456
            bitsPerSample:#(1 2 1);
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   457
            magnifiedBy:30
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   458
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   459
                                                                        [exEnd]
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   460
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
   461
      a 2/2/0 rgb image (i.e. no blue):
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   462
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   463
         |i|
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   464
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   465
         i := Depth4Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   466
                    width:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   467
                    height:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   468
                    fromArray:#[ 16r01 16r23
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   469
                                 16r45 16r67
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   470
                                 16r89 16rab
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   471
                                 16rcd 16ref ].
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   472
         i photometric:#rgb.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   473
         i samplesPerPixel:3.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   474
         i bitsPerSample:#(2 2 0).
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   475
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   476
         i := i magnifiedBy:30.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   477
         i edit.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   478
                                                                        [exEnd]
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
   479
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
   480
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
   481
      a 0/0/4 rgb image (i.e. no red or green):
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   482
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   483
         |i|
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   484
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   485
         i := Depth4Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   486
                    width:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   487
                    height:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   488
                    fromArray:#[ 16r01 16r23
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   489
                                 16r45 16r67
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   490
                                 16r89 16rab
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   491
                                 16rcd 16ref ].
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   492
         i photometric:#rgb.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   493
         i samplesPerPixel:3.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   494
         i bitsPerSample:#(0 0 4).
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   495
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   496
         i := i magnifiedBy:30.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   497
         i edit.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   498
                                                                        [exEnd]
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
   499
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
   500
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   501
      a 2plane greyscale image:
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   502
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   503
        ((Depth2Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   504
             width:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   505
             height:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   506
             fromArray:#[
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   507
                            4r0123
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   508
                            4r1230
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   509
                            4r2301
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   510
                            4r3012
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   511
                        ])
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   512
            magnifiedBy:30
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   513
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   514
                                                                        [exEnd]
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   515
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   516
      with colors:
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   517
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   518
        ((Depth2Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   519
             width:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   520
             height:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   521
             fromArray:#[
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   522
                            4r0123
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   523
                            4r1230
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   524
                            4r2301
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   525
                            4r3012
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   526
                        ])
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   527
            colorMap:(Array with:(Color black)
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   528
                            with:(Color red)
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   529
                            with:(Color green)
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   530
                            with:(Color blue));
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   531
            magnifiedBy:30
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   532
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   533
                                                                        [exEnd]
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   534
8088
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   535
      depth4 image with 1/1/1 rgb interpretation:
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   536
                                                                        [exBegin]
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   537
        ((Depth4Image
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   538
             width:4
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   539
             height:4
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   540
             fromArray:#[
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   541
                            16r44 16r44
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   542
                            16r22 16r22
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   543
                            16r11 16r11
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   544
                            16r00 16r00
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   545
                        ])
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   546
            photometric:#rgb;
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   547
            samplesPerPixel:3;
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   548
            bitsPerSample:#(1 1 1);
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   549
            magnifiedBy:30
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   550
        ) edit
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   551
                                                                        [exEnd]
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   552
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   553
      depth4 image with 1/2/1 rgb interpretation:
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   554
                                                                        [exBegin]
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   555
        ((Depth4Image
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   556
             width:4
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   557
             height:4
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   558
             fromArray:#[
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   559
                            16rCC 16r44
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   560
                            16rAA 16r22
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   561
                            16r99 16r11
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   562
                            16r88 16r00
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   563
                        ])
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   564
            photometric:#rgb;
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   565
            samplesPerPixel:3;
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   566
            bitsPerSample:#(1 2 1);
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   567
            magnifiedBy:30
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   568
        ) edit
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   569
                                                                        [exEnd]
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   570
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   571
      depth8 image with 3/3/2 rgb interpretation:
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   572
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   573
        ((Depth8Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   574
             width:16
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   575
             height:16
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   576
             fromArray:(ByteArray withAll:(0 to:16rFF)))
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   577
            photometric:#rgb;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   578
            samplesPerPixel:3;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   579
            bitsPerSample:#(3 3 2);
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   580
            magnifiedBy:10
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   581
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   582
                                                                        [exEnd]
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   583
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   584
      depth8 image with 2/2/2 rgb interpretation:
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   585
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   586
        ((Depth8Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   587
             width:8
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   588
             height:8
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   589
             fromArray:(ByteArray withAll:(0 to:16r3F)))
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   590
            photometric:#rgb;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   591
            samplesPerPixel:3;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   592
            bitsPerSample:#(2 2 2);
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   593
            magnifiedBy:10
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   594
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   595
                                                                        [exEnd]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   596
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   597
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   598
        ((Depth8Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   599
             width:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   600
             height:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   601
             fromArray:#[
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   602
                    16r30 16r0C  16r03 16r3F
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   603
                    16r20 16r08  16r02 16r2A
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   604
                    16r10 16r04  16r01 16r15
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   605
                    16r00 16r00  16r00 16r00
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   606
                        ])
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   607
            photometric:#rgb;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   608
            samplesPerPixel:3;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   609
            bitsPerSample:#(2 2 2);
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   610
            magnifiedBy:30
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   611
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   612
                                                                        [exEnd]
5126
d3f2baf80581 color conversions fixed (16bit images)
Claus Gittinger <cg@exept.de>
parents: 5074
diff changeset
   613
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
   614
      trueColor image: remember: bytes are MSB
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   615
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   616
        ((Depth16Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   617
             width:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   618
             height:5
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   619
             fromArray:#[
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   620
                    2r01111100 2r00000000  2r00000011 2r11100000  2r00000000 2r00011111  2r01111111 2r11111111
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   621
                    2r00111100 2r00000000  2r00000001 2r11100000  2r00000000 2r00001111  2r00111101 2r11101111
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   622
                    2r00011100 2r00000000  2r00000000 2r11100000  2r00000000 2r00000111  2r00011100 2r11100111
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   623
                    2r00001100 2r00000000  2r00000000 2r01100000  2r00000000 2r00000001  2r00001100 2r01100011
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   624
                    2r00000100 2r00000000  2r00000000 2r00100000  2r00000000 2r00000001  2r00000100 2r00100001
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   625
                        ])
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   626
            photometric:#rgb;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   627
            samplesPerPixel:3;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   628
            bitsPerSample:#(5 5 5);
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   629
            magnifiedBy:30
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   630
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   631
                                                                        [exEnd]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   632
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   633
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   634
        ((Depth24Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   635
             width:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   636
             height:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   637
             fromArray:#[
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   638
                    16rFF 16r00 16r00  16rFF 16r00 16r00  16rFF 16r00 16r00  16rFF 16r00 16r00
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   639
                    16r00 16rFF 16r00  16r00 16rFF 16r00  16r00 16rFF 16r00  16r00 16rFF 16r00
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   640
                    16r00 16r00 16rFF  16r00 16r00 16rFF  16r00 16r00 16rFF  16r00 16r00 16rFF
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   641
                    16rFF 16rFF 16rFF  16rFF 16rFF 16rFF  16rFF 16rFF 16rFF  16rFF 16rFF 16rFF
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   642
                        ])
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   643
            photometric:#rgb;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   644
            samplesPerPixel:3;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   645
            bitsPerSample:#(8 8 8);
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   646
            magnifiedBy:30
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   647
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   648
                                                                        [exEnd]
4762
f70af9e4a5f1 comment
Claus Gittinger <cg@exept.de>
parents: 4757
diff changeset
   649
f70af9e4a5f1 comment
Claus Gittinger <cg@exept.de>
parents: 4757
diff changeset
   650
      32bit trueColor image:
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   651
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   652
        ((Depth32Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   653
             width:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   654
             height:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   655
             fromArray:#[
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   656
                    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
   657
                    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
   658
                    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
   659
                    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
   660
                        ])
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   661
            photometric:#rgb;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   662
            samplesPerPixel:4;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   663
            bitsPerSample:#(8 8 8 8);
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   664
            magnifiedBy:30
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   665
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   666
                                                                        [exEnd]
2760
94d2d524081b example added (24-bit image)
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   667
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
   668
    storing - only a subset of formats (TIFF, XBM, XPM) currently support storing:
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   669
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   670
        |img|
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   671
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   672
        img := Image fromFile:'bitmaps/winBitmaps/okSmily_up.bmp' inPackage:'stx:goodies'.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   673
        img saveOn:'myImage.tiff'.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   674
        (Image fromFile:'myImage.tiff') inspect.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   675
        img saveOn:'myImage.gif'.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   676
        (Image fromFile:'myImage.gif') inspect.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   677
                                                                        [exEnd]
1774
4241f730e0a6 fixed gunzipped image reading;
Claus Gittinger <cg@exept.de>
parents: 1771
diff changeset
   678
649
38e6d0015137 examples
Claus Gittinger <cg@exept.de>
parents: 622
diff changeset
   679
    magnifying (any factor):
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   680
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   681
        ((Image fromFile:'bitmaps/gifImages/claus.gif' inPackage:'stx:goodies')
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   682
            magnifiedTo:(48@48))
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   683
                inspect
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   684
                                                                        [exEnd]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   685
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   686
        ((Image fromFile:'bitmaps/gifImages/claus.gif' inPackage:'stx:goodies')
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   687
            magnifiedBy:0.7)
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   688
                inspect
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   689
                                                                        [exEnd]
1774
4241f730e0a6 fixed gunzipped image reading;
Claus Gittinger <cg@exept.de>
parents: 1771
diff changeset
   690
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
   691
    rotating (any angle in degrees clockwise):
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   692
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   693
        ((Image fromFile:'bitmaps/gifImages/claus.gif' inPackage:'stx:goodies')
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   694
            rotated:90)
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   695
                inspect
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   696
                                                                        [exEnd]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   697
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   698
        (((Image fromFile:'bitmaps/gifImages/claus.gif' inPackage:'stx:goodies')
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   699
            magnifiedBy:0.3@0.7) rotated:270)
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   700
                inspect
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   701
                                                                        [exEnd]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   702
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   703
        (((Image fromFile:'bitmaps/gifImages/claus.gif' inPackage:'stx:goodies')
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   704
            ) rotated:30)
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   705
                inspect
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   706
                                                                        [exEnd]
1774
4241f730e0a6 fixed gunzipped image reading;
Claus Gittinger <cg@exept.de>
parents: 1771
diff changeset
   707
    negative:
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   708
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   709
        ((Image fromFile:'bitmaps/gifImages/claus.gif' inPackage:'stx:goodies')
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   710
            negative)
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   711
                inspect
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   712
                                                                        [exEnd]
7123
320a7ec771f3 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7101
diff changeset
   713
320a7ec771f3 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7101
diff changeset
   714
      depth32 image with 8+8+8+8 argb interpretation:
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   715
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   716
        ((Depth32Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   717
             width:4 height:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   718
             fromArray:#[
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   719
                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
   720
                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
   721
                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
   722
                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
   723
            photometric:#argb;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   724
            samplesPerPixel:4;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   725
            bitsPerSample:#(8 8 8 8);
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   726
            magnifiedBy:10
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   727
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   728
                                                                        [exEnd]
7123
320a7ec771f3 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7101
diff changeset
   729
7126
a81b992fd069 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 7123
diff changeset
   730
      depth32 image with 8+8+8+8 rgba interpretation:
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   731
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   732
        ((Depth32Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   733
             width:4 height:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   734
             fromArray:#[
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   735
                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
   736
                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
   737
                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
   738
                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
   739
            photometric:#rgba;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   740
            samplesPerPixel:4;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   741
            bitsPerSample:#(8 8 8 8);
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   742
            magnifiedBy:10
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   743
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   744
                                                                        [exEnd]
8664
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
   745
      conversion:
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
   746
                                                                        [exBegin]
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
   747
        |d32Image d24Image|
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
   748
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
   749
        d32Image := (Depth32Image
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
   750
             width:4 height:4
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
   751
             fromArray:#[
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
   752
                255 0 0 255       255 0 0 255       255 0 0 255       255 0 0 255
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
   753
                0 255 0 255       0 255 0 255       0 255 0 255       0 255 0 255
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
   754
                0 0 255 255       0 0 255 255       0 0 255 255       0 0 255 255
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
   755
                255 255 255 255   255 255 255 255   255 255 255 255   255 255 255 255 ])
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
   756
            photometric:#rgba;
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
   757
            samplesPerPixel:4;
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
   758
            bitsPerSample:#(8 8 8 8);
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
   759
            magnifiedBy:10.
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
   760
        d32Image inspect.
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
   761
        d24Image := Depth24Image fromImage:d32Image.
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
   762
        d24Image inspect.
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
   763
                                                                        [exEnd]
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
   764
"
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
   765
!
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
   766
7904
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   767
examples_dithering
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   768
"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   769
    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
   770
                                                                                                        [exBegin]
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   771
    |image top panel image2 wrapIt|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   772
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   773
    top := StandardSystemView new.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   774
    top label:'Dithering Examples'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   775
    top width:1000.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   776
    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
   777
    panel horizontalLayout:#left.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   778
    panel verticalLayout:#top.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   779
    top openAndWait.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   780
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   781
    wrapIt := 
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   782
        [:image :text |
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   783
            |imageView label view|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   784
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   785
            view := View in:panel.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   786
            imageView := ImageView origin:0@0 extent:image extent in:view.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   787
            imageView image:image.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   788
            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
   789
            label logo:text.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   790
            view extent:(image extent + (0@30)).
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   791
            view realize.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   792
            view realizeAllSubViews.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   793
        ].    
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   794
    'original image:'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   795
    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
   796
    wrapIt value:image value:'Original'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   797
    
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   798
    'dithered image:'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   799
    image2 := image asOrderedDitheredMonochromeImage.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   800
    wrapIt value:image2 value:'Ordered'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   801
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   802
    'dithered Arce:'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   803
    image2 := image asStevensonArceDitheredMonochromeImage.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   804
    wrapIt value:image2 value:'Stephenson Arce'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   805
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   806
    'dithered Burkes:'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   807
    image2 := image asBurkesDitheredMonochromeImage.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   808
    wrapIt value:image2 value:'Burkes'.
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
    'dithered Floyd-Steinberg:'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   811
    image2 := image asFloydSteinbergDitheredMonochromeImage.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   812
    wrapIt value:image2 value:'FS b&w'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   813
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   814
    'dithered grey depth2 ordered:'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   815
    image2 := image asOrderedDitheredGrayImageDepth:2.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   816
    wrapIt value:image2 value:'Ordered gray 2bit'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   817
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   818
    'dithered grey depth4 ordered:'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   819
    image2 := image asOrderedDitheredGrayImageDepth:4.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   820
    wrapIt value:image2 value:'Ordered gray 4bit'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   821
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   822
    'dithered grey depth2 ordered:'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   823
    image2 := image asFloydSteinbergDitheredGrayImageDepth:2.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   824
    wrapIt value:image2 value:'FS gray 2bit'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   825
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   826
    'dithered grey depth4 ordered:'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   827
    image2 := image asFloydSteinbergDitheredGrayImageDepth:4.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   828
    wrapIt value:image2 value:'FS gray 4bit'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   829
                                                                                                        [exEnd]
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   830
"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   831
!
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   832
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
   833
examples_functionalImages
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
   834
"
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
   835
    Functional images (please read 'Functional Images' by Conal Elliot, Microsoft Research).
8025
2e4d3fedcbd3 #DOCUMENTATION by mawalch
mawalch
parents: 7996
diff changeset
   836
    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
   837
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
   838
    Plain x/y mapping:
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|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   841
        i := Depth1Image extent:256@256.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   842
        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
   843
        i inspect.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   844
                                                                        [exEnd]
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
   845
    Transformed x/y mapping:
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   846
                                                                        [exBegin]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   847
        |i f|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   848
        f := [:x :y | (x between:0.4 and:0.6) asInteger].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   849
        i := Depth1Image extent:256@256.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   850
        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
   851
        i inspect.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   852
                                                                        [exEnd]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   853
                                                                        [exBegin]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   854
        |i f|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   855
        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
   856
        i := Depth1Image extent:256@256.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   857
        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
   858
        i inspect.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   859
                                                                        [exEnd]
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
   860
    Image based on polar coordinate:
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   861
                                                                        [exBegin]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   862
        |i f|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   863
        f := [:x :y | ((x@y) r * 10) asInteger bitAnd:1].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   864
        i := Depth1Image extent:256@256.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   865
        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
   866
        i inspect.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   867
                                                                        [exEnd]
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
   868
    Grayscale image based on polar coordinate:
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   869
                                                                        [exBegin]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   870
        |i|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   871
        i := Depth8Image extent:256@256.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   872
        i photometric:#blackIs0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   873
        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
   874
        i inspect.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   875
                                                                        [exEnd]
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
   876
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
   877
    Taking another image as ''input''
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   878
                                                                        [exBegin]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   879
        |garfield f i h|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   880
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   881
        garfield := Image fromFile:'bitmaps/gifImages/garfield.gif' inPackage:'stx:goodies'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   882
        h := garfield height.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   883
        f := [:x :y | (garfield colorAtX:x y:h-y) rgbValue].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   884
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   885
        i := Depth24Image extent:garfield extent.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   886
        i pixelFunction:f.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   887
        i inspect.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   888
                                                                        [exEnd]
649
38e6d0015137 examples
Claus Gittinger <cg@exept.de>
parents: 622
diff changeset
   889
"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   890
! !
48194c26a46c Initial revision
claus
parents:
diff changeset
   891
1086
269243c32f69 added displayOpaque, for protocol completeness
Claus Gittinger <cg@exept.de>
parents: 1070
diff changeset
   892
!Image class methodsFor:'initialization'!
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
   893
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
   894
addReader:aReaderClass suffix:aSuffix
5216
f7ec910cfce1 Mark obsolete methods
Stefan Vogel <sv@exept.de>
parents: 5200
diff changeset
   895
    <resource: #obsolete>
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
   896
    "register an additional image reader.
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
   897
     This is provided for subclasses, to regster themself when
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
   898
     loaded (or from the startup scripts)"
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
   899
1800
1b4d3067bdc0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1799
diff changeset
   900
    self obsoleteMethodWarning.
1780
b20be7704d6f added mimeType
Claus Gittinger <cg@exept.de>
parents: 1779
diff changeset
   901
    self addReader:aReaderClass suffix:aSuffix mimeType:nil
b20be7704d6f added mimeType
Claus Gittinger <cg@exept.de>
parents: 1779
diff changeset
   902
!
b20be7704d6f added mimeType
Claus Gittinger <cg@exept.de>
parents: 1779
diff changeset
   903
b20be7704d6f added mimeType
Claus Gittinger <cg@exept.de>
parents: 1779
diff changeset
   904
addReader:aReaderClass suffix:aSuffix mimeType:mimeType
5216
f7ec910cfce1 Mark obsolete methods
Stefan Vogel <sv@exept.de>
parents: 5200
diff changeset
   905
    <resource: #obsolete>
1780
b20be7704d6f added mimeType
Claus Gittinger <cg@exept.de>
parents: 1779
diff changeset
   906
    "register an additional image reader.
1800
1b4d3067bdc0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1799
diff changeset
   907
     This interface is kept for backward compatibility.
1b4d3067bdc0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1799
diff changeset
   908
     The knowledge has been concentrated in MIMETypes"
1b4d3067bdc0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1799
diff changeset
   909
1b4d3067bdc0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1799
diff changeset
   910
    self obsoleteMethodWarning.
1b4d3067bdc0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1799
diff changeset
   911
    MIMETypes
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   912
        defineImageType:mimeType suffix:aSuffix reader:aReaderClass
1780
b20be7704d6f added mimeType
Claus Gittinger <cg@exept.de>
parents: 1779
diff changeset
   913
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
   914
    "
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
   915
     Image addReader:GIFReader suffix:'gif'
1780
b20be7704d6f added mimeType
Claus Gittinger <cg@exept.de>
parents: 1779
diff changeset
   916
     Image addReader:GIFReader suffix:'gif' mimeType:'image/gif'
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
   917
    "
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
   918
1799
054302440308 moved all mime-knowledge to MIMETypes
Claus Gittinger <cg@exept.de>
parents: 1786
diff changeset
   919
    "Modified: 30.6.1997 / 21:59:59 / cg"
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
   920
!
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
   921
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
   922
fileFormats
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
   923
    "return the collection of supported file formats.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
   924
     The returned dictionary maps file-extensions to image reader classes."
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
   925
1799
054302440308 moved all mime-knowledge to MIMETypes
Claus Gittinger <cg@exept.de>
parents: 1786
diff changeset
   926
    ^ MIMETypes fileSuffixToImageReaderMapping
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
   927
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
   928
    "
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
   929
     Image fileFormats
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
   930
    "
1799
054302440308 moved all mime-knowledge to MIMETypes
Claus Gittinger <cg@exept.de>
parents: 1786
diff changeset
   931
054302440308 moved all mime-knowledge to MIMETypes
Claus Gittinger <cg@exept.de>
parents: 1786
diff changeset
   932
    "Modified: 30.6.1997 / 22:05:58 / cg"
100
1b0b86c77397 co !!:*
claus
parents: 89
diff changeset
   933
!
1b0b86c77397 co !!:*
claus
parents: 89
diff changeset
   934
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
   935
flushDeviceImages
869
464ffa8c0c67 comment
Claus Gittinger <cg@exept.de>
parents: 861
diff changeset
   936
    "simply release all deviceForms"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
   937
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
   938
    Lobby do:[:anImage |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   939
        anImage release
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
   940
    ]
869
464ffa8c0c67 comment
Claus Gittinger <cg@exept.de>
parents: 861
diff changeset
   941
464ffa8c0c67 comment
Claus Gittinger <cg@exept.de>
parents: 861
diff changeset
   942
    "Modified: 15.6.1996 / 15:45:02 / cg"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   943
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   944
48194c26a46c Initial revision
claus
parents:
diff changeset
   945
initialize
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
   946
    "initialize class constants"
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
   947
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   948
    "setup tracker of known pictures"
24
e810b1be068b *** empty log message ***
claus
parents: 17
diff changeset
   949
    Lobby isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   950
        Lobby := Registry new.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   951
        ObjectMemory addDependent:self.
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
        "/ define the algorithm to use for dithering -
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   954
        "/ supported values are:
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   955
        "/      #threshold
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   956
        "/      #ordered
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   957
        "/      #floydSteinberg
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   958
        "/      #burkes
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   959
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   960
        DitherAlgorithm := #floydSteinberg.
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
        (Display notNil and:[Display hasGrayscales]) ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   963
            NumberOfDitherColors := 64
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   964
        ] ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   965
            "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
   966
            NumberOfDitherColors := 100
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
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   969
        "define reader classes"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   970
        self initializeFileFormatTable.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   971
        self initializeMIMETable.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   972
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   973
        CollectGarbageWhenRunningOutOfColors := false.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   974
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   975
        ImageErrorSignal := Error newSignalMayProceed:true.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   976
        ImageErrorSignal nameClass:self message:#imageErrorSignal.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   977
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   978
        ImageSaveErrorSignal := ImageErrorSignal newSignalMayProceed:true.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   979
        ImageSaveErrorSignal nameClass:self message:#imageSaveErrorSignal.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   980
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   981
        FileCreationErrorSignal := ImageSaveErrorSignal newSignalMayProceed:true.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   982
        FileCreationErrorSignal nameClass:self message:#fileCreationErrorSignal.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   983
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   984
        CannotRepresentImageSignal := ImageSaveErrorSignal newSignalMayProceed:true.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   985
        CannotRepresentImageSignal nameClass:self message:#cannotRepresentImageSignal.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   986
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   987
        ImageLoadErrorSignal := QuerySignal new.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   988
        ImageLoadErrorSignal nameClass:self message:#imageLoadErrorSignal.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   989
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   990
        ImageNotFoundQuerySignal := QuerySignal new.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   991
        ImageNotFoundQuerySignal nameClass:self message:#imageNotFoundQuerySignal.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   992
        ImageNotFoundQuerySignal parent:ImageLoadErrorSignal.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   993
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   994
        InformationLostQuerySignal := QuerySignal new.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   995
        InformationLostQuerySignal nameClass:self message:#informationLostQuerySignal.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   996
        InformationLostQuerySignal parent:ImageLoadErrorSignal.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   997
8175
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
   998
        NoMaskSupportedQuerySignal := QuerySignal new.
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
   999
        NoMaskSupportedQuerySignal nameClass:self message:#noMaskSupportedQuerySignal.
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1000
        NoMaskSupportedQuerySignal parent:InformationLostQuerySignal.
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1001
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1002
        NoMaskButAlphaSupportedQuerySignal := QuerySignal new.
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1003
        NoMaskButAlphaSupportedQuerySignal nameClass:self message:#noMaskButAlphaSupportedQuerySignal.
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1004
        NoMaskButAlphaSupportedQuerySignal parent:NoMaskSupportedQuerySignal.
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1005
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1006
        BadImageFormatQuerySignal := QuerySignal new.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1007
        BadImageFormatQuerySignal nameClass:self message:#badImageFormatQuerySignal.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1008
        BadImageFormatQuerySignal parent:ImageLoadErrorSignal.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1009
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1010
        UnrepresentableColorSignal := ImageErrorSignal newSignalMayProceed:true.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1011
        UnrepresentableColorSignal nameClass:self message:#unrepresentableColorSignal.
386
f9a80cac659e only init once
Claus Gittinger <cg@exept.de>
parents: 380
diff changeset
  1012
    ]
748
818c6312acd1 grey vs. gray
Claus Gittinger <cg@exept.de>
parents: 746
diff changeset
  1013
8175
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1014
    "Modified: / 13-09-2017 / 09:29:34 / cg"
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  1015
!
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  1016
24
e810b1be068b *** empty log message ***
claus
parents: 17
diff changeset
  1017
initializeFileFormatTable
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
  1018
    "initialize a default table to map from file extension to reader class.
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
  1019
     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
  1020
     see the 'smalltalk.rc'/'display.rc' startup files for a real (full) map."
24
e810b1be068b *** empty log message ***
claus
parents: 17
diff changeset
  1021
1814
5d413419cf51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1802
diff changeset
  1022
    MIMETypes notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1023
        MIMETypes imageReaderForSuffix:'xbm'  put:XBMReader.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1024
        MIMETypes imageReaderForSuffix:'tiff' put:TIFFReader.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1025
        MIMETypes imageReaderForSuffix:'gif'  put:GIFReader.
1814
5d413419cf51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1802
diff changeset
  1026
    ].
24
e810b1be068b *** empty log message ***
claus
parents: 17
diff changeset
  1027
72
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
  1028
    "
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
  1029
     Image initializeFileFormatTable
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
  1030
    "
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1031
1799
054302440308 moved all mime-knowledge to MIMETypes
Claus Gittinger <cg@exept.de>
parents: 1786
diff changeset
  1032
    "Modified: 30.6.1997 / 22:07:28 / cg"
1785
3196d65f5fa8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1784
diff changeset
  1033
!
3196d65f5fa8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1784
diff changeset
  1034
3196d65f5fa8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1784
diff changeset
  1035
initializeMIMETable
3196d65f5fa8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1784
diff changeset
  1036
    "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
  1037
     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
  1038
     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
  1039
1799
054302440308 moved all mime-knowledge to MIMETypes
Claus Gittinger <cg@exept.de>
parents: 1786
diff changeset
  1040
    MIMETypes notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1041
        MIMETypes mimeTypeForSuffix:'gif'       put:'image/gif'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1042
        MIMETypes mimeTypeForSuffix:'tiff'      put:'image/tiff'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1043
        MIMETypes mimeTypeForSuffix:'tif'       put:'image/tiff'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1044
        MIMETypes mimeTypeForSuffix:'xbm'       put:'image/x-xbitmap'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1045
        MIMETypes mimeTypeForSuffix:'xpm'       put:'image/x-xpixmap'.
1799
054302440308 moved all mime-knowledge to MIMETypes
Claus Gittinger <cg@exept.de>
parents: 1786
diff changeset
  1046
    ].
1785
3196d65f5fa8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1784
diff changeset
  1047
3196d65f5fa8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1784
diff changeset
  1048
    "
3196d65f5fa8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1784
diff changeset
  1049
     Image initializeMIMETable
3196d65f5fa8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1784
diff changeset
  1050
    "
3196d65f5fa8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1784
diff changeset
  1051
3196d65f5fa8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1784
diff changeset
  1052
    "Created: 27.6.1997 / 16:43:48 / cg"
1815
50212910fc13 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1814
diff changeset
  1053
    "Modified: 21.7.1997 / 17:33:59 / cg"
24
e810b1be068b *** empty log message ***
claus
parents: 17
diff changeset
  1054
!
e810b1be068b *** empty log message ***
claus
parents: 17
diff changeset
  1055
901
6cacd0f4eef0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 896
diff changeset
  1056
update:something with:aParameter from:changedObject
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  1057
    "flush all device specific stuff when restarted from a snapshot"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1058
48194c26a46c Initial revision
claus
parents:
diff changeset
  1059
    (something == #restarted) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1060
        self flushDeviceImages
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  1061
    ]
901
6cacd0f4eef0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 896
diff changeset
  1062
6cacd0f4eef0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 896
diff changeset
  1063
    "Created: 21.6.1996 / 19:47:43 / cg"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  1064
! !
48194c26a46c Initial revision
claus
parents:
diff changeset
  1065
1086
269243c32f69 added displayOpaque, for protocol completeness
Claus Gittinger <cg@exept.de>
parents: 1070
diff changeset
  1066
!Image class methodsFor:'instance creation'!
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1067
2380
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  1068
extent:ext
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  1069
    "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
  1070
     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
  1071
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  1072
    ^ 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
  1073
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  1074
    "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
  1075
    "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
  1076
!
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  1077
3023
cb063801decd more Squeak compatibility
ps
parents: 2980
diff changeset
  1078
extent:ext depth:d
cb063801decd more Squeak compatibility
ps
parents: 2980
diff changeset
  1079
    "ST-80 compatibility"
cb063801decd more Squeak compatibility
ps
parents: 2980
diff changeset
  1080
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  1081
    ^ self width:ext x height:ext y depth:d
3023
cb063801decd more Squeak compatibility
ps
parents: 2980
diff changeset
  1082
!
cb063801decd more Squeak compatibility
ps
parents: 2980
diff changeset
  1083
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1084
extent:ext depth:d antiAliasedPalette:aBasicColorArray bgColor:bgColor
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1085
    ^ 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
  1086
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1087
    "
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1088
        |colorMap aaImgArray|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1089
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1090
        colorMap := Array with:Color white with:Color blue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1091
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1092
        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
  1093
        aaImgArray last
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1094
            fillAntiAliasedArc:200@200
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1095
            radius:80
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1096
            from:0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1097
            angle:360
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1098
            withColor:Color blue
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1099
            antiAliasedPalette:aaImgArray first
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1100
            startWith:aaImgArray second.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1101
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1102
        aaImgArray last inspect.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1103
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
        |colorMap aaImgArray|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1106
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1107
        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
  1108
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1109
        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
  1110
        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
  1111
            colorDictionary:aaImgArray first
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1112
            blendStart:aaImgArray second.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1113
        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
  1114
            colorDictionary:aaImgArray first
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1115
            blendStart:aaImgArray second.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1116
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1117
        aaImgArray last inspect.
5135
0a2a850a20cc *** empty log message ***
sr
parents: 5126
diff changeset
  1118
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1119
    "
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1120
!
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1121
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1122
extent:ext depth:d antiAliasedPalette:aBasicColorArray bgColor:bgColor mixedArray:mixedArray
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  1123
    |colorMap colorIndex colorDictionary tmpDic newImage|
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  1124
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1125
    colorMap := OrderedCollection new.
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1126
    colorIndex := 0.
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1127
    colorDictionary := Dictionary new.
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1128
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1129
    aBasicColorArray do:[:aColor |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1130
        colorMap add:aColor.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1131
        colorIndex := colorIndex + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1132
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1133
        tmpDic := Dictionary new.
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
        mixedArray do:[:aFloat |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1136
            tmpDic at:aFloat put:colorIndex.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1137
            colorMap add:(aColor mixed:aFloat with:bgColor).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1138
            colorIndex := colorIndex + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1139
        ].
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
        colorDictionary at:aColor put:tmpDic.
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 6037
diff changeset
  1142
    ].
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1143
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1144
    newImage := (self implementorForDepth:d) new.
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1145
    newImage width:ext x height:ext y depth:d palette:colorMap.
5643
bf38d077884a changed:
Claus Gittinger <cg@exept.de>
parents: 5533
diff changeset
  1146
    newImage createPixelStore.
bf38d077884a changed:
Claus Gittinger <cg@exept.de>
parents: 5533
diff changeset
  1147
"/    emptyBits := ByteArray new:(newImage bytesPerRow * ext y).
bf38d077884a changed:
Claus Gittinger <cg@exept.de>
parents: 5533
diff changeset
  1148
"/    newImage bits:emptyBits.
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1149
5135
0a2a850a20cc *** empty log message ***
sr
parents: 5126
diff changeset
  1150
    ^ Array with:colorDictionary with:mixedArray first with:newImage
0a2a850a20cc *** empty log message ***
sr
parents: 5126
diff changeset
  1151
0a2a850a20cc *** empty log message ***
sr
parents: 5126
diff changeset
  1152
    "
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1153
        |colorMap aaImgArray|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1154
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1155
        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
  1156
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1157
        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
  1158
        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
  1159
            colorDictionary:aaImgArray first
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1160
            blendStart:aaImgArray second.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1161
        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
  1162
            colorDictionary:aaImgArray first
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1163
            blendStart:aaImgArray second.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1164
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1165
        aaImgArray last inspect.
5135
0a2a850a20cc *** empty log message ***
sr
parents: 5126
diff changeset
  1166
0a2a850a20cc *** empty log message ***
sr
parents: 5126
diff changeset
  1167
 ###################
0a2a850a20cc *** empty log message ***
sr
parents: 5126
diff changeset
  1168
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1169
        |colorMap aaImgArray|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1170
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1171
        colorMap := Array with:Color white with:Color blue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1172
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1173
        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
  1174
        aaImgArray last
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1175
            fillAntiAliasedArc:200@200
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1176
            radius:80
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1177
            from:0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1178
            angle:360
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1179
            withColor:Color blue
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  1180
            colorDictionary:aaImgArray first
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  1181
            blendStart:aaImgArray second.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1182
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1183
        aaImgArray last inspect.
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1184
    "
5643
bf38d077884a changed:
Claus Gittinger <cg@exept.de>
parents: 5533
diff changeset
  1185
bf38d077884a changed:
Claus Gittinger <cg@exept.de>
parents: 5533
diff changeset
  1186
    "Modified: / 02-11-2010 / 20:57:41 / cg"
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  1187
    "Modified: / 31-01-2017 / 14:30:22 / stefan"
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  1188
    "Modified (comment): / 31-01-2017 / 15:47:39 / stefan"
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1189
!
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1190
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1191
extent:ext depth:d bits:bits
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1192
    "ST-80 compatibility; assume 32-bit padding"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1193
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1194
    ^ self extent:ext depth:d bits:bits pad:32
24
e810b1be068b *** empty log message ***
claus
parents: 17
diff changeset
  1195
!
e810b1be068b *** empty log message ***
claus
parents: 17
diff changeset
  1196
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1197
extent:ext depth:d bits:bits pad:padding
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1198
    "ST-80 compatibility"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1199
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1200
    ^ self width:ext x height:ext y depth:d fromArray:bits pad:padding
24
e810b1be068b *** empty log message ***
claus
parents: 17
diff changeset
  1201
!
e810b1be068b *** empty log message ***
claus
parents: 17
diff changeset
  1202
1276
ec4112f62da7 ST-80 stuff
Claus Gittinger <cg@exept.de>
parents: 1248
diff changeset
  1203
extent:ext depth:d bitsPerPixel:bpp palette:aColormap usingBits:bits
ec4112f62da7 ST-80 stuff
Claus Gittinger <cg@exept.de>
parents: 1248
diff changeset
  1204
    "ST-80 compatibility"
ec4112f62da7 ST-80 stuff
Claus Gittinger <cg@exept.de>
parents: 1248
diff changeset
  1205
ec4112f62da7 ST-80 stuff
Claus Gittinger <cg@exept.de>
parents: 1248
diff changeset
  1206
    |img|
ec4112f62da7 ST-80 stuff
Claus Gittinger <cg@exept.de>
parents: 1248
diff changeset
  1207
ec4112f62da7 ST-80 stuff
Claus Gittinger <cg@exept.de>
parents: 1248
diff changeset
  1208
    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
  1209
    img colorMap:aColormap.
ec4112f62da7 ST-80 stuff
Claus Gittinger <cg@exept.de>
parents: 1248
diff changeset
  1210
    ^ img
ec4112f62da7 ST-80 stuff
Claus Gittinger <cg@exept.de>
parents: 1248
diff changeset
  1211
ec4112f62da7 ST-80 stuff
Claus Gittinger <cg@exept.de>
parents: 1248
diff changeset
  1212
    "Created: 25.1.1997 / 03:50:22 / cg"
ec4112f62da7 ST-80 stuff
Claus Gittinger <cg@exept.de>
parents: 1248
diff changeset
  1213
    "Modified: 25.1.1997 / 12:27:35 / cg"
ec4112f62da7 ST-80 stuff
Claus Gittinger <cg@exept.de>
parents: 1248
diff changeset
  1214
!
ec4112f62da7 ST-80 stuff
Claus Gittinger <cg@exept.de>
parents: 1248
diff changeset
  1215
1433
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  1216
extent:ext depth:d palette:aColormap
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  1217
    "create & return a blank image of the given size.
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  1218
     ST-80 compatibility"
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  1219
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  1220
    |newImage|
1433
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  1221
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  1222
    newImage := (self implementorForDepth:d) new.
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  1223
    newImage width:ext x height:ext y depth:d palette:aColormap.
5643
bf38d077884a changed:
Claus Gittinger <cg@exept.de>
parents: 5533
diff changeset
  1224
    newImage createPixelStore.
bf38d077884a changed:
Claus Gittinger <cg@exept.de>
parents: 5533
diff changeset
  1225
"/    emptyBits := ByteArray new:(newImage bytesPerRow * ext y).
bf38d077884a changed:
Claus Gittinger <cg@exept.de>
parents: 5533
diff changeset
  1226
"/    newImage bits:emptyBits.
1433
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  1227
    ^ newImage
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  1228
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  1229
    "
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  1230
     Image extent:16@16 depth:8 palette:nil
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  1231
     Image extent:16@16 depth:4 palette:nil
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  1232
     Image extent:16@16 depth:2 palette:nil
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  1233
    "
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  1234
5643
bf38d077884a changed:
Claus Gittinger <cg@exept.de>
parents: 5533
diff changeset
  1235
    "Created: / 06-03-1997 / 15:24:01 / cg"
bf38d077884a changed:
Claus Gittinger <cg@exept.de>
parents: 5533
diff changeset
  1236
    "Modified: / 02-11-2010 / 20:56:53 / cg"
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  1237
    "Modified (format): / 31-01-2017 / 14:51:03 / stefan"
1433
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  1238
!
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  1239
1070
6a695c4bb749 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1063
diff changeset
  1240
extent:ext depth:d palette:aColormap bits:bits
6a695c4bb749 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1063
diff changeset
  1241
    "ST-80 compatibility"
6a695c4bb749 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1063
diff changeset
  1242
6a695c4bb749 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1063
diff changeset
  1243
    ^ self extent:ext depth:d palette:aColormap bits:bits pad:16
6a695c4bb749 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1063
diff changeset
  1244
6a695c4bb749 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1063
diff changeset
  1245
    "Modified: 7.10.1996 / 11:32:16 / cg"
6a695c4bb749 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1063
diff changeset
  1246
!
6a695c4bb749 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1063
diff changeset
  1247
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1248
extent:ext depth:d palette:aColormap bits:bits pad:padding
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1249
    "ST-80 compatibility"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1250
1070
6a695c4bb749 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1063
diff changeset
  1251
    |img|
6a695c4bb749 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1063
diff changeset
  1252
6a695c4bb749 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1063
diff changeset
  1253
    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
  1254
    img colorMap:aColormap.
6a695c4bb749 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1063
diff changeset
  1255
    ^ img
6a695c4bb749 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1063
diff changeset
  1256
6a695c4bb749 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1063
diff changeset
  1257
    "Modified: 7.10.1996 / 11:32:00 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1258
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1259
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1260
extent:ext fromArray:bits offset:offset
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1261
    "ST-80 compatibility"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1262
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1263
    ^ self width:ext x height:ext y fromArray:bits
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1264
!
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1265
7913
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  1266
fromAlphaInImage:anImage
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  1267
    "create & return an Image from the alpha channel ofanother image.
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  1268
     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
  1269
     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
  1270
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  1271
    |cls|
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  1272
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  1273
    self == Image ifTrue:[
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  1274
        cls := Depth8Image.
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  1275
    ] ifFalse:[
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  1276
        cls := self.
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  1277
    ].
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  1278
    ^ cls new fromAlphaInImage:anImage
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  1279
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  1280
    "Created: / 17-02-2017 / 17:39:30 / cg"
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  1281
!
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  1282
7637
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
  1283
fromDeviceForm:aForm maskForm:aMaskFormOrNil
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
  1284
    "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
  1285
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
  1286
    |img|
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
  1287
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
  1288
    img := self newForDepth:aForm depth.
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
  1289
    img fromDeviceForm:aForm maskForm:aMaskFormOrNil.
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
  1290
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
  1291
    ^ img 
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
  1292
!
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
  1293
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1294
fromForm:aForm
924
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  1295
    "create & return an Image given a aForm"
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1296
3026
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1297
    ^ self fromSubForm:(0@0 extent:aForm extent) in:aForm
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1298
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1299
    "
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1300
     |f|
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1301
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1302
     f := Form width:16 height:16.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1303
     f clear.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1304
     f displayLineFromX:0 y:0 toX:15 y:15.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1305
     f inspect.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1306
     (Image fromForm:f) inspect
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1307
    "
924
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  1308
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  1309
    "
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  1310
     |f|
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  1311
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  1312
     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
  1313
     f clear.
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  1314
     f paint:(Color red).
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  1315
     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
  1316
     f paint:(Color green).
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  1317
     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
  1318
     f inspect.
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  1319
     (Image fromForm:f) inspect
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  1320
    "
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  1321
936
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
  1322
    "Modified: 11.7.1996 / 11:21:42 / cg"
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1323
!
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1324
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1325
fromImage:anImage
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1326
    "create & return an Image given another image. This can be used to
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1327
     convert an image to another depth."
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1328
3259
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1329
    ^ 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
  1330
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1331
    "
3448
44cbe8a45067 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1332
     |i i2 idx|
44cbe8a45067 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1333
44cbe8a45067 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1334
     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
  1335
     i2 := i deepCopy.
44cbe8a45067 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1336
44cbe8a45067 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1337
     idx := i2 colorMap indexOfPaintNearest:(Color green).
44cbe8a45067 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1338
     i2 colorMap at:idx put:Color red.
44cbe8a45067 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1339
     i2 inspect.
44cbe8a45067 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1340
     i inspect.
3259
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1341
    "
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1342
!
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1343
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1344
fromImage:anImage photometric:photometricOrNil
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1345
    "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
  1346
     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
  1347
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  1348
    (self == Image
8663
b24e56c97483 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8524
diff changeset
  1349
     or:[anImage class == self
b24e56c97483 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8524
diff changeset
  1350
         and:[photometricOrNil isNil 
b24e56c97483 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8524
diff changeset
  1351
              or:[photometricOrNil == anImage photometric]]]
b24e56c97483 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8524
diff changeset
  1352
    ) ifTrue:[^ anImage].
b24e56c97483 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8524
diff changeset
  1353
    
3259
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1354
    ^ self new fromImage:anImage photometric:photometricOrNil.
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1355
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1356
    "
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1357
     |i1 i8|
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1358
8093
363a0cdd8762 #DOCUMENTATION by mawalch
mawalch
parents: 8091
diff changeset
  1359
     i1 := Image fromFile:'libtool/bitmaps/SBrowser.xbm'.
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1360
     i8 := Depth8Image fromImage:i1.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1361
     i8 inspect
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1362
    "
8093
363a0cdd8762 #DOCUMENTATION by mawalch
mawalch
parents: 8091
diff changeset
  1363
363a0cdd8762 #DOCUMENTATION by mawalch
mawalch
parents: 8091
diff changeset
  1364
    "Modified (comment): / 23-08-2017 / 12:02:25 / mawalch"
8663
b24e56c97483 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8524
diff changeset
  1365
    "Modified (format): / 22-03-2019 / 08:57:06 / Claus Gittinger"
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1366
!
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1367
3026
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1368
fromSubForm:aRectangle in:aForm
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1369
    "create & return an subImage given a aForm"
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1370
7271
3d35b4e39ec4 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 7242
diff changeset
  1371
    |depth formsDevice vis img photometric|
3026
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1372
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1373
    depth := aForm depth.
7271
3d35b4e39ec4 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 7242
diff changeset
  1374
    formsDevice := aForm device.
3026
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1375
8795
0bec4735e8e7 #BUGFIX by exept
Claus Gittinger <cg@exept.de>
parents: 8758
diff changeset
  1376
    photometric := (depth > 8) 
0bec4735e8e7 #BUGFIX by exept
Claus Gittinger <cg@exept.de>
parents: 8758
diff changeset
  1377
                        ifTrue:[
0bec4735e8e7 #BUGFIX by exept
Claus Gittinger <cg@exept.de>
parents: 8758
diff changeset
  1378
                            (depth > 24) ifTrue:[
0bec4735e8e7 #BUGFIX by exept
Claus Gittinger <cg@exept.de>
parents: 8758
diff changeset
  1379
                                #rgba
0bec4735e8e7 #BUGFIX by exept
Claus Gittinger <cg@exept.de>
parents: 8758
diff changeset
  1380
                            ] ifFalse:[
0bec4735e8e7 #BUGFIX by exept
Claus Gittinger <cg@exept.de>
parents: 8758
diff changeset
  1381
                                #rgb
0bec4735e8e7 #BUGFIX by exept
Claus Gittinger <cg@exept.de>
parents: 8758
diff changeset
  1382
                            ] 
0bec4735e8e7 #BUGFIX by exept
Claus Gittinger <cg@exept.de>
parents: 8758
diff changeset
  1383
                        ] ifFalse:[#palette].
4937
1b0ebaed9336 photometric fix
Claus Gittinger <cg@exept.de>
parents: 4893
diff changeset
  1384
7271
3d35b4e39ec4 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 7242
diff changeset
  1385
    (formsDevice notNil and:[depth == formsDevice depth]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1386
        "/
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1387
        "/ for truecolor displays, return a Depth24Image
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1388
        "/ (must do this for depth15 & depth16 displays, since
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1389
        "/  Depth16Image has no way to specify r/g/b masks ...)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1390
        "/
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1391
        vis := formsDevice visualType.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1392
        (vis == #TrueColor or:[vis == #DirectColor]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1393
            depth > 8 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1394
                depth := 24.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1395
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1396
        ].
3026
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1397
    ].
3259
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1398
    img := self newForDepth:depth.
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 6037
diff changeset
  1399
    img photometric:photometric.
4937
1b0ebaed9336 photometric fix
Claus Gittinger <cg@exept.de>
parents: 4893
diff changeset
  1400
7271
3d35b4e39ec4 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 7242
diff changeset
  1401
    formsDevice isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1402
        ^ img from:aForm in:aRectangle.
3026
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1403
    ].
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1404
    ^ img from:aForm in:aRectangle
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1405
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1406
    "
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1407
     |f|
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1408
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1409
     f := Form width:16 height:16.
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1410
     f clear.
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1411
     f displayLineFromX:0 y:0 toX:15 y:15.
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1412
     f inspect.
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1413
     (Image fromForm:f) inspect.
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1414
     (Image fromSubForm:(5@5 corner:10@10) in:f) inspect
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1415
    "
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1416
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1417
    "
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1418
     |f|
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1419
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1420
     f := Form width:16 height:16 depth:(Display depth) on:Display.
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1421
     f clear.
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1422
     f paint:(Color red).
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1423
     f displayLineFromX:0 y:0 toX:15 y:15.
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1424
     f paint:(Color green).
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1425
     f displayLineFromX:15 y:0 toX:0 y:15.
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1426
     f inspect.
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1427
     (Image fromForm:f) inspect.
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1428
     (Image fromSubForm:(5@5 corner:10@10) in:f) inspect
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1429
    "
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  1430
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  1431
    "Modified: / 31-01-2017 / 15:03:17 / stefan"
3026
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1432
!
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1433
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  1434
fromSubImage:anImage in:aRectangle
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  1435
    "create & return an Image from a rectangular area in another image.
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1436
     This can also be used to get a subimage in another depth.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1437
     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
  1438
     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
  1439
     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
  1440
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1441
    |cls|
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  1442
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  1443
    self == Image ifTrue:[
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  1444
        cls := self implementorForDepth:anImage depth.
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  1445
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1446
        cls := self.
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1447
    ].
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1448
    ^ cls new fromSubImage:anImage in:aRectangle.
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  1449
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  1450
    "
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  1451
     |i1 i8|
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  1452
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1453
     i1 := Image fromFile:'bitmaps/gifImages/garfield.gif' inPackage:'stx:goodies'.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1454
     i8 := Depth8Image fromSubImage:i1 in:(250@90 extent:50@50).
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  1455
     i8 inspect
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  1456
    "
650
14fc51fc3a4e comments
Claus Gittinger <cg@exept.de>
parents: 649
diff changeset
  1457
    "
14fc51fc3a4e comments
Claus Gittinger <cg@exept.de>
parents: 649
diff changeset
  1458
     |i1 i8|
14fc51fc3a4e comments
Claus Gittinger <cg@exept.de>
parents: 649
diff changeset
  1459
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1460
     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
  1461
     i8 := Image fromSubImage:i1 in:(70@50 extent:50@50).
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  1462
     i8 inspect
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  1463
    "
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1464
    "
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1465
     |i1 i24|
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1466
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1467
     i1 := Image fromFile:'bitmaps/gifImages/claus.gif' inPackage:'stx:goodies'.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1468
     i24 := Depth24Image fromSubImage:i1 in:(70@50 extent:50@50).
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1469
     i24 inspect
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1470
    "
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1471
    "
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1472
     |i1 i24|
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1473
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1474
     i1 := Image fromFile:'bitmaps/gifImages/claus.gif' inPackage:'stx:goodies'.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1475
     i1 inspect.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1476
     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
  1477
     i24 inspect
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1478
    "
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  1479
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  1480
    "Created: / 20-09-1995 / 01:05:43 / claus"
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  1481
    "Modified: / 24-04-1997 / 23:13:02 / cg"
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  1482
    "Modified (format): / 30-01-2017 / 19:45:54 / stefan"
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  1483
!
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  1484
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1485
new
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1486
    "create a new image. Redefined to set the photometric to
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1487
     greyScale with black being 0 as default."
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1488
4416
fb209558d622 proper #initialize
Claus Gittinger <cg@exept.de>
parents: 4415
diff changeset
  1489
    ^ self basicNew initialize
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  1490
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  1491
    "Modified: 10.6.1996 / 18:08:37 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1492
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1493
3259
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1494
newForDepth:depth
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1495
    "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
  1496
     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
  1497
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1498
    |cls|
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1499
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1500
    cls := self implementorForDepth:depth.
4757
60d27f8e65bb some fixes for depth32
Claus Gittinger <cg@exept.de>
parents: 4745
diff changeset
  1501
    ^ cls new
3259
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1502
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1503
    "
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1504
     Image newForDepth:8
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1505
    "
4757
60d27f8e65bb some fixes for depth32
Claus Gittinger <cg@exept.de>
parents: 4745
diff changeset
  1506
60d27f8e65bb some fixes for depth32
Claus Gittinger <cg@exept.de>
parents: 4745
diff changeset
  1507
    "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
  1508
!
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1509
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1510
width:w height:h
2380
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  1511
    "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
  1512
     Assume a depth of 1, unless an explicit imageClass is the receiver."
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1513
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1514
    |cls|
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1515
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1516
    cls := self.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1517
    cls == Image ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1518
        cls := self implementorForDepth:1
4788
0d07247aee8b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4780
diff changeset
  1519
    ].
0d07247aee8b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4780
diff changeset
  1520
    ^ cls new width:w height:h
0d07247aee8b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4780
diff changeset
  1521
0d07247aee8b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4780
diff changeset
  1522
    "Modified: / 06-06-2007 / 11:10:55 / cg"
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1523
!
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1524
82
98a70bce6d51 *** empty log message ***
claus
parents: 81
diff changeset
  1525
width:w height:h depth:d
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1526
    "create a new image, given width, height and depth"
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1527
3259
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1528
    ^ (self newForDepth:d)
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1529
        width:w height:h depth:d
82
98a70bce6d51 *** empty log message ***
claus
parents: 81
diff changeset
  1530
!
98a70bce6d51 *** empty log message ***
claus
parents: 81
diff changeset
  1531
98a70bce6d51 *** empty log message ***
claus
parents: 81
diff changeset
  1532
width:w height:h depth:d fromArray:pixelData
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1533
    "create a new image, given width, height, depth and data.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1534
     Data must be a ByteArray containing correctly aligned bits for the specified
134
claus
parents: 132
diff changeset
  1535
     depth (8-bit padded)."
82
98a70bce6d51 *** empty log message ***
claus
parents: 81
diff changeset
  1536
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  1537
    ^ (self newForDepth:d)
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1538
        width:w height:h depth:d fromArray:pixelData
82
98a70bce6d51 *** empty log message ***
claus
parents: 81
diff changeset
  1539
98a70bce6d51 *** empty log message ***
claus
parents: 81
diff changeset
  1540
    "
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  1541
     Image width:8
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1542
           height:8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1543
           depth:1
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1544
           fromArray:#[2r11001100
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1545
                       2r00110011
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1546
                       2r11001100
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1547
                       2r00110011
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1548
                       2r11001100
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1549
                       2r00110011
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1550
                       2r11001100
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1551
                       2r00110011].
82
98a70bce6d51 *** empty log message ***
claus
parents: 81
diff changeset
  1552
    "
98a70bce6d51 *** empty log message ***
claus
parents: 81
diff changeset
  1553
98a70bce6d51 *** empty log message ***
claus
parents: 81
diff changeset
  1554
    "
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  1555
     Image width:8
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1556
           height:8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1557
           depth:2
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1558
           fromArray:#[4r1100 4r1100
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1559
                       4r0011 4r0011
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1560
                       4r1100 4r1100
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1561
                       4r0011 4r0011
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1562
                       4r1100 4r1100
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1563
                       4r0011 4r0011
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1564
                       4r1100 4r1100
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1565
                       4r0011 4r0011].
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1566
    "
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1567
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1568
    "
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  1569
     Image width:8
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1570
           height:8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1571
           depth:4
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1572
           fromArray:#[16r00 16r01 16rf0 16rf1
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1573
                       16r02 16r03 16rf2 16rf3
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1574
                       16r04 16r05 16rf4 16rf5
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1575
                       16r06 16r07 16rf6 16rf7
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1576
                       16r08 16r09 16rf8 16rf9
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1577
                       16r0a 16r0b 16rfa 16rfb
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1578
                       16r0c 16r0d 16rfc 16rfd
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1579
                       16r0e 16r0f 16rfe 16rff].
7101
8c2377f29588 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 6900
diff changeset
  1580
    "
8c2377f29588 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 6900
diff changeset
  1581
8c2377f29588 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 6900
diff changeset
  1582
    "
8c2377f29588 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 6900
diff changeset
  1583
     Image width:8
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1584
           height:8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1585
           depth:16
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1586
           fromArray:#(1 1 1 1 1 1 1 1
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1587
                       2 2 2 2 2 2 2 2
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1588
                       3 3 3 3 3 3 3 3
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1589
                       4 4 4 4 4 4 4 4
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1590
                       5 5 5 5 5 5 5 5
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1591
                       6 6 6 6 6 6 6 6
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1592
                       7 7 7 7 7 7 7 7
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1593
                       8 8 8 8 8 8 8 8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1594
                      ) asWordArray.
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  1595
    "
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  1596
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  1597
    "Modified: 10.6.1996 / 18:18:10 / cg"
132
claus
parents: 125
diff changeset
  1598
!
claus
parents: 125
diff changeset
  1599
134
claus
parents: 132
diff changeset
  1600
width:w height:h depth:d fromArray:pixelData pad:padding
claus
parents: 132
diff changeset
  1601
    "create a new image, given width, height, depth and data.
claus
parents: 132
diff changeset
  1602
     Data must be a ByteArray containing correctly aligned bits for the specified
claus
parents: 132
diff changeset
  1603
     depth."
claus
parents: 132
diff changeset
  1604
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  1605
    |img newBits
2772
e8ceedf9aeab code cleanup & a few more SmallInteger type hints
Claus Gittinger <cg@exept.de>
parents: 2760
diff changeset
  1606
     srcRowBytes "{ Class: SmallInteger }"
e8ceedf9aeab code cleanup & a few more SmallInteger type hints
Claus Gittinger <cg@exept.de>
parents: 2760
diff changeset
  1607
     dstRowBytes "{ Class: SmallInteger }"
e8ceedf9aeab code cleanup & a few more SmallInteger type hints
Claus Gittinger <cg@exept.de>
parents: 2760
diff changeset
  1608
     nextDstIndex "{ Class: SmallInteger }"
2527
5391e6e2c8a6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2526
diff changeset
  1609
     srcIndex "{ Class: SmallInteger }"
5391e6e2c8a6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2526
diff changeset
  1610
     dstIndex "{ Class: SmallInteger }" |
134
claus
parents: 132
diff changeset
  1611
3259
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1612
    img := (self newForDepth:d) width:w height:h depth:d .
134
claus
parents: 132
diff changeset
  1613
4757
60d27f8e65bb some fixes for depth32
Claus Gittinger <cg@exept.de>
parents: 4745
diff changeset
  1614
    srcRowBytes := ((w * d + padding - 1) bitShift:-5) bitShift:2.
5341
ede63c3764ca *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5326
diff changeset
  1615
    dstRowBytes := img bytesPerRow.
ede63c3764ca *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5326
diff changeset
  1616
ede63c3764ca *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5326
diff changeset
  1617
    (padding ~~ 8 and:[(srcRowBytes \\ 4 ~~ 0) or:[srcRowBytes ~= dstRowBytes]]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1618
        "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
  1619
         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
  1620
        "
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1621
        dstRowBytes := img bytesPerRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1622
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1623
        newBits := ByteArray uninitializedNew:(dstRowBytes * h).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1624
        srcIndex := 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1625
        dstIndex := 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1626
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1627
        1 to:h do:[:row |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1628
            nextDstIndex := dstIndex + dstRowBytes.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1629
            newBits replaceFrom:dstIndex
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1630
                             to:(nextDstIndex - 1)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1631
                           with:pixelData
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1632
                     startingAt:srcIndex.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1633
            srcIndex := srcIndex + srcRowBytes.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1634
            dstIndex := nextDstIndex.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1635
        ].
134
claus
parents: 132
diff changeset
  1636
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1637
        pixelData class isBytes ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1638
            newBits := ByteArray withAll:pixelData
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1639
        ] ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1640
            newBits := pixelData
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1641
        ]
134
claus
parents: 132
diff changeset
  1642
    ].
claus
parents: 132
diff changeset
  1643
    img bits:newBits.
claus
parents: 132
diff changeset
  1644
    ^ img
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  1645
4757
60d27f8e65bb some fixes for depth32
Claus Gittinger <cg@exept.de>
parents: 4745
diff changeset
  1646
    "Modified: / 27-05-2007 / 14:01:32 / cg"
134
claus
parents: 132
diff changeset
  1647
!
claus
parents: 132
diff changeset
  1648
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1649
width:w height:h fromArray:anArray
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1650
    "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
  1651
     receiving class is Image.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1652
     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
  1653
     (i.e. 8 bits per byte)."
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1654
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  1655
    |cls d pixels|
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1656
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1657
    cls := self.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1658
    cls == Image ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1659
        cls := self implementorForDepth:1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1660
        d := 1.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1661
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1662
        d := cls imageDepth
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1663
    ].
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  1664
    anArray class isBytes ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1665
        pixels := ByteArray withAll:anArray
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  1666
    ] ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1667
        pixels := anArray
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  1668
    ].
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  1669
    ^ cls new width:w height:h depth:d fromArray:pixels
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  1670
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  1671
    "
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  1672
     Image width:8
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1673
           height:8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1674
           fromArray:#[2r11001100
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1675
                       2r00110011
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1676
                       2r11001100
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1677
                       2r00110011
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1678
                       2r11001100
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1679
                       2r00110011
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1680
                       2r11001100
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1681
                       2r00110011].
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  1682
    "
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  1683
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  1684
    "Modified: 8.6.1996 / 10:07:26 / cg"
6899
4530c3bfcef8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6896
diff changeset
  1685
!
4530c3bfcef8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6896
diff changeset
  1686
6900
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  1687
width:w height:h photometric:photometric
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  1688
    "create a new image, given width, height.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  1689
     Assume a depth of 1, unless an explicit imageClass is the receiver."
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  1690
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  1691
    |cls|
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  1692
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  1693
    cls := self.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  1694
    cls == Image ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1695
        cls := self implementorForDepth:1
6900
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  1696
    ].
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  1697
    ^ cls new width:w height:h; photometric:photometric; yourself
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  1698
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  1699
    "Modified: / 06-06-2007 / 11:10:55 / cg"
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  1700
!
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  1701
6899
4530c3bfcef8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6896
diff changeset
  1702
width:w height:h photometric:photometric bitsPerSample:bitsPerSample
4530c3bfcef8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6896
diff changeset
  1703
    "create a new image, given width, height.
4530c3bfcef8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6896
diff changeset
  1704
     Assume a depth of 1, unless an explicit imageClass is the receiver."
4530c3bfcef8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6896
diff changeset
  1705
4530c3bfcef8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6896
diff changeset
  1706
    |cls|
4530c3bfcef8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6896
diff changeset
  1707
4530c3bfcef8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6896
diff changeset
  1708
    cls := self.
4530c3bfcef8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6896
diff changeset
  1709
    cls == Image ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1710
        cls := self implementorForDepth:1
6899
4530c3bfcef8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6896
diff changeset
  1711
    ].
4530c3bfcef8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6896
diff changeset
  1712
    ^ cls new width:w height:h; photometric:photometric; bitsPerSample:bitsPerSample; yourself
4530c3bfcef8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6896
diff changeset
  1713
4530c3bfcef8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6896
diff changeset
  1714
    "Modified: / 06-06-2007 / 11:10:55 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1715
! !
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1716
1156
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  1717
!Image class methodsFor:'Signal constants'!
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  1718
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1719
badImageFormatQuerySignal
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1720
    "return the (query-) signal, which is raised if some
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1721
     bitmap-image could not be loaded due to an unrecognized format.
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1722
     If unhandled, the image-load returns nil.
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1723
     Otherwise, it returns whatever the handler proceeds with.
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1724
     The exception gets either the images fileName or an input stream
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1725
     as parameter"
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1726
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1727
    ^ BadImageFormatQuerySignal
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1728
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1729
    "Created: 1.2.1997 / 14:40:29 / cg"
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1730
!
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1731
1385
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1732
cannotRepresentImageSignal
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1733
    "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
  1734
     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
  1735
     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
  1736
     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
  1737
     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
  1738
     (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
  1739
     format then."
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
    ^ CannotRepresentImageSignal
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1742
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1743
    "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
  1744
!
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1745
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1746
fileCreationErrorSignal
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1747
    "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
  1748
     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
  1749
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1750
    ^ FileCreationErrorSignal
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1751
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1752
    "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
  1753
!
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1754
2380
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  1755
imageErrorSignal
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  1756
    "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
  1757
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  1758
    ^ ImageErrorSignal
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  1759
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  1760
    "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
  1761
!
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  1762
2678
e12976d7084b raise a query signal when a loadError happens;
Claus Gittinger <cg@exept.de>
parents: 2645
diff changeset
  1763
imageLoadErrorSignal
e12976d7084b raise a query signal when a loadError happens;
Claus Gittinger <cg@exept.de>
parents: 2645
diff changeset
  1764
    "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
  1765
e12976d7084b raise a query signal when a loadError happens;
Claus Gittinger <cg@exept.de>
parents: 2645
diff changeset
  1766
    ^ ImageLoadErrorSignal
e12976d7084b raise a query signal when a loadError happens;
Claus Gittinger <cg@exept.de>
parents: 2645
diff changeset
  1767
e12976d7084b raise a query signal when a loadError happens;
Claus Gittinger <cg@exept.de>
parents: 2645
diff changeset
  1768
    "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
  1769
!
e12976d7084b raise a query signal when a loadError happens;
Claus Gittinger <cg@exept.de>
parents: 2645
diff changeset
  1770
1156
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  1771
imageNotFoundQuerySignal
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  1772
    "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
  1773
     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
  1774
     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
  1775
     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
  1776
     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
  1777
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  1778
    ^ ImageNotFoundQuerySignal
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  1779
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  1780
    "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
  1781
!
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1782
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1783
imageSaveErrorSignal
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1784
    "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
  1785
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1786
    ^ ImageSaveErrorSignal
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1787
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1788
    "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
  1789
!
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1790
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1791
informationLostQuerySignal
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1792
    "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
  1793
     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
  1794
     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
  1795
     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
  1796
     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
  1797
     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
  1798
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1799
    ^ InformationLostQuerySignal
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1800
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1801
    "Created: 27.2.1997 / 12:43:50 / cg"
2182
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  1802
!
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  1803
8175
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1804
noMaskButAlphaSupportedQuerySignal
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1805
    "return the (query-) signal, which is raised if some
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1806
     bitmap-image with a mask is saved in a format which cannot represent
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1807
     the mask but instead supports an alpha channel.
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1808
     If unhandled, the image-save proceeds (with mask converted to alpha channel).
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1809
     Otherwise, the handler may show a warn box or whatever and decide
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1810
     to proceed or abort the saving."
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1811
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1812
    ^ NoMaskButAlphaSupportedQuerySignal
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1813
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1814
    "Created: / 13-09-2017 / 09:31:28 / cg"
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1815
!
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1816
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1817
noMaskSupportedQuerySignal
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1818
    "return the (query-) signal, which is raised if some
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1819
     bitmap-image with a mask is saved in a format which cannot represent
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1820
     the mask.
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1821
     If unhandled, the image-save proceeds (without mask).
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1822
     Otherwise, the handler may show a warn box or whatever and decide
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1823
     to proceed or abort the saving."
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1824
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1825
    ^ NoMaskSupportedQuerySignal
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1826
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1827
    "Created: / 13-09-2017 / 09:30:35 / cg"
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1828
!
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1829
2182
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  1830
unrepresentableColorSignal
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  1831
    "return the signal, which is raised if some color is not
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  1832
     representable in the image (when storing a pixel)."
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  1833
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  1834
    ^ UnrepresentableColorSignal
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  1835
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  1836
    "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
  1837
! !
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  1838
1230
279016623d5a resource release on display shutDown
Claus Gittinger <cg@exept.de>
parents: 1175
diff changeset
  1839
!Image class methodsFor:'cleanup'!
279016623d5a resource release on display shutDown
Claus Gittinger <cg@exept.de>
parents: 1175
diff changeset
  1840
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  1841
releaseResourcesOnDevice:aDevice
1230
279016623d5a resource release on display shutDown
Claus Gittinger <cg@exept.de>
parents: 1175
diff changeset
  1842
    "this is sent when a display connection is closed,
279016623d5a resource release on display shutDown
Claus Gittinger <cg@exept.de>
parents: 1175
diff changeset
  1843
     to release all cached Images from that device"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  1844
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  1845
    Lobby
7565
462e6f62c737 #FEATURE by stefan
Stefan Vogel <sv@exept.de>
parents: 7552
diff changeset
  1846
        unregisterAllForWhichHandle:[:eachImage |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1847
            |ok|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1848
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1849
            ok := eachImage graphicsDevice == aDevice.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1850
            ok ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1851
                eachImage releaseFromDevice
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1852
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1853
            ok
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1854
        ].
6390
f9a4a09ff2a1 class: Image
Stefan Vogel <sv@exept.de>
parents: 6379
diff changeset
  1855
7573
656c59bc93ad #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7565
diff changeset
  1856
    Icon notNil ifTrue:[
656c59bc93ad #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7565
diff changeset
  1857
        Icon releaseCachedIconsFromDevice:aDevice.
656c59bc93ad #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7565
diff changeset
  1858
    ].
656c59bc93ad #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7565
diff changeset
  1859
    MenuPanel notNil ifTrue:[
656c59bc93ad #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7565
diff changeset
  1860
        MenuPanel releaseCachedImagesFromDevice:aDevice.
656c59bc93ad #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7565
diff changeset
  1861
    ].
656c59bc93ad #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7565
diff changeset
  1862
656c59bc93ad #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7565
diff changeset
  1863
6390
f9a4a09ff2a1 class: Image
Stefan Vogel <sv@exept.de>
parents: 6379
diff changeset
  1864
    "
f9a4a09ff2a1 class: Image
Stefan Vogel <sv@exept.de>
parents: 6379
diff changeset
  1865
      self releaseResourcesOnDevice:Screen current
f9a4a09ff2a1 class: Image
Stefan Vogel <sv@exept.de>
parents: 6379
diff changeset
  1866
    "
1230
279016623d5a resource release on display shutDown
Claus Gittinger <cg@exept.de>
parents: 1175
diff changeset
  1867
279016623d5a resource release on display shutDown
Claus Gittinger <cg@exept.de>
parents: 1175
diff changeset
  1868
    "Created: 16.1.1997 / 19:30:44 / cg"
279016623d5a resource release on display shutDown
Claus Gittinger <cg@exept.de>
parents: 1175
diff changeset
  1869
    "Modified: 16.1.1997 / 19:33:49 / cg"
279016623d5a resource release on display shutDown
Claus Gittinger <cg@exept.de>
parents: 1175
diff changeset
  1870
! !
279016623d5a resource release on display shutDown
Claus Gittinger <cg@exept.de>
parents: 1175
diff changeset
  1871
1086
269243c32f69 added displayOpaque, for protocol completeness
Claus Gittinger <cg@exept.de>
parents: 1070
diff changeset
  1872
!Image class methodsFor:'file reading'!
650
14fc51fc3a4e comments
Claus Gittinger <cg@exept.de>
parents: 649
diff changeset
  1873
8845
6e7cbf194cd9 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8810
diff changeset
  1874
fromBase64Stream:aStream using:aReaderClass
6e7cbf194cd9 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8810
diff changeset
  1875
    "read an image from a base64 encoded stream, given an imageReaderClass.
6e7cbf194cd9 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8810
diff changeset
  1876
     Use this, if you know the file's format, but it has an invalid
6e7cbf194cd9 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8810
diff changeset
  1877
     extension (or non-definite header), so #fromStream: could not
6e7cbf194cd9 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8810
diff changeset
  1878
     find out the images format.
6e7cbf194cd9 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8810
diff changeset
  1879
     Return nil (or whatever a handler returned),
6e7cbf194cd9 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8810
diff changeset
  1880
     if the stream does not contain an appropriate image."
6e7cbf194cd9 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8810
diff changeset
  1881
6e7cbf194cd9 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8810
diff changeset
  1882
    |image|
6e7cbf194cd9 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8810
diff changeset
  1883
6e7cbf194cd9 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8810
diff changeset
  1884
    image := aReaderClass fromBase64Stream:aStream.
6e7cbf194cd9 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8810
diff changeset
  1885
    image notNil ifTrue:[^ image].
6e7cbf194cd9 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8810
diff changeset
  1886
6e7cbf194cd9 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8810
diff changeset
  1887
    "/ nope - unknown format
6e7cbf194cd9 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8810
diff changeset
  1888
    ^ ImageNotFoundQuerySignal
6e7cbf194cd9 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8810
diff changeset
  1889
                raiseRequestWith:aStream
6e7cbf194cd9 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8810
diff changeset
  1890
                errorString:('Image: unknown image file format in stream').
6e7cbf194cd9 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8810
diff changeset
  1891
6e7cbf194cd9 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8810
diff changeset
  1892
    "Created: 1.2.1997 / 14:46:20 / cg"
6e7cbf194cd9 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8810
diff changeset
  1893
    "Modified: 1.2.1997 / 14:48:53 / cg"
6e7cbf194cd9 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8810
diff changeset
  1894
!
6e7cbf194cd9 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8810
diff changeset
  1895
650
14fc51fc3a4e comments
Claus Gittinger <cg@exept.de>
parents: 649
diff changeset
  1896
fromFile:aFileName
14fc51fc3a4e comments
Claus Gittinger <cg@exept.de>
parents: 649
diff changeset
  1897
    "read an image from a file - this methods tries to find
14fc51fc3a4e comments
Claus Gittinger <cg@exept.de>
parents: 649
diff changeset
  1898
     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
  1899
     and lets the appropriate reader read the file.
6375
b31008047817 class: Image
Claus Gittinger <cg@exept.de>
parents: 6370
diff changeset
  1900
     Also, unless the path is absolute,
b31008047817 class: Image
Claus Gittinger <cg@exept.de>
parents: 6370
diff changeset
  1901
     all bitmap directories along the searchPath are checked
1143
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  1902
     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
  1903
     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
  1904
     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
  1905
     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
  1906
     proceed with some replacement image. If unhandled, nil is returned."
650
14fc51fc3a4e comments
Claus Gittinger <cg@exept.de>
parents: 649
diff changeset
  1907
8245
31034272db80 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8242
diff changeset
  1908
    |image fn nm inStream suffix mimeType readerClass
31034272db80 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8242
diff changeset
  1909
     decompressor readersErrorMsg|
650
14fc51fc3a4e comments
Claus Gittinger <cg@exept.de>
parents: 649
diff changeset
  1910
4159
d27c88bc4c79 Fix image reading
Stefan Vogel <sv@exept.de>
parents: 4158
diff changeset
  1911
    "before trying each reader, check if the file is readable"
d27c88bc4c79 Fix image reading
Stefan Vogel <sv@exept.de>
parents: 4158
diff changeset
  1912
6532
f50614a23989 class: Image
Stefan Vogel <sv@exept.de>
parents: 6507
diff changeset
  1913
    fn := aFileName asFilename.
f50614a23989 class: Image
Stefan Vogel <sv@exept.de>
parents: 6507
diff changeset
  1914
    fn isAbsolute ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1915
        inStream := Smalltalk systemFileStreamFor:fn.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1916
        inStream isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1917
            inStream := Smalltalk bitmapFileStreamFor:fn.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1918
            inStream isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1919
                "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
  1920
                 However, a handler may provide a replacement image."
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1921
                ^ ImageNotFoundQuerySignal
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1922
                            raiseRequestWith:fn
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1923
                            errorString:('Image: ''' , fn pathName, ''' does not exist or is not readable').
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1924
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1925
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1926
        fn := inStream pathName asFilename.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1927
        inStream close.
4843
36621a8aafd5 care for absolute filename when loading an image
Claus Gittinger <cg@exept.de>
parents: 4793
diff changeset
  1928
    ].
650
14fc51fc3a4e comments
Claus Gittinger <cg@exept.de>
parents: 649
diff changeset
  1929
4158
930761d24ab2 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4156
diff changeset
  1930
    nm := fn name.
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1931
    suffix := fn suffix.
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1932
4159
d27c88bc4c79 Fix image reading
Stefan Vogel <sv@exept.de>
parents: 4158
diff changeset
  1933
    "handle compressed-suffix"
8245
31034272db80 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8242
diff changeset
  1934
    mimeType := MIMETypes mimeTypeForSuffix:suffix.
8287
d6e2901d99f9 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8282
diff changeset
  1935
    "/ be backward compatible for a while; the x- names are deprecated (see https://www.iana.org/assignments/media-types/media-types.xhtml#application)
d6e2901d99f9 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8282
diff changeset
  1936
    ((mimeType = 'application/x-gzip-compressed') or:[mimeType = 'application/gzip']) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1937
        |baseFn|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1938
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1939
        baseFn := fn withoutSuffix.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1940
        nm := baseFn name.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1941
        suffix := baseFn suffix.
8245
31034272db80 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8242
diff changeset
  1942
        decompressor := ZipStream.
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1943
    ].
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1944
    suffix isEmpty ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1945
        suffix := nm.
1774
4241f730e0a6 fixed gunzipped image reading;
Claus Gittinger <cg@exept.de>
parents: 1771
diff changeset
  1946
    ].
4241f730e0a6 fixed gunzipped image reading;
Claus Gittinger <cg@exept.de>
parents: 1771
diff changeset
  1947
6507
05fb9b9d9e53 class: Image
Claus Gittinger <cg@exept.de>
parents: 6496
diff changeset
  1948
    "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
  1949
    readerClass := MIMETypes imageReaderForSuffix:suffix.
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1950
    readerClass notNil ifTrue:[
8245
31034272db80 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8242
diff changeset
  1951
        decompressor notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1952
            |zipStream|
8245
31034272db80 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8242
diff changeset
  1953
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1954
            inStream := fn readStream.
8245
31034272db80 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8242
diff changeset
  1955
            zipStream := decompressor readOpenOn:inStream suppressHeaderAndChecksum:true.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1956
            zipStream notNil ifTrue:[
8245
31034272db80 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8242
diff changeset
  1957
                image := 
31034272db80 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8242
diff changeset
  1958
                    [
31034272db80 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8242
diff changeset
  1959
                        readerClass fromStream:zipStream.
31034272db80 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8242
diff changeset
  1960
                    ] ensure:[
31034272db80 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8242
diff changeset
  1961
                        zipStream close.
31034272db80 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8242
diff changeset
  1962
                        inStream close.
31034272db80 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8242
diff changeset
  1963
                    ].
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1964
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1965
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1966
            BadImageFormatQuerySignal handle:[:ex |
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  1967
                BadImageFormatQuerySignal isHandled ifTrue:[
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  1968
                    ex reject
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  1969
                ].
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  1970
                readersErrorMsg := ex description.
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  1971
                Logger warning:readersErrorMsg.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1972
                image := nil.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1973
                ex return.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1974
            ] do:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1975
                image := readerClass fromFile:fn.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1976
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1977
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1978
        image notNil ifTrue:[^ image].
4159
d27c88bc4c79 Fix image reading
Stefan Vogel <sv@exept.de>
parents: 4158
diff changeset
  1979
    ].
d27c88bc4c79 Fix image reading
Stefan Vogel <sv@exept.de>
parents: 4158
diff changeset
  1980
d27c88bc4c79 Fix image reading
Stefan Vogel <sv@exept.de>
parents: 4158
diff changeset
  1981
    (readerClass isNil or:[readersErrorMsg notNil]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1982
        "no known extension (or wrong extension)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1983
         - ask all readers if they know this format ...
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1984
         ... these look into the file, and investigate the header.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1985
         therefore, it takes a bit longer."
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1986
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1987
        MIMETypes imageReaderClasses do:[:mimeReaderClass |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1988
            (mimeReaderClass notNil
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1989
            and:[mimeReaderClass ~~ readerClass]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1990
               (mimeReaderClass isValidImageFile:fn) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1991
                    image := mimeReaderClass fromFile:fn.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1992
                    image notNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1993
                        ^ image
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1994
                    ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1995
                ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1996
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1997
        ].
4159
d27c88bc4c79 Fix image reading
Stefan Vogel <sv@exept.de>
parents: 4158
diff changeset
  1998
    ].
d27c88bc4c79 Fix image reading
Stefan Vogel <sv@exept.de>
parents: 4158
diff changeset
  1999
7175
4bd37cf4075e #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7173
diff changeset
  2000
    (fn exists and:[fn isReadable]) ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2001
        ^ ImageNotFoundQuerySignal
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2002
                    raiseRequestWith:fn
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2003
                    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
  2004
    ].
61933c223183 added metaData instVar (for free use by image reader)
Claus Gittinger <cg@exept.de>
parents: 7363
diff changeset
  2005
4159
d27c88bc4c79 Fix image reading
Stefan Vogel <sv@exept.de>
parents: 4158
diff changeset
  2006
    "nope - unknown format
d27c88bc4c79 Fix image reading
Stefan Vogel <sv@exept.de>
parents: 4158
diff changeset
  2007
     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
  2008
     However, a handler may provide a replacement image."
d27c88bc4c79 Fix image reading
Stefan Vogel <sv@exept.de>
parents: 4158
diff changeset
  2009
3656
11670e0e6fcb invalid format notification fixed
Claus Gittinger <cg@exept.de>
parents: 3623
diff changeset
  2010
    ^ BadImageFormatQuerySignal
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2011
        raiseRequestWith:fn
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2012
        errorString:(readersErrorMsg ? ('Image: unknown image file format: ''' , fn pathName , '''')).
4159
d27c88bc4c79 Fix image reading
Stefan Vogel <sv@exept.de>
parents: 4158
diff changeset
  2013
d27c88bc4c79 Fix image reading
Stefan Vogel <sv@exept.de>
parents: 4158
diff changeset
  2014
    "
6532
f50614a23989 class: Image
Stefan Vogel <sv@exept.de>
parents: 6507
diff changeset
  2015
     Image fromFile:'bitmaps/gifImages/claus.gif' inPackage:'stx:goodies'
f50614a23989 class: Image
Stefan Vogel <sv@exept.de>
parents: 6507
diff changeset
  2016
     Image fromFile:'bitmaps/gifImages/garfield.gif' inPackage:'stx:goodies'
f50614a23989 class: Image
Stefan Vogel <sv@exept.de>
parents: 6507
diff changeset
  2017
f50614a23989 class: Image
Stefan Vogel <sv@exept.de>
parents: 6507
diff changeset
  2018
     Image fromFile:'bitmaps/winBitmaps/a11.ico' inPackage:'stx:goodies'
f50614a23989 class: Image
Stefan Vogel <sv@exept.de>
parents: 6507
diff changeset
  2019
     Image fromFile:'bitmaps/xpmBitmaps/countries/czech.xpm' inPackage:'stx:goodies'
f50614a23989 class: Image
Stefan Vogel <sv@exept.de>
parents: 6507
diff changeset
  2020
     Image fromFile:'bitmaps/xpmBitmaps/countries/czech.xpm.gz' inPackage:'stx:goodies'
f50614a23989 class: Image
Stefan Vogel <sv@exept.de>
parents: 6507
diff changeset
  2021
     Image fromFile:'Demos/bitmaps/hello_world.icon' inPackage:'stx:clients'
650
14fc51fc3a4e comments
Claus Gittinger <cg@exept.de>
parents: 649
diff changeset
  2022
    "
14fc51fc3a4e comments
Claus Gittinger <cg@exept.de>
parents: 649
diff changeset
  2023
1156
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  2024
    "
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  2025
     Image fromFile:'fooBar'
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  2026
    "
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  2027
1774
4241f730e0a6 fixed gunzipped image reading;
Claus Gittinger <cg@exept.de>
parents: 1771
diff changeset
  2028
    "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
  2029
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2030
     Image imageNotFoundQuerySignal
1156
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  2031
     handle:[:ex |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2032
        Transcript showCR:ex description.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2033
        ex proceedWith:nil
1156
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  2034
     ] do:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2035
         Image fromFile:'fooBar'
1156
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  2036
     ]
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  2037
    "
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  2038
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  2039
    "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
  2040
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2041
     Image imageNotFoundQuerySignal
4160
6d31e4e6a432 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4159
diff changeset
  2042
     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
  2043
     do:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2044
         Image fromFile:'fooBar'
1156
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  2045
     ]
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  2046
    "
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  2047
4843
36621a8aafd5 care for absolute filename when loading an image
Claus Gittinger <cg@exept.de>
parents: 4793
diff changeset
  2048
    "Modified: / 19-11-2007 / 15:50:52 / cg"
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  2049
    "Modified: / 31-01-2017 / 15:56:14 / stefan"
1051
5605bf1b10b9 allow reading from Streams
Claus Gittinger <cg@exept.de>
parents: 1043
diff changeset
  2050
!
5605bf1b10b9 allow reading from Streams
Claus Gittinger <cg@exept.de>
parents: 1043
diff changeset
  2051
3426
ebd06c83448e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3389
diff changeset
  2052
fromFile:aFileName inPackage:aPackage
ebd06c83448e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3389
diff changeset
  2053
    "read an image for a package from a file.
ebd06c83448e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3389
diff changeset
  2054
     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
  2055
     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
  2056
     and lets the appropriate reader read the file.
ebd06c83448e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3389
diff changeset
  2057
     Also, all bitmap directories along the searchPath are checked
ebd06c83448e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3389
diff changeset
  2058
     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
  2059
     separate directory, thereby overriding system bitmaps easily.
ebd06c83448e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3389
diff changeset
  2060
     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
  2061
     the ImageNotFoundQuerySignal is raised, which may be handled to
ebd06c83448e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3389
diff changeset
  2062
     proceed with some replacement image. If unhandled, nil is returned."
ebd06c83448e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3389
diff changeset
  2063
ebd06c83448e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3389
diff changeset
  2064
    ^ Smalltalk imageFromFileNamed:aFileName inPackage:aPackage
ebd06c83448e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3389
diff changeset
  2065
ebd06c83448e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3389
diff changeset
  2066
    "
4168
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
  2067
     Image fromFile:'libtool/bitmaps/SBrowser.xbm'
3426
ebd06c83448e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3389
diff changeset
  2068
     Image fromFile:'bitmaps/SBrowser.xbm' inPackage:'stx:libtool'
ebd06c83448e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3389
diff changeset
  2069
     Image fromFile:'garfield.gif' inPackage:'stx:goodies/bitmaps/gifImages'
ebd06c83448e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3389
diff changeset
  2070
    "
ebd06c83448e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3389
diff changeset
  2071
!
ebd06c83448e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3389
diff changeset
  2072
1143
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2073
fromFile:aFileName on:aDevice
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2074
    "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
  2075
     Return nil (or whatever a handler returned),
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2076
     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
  2077
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2078
    |img|
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2079
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2080
    img := self fromFile:aFileName.
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2081
    img notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2082
        ^ img onDevice:aDevice
1143
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2083
    ].
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2084
    ^ nil
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2085
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2086
    "Modified: 1.2.1997 / 14:48:07 / cg"
1143
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2087
!
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2088
1139
416e6abb408f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
  2089
fromFile:aFileName resolution:res
416e6abb408f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
  2090
    "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
  2091
     as appropriate (only req'd for very high resolution displays).
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2092
     Return nil (or whatever a handler returned),
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2093
     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
  2094
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2095
    ^ self fromFile:aFileName resolution:res on:nil
1139
416e6abb408f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
  2096
416e6abb408f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
  2097
    "Created: 19.12.1996 / 14:02:13 / cg"
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2098
    "Modified: 1.2.1997 / 14:48:16 / cg"
1139
416e6abb408f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
  2099
!
416e6abb408f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
  2100
1143
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2101
fromFile:aFileName resolution:dpi on:aDevice
1139
416e6abb408f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
  2102
    "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
  2103
     as appropriate (only req'd with very high resolution displays).
1143
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2104
     Prepare a device representation.
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2105
     Return nil (or whatever a handler returned),
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2106
     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
  2107
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2108
    |img dev dpiH mag|
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2109
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2110
    img := self fromFile:aFileName.
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2111
    img isNil ifTrue:[^ nil].
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2112
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2113
    "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
  2114
    dev := aDevice.
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2115
    dev isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2116
        "should not happen ..."
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2117
        dev := Screen current
1143
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2118
    ].
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2119
3059
0895d23678ac assume 90dpi in #fromFile:resolution: if there is no current display
Claus Gittinger <cg@exept.de>
parents: 3038
diff changeset
  2120
    dev notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2121
        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
  2122
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2123
        dpiH := 90
3059
0895d23678ac assume 90dpi in #fromFile:resolution: if there is no current display
Claus Gittinger <cg@exept.de>
parents: 3038
diff changeset
  2124
    ].
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  2125
    (dpi between:(dpiH * 0.75) and:(dpiH * 1.5)) ifTrue:[
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  2126
        ^ img
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  2127
    ].
1143
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2128
    mag := (dpiH / dpi) rounded.
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2129
    mag = 0 ifTrue:[^ img].
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2130
    mag = 1 ifTrue:[^ img].
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2131
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2132
    img := img magnifiedBy:(mag @ mag).
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2133
    aDevice notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2134
        ^ img onDevice:aDevice
1143
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2135
    ].
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2136
    ^ img
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2137
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  2138
    "Modified: / 01-02-1997 / 14:48:20 / cg"
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  2139
    "Modified (format): / 31-01-2017 / 15:06:23 / stefan"
1139
416e6abb408f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
  2140
!
416e6abb408f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
  2141
1051
5605bf1b10b9 allow reading from Streams
Claus Gittinger <cg@exept.de>
parents: 1043
diff changeset
  2142
fromStream:aStream
5605bf1b10b9 allow reading from Streams
Claus Gittinger <cg@exept.de>
parents: 1043
diff changeset
  2143
    "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
  2144
     out the file format itself (by contents)
5605bf1b10b9 allow reading from Streams
Claus Gittinger <cg@exept.de>
parents: 1043
diff changeset
  2145
     and lets the appropriate reader read the file.
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2146
     To do this, the stream must be positionable.
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2147
     Return nil (or whatever a handler returned),
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2148
     if the stream does not contain an appropriate image."
1051
5605bf1b10b9 allow reading from Streams
Claus Gittinger <cg@exept.de>
parents: 1043
diff changeset
  2149
1063
ba1bf8091bc1 unused variable cleanup
Claus Gittinger <cg@exept.de>
parents: 1057
diff changeset
  2150
    |image|
1051
5605bf1b10b9 allow reading from Streams
Claus Gittinger <cg@exept.de>
parents: 1043
diff changeset
  2151
5605bf1b10b9 allow reading from Streams
Claus Gittinger <cg@exept.de>
parents: 1043
diff changeset
  2152
    "
5605bf1b10b9 allow reading from Streams
Claus Gittinger <cg@exept.de>
parents: 1043
diff changeset
  2153
     ask all readers if they know
5605bf1b10b9 allow reading from Streams
Claus Gittinger <cg@exept.de>
parents: 1043
diff changeset
  2154
     this format ...
5605bf1b10b9 allow reading from Streams
Claus Gittinger <cg@exept.de>
parents: 1043
diff changeset
  2155
    "
1799
054302440308 moved all mime-knowledge to MIMETypes
Claus Gittinger <cg@exept.de>
parents: 1786
diff changeset
  2156
    MIMETypes imageReaderClasses do:[:readerClass |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2157
        readerClass notNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2158
            image := readerClass fromStream:aStream.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2159
            image notNil ifTrue:[^ image].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2160
        ]
1051
5605bf1b10b9 allow reading from Streams
Claus Gittinger <cg@exept.de>
parents: 1043
diff changeset
  2161
    ].
5605bf1b10b9 allow reading from Streams
Claus Gittinger <cg@exept.de>
parents: 1043
diff changeset
  2162
8845
6e7cbf194cd9 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8810
diff changeset
  2163
    "/ nope - unknown format
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2164
    ^ ImageNotFoundQuerySignal
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2165
                raiseRequestWith:aStream
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2166
                errorString:('Image [warning]: unknown image file format in stream').
4168
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
  2167
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
  2168
    "
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
  2169
     Image fromFile:'goodies/bitmaps/gifImages/claus.gif'
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
  2170
     Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
  2171
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
  2172
     Image fromFile:'clients/Animation/bitmaps/globe1.xbm'
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
  2173
     Image fromFile:'clients/Animation/bitmaps/globe1.xbm.Z'
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
  2174
     Image fromFile:'clients/Demos/bitmaps/hello_world.icon'
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
  2175
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
  2176
     Image fromFile:'librun/stx.ico'
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
  2177
     Image fromFile:'libwidg3/bitmaps/wall.tiff'
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
  2178
3476
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
  2179
     Image fromFile:'goodies/bitmaps/test.fax'
4168
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
  2180
     Image fromFile:'fileIn/bitmaps/founders.im8'
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
  2181
     Image fromFile:'goodies/faces/next.com/steve.face'
1051
5605bf1b10b9 allow reading from Streams
Claus Gittinger <cg@exept.de>
parents: 1043
diff changeset
  2182
    "
5605bf1b10b9 allow reading from Streams
Claus Gittinger <cg@exept.de>
parents: 1043
diff changeset
  2183
5605bf1b10b9 allow reading from Streams
Claus Gittinger <cg@exept.de>
parents: 1043
diff changeset
  2184
    "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
  2185
    "Modified: 30.6.1997 / 22:03:59 / cg"
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2186
!
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2187
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2188
fromStream:aStream using:aReaderClass
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2189
    "read an image from a stream, given an imageReaderClass.
6507
05fb9b9d9e53 class: Image
Claus Gittinger <cg@exept.de>
parents: 6496
diff changeset
  2190
     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
  2191
     extension (or non-definite header), so #fromStream: could not
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2192
     find out the images format.
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2193
     Return nil (or whatever a handler returned),
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2194
     if the stream does not contain an appropriate image."
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2195
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2196
    |image|
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2197
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2198
    image := aReaderClass fromStream:aStream.
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2199
    image notNil ifTrue:[^ image].
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2200
8845
6e7cbf194cd9 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8810
diff changeset
  2201
    "/ nope - unknown format
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2202
    ^ ImageNotFoundQuerySignal
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2203
                raiseRequestWith:aStream
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2204
                errorString:('Image: unknown image file format in stream').
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2205
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2206
    "Created: 1.2.1997 / 14:46:20 / cg"
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2207
    "Modified: 1.2.1997 / 14:48:53 / cg"
650
14fc51fc3a4e comments
Claus Gittinger <cg@exept.de>
parents: 649
diff changeset
  2208
! !
14fc51fc3a4e comments
Claus Gittinger <cg@exept.de>
parents: 649
diff changeset
  2209
1086
269243c32f69 added displayOpaque, for protocol completeness
Claus Gittinger <cg@exept.de>
parents: 1070
diff changeset
  2210
!Image class methodsFor:'misc'!
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2211
7898
05e286976596 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7895
diff changeset
  2212
bytesPerRowForWidth:width bitsPerPixel:bitsPerPixel
7899
c32cbefff86a #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7898
diff changeset
  2213
    "return the number of bytes in one scanline of an image.
c32cbefff86a #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7898
diff changeset
  2214
     (if there is no padding (except byte padding)"
7898
05e286976596 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7895
diff changeset
  2215
05e286976596 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7895
diff changeset
  2216
    |bitsPerRow bytesPerRow|
05e286976596 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7895
diff changeset
  2217
05e286976596 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7895
diff changeset
  2218
    bitsPerRow := width * bitsPerPixel.
05e286976596 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7895
diff changeset
  2219
    bytesPerRow := bitsPerRow // 8.
05e286976596 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7895
diff changeset
  2220
    ((bitsPerRow \\ 8) ~~ 0) ifTrue:[
05e286976596 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7895
diff changeset
  2221
        bytesPerRow := bytesPerRow + 1
05e286976596 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7895
diff changeset
  2222
    ].
05e286976596 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7895
diff changeset
  2223
    ^ bytesPerRow
05e286976596 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7895
diff changeset
  2224
05e286976596 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7895
diff changeset
  2225
    "Created: / 16-02-2017 / 16:17:42 / cg"
7899
c32cbefff86a #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7898
diff changeset
  2226
    "Modified (comment): / 16-02-2017 / 17:31:20 / cg"
7898
05e286976596 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7895
diff changeset
  2227
!
05e286976596 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7895
diff changeset
  2228
879
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  2229
ditherAlgorithm
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2230
    "return the way we dither -
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2231
        #threshold, or nil        -> no dither
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2232
        #pattern, or #ordered     -> orderedDither (ugly, but fast)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2233
        #error or #floydSteinberg -> errorDiffusion; much better
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2234
        #burkes                   -> errorDiffusion; even better."
879
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  2235
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  2236
    ^ DitherAlgorithm
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  2237
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  2238
    "Created: 17.6.1996 / 18:57:47 / cg"
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  2239
!
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  2240
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  2241
ditherAlgorithm:aSymbol
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2242
    "define how to dither -
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2243
        #threshold, or nil        -> no dither
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2244
        #pattern, or #ordered     -> orderedDither (ugly, but fast)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2245
        #error or #floydSteinberg -> errorDiffusion; much better
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2246
        #burkes                   -> errorDiffusion; even better."
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2247
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2248
    DitherAlgorithm := aSymbol
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2249
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  2250
    "
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  2251
     Image dither:#pattern
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  2252
     Image dither:#floydSteinberg
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  2253
     Image dither:#burkes
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  2254
     Image dither:nil
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  2255
    "
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  2256
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  2257
    "Modified: 10.6.1996 / 12:27:09 / cg"
879
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  2258
    "Created: 17.6.1996 / 18:57:19 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2259
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2260
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2261
numberOfDitherColors:n
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2262
    "define how many colors (i.e. patterns) to use when
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2263
     doing a pattern dither"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2264
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2265
    NumberOfDitherColors := n
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2266
!
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2267
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2268
orderedDitherMatrixOfSize:sz
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2269
    sz == 2 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2270
        ^ #[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2271
                0 2
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2272
                3 1
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2273
           ].
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2274
    ].
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2275
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2276
    sz == 4 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2277
        ^ #[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2278
                 0  8  2 10
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2279
                12  4 14  6
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2280
                 3 11  1  9
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2281
                15  7 13  5
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2282
           ].
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2283
    ].
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2284
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2285
    sz == 8 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2286
        ^  #[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2287
                0 32  8 40    2 34 10 42
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2288
               48 16 56 24   50 18 58 26
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2289
               12 44  4 36   14 46  6 38
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2290
               60 28 52 20   62 30 54 22
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2291
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2292
                3 35 11 43    1 33  9 41
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2293
               51 19 59 27   49 17 57 25
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2294
               15 47  7 39   13 45  5 37
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2295
               63 31 55 23   61 29 53 21
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2296
            ].
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2297
    ].
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2298
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2299
    ^ nil
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2300
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2301
    "Created: 7.6.1996 / 14:15:05 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2302
! !
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2303
1086
269243c32f69 added displayOpaque, for protocol completeness
Claus Gittinger <cg@exept.de>
parents: 1070
diff changeset
  2304
!Image class methodsFor:'queries'!
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2305
2005
525f712084b3 oops - padding stuff was wrong (16-bit display)
tz
parents: 2001
diff changeset
  2306
bytesPerRowForWidth:width depth:bitsPerPixel padding:padding
525f712084b3 oops - padding stuff was wrong (16-bit display)
tz
parents: 2001
diff changeset
  2307
    "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
  2308
     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
  2309
525f712084b3 oops - padding stuff was wrong (16-bit display)
tz
parents: 2001
diff changeset
  2310
    |bitsPerRow paddedUnitsPerRow|
525f712084b3 oops - padding stuff was wrong (16-bit display)
tz
parents: 2001
diff changeset
  2311
525f712084b3 oops - padding stuff was wrong (16-bit display)
tz
parents: 2001
diff changeset
  2312
    bitsPerRow := width * bitsPerPixel.
525f712084b3 oops - padding stuff was wrong (16-bit display)
tz
parents: 2001
diff changeset
  2313
    paddedUnitsPerRow := bitsPerRow // padding.
525f712084b3 oops - padding stuff was wrong (16-bit display)
tz
parents: 2001
diff changeset
  2314
    ((bitsPerRow \\ padding) ~~ 0) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2315
        paddedUnitsPerRow := paddedUnitsPerRow + 1
2005
525f712084b3 oops - padding stuff was wrong (16-bit display)
tz
parents: 2001
diff changeset
  2316
    ].
525f712084b3 oops - padding stuff was wrong (16-bit display)
tz
parents: 2001
diff changeset
  2317
    ^ paddedUnitsPerRow * (padding // 8)
525f712084b3 oops - padding stuff was wrong (16-bit display)
tz
parents: 2001
diff changeset
  2318
5126
d3f2baf80581 color conversions fixed (16bit images)
Claus Gittinger <cg@exept.de>
parents: 5074
diff changeset
  2319
    "
d3f2baf80581 color conversions fixed (16bit images)
Claus Gittinger <cg@exept.de>
parents: 5074
diff changeset
  2320
     self bytesPerRowForWidth:7 depth:1 padding:8
d3f2baf80581 color conversions fixed (16bit images)
Claus Gittinger <cg@exept.de>
parents: 5074
diff changeset
  2321
     self bytesPerRowForWidth:7 depth:1 padding:16
d3f2baf80581 color conversions fixed (16bit images)
Claus Gittinger <cg@exept.de>
parents: 5074
diff changeset
  2322
     self bytesPerRowForWidth:7 depth:1 padding:32
d3f2baf80581 color conversions fixed (16bit images)
Claus Gittinger <cg@exept.de>
parents: 5074
diff changeset
  2323
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 6037
diff changeset
  2324
     self bytesPerRowForWidth:15 depth:1 padding:8
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 6037
diff changeset
  2325
     self bytesPerRowForWidth:15 depth:1 padding:16
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 6037
diff changeset
  2326
     self bytesPerRowForWidth:15 depth:1 padding:32
5126
d3f2baf80581 color conversions fixed (16bit images)
Claus Gittinger <cg@exept.de>
parents: 5074
diff changeset
  2327
    "
2005
525f712084b3 oops - padding stuff was wrong (16-bit display)
tz
parents: 2001
diff changeset
  2328
!
525f712084b3 oops - padding stuff was wrong (16-bit display)
tz
parents: 2001
diff changeset
  2329
6797
161685b0d113 class: Image
Claus Gittinger <cg@exept.de>
parents: 6755
diff changeset
  2330
defaultImageFileWriter
161685b0d113 class: Image
Claus Gittinger <cg@exept.de>
parents: 6755
diff changeset
  2331
    "only used, if a file is saved with no particular extension
161685b0d113 class: Image
Claus Gittinger <cg@exept.de>
parents: 6755
diff changeset
  2332
     or explicit writer given.
161685b0d113 class: Image
Claus Gittinger <cg@exept.de>
parents: 6755
diff changeset
  2333
     For now, default to tiff format.
161685b0d113 class: Image
Claus Gittinger <cg@exept.de>
parents: 6755
diff changeset
  2334
     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
  2335
161685b0d113 class: Image
Claus Gittinger <cg@exept.de>
parents: 6755
diff changeset
  2336
    ^ TIFFReader
161685b0d113 class: Image
Claus Gittinger <cg@exept.de>
parents: 6755
diff changeset
  2337
!
161685b0d113 class: Image
Claus Gittinger <cg@exept.de>
parents: 6755
diff changeset
  2338
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  2339
defaultPhotometric
6311
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
  2340
    "return the default photometric pixel interpretation.
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
  2341
     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
  2342
     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
  2343
     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
  2344
     - 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
  2345
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  2346
    ^ #blackIs0
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  2347
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  2348
    "Modified: 20.4.1996 / 23:40:41 / cg"
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  2349
    "Created: 10.6.1996 / 18:08:12 / cg"
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  2350
!
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  2351
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2352
imageDepth
579
e381761190c4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 518
diff changeset
  2353
    "return the depth of images represented by instances of
e381761190c4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 518
diff changeset
  2354
     this class.
e381761190c4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 518
diff changeset
  2355
     Must be redefined in concrete subclasses"
e381761190c4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 518
diff changeset
  2356
2913
c51ac85e9aa2 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2891
diff changeset
  2357
    ^ self subclassResponsibility
579
e381761190c4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 518
diff changeset
  2358
e381761190c4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 518
diff changeset
  2359
    "Modified: 20.4.1996 / 23:40:41 / cg"
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  2360
!
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  2361
1306
d56585b0e8c0 checkin from browser
ca
parents: 1289
diff changeset
  2362
imageFileSuffixes
d56585b0e8c0 checkin from browser
ca
parents: 1289
diff changeset
  2363
    "return a collection of suffixes which are recognized as image-file suffix"
d56585b0e8c0 checkin from browser
ca
parents: 1289
diff changeset
  2364
1799
054302440308 moved all mime-knowledge to MIMETypes
Claus Gittinger <cg@exept.de>
parents: 1786
diff changeset
  2365
    ^ MIMETypes imageFileSuffixes
1306
d56585b0e8c0 checkin from browser
ca
parents: 1289
diff changeset
  2366
d56585b0e8c0 checkin from browser
ca
parents: 1289
diff changeset
  2367
    "
d56585b0e8c0 checkin from browser
ca
parents: 1289
diff changeset
  2368
     Image imageFileSuffixes
d56585b0e8c0 checkin from browser
ca
parents: 1289
diff changeset
  2369
    "
1799
054302440308 moved all mime-knowledge to MIMETypes
Claus Gittinger <cg@exept.de>
parents: 1786
diff changeset
  2370
054302440308 moved all mime-knowledge to MIMETypes
Claus Gittinger <cg@exept.de>
parents: 1786
diff changeset
  2371
    "Modified: 30.6.1997 / 22:04:39 / cg"
1306
d56585b0e8c0 checkin from browser
ca
parents: 1289
diff changeset
  2372
!
d56585b0e8c0 checkin from browser
ca
parents: 1289
diff changeset
  2373
1783
7a487f0d4000 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1782
diff changeset
  2374
imageReaderClassForMIME:mimeType
7a487f0d4000 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1782
diff changeset
  2375
    "return an appropriate imageReader class for a given mime type;
7a487f0d4000 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1782
diff changeset
  2376
     nil if there is none (or it did not install itself)"
7a487f0d4000 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1782
diff changeset
  2377
1801
3dff7fb2bd59 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1800
diff changeset
  2378
    ^ MIMETypes imageReaderForType:mimeType
1783
7a487f0d4000 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1782
diff changeset
  2379
7a487f0d4000 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1782
diff changeset
  2380
    "
7a487f0d4000 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1782
diff changeset
  2381
     Image imageReaderClassForMIME:'image/tiff'
7a487f0d4000 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1782
diff changeset
  2382
     Image imageReaderClassForMIME:'image/x-portable-pixmap'
7a487f0d4000 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1782
diff changeset
  2383
    "
7a487f0d4000 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1782
diff changeset
  2384
7a487f0d4000 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1782
diff changeset
  2385
    "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
  2386
    "Modified: 30.6.1997 / 21:54:10 / cg"
1783
7a487f0d4000 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1782
diff changeset
  2387
!
7a487f0d4000 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1782
diff changeset
  2388
1572
029910ee5c9e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1570
diff changeset
  2389
imageReaderClassForSuffix:aSuffix
1783
7a487f0d4000 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1782
diff changeset
  2390
    "return an appropriate imageReader class for a given file-suffix;
7a487f0d4000 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1782
diff changeset
  2391
     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
  2392
1799
054302440308 moved all mime-knowledge to MIMETypes
Claus Gittinger <cg@exept.de>
parents: 1786
diff changeset
  2393
    ^ MIMETypes imageReaderForSuffix:aSuffix
1572
029910ee5c9e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1570
diff changeset
  2394
029910ee5c9e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1570
diff changeset
  2395
    "
029910ee5c9e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1570
diff changeset
  2396
     Image imageReaderClassForSuffix:'tiff'
1783
7a487f0d4000 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1782
diff changeset
  2397
     Image imageReaderClassForSuffix:'foo'
7a487f0d4000 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1782
diff changeset
  2398
    "
7a487f0d4000 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1782
diff changeset
  2399
1799
054302440308 moved all mime-knowledge to MIMETypes
Claus Gittinger <cg@exept.de>
parents: 1786
diff changeset
  2400
    "Modified: 30.6.1997 / 22:05:14 / cg"
1572
029910ee5c9e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1570
diff changeset
  2401
!
029910ee5c9e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1570
diff changeset
  2402
399
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
  2403
implementorForDepth:depth
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2404
    "return the class, which best implements images of depth"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2405
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2406
    depth == 1 ifTrue:[^ Depth1Image].
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2407
    depth == 2 ifTrue:[^ Depth2Image].
1623
56c2fd4250c8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1611
diff changeset
  2408
    depth <= 4 ifTrue:[^ Depth4Image].
56c2fd4250c8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1611
diff changeset
  2409
    depth <= 8 ifTrue:[^ Depth8Image].
56c2fd4250c8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1611
diff changeset
  2410
    depth <= 16 ifTrue:[^ Depth16Image].
56c2fd4250c8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1611
diff changeset
  2411
    depth <= 24 ifTrue:[^ Depth24Image].
1664
42b1af0353c2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1662
diff changeset
  2412
    depth <= 32 ifTrue:[^ Depth32Image].
5299
6b1d1dcf5c85 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5237
diff changeset
  2413
    depth <= 48 ifTrue:[^ Depth48Image].
5313
7c40ea0163ee *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5299
diff changeset
  2414
    depth <= 64 ifTrue:[^ Depth64Image].
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2415
    ^ self
1664
42b1af0353c2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1662
diff changeset
  2416
42b1af0353c2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1662
diff changeset
  2417
    "Modified: 24.4.1997 / 19:04:52 / cg"
1611
8ec019a529b4 added convenient #isImageFileSuffix:
Claus Gittinger <cg@exept.de>
parents: 1608
diff changeset
  2418
!
8ec019a529b4 added convenient #isImageFileSuffix:
Claus Gittinger <cg@exept.de>
parents: 1608
diff changeset
  2419
7795
490b3691a124 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7755
diff changeset
  2420
isAbstract
490b3691a124 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7755
diff changeset
  2421
    ^ self == Image
490b3691a124 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7755
diff changeset
  2422
!
490b3691a124 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7755
diff changeset
  2423
1611
8ec019a529b4 added convenient #isImageFileSuffix:
Claus Gittinger <cg@exept.de>
parents: 1608
diff changeset
  2424
isImageFileSuffix:aSuffix
8ec019a529b4 added convenient #isImageFileSuffix:
Claus Gittinger <cg@exept.de>
parents: 1608
diff changeset
  2425
    "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
  2426
8ec019a529b4 added convenient #isImageFileSuffix:
Claus Gittinger <cg@exept.de>
parents: 1608
diff changeset
  2427
     ^ self imageFileSuffixes includes:(aSuffix asLowercase)
8ec019a529b4 added convenient #isImageFileSuffix:
Claus Gittinger <cg@exept.de>
parents: 1608
diff changeset
  2428
8ec019a529b4 added convenient #isImageFileSuffix:
Claus Gittinger <cg@exept.de>
parents: 1608
diff changeset
  2429
    "
8ec019a529b4 added convenient #isImageFileSuffix:
Claus Gittinger <cg@exept.de>
parents: 1608
diff changeset
  2430
     Image isImageFileSuffix:'gif'
8ec019a529b4 added convenient #isImageFileSuffix:
Claus Gittinger <cg@exept.de>
parents: 1608
diff changeset
  2431
     Image isImageFileSuffix:'xbm'
8ec019a529b4 added convenient #isImageFileSuffix:
Claus Gittinger <cg@exept.de>
parents: 1608
diff changeset
  2432
     Image isImageFileSuffix:'foo'
8ec019a529b4 added convenient #isImageFileSuffix:
Claus Gittinger <cg@exept.de>
parents: 1608
diff changeset
  2433
    "
8ec019a529b4 added convenient #isImageFileSuffix:
Claus Gittinger <cg@exept.de>
parents: 1608
diff changeset
  2434
8ec019a529b4 added convenient #isImageFileSuffix:
Claus Gittinger <cg@exept.de>
parents: 1608
diff changeset
  2435
    "Created: 18.4.1997 / 14:55:28 / cg"
1786
302b8208bf6c more mime stuff
Claus Gittinger <cg@exept.de>
parents: 1785
diff changeset
  2436
!
302b8208bf6c more mime stuff
Claus Gittinger <cg@exept.de>
parents: 1785
diff changeset
  2437
302b8208bf6c more mime stuff
Claus Gittinger <cg@exept.de>
parents: 1785
diff changeset
  2438
mimeTypeFromSuffix:suffix
302b8208bf6c more mime stuff
Claus Gittinger <cg@exept.de>
parents: 1785
diff changeset
  2439
    "search my suffix information for a mime type and
302b8208bf6c more mime stuff
Claus Gittinger <cg@exept.de>
parents: 1785
diff changeset
  2440
     return it; return nil if unknown"
302b8208bf6c more mime stuff
Claus Gittinger <cg@exept.de>
parents: 1785
diff changeset
  2441
1802
9a3d7c669727 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1801
diff changeset
  2442
    ^ MIMETypes mimeTypeForSuffix:suffix
1786
302b8208bf6c more mime stuff
Claus Gittinger <cg@exept.de>
parents: 1785
diff changeset
  2443
302b8208bf6c more mime stuff
Claus Gittinger <cg@exept.de>
parents: 1785
diff changeset
  2444
    "
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2445
     Image mimeTypeFromSuffix:'gif'
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2446
     Image mimeTypeFromSuffix:'tiff'
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2447
     Image mimeTypeFromSuffix:'foobar'
1786
302b8208bf6c more mime stuff
Claus Gittinger <cg@exept.de>
parents: 1785
diff changeset
  2448
    "
302b8208bf6c more mime stuff
Claus Gittinger <cg@exept.de>
parents: 1785
diff changeset
  2449
1802
9a3d7c669727 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1801
diff changeset
  2450
    "Modified: 1.7.1997 / 00:17:27 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2451
! !
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2452
1086
269243c32f69 added displayOpaque, for protocol completeness
Claus Gittinger <cg@exept.de>
parents: 1070
diff changeset
  2453
!Image class methodsFor:'screen capture'!
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2454
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2455
fromScreen
1488
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  2456
    "return an image of the full screen.
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  2457
     WARNING: this temporarily grabs the display
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2458
              it may not work from within a buttonMotion
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2459
              (use #fromScreen:on:grab: with a false grabArg then)."
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2460
7966
52449eb9f442 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7962
diff changeset
  2461
    |display bounds|
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2462
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2463
    display := Screen current.
8879
002477324b37 #FEATURE by Stefan Reise
sr
parents: 8869
diff changeset
  2464
9013
60f67817f21c #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8954
diff changeset
  2465
    bounds := 0@0 corner:(display monitorRealResolutionByPoint:0@0). "/ use the center monitor
8868
4c1ec0e9e354 #BUGFIX by Stefan Reise
sr
parents: 8847
diff changeset
  2466
7966
52449eb9f442 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7962
diff changeset
  2467
    OperatingSystem isOSXlike ifTrue:[
52449eb9f442 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7962
diff changeset
  2468
        "/ sigh: XQuartz does not include the dock
52449eb9f442 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7962
diff changeset
  2469
        display == Display ifTrue:[
8954
6fc0999d2a8c #BUGFIX by exept
Claus Gittinger <cg@exept.de>
parents: 8928
diff changeset
  2470
            PrimitiveFailure catch:[
6fc0999d2a8c #BUGFIX by exept
Claus Gittinger <cg@exept.de>
parents: 8928
diff changeset
  2471
                bounds := OperatingSystem getScreenBounds:0
6fc0999d2a8c #BUGFIX by exept
Claus Gittinger <cg@exept.de>
parents: 8928
diff changeset
  2472
            ].    
7966
52449eb9f442 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7962
diff changeset
  2473
        ].    
52449eb9f442 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7962
diff changeset
  2474
    ].
52449eb9f442 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7962
diff changeset
  2475
    
52449eb9f442 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7962
diff changeset
  2476
    ^ 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
  2477
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
  2478
    "
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
  2479
     Image fromScreen
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2480
     Image fromScreen inspect
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2481
    "
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2482
7967
fa34f3731d4e #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7966
diff changeset
  2483
    "Modified: / 06-03-2017 / 14:48:42 / cg"
8891
ca090c70a4de #REFACTORING by Stefan Reise
sr
parents: 8882
diff changeset
  2484
    "Modified: / 25-11-2019 / 12:19:21 / Stefan Reise"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2485
!
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
fromScreen:aRectangle
1488
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  2488
    "return an image of a part of the screen.
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  2489
     WARNING: this temporarily grabs the display
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2490
              it may not work from within a buttonMotion
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2491
              (use #fromScreen:on:grab: with a false grabArg then)."
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2492
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2493
    ^ self
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2494
        fromScreen:aRectangle
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2495
        on:Screen current
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2496
        grab:true
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2497
401
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
  2498
    "
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
  2499
     Image fromScreen:(0@0 corner:100@100)
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2500
     (Image fromScreen:(0@0 corner:100@100)) inspect
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2501
    "
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2502
1488
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  2503
    "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
  2504
!
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2505
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2506
fromScreen:aRectangle on:aDevice
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2507
    "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
  2508
     another display device.
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  2509
     WARNING: this temporarily grabs the display
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2510
              it may not work from within a buttonMotion
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2511
              (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
  2512
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2513
    ^ self
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2514
        fromScreen:aRectangle
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2515
        on:aDevice
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2516
        grab:true
1487
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2517
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2518
    "
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2519
     Image fromScreen:(0@0 corner:100@100)
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2520
    "
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2521
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2522
    "get a snapshot of your friends screen ...
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2523
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2524
     |dpy2|
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2525
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2526
     dpy2 := XWorkstation new initializeFor:'idefix:0'.
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2527
     (Image fromScreen:(dpy2 bounds) on:dpy2) inspect
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2528
    "
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2529
1488
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  2530
    "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
  2531
!
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2532
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2533
fromScreen:aRectangle on:aDisplay grab:doGrab
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2534
    "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
  2535
     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
  2536
     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
  2537
     shown while the readout is done.
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  2538
     WARNING: with doGrab true, this temporarily grabs the display
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2539
              and it may not work from within a buttonMotion
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2540
              (use with a false grabArg then)."
7230
71910d55d08c #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7227
diff changeset
  2541
71910d55d08c #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7227
diff changeset
  2542
    |depth vis img tmpFile util|
71910d55d08c #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7227
diff changeset
  2543
71910d55d08c #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7227
diff changeset
  2544
    aDisplay supportsScreenReading ifFalse:[
7962
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2545
        "/ workaround (fast): look if there is an OS-hook for this...
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2546
        OperatingSystem isOSXlike ifTrue:[
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2547
            Error handle:[:ex |
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2548
                img := nil
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2549
            ] do:[
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2550
                img := OperatingSystem getFrameBufferImage:0 in:aRectangle
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2551
            ].
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2552
        ].
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2553
        img isNil ifTrue:[
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2554
            "/ workaround (slow): look for a helper utility in support/<os>/screenshot
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2555
            "/ currently there is one for osx.
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2556
            tmpFile := Filename newTemporary withSuffix:'png'.
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2557
            util := Smalltalk packageDirectory asFilename / ('../support/',OperatingSystem getSystemType,'/screenshot').
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2558
            util exists ifTrue:[
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2559
                OperatingSystem executeCommand:('%1 %2 png %3 %4 %5 %6'
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2560
                                                    bindWith:util pathName
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2561
                                                    with:tmpFile pathName
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2562
                                                    with:aRectangle left
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2563
                                                    with:aRectangle top
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2564
                                                    with:aRectangle width
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2565
                                                    with:aRectangle height).
8524
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  2566
                img := [Image fromFile:tmpFile] ensure:[tmpFile remove].
7962
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2567
            ].
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2568
        ].
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2569
        ^ img
7230
71910d55d08c #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7227
diff changeset
  2570
    ].
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2571
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2572
    depth := aDisplay depth.
401
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
  2573
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
  2574
    "/
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
  2575
    "/ 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
  2576
    "/ (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
  2577
    "/  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
  2578
    "/
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
  2579
    vis := aDisplay visualType.
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
  2580
    (vis == #TrueColor or:[vis == #DirectColor]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2581
        depth > 8 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2582
            depth := 24.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2583
        ]
401
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
  2584
    ].
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
  2585
3259
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  2586
    img := self newForDepth:depth.
1487
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2587
    ^ img fromScreen:aRectangle on:aDisplay grab:doGrab
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2588
7962
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2589
    "
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2590
     Image fromScreen:(0@0 corner:100@100)
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2591
    "
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2592
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  2593
    "Modified: / 30-01-2017 / 19:49:01 / stefan"
7962
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2594
    "Modified (comment): / 26-02-2017 / 18:24:41 / cg"
8524
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  2595
    "Modified: / 19-10-2018 / 16:10:41 / Stefan Vogel"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2596
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2597
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2598
fromScreenArea
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2599
    "return an image of a part of the screen;
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2600
     let user specify screen area.
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2601
     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
  2602
     Use #fromUser for ST-80 compatibility.
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  2603
     WARNING: this temporarily grabs the display
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2604
              it may not work from within a buttonMotion
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2605
              (use #fromScreen:on:grab: with a false grabArg then)."
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2606
2102
7c7d11aa956e care for empty rectangle in Image>>fromScreenArea
Claus Gittinger <cg@exept.de>
parents: 2081
diff changeset
  2607
    |r|
7c7d11aa956e care for empty rectangle in Image>>fromScreenArea
Claus Gittinger <cg@exept.de>
parents: 2081
diff changeset
  2608
2323
bf88727c4dee wait until button is released in #fromUser.
Claus Gittinger <cg@exept.de>
parents: 2311
diff changeset
  2609
    [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
  2610
    r := Rectangle fromUser.
7c7d11aa956e care for empty rectangle in Image>>fromScreenArea
Claus Gittinger <cg@exept.de>
parents: 2081
diff changeset
  2611
    r width == 0 ifTrue:[^ nil].
7c7d11aa956e care for empty rectangle in Image>>fromScreenArea
Claus Gittinger <cg@exept.de>
parents: 2081
diff changeset
  2612
    r height == 0 ifTrue:[^ nil].
8869
11b97ffd3d3b #BUGFIX by Stefan Reise
sr
parents: 8868
diff changeset
  2613
    ^ self fromScreen:r
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2614
401
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
  2615
    "
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
  2616
     Image fromScreenArea
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2617
     Image fromScreenArea inspect
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2618
    "
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2619
8869
11b97ffd3d3b #BUGFIX by Stefan Reise
sr
parents: 8868
diff changeset
  2620
    "Modified: / 10.9.1998 / 15:59:58 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2621
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2622
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2623
fromUser
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2624
    "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
  2625
     Same as fromScreenArea, for ST-80 compatibility.
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  2626
     WARNING: this temporarily grabs the display
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2627
              it may not work from within a buttonMotion
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2628
              (use #fromScreen:on:grab: with a false grabArg then)."
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2629
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2630
    ^ self fromScreenArea
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2631
401
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
  2632
    "
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
  2633
     Image fromUser
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2634
     Image fromUser inspect
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2635
    "
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2636
1488
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  2637
    "Modified: 26.3.1997 / 10:45:25 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2638
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2639
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2640
fromView:aView
8152
aa729f2a2a58 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8141
diff changeset
  2641
    "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
  2642
     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
  2643
     as the Display.
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  2644
     Notice that for invisible or partial covered views,
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2645
     the returned Image is NOT correct.
1488
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  2646
     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
  2647
     WARNING: this temporarily grabs the display
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  2648
              it may not work from within a buttonMotion
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  2649
              (use #fromView:grab: with a false grabArg then)."
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2650
8152
aa729f2a2a58 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8141
diff changeset
  2651
    ^ self fromView:aView grab:true
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  2652
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  2653
    "
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2654
     Image fromView:(Launcher allInstances first window topView)
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2655
     Image fromView:(BrowserView allInstances first topView)
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2656
    "
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2657
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2658
    "get a snapshot from whichever view is active:
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2659
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2660
     |active|
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2661
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2662
     active := WindowGroup activeGroup topViews first.
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2663
     (Image fromView:active) inspect
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2664
    "
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2665
8152
aa729f2a2a58 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8141
diff changeset
  2666
    "Modified: / 09-09-1996 / 22:41:01 / stefan"
aa729f2a2a58 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8141
diff changeset
  2667
    "Modified: / 26-03-1997 / 10:45:40 / cg"
aa729f2a2a58 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8141
diff changeset
  2668
    "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
  2669
!
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2670
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2671
fromView:aView grab:doGrab
8152
aa729f2a2a58 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8141
diff changeset
  2672
    "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
  2673
     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
  2674
     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
  2675
     shown while the readout is done.
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2676
     The returned image has the same depth and photometric
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2677
     as the Display.
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  2678
     Notice that for invisible or partial covered views,
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2679
     the returned Image is NOT correct.
1488
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  2680
     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
  2681
     WARNING: with doGrab true, this temporarily grabs the display
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  2682
              and it may not work from within a buttonMotion
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  2683
              (use with a false grabArg then)."
4540
abe9a008966e added functionality to grab a window incl. caption-border
ps
parents: 4423
diff changeset
  2684
abe9a008966e added functionality to grab a window incl. caption-border
ps
parents: 4423
diff changeset
  2685
    ^ self fromView:aView grab:doGrab withDecoration:false
abe9a008966e added functionality to grab a window incl. caption-border
ps
parents: 4423
diff changeset
  2686
8152
aa729f2a2a58 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8141
diff changeset
  2687
    "Created: / 26-03-1997 / 10:34:20 / cg"
aa729f2a2a58 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8141
diff changeset
  2688
    "Modified: / 10-10-2001 / 14:13:29 / cg"
aa729f2a2a58 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8141
diff changeset
  2689
    "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
  2690
!
abe9a008966e added functionality to grab a window incl. caption-border
ps
parents: 4423
diff changeset
  2691
abe9a008966e added functionality to grab a window incl. caption-border
ps
parents: 4423
diff changeset
  2692
fromView:aView grab:doGrab withDecoration:withDecoration
8152
aa729f2a2a58 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8141
diff changeset
  2693
    "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
  2694
     on the screen, optionally with decoration included.
4540
abe9a008966e added functionality to grab a window incl. caption-border
ps
parents: 4423
diff changeset
  2695
     If the doGrab argument is true, the display
abe9a008966e added functionality to grab a window incl. caption-border
ps
parents: 4423
diff changeset
  2696
     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
  2697
     shown while the readout is done.
abe9a008966e added functionality to grab a window incl. caption-border
ps
parents: 4423
diff changeset
  2698
     The returned image has the same depth and photometric
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2699
     as the Display.
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  2700
     Notice that for invisible or partial covered views,
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2701
     the returned Image is NOT correct.
4540
abe9a008966e added functionality to grab a window incl. caption-border
ps
parents: 4423
diff changeset
  2702
     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
  2703
     WARNING: with doGrab true, this temporarily grabs the display
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  2704
              and it may not work from within a buttonMotion
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  2705
              (use with a false grabArg then)."
4540
abe9a008966e added functionality to grab a window incl. caption-border
ps
parents: 4423
diff changeset
  2706
7271
3d35b4e39ec4 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 7242
diff changeset
  2707
    |org ext viewsDevice cH bW bH|
3d35b4e39ec4 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 7242
diff changeset
  2708
3d35b4e39ec4 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 7242
diff changeset
  2709
    viewsDevice := aView graphicsDevice.
3d35b4e39ec4 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 7242
diff changeset
  2710
    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
  2711
    ext := aView extent.
abe9a008966e added functionality to grab a window incl. caption-border
ps
parents: 4423
diff changeset
  2712
    withDecoration ifTrue:[
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  2713
        viewsDevice isWindowsPlatform ifTrue:[
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  2714
            cH := viewsDevice captionHeight.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  2715
            bW := (viewsDevice getSystemMetrics: #SM_CXFRAME )
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  2716
                  "+ ( device getSystemMetrics: #borderFrameWidth )".
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  2717
            bH := (viewsDevice getSystemMetrics: #SM_CYFRAME )
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  2718
                  " + ( device getSystemMetrics: #borderFrameHeight )".
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  2719
            org := org - (bW @ (bH + cH)).
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  2720
            ext := ext + ((bW + bW) @ (bH+bH+cH)).
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  2721
        ].
4540
abe9a008966e added functionality to grab a window incl. caption-border
ps
parents: 4423
diff changeset
  2722
    ].
7271
3d35b4e39ec4 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 7242
diff changeset
  2723
    ^ 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
  2724
abe9a008966e added functionality to grab a window incl. caption-border
ps
parents: 4423
diff changeset
  2725
    "
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2726
     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
  2727
     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
  2728
    "
3518
983e7730a905 use new translatePoint:fromView:toView:
Claus Gittinger <cg@exept.de>
parents: 3507
diff changeset
  2729
4574
4b65895bbb6b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4565
diff changeset
  2730
    "Created: / 26-03-1997 / 10:34:20 / cg"
4b65895bbb6b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4565
diff changeset
  2731
    "Modified: / 08-09-2006 / 15:41:41 / cg"
8152
aa729f2a2a58 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8141
diff changeset
  2732
    "Modified (comment): / 31-08-2017 / 20:14:53 / cg"
157
claus
parents: 154
diff changeset
  2733
! !
claus
parents: 154
diff changeset
  2734
3880
c4c8268a2d9f method category rename
Claus Gittinger <cg@exept.de>
parents: 3876
diff changeset
  2735
!Image methodsFor:'Compatibility-Squeak'!
3475
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2736
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2737
boundingBox
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2738
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2739
    ^ self bounds
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2740
!
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2741
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2742
colormapIfNeededForDepth:d
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2743
    ^ nil
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2744
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2745
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2746
!
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2747
6308
6e4008b97f64 class: Image
Claus Gittinger <cg@exept.de>
parents: 6305
diff changeset
  2748
colorsFromArray:anArrayOfRGBTriples
6e4008b97f64 class: Image
Claus Gittinger <cg@exept.de>
parents: 6305
diff changeset
  2749
    "for squeak compatibility with ColorForm:
6e4008b97f64 class: Image
Claus Gittinger <cg@exept.de>
parents: 6305
diff changeset
  2750
     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
  2751
6e4008b97f64 class: Image
Claus Gittinger <cg@exept.de>
parents: 6305
diff changeset
  2752
    |newMap|
6e4008b97f64 class: Image
Claus Gittinger <cg@exept.de>
parents: 6305
diff changeset
  2753
6e4008b97f64 class: Image
Claus Gittinger <cg@exept.de>
parents: 6305
diff changeset
  2754
    newMap := Colormap new:anArrayOfRGBTriples size.
6e4008b97f64 class: Image
Claus Gittinger <cg@exept.de>
parents: 6305
diff changeset
  2755
    anArrayOfRGBTriples doWithIndex:[:rgb :i |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2756
        newMap at:i putRGBTriple:rgb
6308
6e4008b97f64 class: Image
Claus Gittinger <cg@exept.de>
parents: 6305
diff changeset
  2757
    ].
6e4008b97f64 class: Image
Claus Gittinger <cg@exept.de>
parents: 6305
diff changeset
  2758
    self colorMap:newMap.
6e4008b97f64 class: Image
Claus Gittinger <cg@exept.de>
parents: 6305
diff changeset
  2759
6e4008b97f64 class: Image
Claus Gittinger <cg@exept.de>
parents: 6305
diff changeset
  2760
    "
6e4008b97f64 class: Image
Claus Gittinger <cg@exept.de>
parents: 6305
diff changeset
  2761
     Depth8Image new
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2762
        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
  2763
    "
6e4008b97f64 class: Image
Claus Gittinger <cg@exept.de>
parents: 6305
diff changeset
  2764
!
6e4008b97f64 class: Image
Claus Gittinger <cg@exept.de>
parents: 6305
diff changeset
  2765
3475
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2766
fill:aRectangle fillColor:aColor
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2767
    "fill the rectangular area specified by aRectangle with the given color"
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2768
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2769
    self fillRectangle:aRectangle withColor:aColor
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2770
!
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2771
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2772
fillBlack:aRectangle
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2773
    "fill the rectangular area specified by aRectangle with the black color"
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2774
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2775
    self fillRectangle:aRectangle withColor:Color black
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2776
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2777
    "
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2778
     |img|
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2779
     img := Image extent:100@100 depth:24.
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2780
     img photometric:#rgb.
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2781
     img data:(ByteArray new:100*100*3).
3475
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2782
     img fillWhite:(0@0 corner:100@100).
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2783
     img fillBlack:(10@10 corner:90@90).
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2784
     img inspect.
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2785
    "
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2786
!
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2787
8301
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
  2788
fillRectangle:aRectangle color:aColor
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
  2789
    "fill the rectangular area specified by aRectangle with the given color"
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
  2790
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
  2791
    self fillRectangle:aRectangle withColor:aColor
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
  2792
!
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
  2793
3475
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2794
fillWhite:aRectangle
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2795
    "fill the rectangular area specified by aRectangle with the white color"
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2796
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2797
    self fillRectangle:aRectangle withColor:Color white
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2798
!
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2799
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2800
isTransparentAt:aPoint
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2801
    mask isNil ifTrue:[ ^ false].
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2802
    ^ (mask pixelAt:aPoint) == 0
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2803
! !
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2804
3880
c4c8268a2d9f method category rename
Claus Gittinger <cg@exept.de>
parents: 3876
diff changeset
  2805
!Image methodsFor:'Compatibility-VW'!
1279
09eef854916c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1276
diff changeset
  2806
09eef854916c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1276
diff changeset
  2807
asCachedImage
09eef854916c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1276
diff changeset
  2808
    "return the receiver associated to the current screens device.
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2809
     For ST-80 compatibility
1279
09eef854916c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1276
diff changeset
  2810
     (ST/X uses Image for both device- and nonDevice-images)"
09eef854916c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1276
diff changeset
  2811
2832
793500016a2b #on: -> #onDevice:
Claus Gittinger <cg@exept.de>
parents: 2801
diff changeset
  2812
    ^ self onDevice:Screen current
1279
09eef854916c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1276
diff changeset
  2813
09eef854916c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1276
diff changeset
  2814
    "Modified: 23.4.1996 / 11:10:32 / cg"
09eef854916c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1276
diff changeset
  2815
!
09eef854916c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1276
diff changeset
  2816
09eef854916c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1276
diff changeset
  2817
asRetainedMedium
09eef854916c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1276
diff changeset
  2818
    "return the receiver associated to the current screens device.
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2819
     For ST-80 compatibility
1279
09eef854916c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1276
diff changeset
  2820
     (ST/X uses Image for both device- and nonDevice-images)"
09eef854916c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1276
diff changeset
  2821
2832
793500016a2b #on: -> #onDevice:
Claus Gittinger <cg@exept.de>
parents: 2801
diff changeset
  2822
    ^ self onDevice:Screen current
1279
09eef854916c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1276
diff changeset
  2823
09eef854916c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1276
diff changeset
  2824
    "Modified: 23.4.1996 / 11:10:32 / cg"
09eef854916c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1276
diff changeset
  2825
    "Created: 27.1.1997 / 15:49:08 / cg"
1325
3c09b139de30 more st80 compatibility
Claus Gittinger <cg@exept.de>
parents: 1309
diff changeset
  2826
!
3c09b139de30 more st80 compatibility
Claus Gittinger <cg@exept.de>
parents: 1309
diff changeset
  2827
3c09b139de30 more st80 compatibility
Claus Gittinger <cg@exept.de>
parents: 1309
diff changeset
  2828
bounds:newBounds
3c09b139de30 more st80 compatibility
Claus Gittinger <cg@exept.de>
parents: 1309
diff changeset
  2829
    ^ self
3c09b139de30 more st80 compatibility
Claus Gittinger <cg@exept.de>
parents: 1309
diff changeset
  2830
3c09b139de30 more st80 compatibility
Claus Gittinger <cg@exept.de>
parents: 1309
diff changeset
  2831
    "Created: 10.2.1997 / 12:44:46 / cg"
3c09b139de30 more st80 compatibility
Claus Gittinger <cg@exept.de>
parents: 1309
diff changeset
  2832
!
3c09b139de30 more st80 compatibility
Claus Gittinger <cg@exept.de>
parents: 1309
diff changeset
  2833
1433
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  2834
containsPoint:aPoint
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  2835
    "in st-80, images are visualComponents ..."
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  2836
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  2837
    ^ self bounds containsPoint:aPoint
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  2838
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  2839
    "Created: 6.3.1997 / 15:24:12 / cg"
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  2840
!
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  2841
1403
4b132381579e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1386
diff changeset
  2842
convertToPalette:aColormap renderedBy:anImageRenderer
4b132381579e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1386
diff changeset
  2843
    "this does not really mimicri the corresponding ST-80 functionality"
4b132381579e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1386
diff changeset
  2844
4b132381579e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1386
diff changeset
  2845
    |monoBits convertedImage|
4b132381579e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1386
diff changeset
  2846
4b132381579e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1386
diff changeset
  2847
    aColormap size == 2 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2848
        anImageRenderer class == OrderedDither ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2849
            monoBits := self orderedDitheredMonochromeBits.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2850
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2851
            monoBits := self floydSteinbergDitheredMonochromeBits.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2852
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2853
        (((aColormap at:1) = Color black)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2854
        and:[(aColormap at:2) = Color white]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2855
            "/ ok
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2856
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2857
            (((aColormap at:1) = Color white)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2858
            and:[(aColormap at:2) = Color black]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2859
                monoBits invert
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2860
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2861
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2862
        convertedImage := Depth1Image width:width height:height fromArray:monoBits.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2863
        convertedImage palette:aColormap.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2864
        ^ convertedImage
1403
4b132381579e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1386
diff changeset
  2865
    ].
4b132381579e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1386
diff changeset
  2866
4b132381579e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1386
diff changeset
  2867
    self error:'unimplemented operation'.
4b132381579e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1386
diff changeset
  2868
    ^ self
4b132381579e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1386
diff changeset
  2869
4b132381579e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1386
diff changeset
  2870
    "Modified: 1.3.1997 / 17:25:50 / cg"
4b132381579e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1386
diff changeset
  2871
!
4b132381579e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1386
diff changeset
  2872
1433
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  2873
paintBasis
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  2874
    "huh - whats that;
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  2875
     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
  2876
     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
  2877
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  2878
    ^ ColorValue
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  2879
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  2880
    "Created: 6.3.1997 / 15:24:19 / cg"
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  2881
!
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  2882
1325
3c09b139de30 more st80 compatibility
Claus Gittinger <cg@exept.de>
parents: 1309
diff changeset
  2883
preferredBounds
3c09b139de30 more st80 compatibility
Claus Gittinger <cg@exept.de>
parents: 1309
diff changeset
  2884
    ^ self bounds
3c09b139de30 more st80 compatibility
Claus Gittinger <cg@exept.de>
parents: 1309
diff changeset
  2885
3c09b139de30 more st80 compatibility
Claus Gittinger <cg@exept.de>
parents: 1309
diff changeset
  2886
    "Created: 10.2.1997 / 12:42:36 / cg"
4380
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2887
!
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2888
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2889
tile:bounds from:origin in:tile rule:rule
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2890
    |orgX orgY tW tH|
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2891
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2892
    origin ~= (0@0) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2893
        self shouldImplement.
4380
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2894
    ].
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2895
    bounds ~= self bounds ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2896
        self shouldImplement.
4380
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2897
    ].
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2898
    rule ~= #over ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2899
        self shouldImplement.
4380
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2900
    ].
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2901
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2902
    orgX := origin x.
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2903
    orgY := origin y.
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2904
    tW := tile width.
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2905
    tH := tile height.
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2906
    (bounds top) to:(bounds bottom) by:tH do:[:dstY |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2907
        (bounds left) to:(bounds right) by:(tile width) do:[:dstX |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2908
            self
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2909
                copyFrom:tile
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2910
                x:orgX y:orgY
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2911
                toX:dstX y:dstY
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2912
                width:tW height:tH.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2913
        ].
4380
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2914
    ].
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2915
!
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2916
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2917
valueAtPoint:aPoint put:aColorValue
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2918
    aColorValue isInteger ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2919
        self colorAtX:aPoint x y:aPoint y put:aColorValue
4380
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2920
    ] ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2921
        self pixelAtX:aPoint x y:aPoint y put:aColorValue
4380
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2922
    ]
1279
09eef854916c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1276
diff changeset
  2923
! !
09eef854916c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1276
diff changeset
  2924
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  2925
!Image methodsFor:'accessing'!
48194c26a46c Initial revision
claus
parents:
diff changeset
  2926
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2927
bitsPerSample
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2928
    "return the number of bits per sample.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2929
     The return value is an array of bits-per-plane."
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2930
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  2931
    bitsPerSample notNil ifTrue:[^ bitsPerSample].
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  2932
    ^ Array with:self depth
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  2933
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  2934
    "Modified: 10.6.1996 / 18:04:21 / cg"
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2935
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2936
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2937
colorMap
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2938
    "return the colormap"
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2939
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2940
    ^ colorMap
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2941
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2942
7834
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
  2943
colorMap:newColorMap
6900
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  2944
    "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
  2945
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  2946
    |oldSize "{ Class: SmallInteger }"
852
318a6190e31d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 851
diff changeset
  2947
     sameColors|
318a6190e31d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 851
diff changeset
  2948
7834
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
  2949
    (newColorMap isNil and:[colorMap isNil]) ifTrue:[^ self].
2502
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  2950
6900
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  2951
    sameColors := false.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  2952
852
318a6190e31d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 851
diff changeset
  2953
    photometric == #palette ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2954
        "/ any change at all ?
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  2955
        oldSize := colorMap size.
7834
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
  2956
        newColorMap size >= oldSize ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2957
            sameColors := true.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2958
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2959
            1 to:oldSize do:[:idx |
7834
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
  2960
                (newColorMap at:idx) = (colorMap at:idx) ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2961
                    sameColors := false.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2962
                ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2963
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2964
        ].
3863
b7ba8a04be25 always ensure colorMap is a real colorMap
Claus Gittinger <cg@exept.de>
parents: 3861
diff changeset
  2965
    ].
b7ba8a04be25 always ensure colorMap is a real colorMap
Claus Gittinger <cg@exept.de>
parents: 3861
diff changeset
  2966
7834
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
  2967
    self setColorMap:newColorMap.
3863
b7ba8a04be25 always ensure colorMap is a real colorMap
Claus Gittinger <cg@exept.de>
parents: 3861
diff changeset
  2968
    sameColors ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2969
        ^ self
3863
b7ba8a04be25 always ensure colorMap is a real colorMap
Claus Gittinger <cg@exept.de>
parents: 3861
diff changeset
  2970
    ].
b7ba8a04be25 always ensure colorMap is a real colorMap
Claus Gittinger <cg@exept.de>
parents: 3861
diff changeset
  2971
7834
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
  2972
    newColorMap notNil ifTrue:[
7840
dedc215d1631 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7834
diff changeset
  2973
        (newColorMap isColormap and:[newColorMap isFixedPalette]) ifTrue:[
7834
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
  2974
            photometric := #rgb
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
  2975
        ] ifFalse:[  
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
  2976
            self assert:(self depth <= 8).
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
  2977
            photometric := #palette.
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
  2978
        ].
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  2979
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2980
        (photometric == #palette) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2981
            photometric := #blackIs0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2982
        ]
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  2983
    ].
852
318a6190e31d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 851
diff changeset
  2984
    deviceForm notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2985
        self release
852
318a6190e31d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 851
diff changeset
  2986
    ]
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2987
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  2988
    "Modified: / 31-08-1995 / 03:05:59 / claus"
7834
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
  2989
    "Modified: / 03-02-2017 / 16:52:33 / cg"
7840
dedc215d1631 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7834
diff changeset
  2990
    "Modified: / 06-02-2017 / 11:00:36 / stefan"
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2991
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2992
2068
3bc8754883ae store on the color map in an array of rgb-byte values
tz
parents: 2059
diff changeset
  2993
colorMapFromArray: anArray
2266
72460683cc97 fixed maskedPixelsAre0 flag setting when copying images.
Claus Gittinger <cg@exept.de>
parents: 2249
diff changeset
  2994
    "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
  2995
     The (byte-)Array argument should be of the form:
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2996
        #( 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
  2997
     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
  2998
3876
f4dc6267a30a getting rid of colorMap
Claus Gittinger <cg@exept.de>
parents: 3872
diff changeset
  2999
    self colorMap:(MappedPalette rgbBytesVector:anArray)
3864
b04f2f0c5eae *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3863
diff changeset
  3000
!
b04f2f0c5eae *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3863
diff changeset
  3001
b04f2f0c5eae *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3863
diff changeset
  3002
colorMapFromRGBValueArray:anArray
2266
72460683cc97 fixed maskedPixelsAre0 flag setting when copying images.
Claus Gittinger <cg@exept.de>
parents: 2249
diff changeset
  3003
    "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
  3004
     The (integer-)Array argument should be of the form:
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3005
        #( rgb0 rgb1  ... rgbN)
2266
72460683cc97 fixed maskedPixelsAre0 flag setting when copying images.
Claus Gittinger <cg@exept.de>
parents: 2249
diff changeset
  3006
     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
  3007
8185
f4660dbcbdc1 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 8176
diff changeset
  3008
    self colorMap:(ColorPalette rgbValueVector:anArray)
f4660dbcbdc1 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 8176
diff changeset
  3009
f4660dbcbdc1 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 8176
diff changeset
  3010
    "Modified: / 25-09-2017 / 17:08:17 / stefan"
2068
3bc8754883ae store on the color map in an array of rgb-byte values
tz
parents: 2059
diff changeset
  3011
!
3bc8754883ae store on the color map in an array of rgb-byte values
tz
parents: 2059
diff changeset
  3012
757
6c7dc7e05e93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 748
diff changeset
  3013
container:aVisualContainer
6c7dc7e05e93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 748
diff changeset
  3014
    "ignored here - added to allow images to be used like
6c7dc7e05e93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 748
diff changeset
  3015
     VisualComponents (later, Image should inherit from it)"
6c7dc7e05e93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 748
diff changeset
  3016
6c7dc7e05e93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 748
diff changeset
  3017
    "Created: 28.5.1996 / 23:43:49 / cg"
6c7dc7e05e93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 748
diff changeset
  3018
    "Modified: 29.5.1996 / 10:22:23 / cg"
6c7dc7e05e93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 748
diff changeset
  3019
!
6c7dc7e05e93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 748
diff changeset
  3020
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3021
depth
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3022
    "return the depth of the image"
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3023
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3024
    ^ self bitsPerPixel
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3025
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3026
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3027
device
8913
2fe58f885d89 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 8891
diff changeset
  3028
    <resource: #obsolete>
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3029
    "return the device, the receiver is associated with.
8810
423b6b8d6778 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 8807
diff changeset
  3030
     Return nil, if the image is unassigned.
423b6b8d6778 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 8807
diff changeset
  3031
     Please use graphicsDevice for ST80 compatibility."
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3032
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3033
    ^ device
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3034
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3035
7637
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
  3036
drawableId
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
  3037
    "return the id of the image on the device.
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
  3038
     Return nil, if the image is unassigned."
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
  3039
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
  3040
    deviceForm isNil ifTrue:[^ nil].
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
  3041
    ^ deviceForm drawableId
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
  3042
!
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
  3043
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3044
extent
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3045
    "return the images extent"
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3046
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3047
    ^ width@height
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3048
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3049
1950
23f49293deb8 access to filename
Claus Gittinger <cg@exept.de>
parents: 1935
diff changeset
  3050
fileName
23f49293deb8 access to filename
Claus Gittinger <cg@exept.de>
parents: 1935
diff changeset
  3051
    "return the value of the instance variable 'fileName' (automatically generated)"
23f49293deb8 access to filename
Claus Gittinger <cg@exept.de>
parents: 1935
diff changeset
  3052
23f49293deb8 access to filename
Claus Gittinger <cg@exept.de>
parents: 1935
diff changeset
  3053
    ^ fileName
23f49293deb8 access to filename
Claus Gittinger <cg@exept.de>
parents: 1935
diff changeset
  3054
23f49293deb8 access to filename
Claus Gittinger <cg@exept.de>
parents: 1935
diff changeset
  3055
    "Created: / 3.11.1997 / 14:54:46 / cg"
23f49293deb8 access to filename
Claus Gittinger <cg@exept.de>
parents: 1935
diff changeset
  3056
!
23f49293deb8 access to filename
Claus Gittinger <cg@exept.de>
parents: 1935
diff changeset
  3057
23f49293deb8 access to filename
Claus Gittinger <cg@exept.de>
parents: 1935
diff changeset
  3058
fileName:something
23f49293deb8 access to filename
Claus Gittinger <cg@exept.de>
parents: 1935
diff changeset
  3059
    "set the value of the instance variable 'fileName' (automatically generated)"
23f49293deb8 access to filename
Claus Gittinger <cg@exept.de>
parents: 1935
diff changeset
  3060
23f49293deb8 access to filename
Claus Gittinger <cg@exept.de>
parents: 1935
diff changeset
  3061
    fileName := something.
23f49293deb8 access to filename
Claus Gittinger <cg@exept.de>
parents: 1935
diff changeset
  3062
23f49293deb8 access to filename
Claus Gittinger <cg@exept.de>
parents: 1935
diff changeset
  3063
    "Created: / 3.11.1997 / 14:54:46 / cg"
23f49293deb8 access to filename
Claus Gittinger <cg@exept.de>
parents: 1935
diff changeset
  3064
!
23f49293deb8 access to filename
Claus Gittinger <cg@exept.de>
parents: 1935
diff changeset
  3065
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3066
fullColorId
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3067
    "return the id of the full color image on the device.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3068
     Return nil, if the image is unassigned."
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3069
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3070
    fullColorDeviceForm isNil ifTrue:[^ nil].
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3071
    ^ fullColorDeviceForm id
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3072
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3073
728
04d0a262b82e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 694
diff changeset
  3074
graphicsDevice
04d0a262b82e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 694
diff changeset
  3075
    "same as #device - for ST-80 compatibility"
04d0a262b82e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 694
diff changeset
  3076
04d0a262b82e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 694
diff changeset
  3077
    ^ device
04d0a262b82e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 694
diff changeset
  3078
!
744
db883c9b74b8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 728
diff changeset
  3079
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3080
height
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3081
    "return the height of the image"
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3082
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3083
    ^ height
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3084
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3085
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3086
id
7637
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
  3087
    ^ self drawableId  
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3088
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3089
2081
24f4f3004fe3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2068
diff changeset
  3090
imageSequence
24f4f3004fe3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2068
diff changeset
  3091
    "return the frameSequence of which this image is a part of;
24f4f3004fe3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2068
diff changeset
  3092
     nil if it is not part of a sequence."
24f4f3004fe3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2068
diff changeset
  3093
24f4f3004fe3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2068
diff changeset
  3094
    ^ imageSequence
24f4f3004fe3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2068
diff changeset
  3095
24f4f3004fe3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2068
diff changeset
  3096
    "Created: / 1.4.1998 / 14:43:00 / cg"
24f4f3004fe3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2068
diff changeset
  3097
!
24f4f3004fe3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2068
diff changeset
  3098
24f4f3004fe3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2068
diff changeset
  3099
imageSequence:aCollection
24f4f3004fe3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2068
diff changeset
  3100
    "private entry for imageReaders - set the frameSequence of which
24f4f3004fe3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2068
diff changeset
  3101
     this image is a part of"
24f4f3004fe3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2068
diff changeset
  3102
24f4f3004fe3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2068
diff changeset
  3103
    imageSequence := aCollection
24f4f3004fe3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2068
diff changeset
  3104
24f4f3004fe3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2068
diff changeset
  3105
    "Created: / 1.4.1998 / 14:42:36 / cg"
24f4f3004fe3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2068
diff changeset
  3106
!
24f4f3004fe3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2068
diff changeset
  3107
896
26cea84f134d mask access
Claus Gittinger <cg@exept.de>
parents: 894
diff changeset
  3108
mask
26cea84f134d mask access
Claus Gittinger <cg@exept.de>
parents: 894
diff changeset
  3109
    ^ mask
26cea84f134d mask access
Claus Gittinger <cg@exept.de>
parents: 894
diff changeset
  3110
26cea84f134d mask access
Claus Gittinger <cg@exept.de>
parents: 894
diff changeset
  3111
    "Created: 21.6.1996 / 12:57:44 / cg"
26cea84f134d mask access
Claus Gittinger <cg@exept.de>
parents: 894
diff changeset
  3112
!
26cea84f134d mask access
Claus Gittinger <cg@exept.de>
parents: 894
diff changeset
  3113
906
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
  3114
mask:anotherImage
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
  3115
    "set the images mask - currently, this may be nil or a Depth1Image.
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
  3116
     (it is planned to support alpha information in a Depth8 maskImage in
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
  3117
      the near future).
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
  3118
     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
  3119
                       1-bit is present in the mask will be drawn;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3120
                       0-bit mask pixels lead to transparent pixels.
906
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
  3121
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
  3122
     For depth8 masks: (future):
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3123
                       each pixel specifies the alpha value (0..255),
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3124
                       which specifies the transparency of that pixel.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3125
                       0 means completely transparent, 255 means completely
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3126
                       opaque. The 1-plane mask is a special case of this,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3127
                       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
  3128
                       alpha value of 255."
906
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
  3129
1591
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  3130
    mask := anotherImage.
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  3131
    maskedPixelsAre0 := false.
906
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
  3132
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
  3133
    "Created: 27.6.1996 / 17:45:22 / cg"
1591
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  3134
    "Modified: 12.4.1997 / 12:04:39 / cg"
906
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
  3135
!
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
  3136
1587
4a0b4c864ff0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1586
diff changeset
  3137
maskedPixelsAre0
4a0b4c864ff0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1586
diff changeset
  3138
    "return true if masked pixels have been cleared to zero"
4a0b4c864ff0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1586
diff changeset
  3139
2266
72460683cc97 fixed maskedPixelsAre0 flag setting when copying images.
Claus Gittinger <cg@exept.de>
parents: 2249
diff changeset
  3140
    ^ maskedPixelsAre0 == true
72460683cc97 fixed maskedPixelsAre0 flag setting when copying images.
Claus Gittinger <cg@exept.de>
parents: 2249
diff changeset
  3141
72460683cc97 fixed maskedPixelsAre0 flag setting when copying images.
Claus Gittinger <cg@exept.de>
parents: 2249
diff changeset
  3142
    "Modified: / 22.8.1998 / 11:27:22 / cg"
1587
4a0b4c864ff0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1586
diff changeset
  3143
!
4a0b4c864ff0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1586
diff changeset
  3144
4a0b4c864ff0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1586
diff changeset
  3145
maskedPixelsAre0:aBoolean
4a0b4c864ff0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1586
diff changeset
  3146
    "set/clear the flag which states if masked pixels
1591
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  3147
     have been set to zero. Knowing this to be true allows
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  3148
     faster drawing of the image later; (however, not setting
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  3149
     it will still produce correct output).
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  3150
     This flag is typically set by image readers."
1587
4a0b4c864ff0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1586
diff changeset
  3151
4a0b4c864ff0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1586
diff changeset
  3152
    maskedPixelsAre0 := aBoolean
1591
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  3153
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  3154
    "Modified: 12.4.1997 / 12:08:42 / cg"
1587
4a0b4c864ff0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1586
diff changeset
  3155
!
4a0b4c864ff0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1586
diff changeset
  3156
7374
b1a4e6ba38cb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7373
diff changeset
  3157
metaData
b1a4e6ba38cb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7373
diff changeset
  3158
    ^ metaData
b1a4e6ba38cb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7373
diff changeset
  3159
!
b1a4e6ba38cb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7373
diff changeset
  3160
b1a4e6ba38cb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7373
diff changeset
  3161
metaData:something
b1a4e6ba38cb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7373
diff changeset
  3162
    metaData := something.
b1a4e6ba38cb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7373
diff changeset
  3163
!
b1a4e6ba38cb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7373
diff changeset
  3164
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3165
monochromeId
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3166
    "return the id of the monochrome image on the device.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3167
     Return nil, if the image is unassigned."
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3168
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3169
    monoDeviceForm isNil ifTrue:[^ nil].
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3170
    ^ monoDeviceForm id
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3171
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3172
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  3173
palette
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3174
    "return the colormap; ST-80 compatibility"
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3175
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3176
    ^ colorMap
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3177
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3178
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  3179
palette:aColormap
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3180
    "set the colormap; ST-80 compatibility"
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3181
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  3182
    self colorMap:aColormap
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3183
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3184
    "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
  3185
    "Modified: 8.6.1996 / 09:54:02 / cg"
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3186
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3187
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3188
photometric
6311
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
  3189
    "return the photometric, a symbol such as #palette, #rgb etc.
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
  3190
     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
  3191
     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
  3192
     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
  3193
     - 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
  3194
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3195
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3196
    ^ photometric
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3197
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3198
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3199
samplesPerPixel
6840
3dee5e952e94 class: Image
Stefan Vogel <sv@exept.de>
parents: 6831
diff changeset
  3200
    "return the number of samples per pixel in the image."
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3201
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  3202
    samplesPerPixel notNil ifTrue:[^ samplesPerPixel].
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  3203
    ^ 1
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  3204
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  3205
    "Modified: 10.6.1996 / 18:03:30 / cg"
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3206
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3207
7834
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
  3208
setColorMap:newColorMap
7878
87d2abc0d82a #BUGFIX by Maren
matilk
parents: 7840
diff changeset
  3209
    (newColorMap isColormap or:[newColorMap isNil]) ifTrue:[
7834
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
  3210
        colorMap := newColorMap.
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  3211
    ] ifFalse:[
8185
f4660dbcbdc1 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 8176
diff changeset
  3212
        colorMap := ColorPalette withColors:newColorMap.
f4660dbcbdc1 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 8176
diff changeset
  3213
    ].
f4660dbcbdc1 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 8176
diff changeset
  3214
7834
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
  3215
    "Modified (format): / 03-02-2017 / 16:39:48 / cg"
8185
f4660dbcbdc1 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 8176
diff changeset
  3216
    "Modified: / 25-09-2017 / 17:05:26 / stefan"
3863
b7ba8a04be25 always ensure colorMap is a real colorMap
Claus Gittinger <cg@exept.de>
parents: 3861
diff changeset
  3217
!
b7ba8a04be25 always ensure colorMap is a real colorMap
Claus Gittinger <cg@exept.de>
parents: 3861
diff changeset
  3218
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3219
width
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3220
    "return the width of the image"
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3221
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3222
    ^ width
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3223
! !
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3224
3263
bd92a12c9316 category changes
Claus Gittinger <cg@exept.de>
parents: 3259
diff changeset
  3225
!Image methodsFor:'accessing-pixels'!
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3226
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  3227
at:aPoint
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3228
    "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
  3229
     (backward compatibility with ST/X)
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3230
     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
  3231
     Use #colorAt: - for future compatibility.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3232
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3233
     retrieve the pixel at aPoint; return a color.
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
  3234
     Pixels start at 0@0 for upper left pixel, end at
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3235
     (width-1)@(height-1) for lower right pixel.
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
  3236
     You should not use this method for image-processing, its
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3237
     very slow ...
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3238
     (it is meant to access individual pixels - for example, in a bitmap editor)"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  3239
3433
809312fa7e4f Use <resource:#obsolete>
Stefan Vogel <sv@exept.de>
parents: 3426
diff changeset
  3240
    <resource:#obsolete>
809312fa7e4f Use <resource:#obsolete>
Stefan Vogel <sv@exept.de>
parents: 3426
diff changeset
  3241
7482
0e29bd25788b #QUALITY by stefan
Stefan Vogel <sv@exept.de>
parents: 7481
diff changeset
  3242
    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
  3243
    ^ self colorAtX:(aPoint x) y:(aPoint y)
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3244
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3245
    "Modified: / 21-06-1997 / 13:10:17 / cg"
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3246
    "Modified: / 09-01-1998 / 20:33:52 / stefan"
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3247
    "Modified (comment): / 29-08-2017 / 14:35:55 / cg"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  3248
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  3249
8807
c3c7a29f61f3 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 8795
diff changeset
  3250
at:aPoint put:aColorOrPixel
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3251
    "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
  3252
     (backward compatibility with ST/X)
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3253
     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
  3254
     Use #colorAt:put: - for future compatibility.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3255
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3256
     set the pixel at aPoint to aColor.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3257
     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
  3258
     (width-1)@(height-1) for lower right pixel.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3259
     You should not use this method for image-processing, its
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3260
     very slow ...
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3261
     (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
  3262
8807
c3c7a29f61f3 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 8795
diff changeset
  3263
    aColorOrPixel isInteger ifTrue:[
c3c7a29f61f3 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 8795
diff changeset
  3264
        ^ self pixelAtX:aPoint x y:aPoint y put:aColorOrPixel.
7482
0e29bd25788b #QUALITY by stefan
Stefan Vogel <sv@exept.de>
parents: 7481
diff changeset
  3265
    ].
0e29bd25788b #QUALITY by stefan
Stefan Vogel <sv@exept.de>
parents: 7481
diff changeset
  3266
    self obsoleteFeatureWarning:'Image [warning]: the Image>>at:put: will change semantics soon; use #colorAt:put:'.
8807
c3c7a29f61f3 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 8795
diff changeset
  3267
    ^ self colorAtX:aPoint x y:aPoint y put:aColorOrPixel.
1764
01101be8bd5c obsolete warning messages
Claus Gittinger <cg@exept.de>
parents: 1763
diff changeset
  3268
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3269
    "Modified: / 21-06-1997 / 13:16:02 / cg"
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3270
    "Modified: / 09-01-1998 / 20:34:15 / stefan"
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3271
    "Modified (comment): / 29-08-2017 / 14:36:03 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3272
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3273
2502
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3274
atImageAndMask:aPoint put:aColorOrPixelOrNil
1972
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
  3275
    "set the pixel at x/y to aColor.
2502
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3276
     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
  3277
     otherwise to 1. Nil is treated like noColor.
1972
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
  3278
     (used by the bitmap editor)"
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
  3279
2523
4c197af8cc50 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2502
diff changeset
  3280
    |maskVal|
2502
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3281
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  3282
    (aColorOrPixelOrNil notNil and:[aColorOrPixelOrNil ~= Color noColor]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3283
        maskVal := 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3284
        aColorOrPixelOrNil isInteger ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3285
            self pixelAt:aPoint put:aColorOrPixelOrNil.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3286
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3287
            self colorAt:aPoint put:aColorOrPixelOrNil
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3288
        ]
2380
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  3289
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3290
        maskVal := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3291
        self pixelAt:aPoint put:0.
2502
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3292
    ].
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3293
    mask notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3294
        mask pixelAt:aPoint put:maskVal
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  3295
    ].
2502
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3296
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3297
    "Modified: / 30.9.1998 / 22:42:44 / cg"
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3298
!
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3299
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3300
atImageAndMask:aPoint putValue:aPixelValueOrNil
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3301
    "set the pixel at x/y to aColor.
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3302
     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
  3303
     otherwise to 1. (used by the bitmap editor)"
2502
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3304
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3305
    |pixVal maskVal|
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3306
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  3307
    aPixelValueOrNil notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3308
        pixVal := aPixelValueOrNil.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3309
        maskVal := 1.
2502
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3310
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3311
        pixVal := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3312
        maskVal := 0.
2502
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3313
    ].
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3314
    mask notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3315
        mask pixelAt:aPoint put:maskVal
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  3316
    ].
2502
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3317
    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
  3318
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  3319
    "Modified: / 30.9.1998 / 22:42:44 / cg"
1972
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
  3320
!
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
  3321
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3322
atPoint:aPoint
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3323
    "ST-80 compatibility: return the pixelValue at:aPoint."
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3324
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3325
    ^ self pixelAtX:aPoint x y:aPoint y
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3326
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3327
    "Modified: 24.4.1997 / 16:18:44 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3328
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3329
1433
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  3330
atPoint:aPoint put:aPixelValue
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  3331
    "ST-80 compatibility: set the pixelValue at:aPoint."
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  3332
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3333
    ^ self pixelAtX:aPoint x y:aPoint y put:aPixelValue
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3334
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3335
    "Modified: 24.4.1997 / 17:17:59 / cg"
1433
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  3336
!
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  3337
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  3338
atX:x y:y
7482
0e29bd25788b #QUALITY by stefan
Stefan Vogel <sv@exept.de>
parents: 7481
diff changeset
  3339
    <resource: #obsolete>
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3340
    "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
  3341
     (backward compatibility with ST/X)
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3342
     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
  3343
     Use #colorAt: - for future compatibility.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3344
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3345
     Retrieve a pixel at x/y; return a color.
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3346
     Pixels start at 0@0 for upper left pixel, end at
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3347
     (width-1)@(height-1) for lower right pixel.
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
  3348
     You should not use this method for image-processing, its
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3349
     very slow ...
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3350
     (it is meant to access individual pixels - for example, in a bitmap editor)"
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
  3351
7482
0e29bd25788b #QUALITY by stefan
Stefan Vogel <sv@exept.de>
parents: 7481
diff changeset
  3352
    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
  3353
    ^ self colorAtX:x y:y
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3354
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3355
    "Modified: / 21-06-1997 / 13:10:32 / cg"
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3356
    "Modified (comment): / 29-08-2017 / 14:36:09 / cg"
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
  3357
!
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
  3358
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
  3359
atX:x y:y put:aColor
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3360
    "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
  3361
     (backward compatibility with ST/X)
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3362
     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
  3363
     Use #colorAt:put: - for future compatibility.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3364
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3365
     set the pixel at x/y to aColor.
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3366
     Pixels start at 0@0 for the upper left pixel, end at
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3367
     (width-1)@(height-1) for the lower right pixel.
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  3368
     This method checks if the color can be stored in the image.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  3369
     (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
  3370
     You should not use this method for image-processing, it is very slow ...
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3371
     (it is meant to access individual pixels - for example, in a bitmap editor)"
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3372
4380
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  3373
    aColor isInteger ifTrue:[
7482
0e29bd25788b #QUALITY by stefan
Stefan Vogel <sv@exept.de>
parents: 7481
diff changeset
  3374
        ^ self pixelAtX:x y:y put:aColor
0e29bd25788b #QUALITY by stefan
Stefan Vogel <sv@exept.de>
parents: 7481
diff changeset
  3375
    ].
0e29bd25788b #QUALITY by stefan
Stefan Vogel <sv@exept.de>
parents: 7481
diff changeset
  3376
    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
  3377
    ^ self colorAtX:x y:y put:aColor
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3378
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3379
    "Modified: / 21-06-1997 / 13:10:44 / cg"
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3380
    "Modified (comment): / 29-08-2017 / 14:36:15 / cg"
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3381
!
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3382
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3383
atX:x y:y putValue:aPixelValue
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3384
    "set the pixel at x/y to aPixelValue.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3385
     The interpretation of the pixelValue depends on the photometric
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3386
     and the colormap. (see also: Image>>atX:y:put:)
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3387
     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
  3388
     (width-1) @ (height-1) for the lower right pixel.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3389
     You should not use this method for image-processing, its
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3390
     very slow ...
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3391
     (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
  3392
3433
809312fa7e4f Use <resource:#obsolete>
Stefan Vogel <sv@exept.de>
parents: 3426
diff changeset
  3393
    <resource:#obsolete>
809312fa7e4f Use <resource:#obsolete>
Stefan Vogel <sv@exept.de>
parents: 3426
diff changeset
  3394
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3395
    self obsoleteMethodWarning:'use #pixelAtX:y:put:'.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3396
    ^ self pixelAtX:x y:y put:aPixelValue.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3397
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3398
    "Modified: 24.4.1997 / 17:15:45 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3399
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3400
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3401
bits
7373
61933c223183 added metaData instVar (for free use by image reader)
Claus Gittinger <cg@exept.de>
parents: 7363
diff changeset
  3402
    "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
  3403
     depending on the photometric, this has to be interpreted as monochrome,
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
  3404
     greyscale, palette or rgb data.
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  3405
     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
  3406
     will store 2 pixels per byte, whereas a 2-bitPerPixel image will store
be0fa075e4c4 comment
Claus Gittinger <cg@exept.de>
parents: 4414
diff changeset
  3407
     4 pixels per byte."
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3408
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
  3409
    bytes isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3410
        pixelFunction notNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3411
            self createPixelStore.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3412
            0 to:height-1 do:[:y |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3413
                0 to:width-1 do:[:x |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3414
                    self pixelAtX:x y:y put:(pixelFunction value:x value:y)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3415
                ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3416
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3417
        ].
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
  3418
    ].
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3419
    ^ bytes
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3420
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3421
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3422
colAt:x into:aPixelBuffer
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3423
    "fill aBuffer with pixel values retrieved from a single column.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3424
     (eg. a vertical span)    
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3425
     Notice: row/column coordinates start at 0."
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3426
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3427
    ^ self colAt:x into:aPixelBuffer startingAt:1
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3428
!
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3429
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3430
colAt:x into:aPixelBuffer startingAt:startIndex
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3431
    "fill aBuffer with pixel values retrieved from a single column.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3432
     (eg. a vertical span)    
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3433
     Notice: row/column coordinates start at 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3434
     This is a slow fallBack method, which works with any depth;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3435
     concrete image subclasses should redefine this for more performance."
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3436
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3437
    |h "{ Class: SmallInteger }"|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3438
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3439
    h := height-1.    
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3440
    0 to:h do:[:row |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3441
        aPixelBuffer at:(row + startIndex) put:(self pixelAtX:x y:row)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3442
    ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3443
!
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3444
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3445
colAt:x putAll:pixelArray
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3446
    "store a single column's pixels from bits in the argument;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3447
     (eg. a vertical span)    
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3448
     Notice: row/column coordinates start at 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3449
     This is a slow fallBack method, which works with any depth;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3450
     concrete image subclasses should redefine this for more performance."
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3451
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3452
    ^ self colAt:x putAll:pixelArray startingAt:1
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3453
!
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3454
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3455
colAt:x putAll:pixelArray startingAt:startIndex
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3456
    "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
  3457
     (eg. a vertical span)    
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3458
     Notice: row/column coordinates start at 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3459
     This is a slow fallBack method, which works with any depth;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3460
     concrete image subclasses should redefine this for more performance."
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3461
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3462
    |h "{ Class: SmallInteger }"|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3463
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3464
    h := height-1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3465
    0 to:h do:[:row |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3466
        self pixelAtX:x y:row put:(pixelArray at:(row + startIndex))
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3467
    ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3468
    ^ pixelArray
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3469
!
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3470
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3471
colorAt:aPoint
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3472
    "retrieve a pixel at x/y; return a color.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3473
     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
  3474
     (width-1)@(height-1) for lower right pixel.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3475
     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
  3476
     very slow ...
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3477
     (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
  3478
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3479
    ^ self colorAtX:(aPoint x) y:(aPoint y)
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3480
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3481
    "Created: 24.4.1997 / 17:02:31 / cg"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3482
!
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3483
1962
8c7377d243f6 save mask in storeOn.
tz
parents: 1950
diff changeset
  3484
colorAt: aPoint put:aColor
8c7377d243f6 save mask in storeOn.
tz
parents: 1950
diff changeset
  3485
8c7377d243f6 save mask in storeOn.
tz
parents: 1950
diff changeset
  3486
    self colorAtX: aPoint x y: aPoint y put:aColor
8c7377d243f6 save mask in storeOn.
tz
parents: 1950
diff changeset
  3487
!
8c7377d243f6 save mask in storeOn.
tz
parents: 1950
diff changeset
  3488
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3489
colorAtX:x y:y
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3490
    "retrieve a pixel at x/y; return a color.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3491
     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
  3492
     (width-1)@(height-1) for lower right pixel.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3493
     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
  3494
     very slow ...
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3495
     (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
  3496
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3497
    |pixel|
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3498
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3499
    pixel := self pixelAtX:x y:y.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3500
    ^ self colorFromValue:pixel
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3501
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3502
    "Modified: 24.4.1997 / 16:18:53 / cg"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3503
    "Created: 24.4.1997 / 17:00:52 / cg"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3504
!
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3505
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3506
colorAtX:x y:y put:aColor
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3507
    "set the pixel at x/y to aColor.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3508
     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
  3509
     (width-1)@(height-1) for the lower right pixel.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3510
     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
  3511
     (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
  3512
     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
  3513
     (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
  3514
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3515
    |pixel|
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3516
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3517
    pixel := self valueFromColor:aColor.
2182
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3518
    pixel isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3519
        ^ UnrepresentableColorSignal raiseErrorString:'cannot store color - not in colormap'.
2182
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3520
    ].
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3521
    self pixelAtX:x y:y put:pixel.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3522
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3523
    "Modified: 24.4.1997 / 17:36:20 / cg"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3524
!
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3525
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3526
data
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3527
    "for backward compatibility - will vanish"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3528
3433
809312fa7e4f Use <resource:#obsolete>
Stefan Vogel <sv@exept.de>
parents: 3426
diff changeset
  3529
    <resource:#obsolete>
809312fa7e4f Use <resource:#obsolete>
Stefan Vogel <sv@exept.de>
parents: 3426
diff changeset
  3530
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3531
    self obsoleteMethodWarning:'use #bits'.
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
  3532
    ^ self bits
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3533
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3534
    "Modified: 24.4.1997 / 17:37:57 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3535
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3536
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3537
data:aByteArray
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3538
    "for backward compatibility - will vanish"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3539
4175
a9e65365e590 Mark obsolete methods
Stefan Vogel <sv@exept.de>
parents: 4173
diff changeset
  3540
    <resource:#obsolete>
3966
950a2db201c7 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3964
diff changeset
  3541
    self obsoleteMethodWarning:'use #bits:'.
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
  3542
    self bits:aByteArray
1660
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
    "Modified: 24.4.1997 / 17:38:18 / 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
2182
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3547
maskAt:aPoint
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3548
    "retrieve the maskValue at aPoint - an integer number which is
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3549
     0 for masked pixels (invisible), 1 for unmasked (visible).
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3550
     For images without mask, 1 is returned for all pixels."
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3551
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3552
    ^ self maskAtX:aPoint x y:aPoint y
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3553
!
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3554
3457
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
  3555
maskAt:aPoint put:maskValue
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
  3556
    "set the maskValue at aPoint - an integer number which is
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
  3557
     0 for masked pixels (invisible), 1 for unmasked (visible)."
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
  3558
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
  3559
    ^ self maskAtX:aPoint x y:aPoint y put:maskValue
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
  3560
!
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
  3561
2182
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3562
maskAtX:x y:y
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3563
    "retrieve the maskValue at aPoint - an integer number which is
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3564
     0 for masked pixels (invisible), 1 for unmasked (visible).
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3565
     For images without mask, 1 is returned for all pixels."
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3566
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3567
    mask isNil ifTrue:[^ 1].
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3568
    ^ mask pixelAtX:x y:y
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3569
!
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3570
3457
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
  3571
maskAtX:x y:y put:maskValue
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
  3572
    "set the maskValue at aPoint - an integer number which is
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
  3573
     0 for masked pixels (invisible), 1 for unmasked (visible)."
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
  3574
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
  3575
    mask isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3576
        maskValue == 1 ifTrue:[^ self].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3577
        self error:'image has no mask'.
3457
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
  3578
    ].
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
  3579
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
  3580
    ^ mask pixelAtX:x y:y put:maskValue
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
  3581
!
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
  3582
2205
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  3583
pixelAt:aPoint
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  3584
    "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
  3585
     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
  3586
     (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
  3587
     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
  3588
     very slow ...
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  3589
     (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
  3590
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  3591
    ^ 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
  3592
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  3593
    "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
  3594
!
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  3595
2380
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  3596
pixelAt:aPoint put:aPixelValue
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  3597
    "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
  3598
     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
  3599
     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
  3600
     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
  3601
     (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
  3602
     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
  3603
     very slow ...
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  3604
     (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
  3605
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  3606
    ^ 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
  3607
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  3608
    "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
  3609
!
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  3610
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3611
pixelAtX:x y:y
7519
c0603c8183dc #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7511
diff changeset
  3612
    "retrieve the pixelValue at aPoint; return a pixel (an integer number).
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3613
     Pixels start at 0/0 for upper left pixel, and end at
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3614
     width-1@height-1 for lower right pixel.
7519
c0603c8183dc #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7511
diff changeset
  3615
     The returned number's interpretation depends on the photometric
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3616
     and the colormap. (see also Image>>at: and Image>>atX:y:)
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3617
     You should not use this method for image-processing of
7519
c0603c8183dc #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7511
diff changeset
  3618
     big images, it's very slow ...
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3619
     (it is meant to access individual pixels - for example, in a bitmap editor)"
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
  3620
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
  3621
    pixelFunction notNil ifTrue:[^ pixelFunction value:x value:y].
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
  3622
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
  3623
    ^ self subclassResponsibility
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3624
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3625
    "Created: 24.4.1997 / 16:06:56 / cg"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3626
!
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
pixelAtX:x y:y put:aPixelValue
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3629
    "set the pixel at x/y to aPixelValue.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3630
     The interpretation of the pixelValue depends on the photometric
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3631
     and the colormap. (see also: Image>>atX:y:put:)
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3632
     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
  3633
     (width-1) @ (height-1) for the lower right pixel.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3634
     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
  3635
     very slow ...
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3636
     (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
  3637
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3638
    ^ self subclassResponsibility
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3639
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3640
    "Created: 24.4.1997 / 17:05:11 / cg"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3641
!
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3642
4117
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
  3643
rgbValueAt:aPoint
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3644
    "retrieve a pixel's rgb value at x/y; 
8326
ff1b239ffe17 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  3645
     return a 24bit rgbValue (rrggbb, red is MSB),
ff1b239ffe17 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  3646
     or 32bit for alpha images (aarrggbb, alpha is MSB).
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3647
     Pixels start at 0@0 for the upper left pixel, 
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3648
     and end at (width-1)@(height-1) for the lower right pixel."
4117
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
  3649
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
  3650
    ^ self rgbValueAtX:(aPoint x) y:(aPoint y)
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3651
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3652
    "Modified (comment): / 29-08-2017 / 14:36:33 / cg"
4117
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
  3653
!
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
  3654
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
  3655
rgbValueAtX:x y:y
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3656
    "retrieve a pixel's rgb value at x/y; 
8326
ff1b239ffe17 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  3657
     return a 24bit rgbValue (rrggbb, red is MSB),
ff1b239ffe17 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  3658
     or 32bit for alpha images (aarrggbb, alpha is MSB).
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3659
     Pixels start at 0@0 for the upper left pixel, 
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3660
     and end at (width-1)@(height-1) for the lower right pixel."
4117
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
  3661
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
  3662
    |pixel|
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
  3663
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
  3664
    pixel := self pixelAtX:x y:y.
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
  3665
    ^ self rgbFromValue:pixel
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3666
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3667
    "Modified (comment): / 29-08-2017 / 14:36:48 / cg"
4117
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
  3668
!
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
  3669
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 6037
diff changeset
  3670
rgbValueAtX:x y:y put:newRGBValue
8326
ff1b239ffe17 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  3671
    "expects a 24bit rgbValue (rrggbb, red is MSB),
ff1b239ffe17 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  3672
     or 32bit for alpha images (aarrggbb, alpha is MSB)."
ff1b239ffe17 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  3673
4858
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
  3674
    |value|
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
  3675
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
  3676
    value := self valueFromRGB:newRGBValue.
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
  3677
    self pixelAtX:x y:y put:value.
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
  3678
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
  3679
    "Created: / 15-01-2008 / 15:56:10 / cg"
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
  3680
!
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
  3681
3872
390fabbc3036 comments and slight cleanup
Claus Gittinger <cg@exept.de>
parents: 3871
diff changeset
  3682
rowAt:y
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3683
    "retrieve an array filled with pixel values from a single row.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3684
     (eg. a horizontal span)    
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3685
     Notice: row/column coordinates start at 0.
8326
ff1b239ffe17 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  3686
     The interpretation of the pixel values depends on the photometric.
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3687
     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
  3688
     concrete image subclasses should redefine this for more performance."
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
    |pixelArray|
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3691
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3692
    pixelArray := self pixelArraySpecies new:width.
3872
390fabbc3036 comments and slight cleanup
Claus Gittinger <cg@exept.de>
parents: 3871
diff changeset
  3693
    self rowAt:y into:pixelArray startingAt:1.
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3694
    ^ pixelArray
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3695
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
     |i|
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3698
3476
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
  3699
     i := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3700
     (i rowAt:0) inspect
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3701
    "
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3702
    "
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3703
     |i|
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3704
4168
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
  3705
     i := Image fromFile:'libtool/bitmaps/SBrowser.xbm'.
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3706
     (i rowAt:0) inspect
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3707
    "
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3708
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3709
    "Modified: 24.4.1997 / 15:51:24 / cg"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3710
!
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3711
3872
390fabbc3036 comments and slight cleanup
Claus Gittinger <cg@exept.de>
parents: 3871
diff changeset
  3712
rowAt:y into:aPixelBuffer
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3713
    "fill aBuffer with pixel values retrieved from a single row.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3714
     (eg. a horizontal span)    
8326
ff1b239ffe17 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  3715
     The interpretation of the pixel values depends on the photometric.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3716
     Notice: row/column coordinates start at 0."
3872
390fabbc3036 comments and slight cleanup
Claus Gittinger <cg@exept.de>
parents: 3871
diff changeset
  3717
390fabbc3036 comments and slight cleanup
Claus Gittinger <cg@exept.de>
parents: 3871
diff changeset
  3718
    ^ self rowAt:y into:aPixelBuffer startingAt:1
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3719
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3720
    "Created: 24.4.1997 / 15:44:46 / cg"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3721
    "Modified: 24.4.1997 / 15:51:35 / cg"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3722
!
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3723
3872
390fabbc3036 comments and slight cleanup
Claus Gittinger <cg@exept.de>
parents: 3871
diff changeset
  3724
rowAt:y into:aPixelBuffer startingAt:startIndex
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3725
    "fill aBuffer with pixel values retrieved from a single row.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3726
     (eg. a horizontal span)    
8326
ff1b239ffe17 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  3727
     The interpretation of the pixel values depends on the photometric.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3728
     Notice: row/column coordinates start at 0.
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3729
     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
  3730
     concrete image subclasses should redefine this for more performance."
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3731
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3732
    |w "{ Class: SmallInteger }"|
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3733
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3734
    w := width-1.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3735
    0 to:w do:[:col |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3736
        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
  3737
    ].
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3738
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3739
    "Created: 24.4.1997 / 15:05:21 / cg"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3740
    "Modified: 24.4.1997 / 16:52:43 / cg"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3741
!
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3742
3872
390fabbc3036 comments and slight cleanup
Claus Gittinger <cg@exept.de>
parents: 3871
diff changeset
  3743
rowAt:y putAll:pixelArray
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3744
    "store a single row's pixels from bits in the argument;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3745
     (eg. a horizontal span)    
8326
ff1b239ffe17 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  3746
     The interpretation of the pixel values depends on the photometric.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3747
     Notice: row/column coordinates start at 0.
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3748
     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
  3749
     concrete image subclasses should redefine this for more performance."
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3750
8326
ff1b239ffe17 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  3751
    self rowAt:y putAll:pixelArray startingAt:1
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3752
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3753
    "Modified: 24.4.1997 / 15:51:58 / cg"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3754
!
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3755
3872
390fabbc3036 comments and slight cleanup
Claus Gittinger <cg@exept.de>
parents: 3871
diff changeset
  3756
rowAt:y putAll:pixelArray startingAt:startIndex
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3757
    "store a single row's pixels from bits in the pixelArray argument;
8326
ff1b239ffe17 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  3758
     (eg. a horizontal span)
ff1b239ffe17 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  3759
     The interpretation of the pixel values depends on the photometric.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3760
     Notice: row/column coordinates start at 0.
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3761
     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
  3762
     concrete image subclasses should redefine this for more performance."
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3763
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3764
    |w "{ Class: SmallInteger }"|
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3765
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3766
    w := width-1.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3767
    0 to:w do:[:col |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3768
        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
  3769
    ].
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3770
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3771
    "Modified: 24.4.1997 / 17:05:57 / cg"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3772
!
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3773
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3774
valueAt:aPoint
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3775
    "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
  3776
     (backward compatibility with ST/X)
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3777
     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
  3778
     Use #pixelAt: - for future compatibility.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3779
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3780
     Retrieve the pixelValue at aPoint; return an integer number.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3781
     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
  3782
     width-1@height-1 for lower right pixel.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3783
     The returned numbers interpretation depends on the photometric
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3784
     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
  3785
     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
  3786
     very slow ...
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3787
     (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
  3788
1764
01101be8bd5c obsolete warning messages
Claus Gittinger <cg@exept.de>
parents: 1763
diff changeset
  3789
    '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
  3790
    ^ self pixelAtX:aPoint x y:aPoint y
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3791
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3792
    "Modified: / 21-06-1997 / 13:11:19 / cg"
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3793
    "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
  3794
!
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3795
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3796
valueAtX:x y:y
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3797
    "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
  3798
     (backward compatibility with ST/X)
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3799
     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
  3800
     Use #pixelAt: - for future compatibility.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3801
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3802
     Retrieve the pixelValue at aPoint; return an integer number.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3803
     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
  3804
     width-1@height-1 for lower right pixel.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3805
     The returned numbers interpretation depends on the photometric
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3806
     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
  3807
     You should not use this method for image-processing of
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  3808
     big images, its very slow ...
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3809
     (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
  3810
1764
01101be8bd5c obsolete warning messages
Claus Gittinger <cg@exept.de>
parents: 1763
diff changeset
  3811
    '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
  3812
    ^ self pixelAtX:x y:y
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3813
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3814
    "Modified: / 21-06-1997 / 13:11:29 / cg"
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3815
    "Modified (comment): / 29-08-2017 / 14:36:57 / cg"
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3816
! !
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3817
3263
bd92a12c9316 category changes
Claus Gittinger <cg@exept.de>
parents: 3259
diff changeset
  3818
!Image methodsFor:'accessing-private'!
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3819
8242
5ca21d0d739d #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 8231
diff changeset
  3820
bits:aByteArrayOrNil
5ca21d0d739d #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 8231
diff changeset
  3821
    "set the raw pixel data.
5ca21d0d739d #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 8231
diff changeset
  3822
     With a nil argument, a pixel byte array of the correct size is allocated.
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3823
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3824
     This interface is only to be used when initializing
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3825
     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
  3826
     existing image may confuse later pixel interpretation
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
  3827
     (it does not care for colormaps and/or cached device image flushing)."
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3828
6894
0fc111a48edf class: Image
Claus Gittinger <cg@exept.de>
parents: 6862
diff changeset
  3829
    |expectedSize d|
0fc111a48edf class: Image
Claus Gittinger <cg@exept.de>
parents: 6862
diff changeset
  3830
8242
5ca21d0d739d #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 8231
diff changeset
  3831
    bytes := aByteArrayOrNil.
6894
0fc111a48edf class: Image
Claus Gittinger <cg@exept.de>
parents: 6862
diff changeset
  3832
0fc111a48edf class: Image
Claus Gittinger <cg@exept.de>
parents: 6862
diff changeset
  3833
    "/ sanity check:
0fc111a48edf class: Image
Claus Gittinger <cg@exept.de>
parents: 6862
diff changeset
  3834
    "/ there seem to be images in some image-resource methods,
0fc111a48edf class: Image
Claus Gittinger <cg@exept.de>
parents: 6862
diff changeset
  3835
    "/ which were written with an invalid packed pixel string.
0fc111a48edf class: Image
Claus Gittinger <cg@exept.de>
parents: 6862
diff changeset
  3836
    "/ 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
  3837
    "/ If you encounter this halt,
0fc111a48edf class: Image
Claus Gittinger <cg@exept.de>
parents: 6862
diff changeset
  3838
    "/ 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
  3839
6894
0fc111a48edf class: Image
Claus Gittinger <cg@exept.de>
parents: 6862
diff changeset
  3840
    (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
  3841
        (d <= 8) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3842
            expectedSize := (self bytesPerRow * height).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3843
            bytes size < expectedSize ifTrue:[
8242
5ca21d0d739d #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 8231
diff changeset
  3844
                bytes notNil ifTrue:[
5ca21d0d739d #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 8231
diff changeset
  3845
                    Smalltalk isSmalltalkDevelopmentSystem ifTrue:[
5ca21d0d739d #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 8231
diff changeset
  3846
                        self breakPoint:#cg info:'invalid bytearray size'.
5ca21d0d739d #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 8231
diff changeset
  3847
                    ].
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3848
                ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3849
                bytes := (ByteArray new:expectedSize) replaceFrom:1 with:bytes; yourself.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3850
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3851
        ].
6894
0fc111a48edf class: Image
Claus Gittinger <cg@exept.de>
parents: 6862
diff changeset
  3852
    ].
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3853
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3854
    "Modified: 23.4.1996 / 11:08:28 / cg"
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
  3855
!
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
  3856
6900
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3857
bits:aByteArrayArg colorMap:clrMapArg
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3858
    "set the raw data.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3859
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3860
     This interface is only to be used when initializing
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3861
     instances or by image readers. Calling for a change of an
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3862
     existing image may confuse later pixel interpretation
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3863
     (it does not care for colormaps and/or cached device image flushing)."
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3864
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3865
    self bits:aByteArrayArg.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3866
    self colorMap:clrMapArg.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3867
!
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3868
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3869
bits:aByteArrayArg colorMap:clrMapArg mask:maskArg
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3870
    "set the raw data.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3871
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3872
     This interface is only to be used when initializing
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3873
     instances or by image readers. Calling for a change of an
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3874
     existing image may confuse later pixel interpretation
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3875
     (it does not care for colormaps and/or cached device image flushing)."
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3876
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3877
    self bits:aByteArrayArg.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3878
    self colorMap:clrMapArg.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3879
    self mask:maskArg
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3880
!
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3881
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3882
bits:aByteArrayArg colorMapFromArray:clrMapArg
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3883
    "set the raw data.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3884
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3885
     This interface is only to be used when initializing
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3886
     instances or by image readers. Calling for a change of an
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3887
     existing image may confuse later pixel interpretation
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3888
     (it does not care for colormaps and/or cached device image flushing)."
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3889
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3890
    self bits:aByteArrayArg.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3891
    self colorMapFromArray:clrMapArg.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3892
!
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3893
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3894
bits:aByteArrayArg colorMapFromArray:clrMapArg mask:maskArg
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3895
    "set the raw data.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3896
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3897
     This interface is only to be used when initializing
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3898
     instances or by image readers. Calling for a change of an
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3899
     existing image may confuse later pixel interpretation
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3900
     (it does not care for colormaps and/or cached device image flushing)."
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3901
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3902
    self bits:aByteArrayArg.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3903
    self colorMapFromArray:clrMapArg.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3904
    self mask:maskArg
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3905
!
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3906
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3907
bits:aByteArrayArg mask:maskArg
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3908
    "set the raw data.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3909
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3910
     This interface is only to be used when initializing
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3911
     instances or by image readers. Calling for a change of an
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3912
     existing image may confuse later pixel interpretation
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3913
     (it does not care for colormaps and/or cached device image flushing)."
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3914
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3915
    self bits:aByteArrayArg.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3916
    self mask:maskArg
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3917
!
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3918
4115
0e783379a6b0 Use ByteArray for bitsPerSample (255 should be enough ;-)
Stefan Vogel <sv@exept.de>
parents: 4109
diff changeset
  3919
bitsPerSample:aCollection
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  3920
    "set the number of bits per sample.
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3921
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3922
     This interface is only to be used when initializing
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3923
     instances or by image readers. Calling for a change of an
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3924
     existing image may confuse later pixel interpretation."
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3925
7373
61933c223183 added metaData instVar (for free use by image reader)
Claus Gittinger <cg@exept.de>
parents: 7363
diff changeset
  3926
    "/ 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
  3927
    "/ at least for the most common cases.
7363
778803c164cd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7349
diff changeset
  3928
    "/ Prevents writers to do what is described above.
778803c164cd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7349
diff changeset
  3929
    "/ 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
  3930
    bitsPerSample :=
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3931
        #(
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3932
            #[ 8 8 8 ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3933
            #[ 4 4 4 ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3934
            #[ 8 ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3935
            #[ 4 ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3936
            #[ 2 ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3937
            #[ 1 ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3938
        ) detect:[:bps | bps sameContentsAs:aCollection] ifNone:[aCollection asByteArray].
7363
778803c164cd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7349
diff changeset
  3939
6899
4530c3bfcef8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6896
diff changeset
  3940
    samplesPerPixel isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3941
        samplesPerPixel := bitsPerSample size.
6899
4530c3bfcef8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6896
diff changeset
  3942
    ].
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3943
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3944
    "Modified: 23.4.1996 / 11:08:31 / cg"
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3945
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3946
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3947
depth:d
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3948
    "set the depth of the image.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3949
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3950
     This interface is only to be used when initializing
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3951
     instances or by image readers. Calling for a change of an
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3952
     existing image may confuse later pixel interpretation."
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3953
1362
454d644f6ff7 set depth & bitsPerPixel for ST-80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 1349
diff changeset
  3954
    depth := self depth.
7180
40dcb4638d93 #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 7176
diff changeset
  3955
    "/ bitsPerPixel := d.
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3956
    d == 24 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3957
        samplesPerPixel := 3.
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  3958
        bitsPerSample := #[8 8 8]
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3959
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3960
        d == 32 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3961
            samplesPerPixel := 4.
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  3962
            bitsPerSample := #[8 8 8 8]
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3963
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3964
            d == 16 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3965
                samplesPerPixel := 3.
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  3966
                bitsPerSample := #[5 5 5].
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3967
                "/ bitsPerPixel := 15.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3968
            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3969
                samplesPerPixel := 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3970
                bitsPerSample := ByteArray with:d
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3971
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3972
        ]
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3973
    ]
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3974
4757
60d27f8e65bb some fixes for depth32
Claus Gittinger <cg@exept.de>
parents: 4745
diff changeset
  3975
    "Modified: / 27-05-2007 / 16:59:47 / cg"
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  3976
    "Modified: / 30-01-2017 / 19:36:00 / stefan"
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3977
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3978
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3979
extent:anExtent
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3980
    "set the images extent.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3981
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3982
     This interface is only to be used when initializing
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3983
     instances or by image readers. Calling for a change of an
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3984
     existing image may confuse later pixel interpretation."
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3985
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3986
    width := anExtent x.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3987
    height := anExtent y
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3988
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3989
    "Modified: 23.4.1996 / 11:08:38 / cg"
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3990
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3991
5326
0443d8649cac *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5319
diff changeset
  3992
hasAlphaChannel
0443d8649cac *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5319
diff changeset
  3993
    ^ false
0443d8649cac *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5319
diff changeset
  3994
!
0443d8649cac *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5319
diff changeset
  3995
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3996
height:aNumber
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3997
    "set the height of the image.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3998
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3999
     This interface is only to be used when initializing
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4000
     instances or by image readers. Calling for a change of an
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4001
     existing image may confuse later pixel interpretation."
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4002
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4003
    height := aNumber
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4004
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4005
    "Modified: 23.4.1996 / 11:08:40 / cg"
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4006
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4007
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4008
photometric:aSymbol
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4009
    "set the photometric interpretation of the pixel values.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4010
     The argument, aSymbol is one of:
7960
8d8cace1b6e0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7958
diff changeset
  4011
        #blackIs0, #whiteIs0, #palette, #rgb, #rgba
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4012
     See TIFF documentation, from which the photometric concept is borrowed.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4013
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4014
     This interface is only to be used when initializing
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4015
     instances or by image readers. Calling for a change of an
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4016
     existing image may confuse later pixel interpretation."
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4017
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4018
    |b|
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4019
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  4020
    photometric := aSymbol.
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  4021
    bitsPerSample isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4022
        photometric == #rgb ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4023
            b := self class imageDepth // 3.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4024
            bitsPerSample := ByteArray with:b with:b with:b
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4025
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4026
            bitsPerSample := ByteArray with:(self class imageDepth)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4027
        ].
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  4028
    ].
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  4029
    samplesPerPixel isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4030
        photometric == #rgb ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4031
            samplesPerPixel := 3
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4032
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4033
            samplesPerPixel := 1
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4034
        ]
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  4035
    ].
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  4036
7960
8d8cace1b6e0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7958
diff changeset
  4037
    "Modified: / 10-06-1996 / 18:21:29 / cg"
8d8cace1b6e0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7958
diff changeset
  4038
    "Modified (comment): / 25-02-2017 / 10:41:53 / cg"
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4039
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4040
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4041
samplesPerPixel:aNumber
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4042
    "set the array of samples per pixel.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4043
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4044
     This interface is only to be used when initializing
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4045
     instances or by image readers. Calling for a change of an
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4046
     existing image may confuse later pixel interpretation."
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4047
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4048
    samplesPerPixel := aNumber
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4049
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4050
    "Modified: 23.4.1996 / 11:08:45 / cg"
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  4051
!
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  4052
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4053
width:aNumber
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4054
    "set the width of the image.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4055
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4056
     This interface is only to be used when initializing
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4057
     instances or by image readers. Calling for a change of an
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4058
     existing image may confuse later pixel interpretation."
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4059
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4060
    width := aNumber
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4061
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4062
    "Modified: 23.4.1996 / 11:08:48 / cg"
100
1b0b86c77397 co !!:*
claus
parents: 89
diff changeset
  4063
!
1b0b86c77397 co !!:*
claus
parents: 89
diff changeset
  4064
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  4065
width:w height:h
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4066
    "set the width and height of the image.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4067
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4068
     This interface is only to be used when initializing
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4069
     instances or by image readers. Calling for a change of an
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4070
     existing image may confuse later pixel interpretation."
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4071
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4072
    width := w.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4073
    height := h
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4074
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4075
    "Modified: 23.4.1996 / 11:08:53 / cg"
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  4076
!
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
  4077
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4078
width:w height:h depth:d
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4079
    "set the width, height and depth of the image.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4080
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4081
     This interface is only to be used when initializing
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4082
     instances or by image readers. Calling for a change of an
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4083
     existing image may confuse later pixel interpretation."
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4084
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4085
    width := w.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4086
    height := h.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4087
    self depth:d.
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4088
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4089
    "Modified: 23.4.1996 / 11:08:56 / cg"
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4090
!
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4091
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4092
width:w height:h depth:d fromArray:bits
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4093
    "set the width, height, depth and pixels of the image.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4094
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4095
     This interface is only to be used when initializing
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4096
     instances or by image readers. Calling for a change of an
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4097
     existing image may confuse later pixel interpretation."
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4098
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4099
    width := w.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4100
    height := h.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4101
    self depth:d.
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
  4102
    self bits:bits
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4103
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4104
    "Modified: 23.4.1996 / 11:08:59 / cg"
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4105
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4106
1433
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  4107
width:w height:h depth:d palette:aColormap
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  4108
    "set the width, height and depth of the image.
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  4109
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  4110
     This interface is only to be used when initializing
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  4111
     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
  4112
     existing image may confuse later pixel interpretation."
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  4113
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  4114
    width := w.
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  4115
    height := h.
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  4116
    self depth:d.
3863
b7ba8a04be25 always ensure colorMap is a real colorMap
Claus Gittinger <cg@exept.de>
parents: 3861
diff changeset
  4117
    self setColorMap:aColormap.
1433
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  4118
    aColormap notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4119
        photometric := #palette
4955
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
  4120
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4121
        photometric := #blackIs0
4955
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
  4122
    ].
1433
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  4123
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  4124
    "Modified: 23.4.1996 / 11:08:56 / cg"
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  4125
    "Created: 6.3.1997 / 15:23:57 / cg"
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  4126
!
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  4127
6900
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  4128
width:w height:h photometric:p
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  4129
    "set the width, height and photometric of the image.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  4130
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  4131
     This interface is only to be used when initializing
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  4132
     instances or by image readers. Calling for a change of an
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  4133
     existing image may confuse later pixel interpretation."
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  4134
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  4135
    width := w.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  4136
    height := h.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  4137
    self photometric:p.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  4138
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  4139
    "Modified: 23.4.1996 / 11:08:56 / cg"
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  4140
!
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  4141
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4142
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
  4143
    "set all relevant internal state of the image.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4144
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4145
     This interface is only to be used when initializing
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4146
     instances or by image readers. Calling for a change of an
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4147
     existing image may confuse later pixel interpretation."
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4148
894
1041c0edbd35 prepare to read mask/alpha channel
Claus Gittinger <cg@exept.de>
parents: 891
diff changeset
  4149
    ^ self
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4150
        width:w
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4151
        height:h
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4152
        photometric:p
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4153
        samplesPerPixel:spp
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4154
        bitsPerSample:bps
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4155
        colorMap:cm
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4156
        bits:pixels
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4157
        mask:nil
894
1041c0edbd35 prepare to read mask/alpha channel
Claus Gittinger <cg@exept.de>
parents: 891
diff changeset
  4158
1041c0edbd35 prepare to read mask/alpha channel
Claus Gittinger <cg@exept.de>
parents: 891
diff changeset
  4159
    "Modified: 20.6.1996 / 17:10:24 / cg"
1041c0edbd35 prepare to read mask/alpha channel
Claus Gittinger <cg@exept.de>
parents: 891
diff changeset
  4160
!
1041c0edbd35 prepare to read mask/alpha channel
Claus Gittinger <cg@exept.de>
parents: 891
diff changeset
  4161
1041c0edbd35 prepare to read mask/alpha channel
Claus Gittinger <cg@exept.de>
parents: 891
diff changeset
  4162
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
  4163
    "set all relevant internal state of the image.
1041c0edbd35 prepare to read mask/alpha channel
Claus Gittinger <cg@exept.de>
parents: 891
diff changeset
  4164
1041c0edbd35 prepare to read mask/alpha channel
Claus Gittinger <cg@exept.de>
parents: 891
diff changeset
  4165
     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
  4166
     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
  4167
     existing image may confuse later pixel interpretation."
1041c0edbd35 prepare to read mask/alpha channel
Claus Gittinger <cg@exept.de>
parents: 891
diff changeset
  4168
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4169
    width := w.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4170
    height := h.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4171
    photometric := p.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4172
    samplesPerPixel := spp.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4173
    bitsPerSample := bps.
3863
b7ba8a04be25 always ensure colorMap is a real colorMap
Claus Gittinger <cg@exept.de>
parents: 3861
diff changeset
  4174
    self setColorMap:cm.
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
  4175
    self bits:pixels.
894
1041c0edbd35 prepare to read mask/alpha channel
Claus Gittinger <cg@exept.de>
parents: 891
diff changeset
  4176
    mask := m.
1041c0edbd35 prepare to read mask/alpha channel
Claus Gittinger <cg@exept.de>
parents: 891
diff changeset
  4177
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4178
    "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
  4179
    "Created: 20.6.1996 / 17:09:53 / cg"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  4180
! !
48194c26a46c Initial revision
claus
parents:
diff changeset
  4181
5135
0a2a850a20cc *** empty log message ***
sr
parents: 5126
diff changeset
  4182
8726
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4183
!Image methodsFor:'comparing'!
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4184
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4185
= anImage
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4186
    anImage species = self species ifFalse:[^ false].
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4187
    anImage depth = self depth ifFalse:[^ false].
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4188
    anImage width == self width ifFalse:[^ false].
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4189
    anImage height == self height ifFalse:[^ false].
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4190
    anImage bitsPerPixel == self bitsPerPixel ifFalse:[^ false].
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4191
    anImage colorMap = self colorMap ifFalse:[^ false].
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4192
    anImage bitsPerSample = self bitsPerSample ifFalse:[^ false].
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4193
    anImage photometric = self photometric ifFalse:[^ false].
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4194
    anImage mask = self mask ifFalse:[^ false].
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4195
    anImage pixelFunction == self pixelFunction ifFalse:[^ false].
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4196
    anImage bits = self bits ifFalse:[^ false].
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4197
    ^ true
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4198
!
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4199
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4200
hash
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4201
    ^ (((depth hash
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4202
    bitXor:width hash)
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4203
    bitXor:height hash)
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4204
    bitXor:photometric hash)
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4205
    bitXor:((bytes ? #[0]) first hash)
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4206
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4207
    "
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4208
     Image fromScreen hash
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4209
    "
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4210
! !
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4211
2205
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4212
!Image methodsFor:'conversion helpers'!
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4213
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4214
rgbColormapFor:aDevice
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4215
    "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
  4216
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4217
    |nColors    "{ Class: SmallInteger }"
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4218
     scaleRed scaleGreen scaleBlue
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4219
     redShift   "{ Class: SmallInteger }"
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4220
     greenShift "{ Class: SmallInteger }"
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4221
     blueShift  "{ Class: SmallInteger }"
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4222
     colorValues|
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4223
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4224
    "/ 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
  4225
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4226
    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
  4227
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4228
    "/ 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
  4229
    "/ (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
  4230
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4231
    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
  4232
    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
  4233
    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
  4234
    redShift := aDevice shiftRed.
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4235
    greenShift := aDevice shiftGreen.
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4236
    blueShift := aDevice shiftBlue.
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4237
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4238
    colorValues := Array uninitializedNew:nColors.
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4239
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4240
    0 to:nColors-1 do:[:pixel |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4241
        |clr rv gv bv v "{ Class: SmallInteger }" |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4242
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4243
        clr := self colorFromValue:pixel.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4244
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4245
        rv := (clr red * scaleRed) rounded.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4246
        gv := (clr green * scaleGreen) rounded.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4247
        bv := (clr blue * scaleBlue) rounded.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4248
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4249
        v := rv bitShift:redShift.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4250
        v := v bitOr:(gv bitShift:greenShift).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4251
        v := v bitOr:(bv bitShift:blueShift).
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
        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
  4254
"/ clr print. ' ' print.
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4255
"/ 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
  4256
"/ ' -> ' print. v printNL.
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4257
    ].
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4258
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4259
    ^ colorValues
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4260
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4261
    "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
  4262
! !
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4263
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  4264
!Image methodsFor:'converting'!
48194c26a46c Initial revision
claus
parents:
diff changeset
  4265
8113
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4266
anyImageAsTrueColorFormOn:aDevice
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4267
    "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
  4268
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4269
    |form bestFormat usedDeviceDepth usedDeviceBitsPerPixel
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4270
     pixelValue "{ Class: SmallInteger }"
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4271
     h          "{ Class: SmallInteger }"
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4272
     w          "{ Class: SmallInteger }"
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4273
     pixelArray newPixelArray i rgbValue|
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4274
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4275
    bestFormat := self bestSupportedImageFormatFor:aDevice.
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4276
    usedDeviceDepth := bestFormat at:#depth.
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4277
    usedDeviceBitsPerPixel := bestFormat at:#bitsPerPixel.
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4278
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4279
    i := (Image implementorForDepth:usedDeviceBitsPerPixel) new.
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4280
    i width:width height:height.
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4281
    i createPixelStore.
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4282
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4283
    "/ now, walk over the image and replace each pixel
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4284
    h := height - 1.
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4285
    w := width - 1.
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4286
    pixelArray := self pixelArraySpecies new:width.
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4287
    newPixelArray := i pixelArraySpecies new:width.
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4288
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4289
    0 to:h do:[:y |
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4290
        self rowAt:y into:pixelArray.
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4291
        0 to:w do:[:x |
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4292
            pixelValue := pixelArray at:(x+1).
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4293
            rgbValue := self rgbFromValue:pixelValue.
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4294
            newPixelArray at:(x+1) put:rgbValue.
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4295
        ].
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4296
        i rowAt:y putAll:newPixelArray.
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4297
    ].
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4298
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4299
    form := Form width:width height:height depth:usedDeviceDepth onDevice:aDevice.
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4300
    form isNil ifTrue:[^ nil].
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4301
    form initGC.
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4302
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4303
    form
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4304
        copyBitsFrom:i bits
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4305
        bitsPerPixel:usedDeviceBitsPerPixel
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4306
        depth:usedDeviceDepth
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4307
        padding:8
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4308
        width:width height:height
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4309
        x:0 y:0
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4310
        toX:0 y:0.
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4311
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4312
    ^ form
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4313
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4314
    "Created: / 27-08-2017 / 21:06:14 / cg"
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4315
!
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4316
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  4317
asFormOn:aDevice
72
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
  4318
    "get a device form, with best possible approximation.
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
  4319
     remember it in case someone asks again."
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
  4320
1041
30452cf0805b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 942
diff changeset
  4321
    |form visual|
72
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
  4322
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
  4323
    ((aDevice == device) and:[deviceForm notNil]) ifTrue:[^ deviceForm].
8282
e67d591cbebb #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8279
diff changeset
  4324
    self hasAlphaChannel ifTrue:[
e67d591cbebb #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8279
diff changeset
  4325
        "/ no need for a deviceForm - we need to recompute with every draw anyway...
e67d591cbebb #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8279
diff changeset
  4326
        ^ self
e67d591cbebb #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8279
diff changeset
  4327
    ].
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  4328
901
6cacd0f4eef0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 896
diff changeset
  4329
    mask notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4330
        mask := mask onDevice:aDevice
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
  4331
    ].
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
  4332
    bytes isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4333
        pixelFunction notNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4334
            self computeBitsFromPixelFunction.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4335
        ]
901
6cacd0f4eef0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 896
diff changeset
  4336
    ].
6cacd0f4eef0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 896
diff changeset
  4337
8103
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  4338
    visual := aDevice visualType.
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  4339
    
1623
56c2fd4250c8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1611
diff changeset
  4340
    (aDevice depth == 1
8524
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4341
     or:[aDevice hasGrayscales not]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4342
        form := self asMonochromeFormOn:aDevice.
2212
ddc9cb6aeb73 more caching if device forms.
Claus Gittinger <cg@exept.de>
parents: 2206
diff changeset
  4343
    ] ifFalse:[
8103
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  4344
        (visual == #StaticGray) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4345
            form := self asGrayFormOn:aDevice.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4346
        ] ifFalse:[
8103
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  4347
            (visual == #PseudoColor or:[visual == #StaticColor]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4348
                form := self asPseudoFormQuickOn:aDevice.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4349
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4350
        ]
2212
ddc9cb6aeb73 more caching if device forms.
Claus Gittinger <cg@exept.de>
parents: 2206
diff changeset
  4351
    ].
ddc9cb6aeb73 more caching if device forms.
Claus Gittinger <cg@exept.de>
parents: 2206
diff changeset
  4352
ddc9cb6aeb73 more caching if device forms.
Claus Gittinger <cg@exept.de>
parents: 2206
diff changeset
  4353
    form isNil ifTrue:[
8524
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4354
        photometric isNil ifTrue:[ 
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4355
            "/ kludge: repair a 'should not happen' situation...
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4356
            self repairPhotometric 
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4357
        ].
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4358
        (photometric == #palette) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4359
            form := self paletteImageAsFormOn:aDevice
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4360
        ] ifFalse:[
8524
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4361
            "#(rgb rgba argb cmy cmyk blackIs0 whiteIs0) includes:photometric and any other"
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4362
            form := self rgbImageAsFormOn:aDevice
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4363
        ].
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4364
    ].
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4365
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4366
    (form notNil and:[device isNil or:[aDevice == device]]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4367
        "remember this form in the receiver ..."
8524
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4368
        form := form asImageForm.
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4369
        deviceForm := form.
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4370
        maskedPixelsAre0 := nil.
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4371
        device isNil ifTrue:[
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4372
            device := aDevice.
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4373
            Lobby register:self
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4374
        ] ifFalse:[
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4375
            Lobby registerChange:self
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4376
        ].
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4377
        mask notNil ifTrue:[
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4378
            self clearMaskedPixels.
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4379
        ].
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4380
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4381
        "
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4382
         can save space, by not keeping the images data-bits
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4383
         twice (here and in the device form)
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4384
        "
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4385
        form forgetBits
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  4386
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  4387
72
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
  4388
    ^ form
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4389
4173
100ca435fb0e New class Form::ImageForm for Forms that are created from Images.
Stefan Vogel <sv@exept.de>
parents: 4168
diff changeset
  4390
    "
100ca435fb0e New class Form::ImageForm for Forms that are created from Images.
Stefan Vogel <sv@exept.de>
parents: 4168
diff changeset
  4391
     |i|
100ca435fb0e New class Form::ImageForm for Forms that are created from Images.
Stefan Vogel <sv@exept.de>
parents: 4168
diff changeset
  4392
100ca435fb0e New class Form::ImageForm for Forms that are created from Images.
Stefan Vogel <sv@exept.de>
parents: 4168
diff changeset
  4393
     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
  4394
     (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
  4395
    "
100ca435fb0e New class Form::ImageForm for Forms that are created from Images.
Stefan Vogel <sv@exept.de>
parents: 4168
diff changeset
  4396
8103
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  4397
    "Modified: / 25-08-2017 / 09:41:22 / cg"
8524
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4398
    "Modified (format): / 19-10-2018 / 16:23:17 / Stefan Vogel"
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4399
!
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4400
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4401
asGrayFormOn:aDevice
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4402
    "get a gray device form"
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4403
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4404
    ^ self asGrayFormOn:aDevice dither:DitherAlgorithm.
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4405
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4406
    "
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4407
     |i|
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4408
3476
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
  4409
     i := Image fromFile:'goodies/bitmaps/claus.gif'.
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4410
     (i asGrayFormOn:Display) inspect.
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4411
    "
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4412
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4413
    "Modified: 10.6.1996 / 17:39:30 / cg"
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4414
    "Created: 10.6.1996 / 18:44:42 / cg"
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4415
!
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4416
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4417
asGrayFormOn:aDevice dither:aDitherAlgorithm
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4418
    "get a greyscale device form, using aDitherAlgorithm."
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4419
1063
ba1bf8091bc1 unused variable cleanup
Claus Gittinger <cg@exept.de>
parents: 1057
diff changeset
  4420
    |depth|
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4421
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4422
    depth := aDevice depth.
1623
56c2fd4250c8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1611
diff changeset
  4423
    (depth == 1
56c2fd4250c8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1611
diff changeset
  4424
    or:[aDevice hasGrayscales not]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4425
        ^ self asMonochromeFormOn:aDevice
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4426
    ].
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
    (aDitherAlgorithm isNil
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4429
    or:[aDitherAlgorithm == #threshold]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4430
        ^ self asThresholdGrayFormOn:aDevice
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4431
    ].
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4432
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4433
    (aDitherAlgorithm == #pattern
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4434
    or:[aDitherAlgorithm == #ordered]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4435
        ^ self asOrderedDitheredGrayFormOn:aDevice
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4436
    ].
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
    ^ self asFloydSteinbergDitheredGrayFormOn:aDevice.
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4439
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4440
    "Created: 10.6.1996 / 18:42:01 / cg"
852
318a6190e31d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 851
diff changeset
  4441
    "Modified: 14.6.1996 / 15:17:28 / cg"
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4442
!
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4443
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  4444
asGrayImageDepth:depthArg
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4445
    "get a gray image from the receiver"
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4446
8209
2f0645cca9f3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8208
diff changeset
  4447
    ((self colorMap notNil and:[depthArg between:self depth and:8])
2f0645cca9f3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8208
diff changeset
  4448
     or:[self depth >= 8 "do need for dither" ]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4449
        ^ self copyWithColorMapProcessing:[:clr | Color brightness:(clr brightness)].
4417
5e5d9b696293 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  4450
    ].
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  4451
    ^ self asGrayImageDepth:depthArg dither:DitherAlgorithm.
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  4452
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  4453
    "
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  4454
     |i|
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  4455
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  4456
     i := Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif'.
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  4457
     (i asGrayImageDepth:16).
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  4458
     (i asGrayImageDepth:4).
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  4459
    "
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  4460
8209
2f0645cca9f3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8208
diff changeset
  4461
    "Modified: / 10-06-1996 / 17:39:30 / cg"
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  4462
    "Created: / 10-06-1996 / 19:07:08 / cg"
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  4463
    "Modified: / 30-01-2017 / 20:13:06 / stefan"
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  4464
    "Modified (comment): / 31-01-2017 / 13:25:29 / stefan"
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4465
!
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4466
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4467
asGrayImageDepth:depth dither:aDitherAlgorithm
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4468
    "get a greyscale image, using aDitherAlgorithm."
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4469
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4470
    (aDitherAlgorithm isNil
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4471
    or:[aDitherAlgorithm == #threshold]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4472
        ^ self asThresholdGrayImageDepth:depth
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4473
    ].
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4474
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4475
    (aDitherAlgorithm == #pattern
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4476
    or:[aDitherAlgorithm == #ordered]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4477
        ^ self asOrderedDitheredGrayImageDepth:depth
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4478
    ].
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4479
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4480
    ^ self asFloydSteinbergDitheredGrayImageDepth:depth
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4481
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4482
    "Created: 10.6.1996 / 19:08:21 / cg"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  4483
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  4484
4423
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4485
asImageWithDepth:depth
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4486
    "return a new image with another depth. Notice that this
7242
bf3a75233d55 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 7230
diff changeset
  4487
     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
  4488
     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
  4489
     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
  4490
     In the other case, use one of the dithering converters"
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4491
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4492
    |imageClass|
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4493
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4494
    imageClass := Image implementorForDepth:depth.
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4495
    ^ imageClass fromImage:self
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4496
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4497
    "
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4498
     |i|
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4499
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4500
     i := Image fromFile:'goodies/bitmaps/gifImages/claus.gif'.
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4501
     (i asImageWithDepth:24) inspect.
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4502
    "
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4503
    "
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4504
     |i|
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4505
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4506
     i := Image fromFile:'goodies/bitmaps/gifImages/claus.gif'.
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4507
     (i asImageWithDepth:4) inspect.
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4508
    "
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4509
!
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4510
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  4511
asMonochromeFormOn:aDevice
48194c26a46c Initial revision
claus
parents:
diff changeset
  4512
    "get a monochrome device form"
48194c26a46c Initial revision
claus
parents:
diff changeset
  4513
72
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
  4514
    |form|
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
  4515
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
  4516
    ((aDevice == device) and:[monoDeviceForm notNil]) ifTrue:[^ monoDeviceForm].
4390
8d752f4cd9e2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4380
diff changeset
  4517
    self depth == 1 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4518
        ((aDevice == device) and:[deviceForm notNil]) ifTrue:[^ deviceForm].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4519
        ^ self asFormOn:aDevice
1935
b71d2b3766b3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1932
diff changeset
  4520
    ].
72
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
  4521
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4522
    form := self asMonochromeFormOn:aDevice dither:DitherAlgorithm.
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  4523
72
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
  4524
    (device isNil or:[aDevice == device]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4525
        "remember this form in the receiver ..."
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4526
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4527
        form notNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4528
            form := form asImageForm.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4529
            monoDeviceForm := form.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4530
            device isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4531
                device := aDevice.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4532
                Lobby register:self
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4533
            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4534
                Lobby registerChange:self
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4535
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4536
            "
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4537
             can save space, by not keeping the images data-bits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4538
             twice (here and in the device form)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4539
            "
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4540
            form forgetBits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4541
        ]
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  4542
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  4543
72
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
  4544
    ^ form
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4545
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4546
    "
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4547
     |i|
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4548
4173
100ca435fb0e New class Form::ImageForm for Forms that are created from Images.
Stefan Vogel <sv@exept.de>
parents: 4168
diff changeset
  4549
     i := Image fromFile:'goodies/bitmaps/gifImages/claus.gif'.
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4550
     (i asMonochromeFormOn:Display) inspect.
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4551
    "
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4552
1935
b71d2b3766b3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1932
diff changeset
  4553
    "Modified: 23.10.1997 / 00:44:59 / cg"
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4554
!
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4555
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4556
asMonochromeFormOn:aDevice dither:aDitherAlgorithm
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4557
    "get a monochrome device form, using aDitherAlgorithm."
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4558
1063
ba1bf8091bc1 unused variable cleanup
Claus Gittinger <cg@exept.de>
parents: 1057
diff changeset
  4559
    |monoBits|
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4560
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4561
    (aDitherAlgorithm isNil
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4562
    or:[aDitherAlgorithm == #threshold]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4563
        ^ self asThresholdMonochromeFormOn:aDevice
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4564
    ].
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4565
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4566
    aDitherAlgorithm == #burkes ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4567
        monoBits := self burkesDitheredMonochromeBits.
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4568
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4569
        aDitherAlgorithm == #stevensonArce ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4570
            monoBits := self stevensonArceDitheredMonochromeBits.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4571
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4572
            (aDitherAlgorithm == #pattern
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4573
            or:[aDitherAlgorithm == #ordered]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4574
                ^ self asOrderedDitheredGrayFormOn:aDevice.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4575
            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4576
                ^ self asFloydSteinbergDitheredMonochromeFormOn:aDevice.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4577
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4578
        ]
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4579
    ].
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4580
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4581
    "/
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4582
    "/ make its pixel interpretation correct for the device
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4583
    "/
816
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
  4584
    ^ self makeDeviceMonochromeBitmapOn:aDevice fromArray:monoBits
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
  4585
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
  4586
    "Modified: 10.6.1996 / 20:18:05 / cg"
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4587
!
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4588
873
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4589
asPseudoFormQuickOn:aDevice
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4590
    "return a pseudo-deviceForm from the image.
878
b99add8dc742 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 874
diff changeset
  4591
     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
  4592
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  4593
    |f d
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  4594
     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
  4595
     w            "{ Class: SmallInteger }"
e8ceedf9aeab code cleanup & a few more SmallInteger type hints
Claus Gittinger <cg@exept.de>
parents: 2760
diff changeset
  4596
     h            "{ Class: SmallInteger }"
e8ceedf9aeab code cleanup & a few more SmallInteger type hints
Claus Gittinger <cg@exept.de>
parents: 2760
diff changeset
  4597
     dDev         "{ Class: SmallInteger }"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  4598
     nClr         "{ Class: SmallInteger }"
2772
e8ceedf9aeab code cleanup & a few more SmallInteger type hints
Claus Gittinger <cg@exept.de>
parents: 2760
diff changeset
  4599
     bytesPerLine "{ Class: SmallInteger }"
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
  4600
     usedColors pix fmt bytes|
873
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4601
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4602
    d := self depth.
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4603
    (d == 1
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4604
    or:[d == 2
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4605
    or:[d == 4
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4606
    or:[d == 8]]]) ifFalse:[^ nil].
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4607
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
  4608
    bytes := self bits.
2772
e8ceedf9aeab code cleanup & a few more SmallInteger type hints
Claus Gittinger <cg@exept.de>
parents: 2760
diff changeset
  4609
    w := width.
e8ceedf9aeab code cleanup & a few more SmallInteger type hints
Claus Gittinger <cg@exept.de>
parents: 2760
diff changeset
  4610
    h := height.
e8ceedf9aeab code cleanup & a few more SmallInteger type hints
Claus Gittinger <cg@exept.de>
parents: 2760
diff changeset
  4611
2530
81b8ffe7662f use new supportedImageFormat query from Device
Claus Gittinger <cg@exept.de>
parents: 2527
diff changeset
  4612
    "/ 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
  4613
    "/ if the padding is not supported: fail
81b8ffe7662f use new supportedImageFormat query from Device
Claus Gittinger <cg@exept.de>
parents: 2527
diff changeset
  4614
81b8ffe7662f use new supportedImageFormat query from Device
Claus Gittinger <cg@exept.de>
parents: 2527
diff changeset
  4615
    dDev := aDevice depth.
81b8ffe7662f use new supportedImageFormat query from Device
Claus Gittinger <cg@exept.de>
parents: 2527
diff changeset
  4616
    (bytesPerLine := dDev) == 8 ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4617
        bytesPerLine := (w * dDev + 7) // 8.
2530
81b8ffe7662f use new supportedImageFormat query from Device
Claus Gittinger <cg@exept.de>
parents: 2527
diff changeset
  4618
    ].
81b8ffe7662f use new supportedImageFormat query from Device
Claus Gittinger <cg@exept.de>
parents: 2527
diff changeset
  4619
2532
Claus Gittinger <cg@exept.de>
parents: 2530
diff changeset
  4620
    fmt := aDevice supportedImageFormatForDepth:dDev.
2530
81b8ffe7662f use new supportedImageFormat query from Device
Claus Gittinger <cg@exept.de>
parents: 2527
diff changeset
  4621
    fmt isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4622
        "/ cannot draw directly
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4623
        ^ nil
2530
81b8ffe7662f use new supportedImageFormat query from Device
Claus Gittinger <cg@exept.de>
parents: 2527
diff changeset
  4624
    ].
81b8ffe7662f use new supportedImageFormat query from Device
Claus Gittinger <cg@exept.de>
parents: 2527
diff changeset
  4625
    (bytesPerLine * 8) \\ (fmt at:#padding) == 0 ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4626
        "/ mhmh - ought to repad here;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4627
        "/ however, the nonQuick converter does it.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4628
        ^ nil
2530
81b8ffe7662f use new supportedImageFormat query from Device
Claus Gittinger <cg@exept.de>
parents: 2527
diff changeset
  4629
    ].
81b8ffe7662f use new supportedImageFormat query from Device
Claus Gittinger <cg@exept.de>
parents: 2527
diff changeset
  4630
873
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4631
    "/ see if all of the images colors are representable
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4632
    "/ on the device
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4633
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4634
    bits := self bitsPerPixel.
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4635
    nClr := (1 bitShift:bits).
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4636
    cMap := Array new:nClr.
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4637
    idMap := ByteArray new:nClr.
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4638
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4639
    photometric == #palette ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4640
        nClr := nClr min:(colorMap size)
873
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4641
    ].
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4642
878
b99add8dc742 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 874
diff changeset
  4643
    d == 8 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4644
        usedColors := bytes usedValues.    "gets us an array filled with used values"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4645
        1 to:nClr do:[:pixel |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4646
            (usedColors includes:(pixel - 1)) ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4647
                clr := Color black
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4648
            ] ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4649
                clr := self colorFromValue:pixel-1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4650
                clr := clr exactOn:aDevice.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4651
                clr isNil ifTrue:[^ nil].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4652
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4653
            (pix := clr colorId) isNil ifTrue:[^ nil].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4654
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4655
            cMap at:(pixel) put:clr.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4656
            idMap at:(pixel) put:pix.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4657
        ].
878
b99add8dc742 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 874
diff changeset
  4658
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4659
        1 to:nClr do:[:pixel |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4660
            clr := self colorFromValue:pixel-1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4661
            clr := clr exactOn:aDevice.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4662
            clr isNil ifTrue:[^ nil].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4663
            (pix := clr colorId) isNil ifTrue:[^ nil].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4664
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4665
            cMap at:(pixel) put:clr.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4666
            idMap at:(pixel) put:pix.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4667
        ].
873
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4668
    ].
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4669
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4670
    "/ got all colors; good - simply change depth & translate pixels
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4671
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4672
    (d == 8 and:[dDev == 8]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4673
        "/ only translate
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4674
        temp := ByteArray uninitializedNew:(w * h).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4675
        bytes expandPixels:8         "xlate only"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4676
                    width:w
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4677
                   height:h
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4678
                     into:temp
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4679
                  mapping:idMap.
873
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4680
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4681
        "/ stupid: expandPixels can only handle any-to-8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4682
        "/ compressPixels can only handle 8-to-any
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4683
        "/ However, those methods are faster
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4684
        "/ - even if we convert twice.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4685
        "/ Therefore, convert first from myDepth to 8,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4686
        "/ then from 8 to the device depth.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4687
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4688
        d ~~ 8 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4689
            temp8 := ByteArray uninitializedNew:(w * h).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4690
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4691
            bytes expandPixels:d
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4692
                         width:w
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4693
                        height:h
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4694
                          into:temp8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4695
                       mapping:idMap.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4696
            idMap := nil.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4697
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4698
            temp8 := bytes.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4699
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4700
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4701
        dDev ~~ 8 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4702
            temp := ByteArray uninitializedNew:(bytesPerLine * h).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4703
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4704
            temp8 compressPixels:dDev
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4705
                         width:w
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4706
                        height:h
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4707
                          into:temp
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4708
                       mapping:idMap.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4709
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4710
            temp := temp8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4711
        ].
4780
03c3e810a584 Change senders of obsolete messages Form>>...on: to ...onDevice:
Stefan Vogel <sv@exept.de>
parents: 4769
diff changeset
  4712
    ].
03c3e810a584 Change senders of obsolete messages Form>>...on: to ...onDevice:
Stefan Vogel <sv@exept.de>
parents: 4769
diff changeset
  4713
03c3e810a584 Change senders of obsolete messages Form>>...on: to ...onDevice:
Stefan Vogel <sv@exept.de>
parents: 4769
diff changeset
  4714
    f := Form width:w height:h depth:dDev onDevice:aDevice.
873
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4715
    f isNil ifTrue:[^ nil].
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4716
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  4717
    f colorMap:cMap.
873
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4718
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  4719
    aDevice
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4720
        drawBits:temp
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4721
        depth:dDev
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4722
        padding:8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4723
        width:w
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4724
        height:h
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4725
        x:0 y:0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4726
        into:(f id) x:0 y:0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4727
        width:w
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4728
        height:h
7755
75f5eba88e77 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 7689
diff changeset
  4729
        with:(f initGC).
873
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4730
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4731
    ^ f
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4732
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4733
    "
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4734
     (
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4735
        (((Depth4Image
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4736
             width:4
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4737
             height:4
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4738
             fromArray:#[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4739
                            16r01 16r23
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4740
                            16r45 16r67
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4741
                            16r89 16rab
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4742
                            16rcd 16ref
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
               magnifiedBy:30
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4745
         )
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4746
          asPseudoFormQuickOn:Display
873
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4747
      ) inspect
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4748
     "
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4749
2113
c64f89f9ffba checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2102
diff changeset
  4750
    "Modified: / 7.5.1998 / 19:40:47 / cg"
873
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4751
!
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4752
1591
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  4753
clearMaskedPixels
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  4754
    "assuming that I already have a device representation
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  4755
     in deviceForm, clear any masked pixels.
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  4756
     This will allow faster drawing in the future."
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  4757
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  4758
    maskedPixelsAre0 == true ifTrue:[^ self].   "/ already cleared
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  4759
    mask isNil ifTrue:[^ self].         "/ no mask
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  4760
    deviceForm isNil ifTrue:[^ self].   "/ no device rep.
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  4761
    mask depth ~~ 1 ifTrue:[^ self].    "/ not done with alpha masks
8374
fb59fd51713a #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8329
diff changeset
  4762
    deviceForm isForm ifTrue:[
fb59fd51713a #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8329
diff changeset
  4763
        deviceForm clearMaskedPixels:(mask asFormOn:device).
fb59fd51713a #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8329
diff changeset
  4764
        maskedPixelsAre0 := true.
fb59fd51713a #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8329
diff changeset
  4765
    ].
fb59fd51713a #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8329
diff changeset
  4766
fb59fd51713a #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8329
diff changeset
  4767
    "Created: / 12-04-1997 / 12:18:05 / cg"
fb59fd51713a #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8329
diff changeset
  4768
    "Modified: / 26-05-2018 / 15:21:10 / Claus Gittinger"
1591
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  4769
!
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  4770
3104
edc88b280153 added #exactOn: - for Color-protocol compatibility
Claus Gittinger <cg@exept.de>
parents: 3092
diff changeset
  4771
exactOn:aDevice
3107
ed51e2c00f1d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3105
diff changeset
  4772
    "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
  4773
edc88b280153 added #exactOn: - for Color-protocol compatibility
Claus Gittinger <cg@exept.de>
parents: 3092
diff changeset
  4774
    ^ self onDevice:aDevice
edc88b280153 added #exactOn: - for Color-protocol compatibility
Claus Gittinger <cg@exept.de>
parents: 3092
diff changeset
  4775
!
edc88b280153 added #exactOn: - for Color-protocol compatibility
Claus Gittinger <cg@exept.de>
parents: 3092
diff changeset
  4776
3105
4fb4dcd2b055 more Color-protocol compatibility
Claus Gittinger <cg@exept.de>
parents: 3104
diff changeset
  4777
exactOrNearestOn:aDevice
3107
ed51e2c00f1d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3105
diff changeset
  4778
    "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
  4779
4fb4dcd2b055 more Color-protocol compatibility
Claus Gittinger <cg@exept.de>
parents: 3104
diff changeset
  4780
    ^ self onDevice:aDevice
4fb4dcd2b055 more Color-protocol compatibility
Claus Gittinger <cg@exept.de>
parents: 3104
diff changeset
  4781
!
4fb4dcd2b055 more Color-protocol compatibility
Claus Gittinger <cg@exept.de>
parents: 3104
diff changeset
  4782
7913
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4783
fromAlphaInImage:anImage
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4784
    "setup the receiver from the alpha channel of another image.
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4785
     WARNING:
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4786
       This implementation is a slow fallback (the loop over the
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4787
       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
  4788
       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
  4789
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4790
    |myDepth|
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4791
8504
2d8f21131bb3 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8497
diff changeset
  4792
    anImage photometric == #rgba ifFalse:[self error:'no an aplpha image'].
7913
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4793
    
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4794
    width := anImage width.
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4795
    height := anImage height.
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4796
    bitsPerSample := self bitsPerSample.
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4797
    samplesPerPixel := self samplesPerPixel.
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4798
    photometric := #blackIs0.
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4799
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4800
    myDepth := self depth.
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4801
    self bits:(ByteArray new: "uninitializedNew:"(self bytesPerRow * height) withAll:16rFF).
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4802
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4803
    myDepth == 1 ifTrue:[
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4804
        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
  4805
            |a|
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4806
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4807
            a := clr alphaByte.
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4808
            a < 128 ifTrue:[ self pixelAtX:x y:y put:0 ]
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4809
        ].
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4810
    ] ifFalse:[    
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4811
        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
  4812
            |a|
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4813
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4814
            a := clr alphaByte.
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4815
            a ~~ 255 ifTrue:[ self pixelAtX:x y:y put:a ]
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4816
        ].
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4817
    ].
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4818
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4819
    "Created: / 17-02-2017 / 17:43:57 / cg"
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4820
!
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4821
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4822
fromForm:aForm
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4823
    "setup the receiver from a form"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4824
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4825
    |map c0 c1|
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4826
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4827
    width := aForm width.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4828
    height := aForm height.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4829
    bitsPerSample := self bitsPerSample.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4830
    samplesPerPixel := self samplesPerPixel.
924
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  4831
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  4832
    aForm hasBits ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4833
        "/ must read the data from the device
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4834
        self from:aForm in:(0@0 extent:aForm extent).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4835
        ^ self
924
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  4836
    ].
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  4837
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  4838
    "/ the form has all data available
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  4839
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
  4840
    self bits:(aForm bits).
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4841
    map := aForm colorMap.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4842
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4843
    aForm depth == 1 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4844
        map isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4845
            photometric := #whiteIs0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4846
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4847
            c0 := map at:1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4848
            c1 := map at:2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4849
            ((c0 = Color white)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4850
            and:[c1 = Color black]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4851
                photometric := #whiteIs0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4852
            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4853
                ((c0 = Color black)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4854
                and:[c1 = Color white]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4855
                    photometric := #blackIs0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4856
                ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4857
                    photometric := #palette.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4858
                    self setColorMap:(Array with:c0 with:c1).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4859
                ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4860
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4861
        ]
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4862
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4863
        map notNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4864
            photometric := #palette.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4865
            self setColorMap:(map copy).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4866
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4867
            "
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4868
             photometric stays at default
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4869
             (which is rgb for d24, greyscale for others)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4870
            "
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4871
        ]
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4872
    ].
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4873
924
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  4874
    "Modified: 5.7.1996 / 16:24:31 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4875
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4876
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4877
fromImage:anImage
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4878
    "setup the receiver from another image.
4888
7d2d5ef445e3 conversion fixes (palette problem / implizit greyscale conversion)
Claus Gittinger <cg@exept.de>
parents: 4859
diff changeset
  4879
     Color precision may be lost, if conversion is from a higher depth image.
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  4880
     WARNING:
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  4881
     This implementation is a slow fallback (the loop over the
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4882
     source pixels is very slow). If this method is used heavily, you
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4883
     may want to redefine it in concrete subclasses for common source images."
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4884
3259
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  4885
    ^ 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
  4886
!
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  4887
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  4888
fromImage:anImage photometric:photometricOrNil
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  4889
    "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
  4890
     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
  4891
     WARNING:
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  4892
     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
  4893
     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
  4894
     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
  4895
3363
de7e8628d329 fixed conversion of 3-3-2 8-bit truecolor images
Claus Gittinger <cg@exept.de>
parents: 3273
diff changeset
  4896
    |map clr mappedRowPixels samePhotometric
1784
25b96d8904c6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1783
diff changeset
  4897
     h "{ Class: SmallInteger }"
8664
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  4898
     w "{ Class: SmallInteger }" 
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  4899
     myDepth otherDepth otherPhotometric|
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  4900
8663
b24e56c97483 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8524
diff changeset
  4901
    myDepth := self depth.
b24e56c97483 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8524
diff changeset
  4902
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4903
    width := anImage width.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4904
    height := anImage height.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4905
    bitsPerSample := self bitsPerSample.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4906
    samplesPerPixel := self samplesPerPixel.
4859
553f9013f270 only try to fetch colormap for palette images
Claus Gittinger <cg@exept.de>
parents: 4858
diff changeset
  4907
4888
7d2d5ef445e3 conversion fixes (palette problem / implizit greyscale conversion)
Claus Gittinger <cg@exept.de>
parents: 4859
diff changeset
  4908
    photometricOrNil isNil ifTrue:[
8663
b24e56c97483 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8524
diff changeset
  4909
        (myDepth <= 8) ifTrue:[
8099
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  4910
            anImage isGrayscaleImage ifTrue:[
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  4911
                self photometric:#blackIs0
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  4912
            ] ifFalse:[
8663
b24e56c97483 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8524
diff changeset
  4913
                (anImage usedColorsMax:4096) size <= (1 bitShift:myDepth) ifTrue:[
8099
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  4914
                    self photometric:#palette.
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  4915
                    self colorMap:(anImage usedColors asArray)
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  4916
                ]
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  4917
            ].    
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  4918
        ] ifFalse:[    
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  4919
            photometric := self class defaultPhotometric.
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  4920
        ].
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  4921
        
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4922
        "/ photometric := anImage photometric
4888
7d2d5ef445e3 conversion fixes (palette problem / implizit greyscale conversion)
Claus Gittinger <cg@exept.de>
parents: 4859
diff changeset
  4923
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4924
        photometricOrNil == #rgba ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4925
            samplesPerPixel == 3 ifTrue:[ photometric := #rgb ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4926
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4927
            photometric := photometricOrNil
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4928
        ].
4888
7d2d5ef445e3 conversion fixes (palette problem / implizit greyscale conversion)
Claus Gittinger <cg@exept.de>
parents: 4859
diff changeset
  4929
    ].
7d2d5ef445e3 conversion fixes (palette problem / implizit greyscale conversion)
Claus Gittinger <cg@exept.de>
parents: 4859
diff changeset
  4930
7d2d5ef445e3 conversion fixes (palette problem / implizit greyscale conversion)
Claus Gittinger <cg@exept.de>
parents: 4859
diff changeset
  4931
    photometric == #palette ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4932
        self colormapFromImage:anImage photometric:photometric.
4859
553f9013f270 only try to fetch colormap for palette images
Claus Gittinger <cg@exept.de>
parents: 4858
diff changeset
  4933
    ].
1374
ab515c0576c6 preserve mask when creating an image from another image.
Claus Gittinger <cg@exept.de>
parents: 1362
diff changeset
  4934
    self mask:anImage mask.
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  4935
8664
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  4936
    otherPhotometric := anImage photometric.
7272
4ec4788352ce #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7271
diff changeset
  4937
    otherDepth := anImage depth.
8664
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  4938
    samePhotometric := (photometric == otherPhotometric).
7272
4ec4788352ce #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7271
diff changeset
  4939
4ec4788352ce #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7271
diff changeset
  4940
    ((myDepth = otherDepth) and:[samePhotometric]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4941
        self bits:(anImage bits copy).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4942
        ^ self.
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
  4943
    ].
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
  4944
7272
4ec4788352ce #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7271
diff changeset
  4945
    self bits:(ByteArray new: "uninitializedNew:"(self bytesPerRow * height)).
4ec4788352ce #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7271
diff changeset
  4946
4ec4788352ce #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7271
diff changeset
  4947
    myDepth >= otherDepth ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4948
        otherDepth <= 12 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4949
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4950
            "/ if my depth is greater, all colors can be represented,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4951
            "/ and the loop can be done over pixel values ...
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4952
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4953
            (colorMap isNil or:[samePhotometric not]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4954
                map := Array new:(1 bitShift:otherDepth).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4955
                1 to:map size do:[:i |
8059
1e08cb836ecb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8050
diff changeset
  4956
                    |newIdx|
1e08cb836ecb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8050
diff changeset
  4957
                    
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4958
                    clr := anImage colorFromValue:(i - 1).
8059
1e08cb836ecb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8050
diff changeset
  4959
                    newIdx := self valueFromColor:clr.
1e08cb836ecb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8050
diff changeset
  4960
                    newIdx isNil ifTrue:[ 
1e08cb836ecb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8050
diff changeset
  4961
                        clr := colorMap colorNearestTo:clr.
1e08cb836ecb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8050
diff changeset
  4962
                        newIdx := self valueFromColor:clr.
1e08cb836ecb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8050
diff changeset
  4963
                        newIdx isNil ifTrue:[ self halt ].
1e08cb836ecb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8050
diff changeset
  4964
                    ].
1e08cb836ecb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8050
diff changeset
  4965
                    map at:i put:newIdx.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4966
                ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4967
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4968
            mappedRowPixels := self pixelArraySpecies new:width.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4969
            h := height-1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4970
            w := width.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4971
            0 to:h do:[:row |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4972
                anImage rowAt:row into:mappedRowPixels startingAt:1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4973
                map notNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4974
                    1 to:w do:[:i |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4975
                        mappedRowPixels at:i put:(map at:(mappedRowPixels at:i)+1)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4976
                    ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4977
                ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4978
                self rowAt:row putAll:mappedRowPixels
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4979
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4980
            ^ self
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4981
        ].
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  4982
    ].
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  4983
7272
4ec4788352ce #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7271
diff changeset
  4984
    (myDepth == 24 and:[otherDepth == 32]) ifTrue:[
8729
ac6b7e021151 #BUGFIX by Stefan Reise
sr
parents: 8726
diff changeset
  4985
        (photometric == #rgb) ifTrue:[ "/ target-photometric
ac6b7e021151 #BUGFIX by Stefan Reise
sr
parents: 8726
diff changeset
  4986
            (otherPhotometric == #argb) ifTrue:[
ac6b7e021151 #BUGFIX by Stefan Reise
sr
parents: 8726
diff changeset
  4987
                "/ low byte is alpha, to be ignored
ac6b7e021151 #BUGFIX by Stefan Reise
sr
parents: 8726
diff changeset
  4988
                self copyPixels32AlphaLowTo24From:anImage.
ac6b7e021151 #BUGFIX by Stefan Reise
sr
parents: 8726
diff changeset
  4989
                ^ self
ac6b7e021151 #BUGFIX by Stefan Reise
sr
parents: 8726
diff changeset
  4990
            ].
ac6b7e021151 #BUGFIX by Stefan Reise
sr
parents: 8726
diff changeset
  4991
            ((otherPhotometric == #rgb) or:[otherPhotometric == #rgba]) ifTrue:[
ac6b7e021151 #BUGFIX by Stefan Reise
sr
parents: 8726
diff changeset
  4992
                "/ high byte is alpha, to be ignored
ac6b7e021151 #BUGFIX by Stefan Reise
sr
parents: 8726
diff changeset
  4993
                self copyPixels32AlphaHighTo24From:anImage.
ac6b7e021151 #BUGFIX by Stefan Reise
sr
parents: 8726
diff changeset
  4994
                ^ self
ac6b7e021151 #BUGFIX by Stefan Reise
sr
parents: 8726
diff changeset
  4995
            ].
8665
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  4996
        ].
5712
b4d960599bc8 changed: #fromImage:photometric:
Claus Gittinger <cg@exept.de>
parents: 5710
diff changeset
  4997
    ].
b4d960599bc8 changed: #fromImage:photometric:
Claus Gittinger <cg@exept.de>
parents: 5710
diff changeset
  4998
8664
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  4999
    "/ this is a veeery slow fallback
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  5000
    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
  5001
        self colorAtX:x y:y put:clr
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  5002
    ].
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  5003
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  5004
    "
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  5005
     |i i2 i4 i8 i16 i24|
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  5006
6496
614e100374da class: Image
Stefan Vogel <sv@exept.de>
parents: 6493
diff changeset
  5007
     i := GenericToolbarIconLibrary desktop32x32Icon2.
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  5008
     i inspect.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  5009
     i2 := Depth2Image fromImage:i.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  5010
     i2 inspect.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  5011
     i4 := Depth4Image fromImage:i.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  5012
     i4 inspect.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  5013
     i8 := Depth8Image fromImage:i.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  5014
     i8 inspect.
6496
614e100374da class: Image
Stefan Vogel <sv@exept.de>
parents: 6493
diff changeset
  5015
     i16 := Depth16Image fromImage:i.
614e100374da class: Image
Stefan Vogel <sv@exept.de>
parents: 6493
diff changeset
  5016
     i16 inspect.
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  5017
     i24 := Depth24Image fromImage:i.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  5018
     i24 inspect.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  5019
    "
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5020
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  5021
    "
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  5022
     |i i24|
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  5023
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5024
     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
  5025
     Transcript showCR:(
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5026
        Time millisecondsToRun:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5027
            i24 := Depth24Image fromImage:i.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5028
        ]
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  5029
     ).
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  5030
     i24 inspect.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  5031
    "
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  5032
    "
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  5033
     |i i24|
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  5034
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5035
     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
  5036
     MessageTally spyOn:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5037
        i24 := Depth24Image fromImage:i.
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  5038
     ]
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  5039
    "
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  5040
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  5041
    "Modified (format): / 30-01-2017 / 20:46:22 / stefan"
8099
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  5042
    "Modified: / 24-08-2017 / 17:28:25 / cg"
8665
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  5043
    "Modified: / 25-03-2019 / 14:43:27 / Claus Gittinger"
8729
ac6b7e021151 #BUGFIX by Stefan Reise
sr
parents: 8726
diff changeset
  5044
    "Modified: / 12-07-2019 / 14:25:48 / Stefan Reise"
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5045
!
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5046
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5047
fromSubImage:anImage in:aRectangle
7373
61933c223183 added metaData instVar (for free use by image reader)
Claus Gittinger <cg@exept.de>
parents: 7363
diff changeset
  5048
    "setup the receiver from another image, extracting a rectangular area.
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5049
     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
  5050
     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
  5051
     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
  5052
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5053
    |w h xL yT imgWidth imgHeight|
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5054
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5055
    w := aRectangle width.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5056
    h := aRectangle height.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5057
    xL := aRectangle left.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5058
    yT := aRectangle top.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5059
    imgWidth := anImage width.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5060
    imgHeight := anImage height.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5061
7373
61933c223183 added metaData instVar (for free use by image reader)
Claus Gittinger <cg@exept.de>
parents: 7363
diff changeset
  5062
    xL isFloat ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5063
        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
  5064
    ].
61933c223183 added metaData instVar (for free use by image reader)
Claus Gittinger <cg@exept.de>
parents: 7363
diff changeset
  5065
    yT isFloat ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5066
        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
  5067
    ].
61933c223183 added metaData instVar (for free use by image reader)
Claus Gittinger <cg@exept.de>
parents: 7363
diff changeset
  5068
    w isFloat ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5069
        w := (imgWidth * w) rounded.
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5070
    ].
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5071
    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
  5072
    h isFloat ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5073
        h := (imgHeight * h) rounded.
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5074
    ].
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5075
    h := h min:(imgHeight - yT).
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5076
    self fromSubImage:anImage inX:xL y:yT width:w height:h
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5077
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5078
    "
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5079
     |i i2 i4 i8 i16 i24|
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5080
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5081
     i := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5082
     i inspect.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5083
     i4 := Depth4Image fromSubImage:i in:(300@160 corner:340@200).
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5084
     i4 inspect.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5085
     i8 := Depth8Image fromSubImage:i in:(300@160 corner:340@200).
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5086
     i8 inspect.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5087
     i24 := Depth24Image fromSubImage:i in:(300@160 corner:340@200).
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5088
     i24 inspect.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5089
    "
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5090
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5091
    "Created: / 20.9.1995 / 01:06:02 / claus"
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5092
    "Modified: / 20.9.1995 / 10:15:37 / claus"
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5093
    "Modified: / 18.5.1999 / 20:06:55 / cg"
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5094
!
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5095
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5096
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
  5097
    "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
  5098
     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
  5099
     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
  5100
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5101
     WARNING:
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  5102
       This implementation is a slow fallback (the loop over the
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  5103
       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
  5104
       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
  5105
       of creating a subImage with the same depth & palette."
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5106
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5107
    |xR yB imagesMask maskClass|
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5108
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5109
    width := w.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5110
    height := h.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5111
3912
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
  5112
    self createPixelStore.
3458
b2e098e6288b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3457
diff changeset
  5113
    depth := self depth.
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5114
    bitsPerSample := self bitsPerSample.
7180
40dcb4638d93 #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 7176
diff changeset
  5115
    "/ bitsPerPixel := self bitsPerPixel.
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5116
    samplesPerPixel := self samplesPerPixel.
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5117
    self colormapFromImage:anImage.
2678
e12976d7084b raise a query signal when a loadError happens;
Claus Gittinger <cg@exept.de>
parents: 2645
diff changeset
  5118
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5119
    xR := xL + w - 1.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5120
    yB := yT + h - 1.
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  5121
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5122
    ((photometric == anImage photometric)
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  5123
    and:[self bitsPerPixel = anImage bitsPerPixel
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5124
    and:[colorMap = anImage colorMap]]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5125
        "/ can do it by value
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5126
        anImage
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5127
            valuesFromX:xL y:yT toX:xR y:yB
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5128
            do:[:x :y :pixelValue | self pixelAtX:x-xL y:y-yT put:pixelValue ]
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5129
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5130
        "/ must do it by colors
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5131
        anImage
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5132
            colorsFromX:xL y:yT toX:xR y:yB
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5133
            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
  5134
    ].
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5135
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5136
    (imagesMask := anImage mask) notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5137
        imagesMask depth == 1 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5138
            maskClass := ImageMask
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5139
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5140
            maskClass := imagesMask class.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5141
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5142
        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
  5143
    ].
1963
ab2d96e4e140 care for masks in copy/copySubImage;
tz
parents: 1962
diff changeset
  5144
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5145
    "
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  5146
     |i i2 i4 i8 i16 i24|
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5147
3476
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
  5148
     i := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5149
     i inspect.
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5150
     i4 := Depth4Image fromSubImage:i in:(300@160 corner:340@200).
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5151
     i4 inspect.
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5152
     i8 := Depth8Image fromSubImage:i in:(300@160 corner:340@200).
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5153
     i8 inspect.
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5154
     i24 := Depth24Image fromSubImage:i in:(300@160 corner:340@200).
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5155
     i24 inspect.
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5156
    "
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5157
2678
e12976d7084b raise a query signal when a loadError happens;
Claus Gittinger <cg@exept.de>
parents: 2645
diff changeset
  5158
    "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
  5159
    "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
  5160
    "Modified: / 18.5.1999 / 20:06:55 / cg"
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  5161
!
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  5162
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  5163
monochromeOn:aDevice
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  5164
    "return a monochrome device image of the receiver for aDevice.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  5165
     (monochrome, even if device supports colors)"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  5166
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  5167
    ((aDevice == device) and:[monoDeviceForm notNil]) ifTrue:[^ self].
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  5168
    (device notNil and:[aDevice ~~ device]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5169
        "oops, I am already accociated to another device
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5170
         - need a copy ...
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5171
        "
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5172
        ^ self copy monochromeOn:aDevice
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  5173
    ].
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  5174
    monoDeviceForm := self asMonochromeFormOn:aDevice.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  5175
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  5176
3105
4fb4dcd2b055 more Color-protocol compatibility
Claus Gittinger <cg@exept.de>
parents: 3104
diff changeset
  5177
nearestOn:aDevice
3107
ed51e2c00f1d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3105
diff changeset
  5178
    "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
  5179
4fb4dcd2b055 more Color-protocol compatibility
Claus Gittinger <cg@exept.de>
parents: 3104
diff changeset
  5180
    ^ self onDevice:aDevice
4fb4dcd2b055 more Color-protocol compatibility
Claus Gittinger <cg@exept.de>
parents: 3104
diff changeset
  5181
!
4fb4dcd2b055 more Color-protocol compatibility
Claus Gittinger <cg@exept.de>
parents: 3104
diff changeset
  5182
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  5183
on:aDevice
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  5184
    "return an image with the same pixels as the receiver, but
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  5185
     associated to aDevice. If the receiver is not yet bound to
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  5186
     a device, this will be the receiver. Otherwise, a new image
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  5187
     is returned."
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  5188
3623
16665d9b7263 #on: -> #onDevice
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  5189
    "/ send out a warning: #on: is typically used to create views
16665d9b7263 #on: -> #onDevice
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  5190
    "/ operating on a model.
16665d9b7263 #on: -> #onDevice
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  5191
    "/ Please use #onDevice: to avoid confusion.
16665d9b7263 #on: -> #onDevice
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  5192
16665d9b7263 #on: -> #onDevice
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  5193
    <resource:#obsolete>
16665d9b7263 #on: -> #onDevice
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  5194
16665d9b7263 #on: -> #onDevice
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  5195
    self obsoleteMethodWarning:'use #onDevice:'.
3477
9440bfc0768d on: -> onDevice:
Claus Gittinger <cg@exept.de>
parents: 3476
diff changeset
  5196
    ^ self onDevice:aDevice
1496
fc27b03282af added #onDevice: for protocol completeness.
Claus Gittinger <cg@exept.de>
parents: 1488
diff changeset
  5197
!
fc27b03282af added #onDevice: for protocol completeness.
Claus Gittinger <cg@exept.de>
parents: 1488
diff changeset
  5198
fc27b03282af added #onDevice: for protocol completeness.
Claus Gittinger <cg@exept.de>
parents: 1488
diff changeset
  5199
onDevice:aDevice
fc27b03282af added #onDevice: for protocol completeness.
Claus Gittinger <cg@exept.de>
parents: 1488
diff changeset
  5200
    "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
  5201
     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
  5202
     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
  5203
     is returned."
fc27b03282af added #onDevice: for protocol completeness.
Claus Gittinger <cg@exept.de>
parents: 1488
diff changeset
  5204
2980
409e9547a45c ignore nil device in #onDevice:
Claus Gittinger <cg@exept.de>
parents: 2947
diff changeset
  5205
    aDevice isNil ifTrue:[^ self].
3477
9440bfc0768d on: -> onDevice:
Claus Gittinger <cg@exept.de>
parents: 3476
diff changeset
  5206
    ((aDevice == device) and:[deviceForm notNil]) ifTrue:[^ self].
9440bfc0768d on: -> onDevice:
Claus Gittinger <cg@exept.de>
parents: 3476
diff changeset
  5207
8928
870fe8eddb25 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8913
diff changeset
  5208
    aDevice supportsPNGImages ifTrue:[^ self ].
3477
9440bfc0768d on: -> onDevice:
Claus Gittinger <cg@exept.de>
parents: 3476
diff changeset
  5209
    (device notNil and:[aDevice ~~ device]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5210
        "oops, I am already associated to another device
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5211
         - need a copy ...
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5212
        "
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5213
        ^ self copy onDevice:aDevice
3477
9440bfc0768d on: -> onDevice:
Claus Gittinger <cg@exept.de>
parents: 3476
diff changeset
  5214
    ].
8928
870fe8eddb25 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8913
diff changeset
  5215
7573
656c59bc93ad #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7565
diff changeset
  5216
    device := aDevice.
3477
9440bfc0768d on: -> onDevice:
Claus Gittinger <cg@exept.de>
parents: 3476
diff changeset
  5217
    deviceForm := self asFormOn:aDevice.
9440bfc0768d on: -> onDevice:
Claus Gittinger <cg@exept.de>
parents: 3476
diff changeset
  5218
    maskedPixelsAre0 := nil.
6496
614e100374da class: Image
Stefan Vogel <sv@exept.de>
parents: 6493
diff changeset
  5219
    mask notNil ifTrue:[
7573
656c59bc93ad #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7565
diff changeset
  5220
        mask := mask onDevice:aDevice.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5221
        self clearMaskedPixels.
6496
614e100374da class: Image
Stefan Vogel <sv@exept.de>
parents: 6493
diff changeset
  5222
    ].
3477
9440bfc0768d on: -> onDevice:
Claus Gittinger <cg@exept.de>
parents: 3476
diff changeset
  5223
    Lobby register:self
9440bfc0768d on: -> onDevice:
Claus Gittinger <cg@exept.de>
parents: 3476
diff changeset
  5224
9440bfc0768d on: -> onDevice:
Claus Gittinger <cg@exept.de>
parents: 3476
diff changeset
  5225
    "Modified: / 22.8.1998 / 13:34:24 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  5226
! !
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  5227
7904
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5228
!Image methodsFor:'converting - dithering'!
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5229
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5230
asBurkesDitheredMonochromeImage
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5231
    "return a burkes dithered monochrome image from the receiver image.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5232
     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
  5233
     a floyd-steinberg dithered image.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5234
     Notice that floyd-steinberg dithering is faster; both because less
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5235
     error diffusion is done and due to being specially tuned."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5236
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5237
    |monoBits|
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
    monoBits := self burkesDitheredMonochromeBits.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5240
    ^ Depth1Image width:width height:height fromArray:monoBits
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5241
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5242
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5243
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5244
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5245
     i := Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5246
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5247
     i asFloydSteinbergDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5248
     i asBurkesDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5249
     i asOrderedDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5250
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5251
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
     |i|
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
     i := Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5256
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5257
     i asFloydSteinbergDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5258
     i asBurkesDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5259
     i asOrderedDitheredMonochromeImage inspect.
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
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5263
     |i|
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
     i := Depth4Image
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5266
             width:4
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5267
             height:4
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5268
             fromArray:#[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5269
                            16r01 16r23
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5270
                            16r45 16r67
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5271
                            16r89 16rab
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5272
                            16rcd 16ref
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5273
                        ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5274
     i := i magnifiedBy:30.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5275
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5276
     i asFloydSteinbergDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5277
     i asBurkesDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5278
     i asOrderedDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5279
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5280
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5281
    "Created: / 10-06-1996 / 12:34:44 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5282
    "Modified: / 12-06-1996 / 13:58:16 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5283
    "Modified (comment): / 16-02-2017 / 17:59:53 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5284
!
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5285
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5286
asDitheredImageUsing:colors
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5287
    "return a dithered image from the picture,
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5288
     using colors in colors for dithering."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5289
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5290
    ^ self asDitheredImageUsing:colors depth:self depth
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5291
!
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5292
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5293
asDitheredImageUsing:colors depth:d
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5294
    "return a dithered image from the picture,
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5295
     using colors in colors for dithering."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5296
8099
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  5297
    |newBits img8|
7904
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5298
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5299
    newBits := self floydSteinbergDitheredDepth8BitsColors:colors map:(0 to:colors size - 1).
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5300
    newBits isNil ifTrue:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5301
        self error:'dithering failed'
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5302
    ].
8099
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  5303
    d ~~ 8 ifTrue:[
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  5304
        img8 := Depth8Image new extent:(self extent).
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  5305
        img8 colorMap:colors.
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  5306
        img8 bits:newBits.
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  5307
        ^ (self class implementorForDepth:d) fromImage:img8.
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  5308
    ].
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  5309
    
7904
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5310
    ^ (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
  5311
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5312
    "Modified: / 30-01-2017 / 19:40:19 / stefan"
8099
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  5313
    "Modified: / 24-08-2017 / 17:37:12 / cg"
7904
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
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5316
asErrorDitheredMonochromeImage
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5317
    "return an error-diffusion dithered monochrome image from the receiver image."
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
    DitherAlgorithm == #burkes ifTrue:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5320
        ^ self asBurkesDitheredMonochromeImage
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5321
    ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5322
    DitherAlgorithm == #stevensonArce ifTrue:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5323
        ^ self asStevensonArceDitheredMonochromeImage
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5324
    ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5325
    ^ self asFloydSteinbergDitheredMonochromeImage
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5326
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
     |i|
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
     i := Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5331
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5332
     i asErrorDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5333
     i asOrderedDitheredMonochromeImage inspect.
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
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5338
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5339
     i := Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5340
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5341
     i asErrorDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5342
     i asOrderedDitheredMonochromeImage inspect.
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
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5345
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5346
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5347
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5348
     i := Depth4Image
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5349
             width:4
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5350
             height:4
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5351
             fromArray:#[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5352
                            16r01 16r23
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5353
                            16r45 16r67
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5354
                            16r89 16rab
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5355
                            16rcd 16ref
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5356
                        ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5357
     i := i magnifiedBy:30.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5358
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5359
     i asErrorDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5360
     i asOrderedDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5361
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5362
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5363
    "Modified: / 10-06-1996 / 14:22:30 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5364
    "Modified (comment): / 16-02-2017 / 17:58:42 / cg"
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
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5367
asFloydSteinbergDitheredDepth8FormOn:aDevice colors:fixColors
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5368
    "return a floyd-steinberg dithered pseudoForm from the picture.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5369
     Use the colors in the fixColors array.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5370
     By passing the ditherColors as extra array, this method can
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5371
     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
  5372
     for example to create dithered Depth4Images from Depth8Images."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5373
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5374
    |pseudoBits f deviceDepth map|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5375
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5376
    deviceDepth := aDevice depth.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5377
    deviceDepth == 8 ifFalse:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5378
        (aDevice supportedImageFormatForDepth:8) isNil ifTrue:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5379
            ^ nil.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5380
        ]
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5381
    ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5382
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5383
    pseudoBits := self floydSteinbergDitheredDepth8BitsColors:fixColors.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5384
    pseudoBits isNil ifTrue:[^ nil].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5385
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5386
    f := Form width:width height:height depth:deviceDepth onDevice:aDevice.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5387
    f isNil ifTrue:[^ nil].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5388
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5389
    "/
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5390
    "/ have to create a funny colorMap, where
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5391
    "/ color at:index == color colorId:index
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5392
    "/
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5393
    map := Array new:256.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5394
    fixColors do:[:clr |
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5395
        map at:clr colorId + 1 put:clr
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
    f colorMap:map.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5398
    f bits:pseudoBits.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5399
    aDevice
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5400
        drawBits:pseudoBits
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5401
        bitsPerPixel:8
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5402
        depth:deviceDepth
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5403
        padding:8
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5404
        width:width height:height
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5405
        x:0 y:0
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5406
        into:(f id) x:0 y:0
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5407
        width:width height:height
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5408
        with:(f initGC).
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5409
    ^ f
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
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5412
     example:
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5413
        color reduction from Depth8 to Depth4 (dithering) can be done by:
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
     |img8 reducedImg8 img4 map form|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5416
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5417
     map := #(
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5418
                  (0     0   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5419
                  (0     0 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5420
                  (0    50   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5421
                  (0    50 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5422
                  (0   100   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5423
                  (0   100 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5424
                  (100   0   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5425
                  (100   0 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5426
                  (100  50   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5427
                  (100  50 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5428
                  (100 100   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5429
                  (100 100 100)) collect:[:rgb | (Color red:(rgb at:1)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5430
                                                      green:(rgb at:2)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5431
                                                       blue:(rgb at:3)) onDevice:Display].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5432
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5433
     img8 := Image fromFile:'goodies/bitmaps/bf.im8'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5434
     form := img8 paletteImageAsDitheredPseudoFormOn:Display
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5435
                      colors:map
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5436
                        nRed:2
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5437
                      nGreen:3
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5438
                       nBlue:2.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5439
     img8 := Depth8Image fromForm:form.    'dithered version of original image'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5440
     img4 := Depth4Image fromImage:img8.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5441
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5442
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5443
    "Modified: 14.6.1996 / 16:52:34 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5444
    "Created: 23.6.1997 / 15:25:37 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5445
!
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5446
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5447
asFloydSteinbergDitheredDepth8FormOn:aDevice colors:fixColors nRed:nRed nGreen:nGreen nBlue:nBlue
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5448
    "return a floyd-steinberg dithered pseudoForm from the palette picture.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5449
     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
  5450
     colors assigned to aDevice, such as the preallocated colors of the
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5451
     Color class.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5452
     By passing the ditherColors as extra array, this method can
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5453
     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
  5454
     for example to create dithered Depth4Images from Depth8Images."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5455
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5456
    |pseudoBits f deviceDepth map|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5457
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5458
    deviceDepth := aDevice depth.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5459
    deviceDepth == 8 ifFalse:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5460
        (aDevice supportedImageFormatForDepth:8) isNil ifTrue:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5461
            ^ nil
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
    ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5464
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5465
    pseudoBits := self floydSteinbergDitheredDepth8BitsColors:fixColors nRed:nRed nGreen:nGreen nBlue:nBlue.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5466
    pseudoBits isNil ifTrue:[^ nil].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5467
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5468
    f := Form width:width height:height depth:deviceDepth onDevice:aDevice.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5469
    f isNil ifTrue:[^ nil].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5470
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
    "/ have to create a funny colorMap, where
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5473
    "/ color at:index == color colorId:index
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5474
    "/
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5475
    map := Array new:256.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5476
    fixColors do:[:clr |
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5477
        map at:clr colorId + 1 put:clr
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5478
    ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5479
    f colorMap:map.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5480
    f bits:pseudoBits.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5481
    aDevice
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5482
        drawBits:pseudoBits
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5483
        bitsPerPixel:8
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5484
        depth:deviceDepth
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5485
        padding:8
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5486
        width:width height:height
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5487
        x:0 y:0
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5488
        into:(f id) x:0 y:0
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5489
        width:width height:height
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5490
        with:(f initGC).
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5491
    ^ f
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5492
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5493
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5494
     example:
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5495
        color reduction from Depth8 to Depth4 (dithering) can be done by:
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5496
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5497
     |img8 reducedImg8 img4 map form|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5498
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5499
     map := #(
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5500
                  (0     0   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5501
                  (0     0 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5502
                  (0    50   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5503
                  (0    50 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5504
                  (0   100   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5505
                  (0   100 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5506
                  (100   0   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5507
                  (100   0 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5508
                  (100  50   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5509
                  (100  50 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5510
                  (100 100   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5511
                  (100 100 100)) collect:[:rgb | (Color red:(rgb at:1)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5512
                                                      green:(rgb at:2)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5513
                                                       blue:(rgb at:3)) onDevice:Display].
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
     img8 := Image fromFile:'goodies/bitmaps/bf.im8'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5516
     form := img8 paletteImageAsDitheredPseudoFormOn:Display
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5517
                      colors:map
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5518
                        nRed:2
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5519
                      nGreen:3
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5520
                       nBlue:2.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5521
     img8 := Depth8Image fromForm:form.    'dithered version of original image'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5522
     img4 := Depth4Image fromImage:img8.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5523
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5524
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5525
    "Modified: 14.6.1996 / 16:52:34 / cg"
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
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5528
asFloydSteinbergDitheredGrayFormOn:aDevice
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5529
    "return a dithered depth-x grey form from the receiver image."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5530
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5531
    |depth bits|
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
    depth := aDevice depth.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5534
    (depth == 1
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5535
    or:[aDevice hasGrayscales not]) ifTrue:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5536
        "/ for monochrome, there is specialized
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5537
        "/ monochrome dither code available
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5538
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5539
        bits := self floydSteinbergDitheredMonochromeBits.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5540
    ] ifFalse:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5541
        bits := self floydSteinbergDitheredGrayBitsDepth:depth.
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
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5544
    ^ self makeDeviceGrayPixmapOn:aDevice depth:depth fromArray:bits
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|
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 asFloydSteinbergDitheredGrayFormOn: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|
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 := Image fromFile:'bitmaps/granite.tiff'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5557
     (i asFloydSteinbergDitheredGrayFormOn:Display) inspect
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5558
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5559
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5560
    "Created: 10.6.1996 / 14:11:39 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5561
    "Modified: 17.4.1997 / 01:11:54 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5562
!
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5563
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5564
asFloydSteinbergDitheredGrayImageDepth:depth
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5565
    "return a floyd-steinberg dithered image from the receiver image."
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
    |ditheredBits|
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
    (depth == 1) ifTrue:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5570
        ^ self asFloydSteinbergDitheredMonochromeImage
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5571
    ].
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
    ditheredBits := self floydSteinbergDitheredGrayBitsDepth:depth.
8132
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
  5574
    ^ ((self class implementorForDepth:depth)
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
  5575
        width:width height:height fromArray:ditheredBits)
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
  5576
            photometric:#blackIs0
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
  5577
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
  5578
    "
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
  5579
     |i|
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
  5580
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
  5581
     i := Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif'.
7904
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5582
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5583
     (i asFloydSteinbergDitheredGrayImageDepth:1) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5584
     (i asFloydSteinbergDitheredGrayImageDepth:2) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5585
     (i asFloydSteinbergDitheredGrayImageDepth:4) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5586
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5587
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5588
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5589
     |i|
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
     i := Depth24Image width:4 height:1
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5592
          fromArray:#[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5593
            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
  5594
            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
  5595
            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
  5596
            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
  5597
     i := i magnifiedBy:4@1.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5598
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5599
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5600
     (i asFloydSteinbergDitheredGrayImageDepth:1) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5601
     (i asFloydSteinbergDitheredGrayImageDepth:2) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5602
     (i asFloydSteinbergDitheredGrayImageDepth:4) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5603
    "
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
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5606
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5607
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5608
     i := Depth24Image width:4 height:6
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5609
          fromArray:#[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5610
            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
  5611
            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
  5612
            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
  5613
            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
  5614
            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
  5615
            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
  5616
     i := i magnifiedBy:30.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5617
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5618
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5619
     (i asFloydSteinbergDitheredGrayImageDepth:1) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5620
     (i asFloydSteinbergDitheredGrayImageDepth:2) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5621
     (i asFloydSteinbergDitheredGrayImageDepth:4) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5622
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5623
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5624
     |i|
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
     i := Image fromFile:'granite.tiff'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5627
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5628
     (i asFloydSteinbergDitheredGrayImageDepth:1) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5629
     (i asFloydSteinbergDitheredGrayImageDepth:2) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5630
     (i asFloydSteinbergDitheredGrayImageDepth:4) inspect.
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
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5633
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5634
     |i|
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
     i := Image fromFile:'goodies/bitmaps/gifImages/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5637
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5638
     (i asFloydSteinbergDitheredGrayImageDepth:1) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5639
     (i asFloydSteinbergDitheredGrayImageDepth:2) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5640
     (i asFloydSteinbergDitheredGrayImageDepth:4) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5641
    "
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
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5644
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5645
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5646
     i := Depth4Image
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5647
             width:4
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5648
             height:4
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5649
             fromArray:#[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5650
                            16r01 16r23
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5651
                            16r45 16r67
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5652
                            16r89 16rab
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5653
                            16rcd 16ref
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
     i := i magnifiedBy:30.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5656
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5657
     (i asFloydSteinbergDitheredGrayImageDepth:1) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5658
     (i asFloydSteinbergDitheredGrayImageDepth:2) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5659
     (i asFloydSteinbergDitheredGrayImageDepth:4) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5660
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5661
8132
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
  5662
    "Created: / 10-06-1996 / 12:33:47 / cg"
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
  5663
    "Modified (comment): / 30-08-2017 / 01:43:56 / cg"
7904
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
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5666
asFloydSteinbergDitheredMonochromeFormOn:aDevice
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5667
    "return a dithered moncohrome form from the receiver image."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5668
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5669
    |monoBits|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5670
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5671
    monoBits := self floydSteinbergDitheredMonochromeBits.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5672
    ^ self makeDeviceMonochromeBitmapOn:aDevice fromArray:monoBits
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5673
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5674
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5675
     |i f|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5676
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5677
     i := Image fromFile:'goodies/bitmaps/gifImages/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5678
     (i asFloydSteinbergDitheredMonochromeFormOn:Display) inspect.
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
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 f|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5683
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5684
     i := Depth2Image width:8 height:8
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5685
          fromArray:#[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5686
                        4r0000 4r0000
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5687
                        4r0000 4r0000
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5688
                        4r1111 4r1111
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5689
                        4r1111 4r1111
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5690
                        4r2222 4r2222
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5691
                        4r2222 4r2222
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5692
                        4r3333 4r3333
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5693
                        4r3333 4r3333
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
     (i asFloydSteinbergDitheredMonochromeFormOn:Display) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5696
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5697
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5698
    "Created: 10.6.1996 / 14:11:39 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5699
    "Modified: 17.4.1997 / 01:14:02 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5700
!
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
asFloydSteinbergDitheredMonochromeImage
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5703
    "return a floyd-steinberg dithered monochrome image from the receiver image."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5704
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5705
    |monoBits|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5706
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5707
    monoBits := self floydSteinbergDitheredMonochromeBits.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5708
    ^ Depth1Image width:width height:height fromArray:monoBits
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
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5712
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5713
     i := Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5714
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5715
     i asFloydSteinbergDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5716
     i asBurkesDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5717
     i asOrderedDitheredMonochromeImage inspect.
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
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|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5722
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5723
     i := Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5724
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5725
     i asFloydSteinbergDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5726
     i asBurkesDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5727
     i asOrderedDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5728
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5729
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5730
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5731
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5732
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5733
     i := Depth4Image
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5734
             width:4
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5735
             height:4
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5736
             fromArray:#[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5737
                            16r01 16r23
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5738
                            16r45 16r67
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5739
                            16r89 16rab
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5740
                            16rcd 16ref
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5741
                        ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5742
     i := i magnifiedBy:30.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5743
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5744
     i asFloydSteinbergDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5745
     i asBurkesDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5746
     i asOrderedDitheredMonochromeImage inspect.
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
    "Created: / 10-06-1996 / 12:33:47 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5750
    "Modified: / 17-04-1997 / 01:15:28 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5751
    "Modified (comment): / 16-02-2017 / 17:59:16 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5752
!
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5753
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5754
asFloydSteinbergDitheredPseudoFormUsing:colors on:aDevice
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5755
    "return a floyd-steinberg dithered pseudoForm from the picture,
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5756
     using colors in colors for dithering."
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
    |pseudoBits pseudoBits8 f has8BitImage deviceDepth map d|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5759
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5760
    deviceDepth := aDevice depth.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5761
    has8BitImage := (deviceDepth == 8)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5762
                    or:[ (aDevice supportedImageFormatForDepth:8) notNil ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5763
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5764
    has8BitImage ifFalse:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5765
        deviceDepth == 4 ifFalse:[^ nil].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5766
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5767
        pseudoBits8 := self nfloydSteinbergDitheredDepth8BitsColors:colors.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5768
        pseudoBits8 isNil ifTrue:[^ nil].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5769
        "/ convert to devices depth
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
        pseudoBits := ByteArray new:(width*4+7//8 * height).
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5772
        pseudoBits8 compressPixels:4 width:width height:height into:pseudoBits mapping:nil.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5773
        d := 4.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5774
    ] ifTrue:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5775
        pseudoBits := self nfloydSteinbergDitheredDepth8BitsColors:colors.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5776
        pseudoBits isNil ifTrue:[^ nil].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5777
        d := 8.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5778
    ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5779
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5780
    f := Form width:width height:height depth:deviceDepth onDevice:aDevice.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5781
    f isNil ifTrue:[^ nil].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5782
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
    "/ have to create a funny colorMap, where
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5785
    "/ color at:index == color colorId:index
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
    map := Array new:256 withAll:0.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5788
    colors do:[:clr |
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5789
        clr notNil ifTrue:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5790
            map at:clr colorId + 1 put:clr
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5791
        ]
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
    f colorMap:map.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5794
    f bits:pseudoBits.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5795
    aDevice
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5796
        drawBits:pseudoBits
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5797
        bitsPerPixel:d
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5798
        depth:deviceDepth
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5799
        padding:8
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5800
        width:width height:height
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5801
        x:0 y:0
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5802
        into:(f id) x:0 y:0
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5803
        width:width height:height
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5804
        with:(f initGC).
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5805
    ^ f
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5806
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5807
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5808
     |i|
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
     i := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5811
     (i asFloydSteinbergDitheredPseudoFormUsing:(Smalltalk at:#'Color:DitherColors') on:Display) inspect
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5812
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5813
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5814
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5815
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5816
     i := Image fromFile:'goodies/bitmaps/gifImages/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5817
     (i asFloydSteinbergDitheredPseudoFormUsing:(Smalltalk at:#'Color:DitherColors') on:Display) inspect
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5818
    "
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
    "Created: 17.6.1996 / 12:13:35 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5821
    "Modified: 5.9.1996 / 19:42:57 / cg"
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
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5824
asOrderedDitheredGrayFormOn:aDevice
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5825
    "return a dithered depth-x grey form from the receiver image.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5826
     Uses an 8x8 dithermatrix."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5827
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5828
    |depth bits|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5829
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5830
    depth := aDevice depth.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5831
    (depth == 1
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5832
    or:[aDevice hasGrayscales not]) ifTrue:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5833
        "/ for monochrome, there is highly specialized
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5834
        "/ monochrome dither code available
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5835
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5836
        ^ self asOrderedDitheredMonochromeFormOn:aDevice
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
    bits := self
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5840
                orderedDitheredGrayBitsWithDitherMatrix:(self class orderedDitherMatrixOfSize:8)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5841
                ditherWidth:8
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5842
                depth:depth.
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
    ^ self makeDeviceGrayPixmapOn:aDevice depth:depth fromArray:bits
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5845
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|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5848
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5849
     i := Image fromFile:'goodies/bitmaps/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5850
     (i asOrderedDitheredGrayFormOn:Display) inspect
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5851
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5852
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5853
    "Modified: 24.6.1997 / 22:19:30 / cg"
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
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5856
asOrderedDitheredGrayImageDepth:depth
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5857
    "return a dithered depth-x grey image from the receiver image.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5858
     Uses an 8x8 dithermatrix."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5859
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5860
    |dither|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5861
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5862
    dither := self class orderedDitherMatrixOfSize:8.
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
    (depth == 1) ifTrue:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5865
        "/ for monochrome, there is highly specialized
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5866
        "/ monochrome dither code available
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
        ^ Depth1Image
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5869
            width:width
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5870
            height:height
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5871
            fromArray:(
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5872
                self
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5873
                    orderedDitheredMonochromeBitsWithDitherMatrix:dither
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5874
                    ditherWidth:8)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5875
    ].
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
    ^ (self class implementorForDepth:depth)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5878
        width:width
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5879
        height:height
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5880
        fromArray:(
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5881
            self
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5882
                orderedDitheredGrayBitsWithDitherMatrix:dither
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5883
                ditherWidth:8
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5884
                depth:depth)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5885
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
     |i i1 i2 i4 i8|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5888
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5889
     i := Image fromFile:'goodies/bitmaps/gifImages/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5890
     i1 := i asOrderedDitheredGrayImageDepth:1.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5891
     i1 inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5892
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5893
     i2 := i asOrderedDitheredGrayImageDepth:2.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5894
     i2 inspect.
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
     i4 := i asOrderedDitheredGrayImageDepth:4.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5897
     i4 inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5898
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5899
     i8 := i asOrderedDitheredGrayImageDepth:8.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5900
     i8 inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5901
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5902
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
     |i i1 i2 i4 i8|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5905
     i := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5906
     i1 := i asOrderedDitheredGrayImageDepth:1.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5907
     i1 inspect.
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
     i2 := i asOrderedDitheredGrayImageDepth:2.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5910
     i2 inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5911
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5912
     i4 := i asOrderedDitheredGrayImageDepth:4.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5913
     i4 inspect.
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
     i8 := i asOrderedDitheredGrayImageDepth:8.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5916
     i8 inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5917
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5918
     i2 := i8 asOrderedDitheredGrayImageDepth:2.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5919
     i2 inspect.
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
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5922
    "Created: 7.6.1996 / 18:03:54 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5923
    "Modified: 24.6.1997 / 22:19:36 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5924
!
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
asOrderedDitheredMonochromeFormOn:aDevice
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5927
    "return a dithered monochrome form from the grey image.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5928
     Uses a 4x4 dithermatrix."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5929
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5930
    "/ 4x4 seems a good comprimize between:
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5931
    "/    number of grey levels (8x8 is better)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5932
    "/    artifacts             (4x4 is better)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5933
    "/
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5934
    "/ could look at the image and decide upon the number of
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5935
    "/ distinct colors present. Use 8x8 for high-number,
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5936
    "/ 4x4 for small number of colors ...
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
    ^ self
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5939
        asOrderedDitheredMonochromeFormOn:aDevice
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5940
        ditherMatrix:(self class orderedDitherMatrixOfSize:4)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5941
        ditherWidth:4
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
"/    ^ self
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5944
"/        asOrderedDitheredMonochromeFormOn:aDevice
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5945
"/        ditherMatrix:(self class orderedDitherMatrixOfSize:8)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5946
"/        ditherWidth:8
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5947
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
     |i f|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5950
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5951
     i := Image fromFile:'goodies/bitmaps/gifImages/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5952
     f := i asOrderedDitheredMonochromeFormOn:Display.
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
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5955
     |i f|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5956
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5957
     i := (Image fromFile:'goodies/bitmaps/winBitmaps/a11.ico') magnifiedBy:10.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5958
     f := i asOrderedDitheredMonochromeFormOn:Display.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5959
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
     |i f|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5962
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5963
     i := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5964
     f := i asOrderedDitheredMonochromeFormOn:Display.
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
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5967
     |i f|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5968
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5969
     i := (Image fromFile:'doc/online/pictures/PasteButton.gif') magnifiedBy:10.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5970
     f := i asOrderedDitheredMonochromeFormOn:Display.
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
     |i f|
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 := (Image fromFile:'goodies/bitmaps/gifImages/blue-ball.gif') magnifiedBy:1.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5976
     f := i asOrderedDitheredMonochromeFormOn:Display.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5977
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5978
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5979
    "Created: 7.6.1996 / 14:52:32 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5980
    "Modified: 17.4.1997 / 01:10:10 / cg"
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
asOrderedDitheredMonochromeFormOn:aDevice ditherMatrix:ditherMatrix ditherWidth:dW
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5984
    "return a dithered monochrome form from the image.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5985
     Uses the passed ditherMatrix and ditherWidth."
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
    |monoBits|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5988
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5989
    monoBits := self orderedDitheredMonochromeBitsWithDitherMatrix:ditherMatrix ditherWidth:dW.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5990
    ^ self makeDeviceMonochromeBitmapOn:aDevice fromArray:monoBits
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
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5994
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5995
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5996
     i := Image fromFile:'goodies/bitmaps/gifImages/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5997
     (i asOrderedDitheredMonochromeFormOn:Display) inspect
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5998
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5999
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6000
     |i|
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
     i := Image fromFile:'goodies/bitmaps/granite.tiff'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6003
     (i asOrderedDitheredMonochromeFormOn:Display) inspect
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
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6007
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6008
     i := (Image fromFile:'goodies/bitmaps/PasteButton.tiff') magnifiedBy:10.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6009
     (i asOrderedDitheredMonochromeFormOn:Display) inspect
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6010
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6011
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6012
    "Created: 7.6.1996 / 14:51:42 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6013
    "Modified: 17.4.1997 / 01:08:24 / cg"
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
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6016
asOrderedDitheredMonochromeImage
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6017
    "return a dithered monochrome image from the receiver image.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6018
     Uses a 4x4 dithermatrix."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6019
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6020
    "/ 4x4 seems a good comprimize between:
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6021
    "/    number of grey levels (8x8 is better)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6022
    "/    artifacts             (4x4 is better)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6023
    "/
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6024
    "/ could look at the image and decide upon the number of
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6025
    "/ distinct colors present. Use 8x8 for high-number,
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6026
    "/ 4x4 for small number of colors ...
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6027
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6028
    ^ self
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6029
        asOrderedDitheredMonochromeImageWithDitherMatrix:(self class orderedDitherMatrixOfSize:4)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6030
        ditherWidth:4
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6031
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6032
"/    ^ self
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6033
"/        asOrderedDitheredMonochromeImageWithDitherMatrix:(self class orderedDitherMatrixOfSize:8)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6034
"/        ditherWidth:8
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6035
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6036
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6037
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6038
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6039
     i := Image fromFile:'goodies/bitmaps/gifImages/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6040
     i asOrderedDitheredMonochromeImage inspect
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
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6043
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6044
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6045
     i := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6046
     i asOrderedDitheredMonochromeImage inspect
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6047
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6048
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6049
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6050
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6051
     i := (Image fromFile:'doc/online/pictures/PasteButton.gif') magnifiedBy:10.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6052
     i asOrderedDitheredMonochromeImage inspect
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6053
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6054
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6055
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6056
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6057
     i := (Image fromFile:'goodies/bitmaps/gifImages/blue-ball.gif') magnifiedBy:1.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6058
     i asOrderedDitheredMonochromeImage inspect
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6059
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6060
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6061
     |i|
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
     i := Image fromFile:'libwidg3/bitmaps/granite.tiff'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6064
     i asOrderedDitheredMonochromeImage inspect
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6065
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6066
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6067
    "Created: 7.6.1996 / 15:02:07 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6068
    "Modified: 10.6.1996 / 11:15:09 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6069
!
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6070
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6071
asOrderedDitheredMonochromeImageWithDitherMatrix:ditherMatrix ditherWidth:dW
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6072
    "return a dithered monochrome image from the receiver image.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6073
     Uses the passed ditherMatrix and ditherWidth."
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
    |monoBits|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6076
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6077
    monoBits := self orderedDitheredMonochromeBitsWithDitherMatrix:ditherMatrix ditherWidth:dW.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6078
    ^ (Depth1Image width:width height:height fromArray:monoBits) photometric:#blackIs0
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
    "order-4 dither:
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6081
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6082
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6083
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6084
     i := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6085
     i
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6086
        asOrderedDitheredMonochromeImageWithDitherMatrix:(Image orderedDitherMatrixOfSize:4)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6087
        ditherWidth:4
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6088
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6089
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6090
    "order-6 dither:
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6091
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6092
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6093
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6094
     i := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6095
     i
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6096
        asOrderedDitheredMonochromeImageWithDitherMatrix:(Image orderedDitherMatrixOfSize:8)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6097
        ditherWidth:8
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6098
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6099
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6100
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6101
    "thresholding at:0.5 (all above 0.5 becomes white):
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6102
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6103
     |i|
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
     i := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6106
     i
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6107
        asOrderedDitheredMonochromeImageWithDitherMatrix:(ByteArray new:16 withAll:8)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6108
        ditherWidth:4
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
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6111
    "thresholding at: 0.25 (all above 0.25 becomes white):
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6112
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6113
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6114
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6115
     i := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6116
     i
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6117
        asOrderedDitheredMonochromeImageWithDitherMatrix:(ByteArray new:16 withAll:3)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6118
        ditherWidth:4
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6119
    "
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
    "thresholding at: 0.75 (all above 0.75 becomes white):
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6122
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6123
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6124
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6125
     i := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6126
     i
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6127
        asOrderedDitheredMonochromeImageWithDitherMatrix:(ByteArray new:16 withAll:11)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6128
        ditherWidth:4
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6129
    "
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
    "Modified: 7.6.1996 / 17:23:47 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6132
!
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
asStevensonArceDitheredMonochromeImage
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6135
    "return a stevenson-arce dithered monochrome image from the receiver image.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6136
     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
  6137
     a floyd-steinberg dithered image.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6138
     Notice that floyd-steinberg dithering is faster; both because less
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6139
     error diffusion is done and due to being specially tuned."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6140
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6141
    |monoBits|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6142
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6143
    monoBits := self stevensonArceDitheredMonochromeBits.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6144
    ^ (Depth1Image width:width height:height fromArray:monoBits) photometric:#blackIs0
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6145
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6146
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6147
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6148
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6149
     i := Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6150
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6151
     i asFloydSteinbergDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6152
     i asBurkesDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6153
     i asStevensonArceDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6154
     i asOrderedDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6155
     (i asThresholdMonochromeImage:0.5) inspect
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
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6158
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6159
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6160
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6161
     i := Image fromFile:'goodies/bitmaps/gifImages/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6162
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6163
     i asFloydSteinbergDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6164
     i asBurkesDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6165
     i asStevensonArceDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6166
     i asOrderedDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6167
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6168
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6169
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6170
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6171
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6172
     i := Depth4Image
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6173
             width:4
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6174
             height:4
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6175
             fromArray:#[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6176
                            16r01 16r23
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6177
                            16r45 16r67
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6178
                            16r89 16rab
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6179
                            16rcd 16ref
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6180
                        ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6181
     i := i magnifiedBy:30.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6182
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6183
     i asStevensonArceDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6184
     i asOrderedDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6185
    "
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
    "Created: 10.6.1996 / 12:38:29 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6188
    "Modified: 12.6.1996 / 13:58:24 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6189
! !
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
!Image methodsFor:'converting - thresholding'!
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6192
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6193
asNearestPaintDepth8FormOn:aDevice colors:fixColors
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6194
    "return a nearest paint pseudoForm from the palette picture.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6195
     Use the colors in the fixColors array.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6196
     By passing the ditherColors as extra array, this method can
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6197
     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
  6198
     for example to create dithered Depth4Images from Depth8Images."
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
    ^ self asNearestPaintDepth8FormOn:aDevice colors:fixColors nRed:nil nGreen:nil nBlue:nil.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6201
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6202
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6203
     example:
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6204
        color reduction from Depth8 to Depth4 can be done by:
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
     |img8 reducedImg8 img4 map form|
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
     map := #(
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6209
                  (0     0   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6210
                  (0     0 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6211
                  (0    50   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6212
                  (0    50 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6213
                  (0   100   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6214
                  (0   100 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6215
                  (100   0   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6216
                  (100   0 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6217
                  (100  50   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6218
                  (100  50 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6219
                  (100 100   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6220
                  (100 100 100)) collect:[:rgb | (Color red:(rgb at:1)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6221
                                                      green:(rgb at:2)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6222
                                                       blue:(rgb at:3)) onDevice:Display].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6223
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6224
     img8 := Image fromFile:'goodies/bitmaps/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6225
     form := img8 asNearestPaintDepth8FormOn:Display
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6226
                      colors:map
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6227
                        nRed:2
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6228
                      nGreen:3
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6229
                       nBlue:2.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6230
     img8 := Depth8Image fromForm:form.    'dithered version of original image'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6231
     img4 := Depth4Image fromImage:img8.
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
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6234
    "Modified: 17.6.1996 / 18:52:47 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6235
    "Created: 23.6.1997 / 15:26:09 / cg"
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
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6238
asNearestPaintDepth8FormOn:aDevice colors:fixColors nRed:nRed nGreen:nGreen nBlue:nBlue
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6239
    "return a nearest paint pseudoForm from the palette picture.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6240
     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
  6241
     colors assigned to aDevice, such as the preallocated colors of the
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6242
     Color class.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6243
     By passing the ditherColors as extra array, this method can
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6244
     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
  6245
     for example to create dithered Depth4Images from Depth8Images."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6246
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6247
    |pseudoBits f deviceDepth map|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6248
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6249
    deviceDepth := aDevice depth.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6250
    deviceDepth == 8 ifFalse:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6251
        (aDevice supportedImageFormatForDepth:8) isNil ifTrue:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6252
            ^ nil
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6253
        ]
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6254
    ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6255
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6256
    pseudoBits := self nearestPaintDepth8BitsColors:fixColors nRed:nRed nGreen:nGreen nBlue:nBlue.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6257
    pseudoBits isNil ifTrue:[^ nil].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6258
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6259
    f := Form width:width height:height depth:deviceDepth onDevice:aDevice.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6260
    f isNil ifTrue:[^ nil].
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
    "/ have to create a funny colorMap, where
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6264
    "/ color at:index == color colorId:index
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6265
    "/
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6266
    map := Array new:256.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6267
    fixColors do:[:clr |
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6268
        map at:clr colorId + 1 put:clr
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6269
    ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6270
    f colorMap:map.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6271
    f bits:pseudoBits.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6272
    aDevice
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6273
        drawBits:pseudoBits
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6274
        bitsPerPixel:8
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6275
        depth:deviceDepth
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6276
        padding:8
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6277
        width:width height:height
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6278
        x:0 y:0
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6279
        into:(f id) x:0 y:0
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6280
        width:width height:height
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6281
        with:(f initGC).
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6282
    ^ f
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6283
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
     example:
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6286
        color reduction from Depth8 to Depth4 (dithering) can be done by:
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6287
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6288
     |img8 reducedImg8 img4 map form|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6289
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6290
     map := #(
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6291
                  (0     0   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6292
                  (0     0 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6293
                  (0    50   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6294
                  (0    50 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6295
                  (0   100   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6296
                  (0   100 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6297
                  (100   0   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6298
                  (100   0 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6299
                  (100  50   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6300
                  (100  50 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6301
                  (100 100   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6302
                  (100 100 100)) collect:[:rgb | (Color red:(rgb at:1)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6303
                                                      green:(rgb at:2)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6304
                                                       blue:(rgb at:3)) onDevice:Display].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6305
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6306
     img8 := Image fromFile:'goodies/bitmaps/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6307
     form := img8 asNearestPaintDepth8FormOn:Display
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6308
                      colors:map
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6309
                        nRed:2
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6310
                      nGreen:3
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6311
                       nBlue:2.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6312
     img8 := Depth8Image fromForm:form.    'dithered version of original image'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6313
     img4 := Depth4Image fromImage:img8.
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
    "Created: 17.6.1996 / 18:47:46 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6317
    "Modified: 17.6.1996 / 18:52:47 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6318
!
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6319
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6320
asNearestPaintImageDepth:d colors:colors
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6321
    "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
  6322
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6323
    |newBits|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6324
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6325
    d ~~ 8 ifTrue:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6326
        self error:'unsupported depth'
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6327
    ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6328
    newBits := self nearestPaintDepth8BitsColors:colors nRed:nil nGreen:nil nBlue:nil.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6329
    newBits isNil ifTrue:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6330
        self error:'conversion failed'
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6331
    ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6332
    ^ (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
  6333
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6334
    "Modified: / 30-01-2017 / 19:40:28 / stefan"
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
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6337
asThresholdGrayFormOn:aDevice
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6338
    "return a thresholded grey form from the receiver image."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6339
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6340
    |depth|
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
    (depth := aDevice depth) == 1 ifTrue:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6343
        ^ self asThresholdMonochromeFormOn:aDevice
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6344
    ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6345
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6346
    ^ self
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6347
        makeDeviceGrayPixmapOn:aDevice
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6348
        depth:depth
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6349
        fromArray:(self
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6350
                        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
  6351
                        ditherWidth:4
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6352
                        depth:depth)
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
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6355
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6356
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6357
     i := Image fromFile:'goodies/bitmaps/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6358
     (i asThresholdGrayFormOn:Display) inspect.
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
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6361
    "Created: 10.6.1996 / 18:38:31 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6362
    "Modified: 24.6.1997 / 22:19:46 / cg"
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
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6365
asThresholdGrayImageDepth:depth
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6366
    "return a thresholded depth-x grey image from the receiver image."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6367
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6368
    (depth == 1) ifTrue:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6369
        "/ for monochrome, there is highly specialized
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6370
        "/ monochrome dither code available
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6371
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6372
        ^ Depth1Image
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6373
            width:width
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6374
            height:height
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6375
            fromArray:(
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6376
                self
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6377
                    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
  6378
                    ditherWidth:4)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6379
    ].
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
    ^ (self class implementorForDepth:depth)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6382
        width:width
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6383
        height:height
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6384
        fromArray:(
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6385
            self
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6386
                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
  6387
                ditherWidth:4
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6388
                depth:depth)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6389
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6390
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6391
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6392
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6393
     i := Image fromFile:'goodies/bitmaps/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6394
     (i asThresholdGrayImageDepth:1) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6395
     (i asThresholdGrayImageDepth:2) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6396
     (i asThresholdGrayImageDepth:4) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6397
     (i asThresholdGrayImageDepth:8) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6398
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6399
     (i asOrderedDitheredGrayImageDepth:1) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6400
     (i asOrderedDitheredGrayImageDepth:2) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6401
     (i asOrderedDitheredGrayImageDepth:4) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6402
     (i asOrderedDitheredGrayImageDepth:8) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6403
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6404
     (i asFloydSteinbergDitheredGrayImageDepth:1) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6405
     (i asFloydSteinbergDitheredGrayImageDepth:2) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6406
     (i asFloydSteinbergDitheredGrayImageDepth:4) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6407
     (i asFloydSteinbergDitheredGrayImageDepth:8) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6408
    "
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
    "Created: 7.6.1996 / 18:13:33 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6411
    "Modified: 24.6.1997 / 22:19:52 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6412
!
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6413
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6414
asThresholdMonochromeFormOn:aDevice
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6415
    "return a threshold monochrome form from the image."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6416
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6417
    ^ self
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6418
        asOrderedDitheredMonochromeFormOn:aDevice
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6419
        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
  6420
        ditherWidth:4
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6421
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6422
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6423
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6424
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6425
     i := Image fromFile:'goodies/bitmaps/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6426
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6427
     (i asThresholdMonochromeFormOn:Display) inspect
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6428
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6429
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6430
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6431
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6432
     i := (Image fromFile:'goodies/bitmaps/a11.ico') magnifiedBy:10.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6433
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6434
     (i asThresholdMonochromeFormOn:Display) inspect
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6435
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6436
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6437
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6438
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6439
     i := Image fromFile:'goodies/bitmaps/granite.tiff'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6440
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6441
     (i asThresholdMonochromeFormOn:Display) inspect
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6442
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6443
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6444
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6445
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6446
     i := (Image fromFile:'goodies/bitmaps/PasteButton.tiff') magnifiedBy:10.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6447
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6448
     (i asThresholdMonochromeFormOn:Display) inspect
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6449
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6450
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6451
    "Created: 7.6.1996 / 16:15:17 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6452
    "Modified: 10.6.1996 / 17:44:29 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6453
!
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6454
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6455
asThresholdMonochromeImage
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6456
    "return a threshold monochrome image from the image.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6457
     Threshold means: brightness < 0.5 -> black / otherwise white"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6458
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6459
    ^ self
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6460
        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
  6461
        ditherWidth:4
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6462
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6463
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6464
     |i i2|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6465
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6466
     i := Image fromFile:'goodies/bitmaps/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6467
     i2 := i asThresholdMonochromeImage
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6468
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6469
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6470
     |i i2|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6471
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6472
     i := (Image fromFile:'/cdrom/icons/a/a11.ico') magnifiedBy:10.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6473
     i2 := i asThresholdMonochromeImage
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6474
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6475
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6476
     |i i2|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6477
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6478
     i := Image fromFile:'goodies/bitmaps/granite.tiff'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6479
     i2 := i asThresholdMonochromeImage
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6480
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6481
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6482
     |i i2|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6483
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6484
     i := (Image fromFile:'goodies/bitmaps/PasteButton.tiff') magnifiedBy:10.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6485
     i2 := i asThresholdMonochromeImage
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6486
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6487
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6488
    "Created: 7.6.1996 / 16:15:17 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6489
    "Modified: 7.6.1996 / 17:16:10 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6490
!
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6491
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6492
asThresholdMonochromeImage:thresholdBrighness
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6493
    "return a threshold monochrome image from the image.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6494
     The argument (0..1) gives the threshold value;
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6495
     Threshold means: brightness < threshold -> black / otherwise white"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6496
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6497
    |value ditherMatrix|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6498
8208
05a688e9dc8c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8194
diff changeset
  6499
    "/ here, reuse the dithering code, 
05a688e9dc8c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8194
diff changeset
  6500
    "/ passing an all-one or all-zero dither matrix
7904
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6501
    value := thresholdBrighness * 255.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6502
    ditherMatrix := ByteArray new:256 withAll:(value truncated).
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6503
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6504
    ^ self
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6505
        asOrderedDitheredMonochromeImageWithDitherMatrix:ditherMatrix
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6506
        ditherWidth:16
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6507
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6508
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6509
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6510
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6511
     i := Image width:4 height:4 depth:4
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6512
                fromArray:#[ 16r01 16r23
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6513
                             16r45 16r67
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6514
                             16r89 16rab
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6515
                             16rcd 16ref ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6516
     i := i magnifiedBy:30.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6517
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6518
     (i asThresholdMonochromeImage:0.125) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6519
     (i asThresholdMonochromeImage:0.25) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6520
     (i asThresholdMonochromeImage:0.5) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6521
     (i asThresholdMonochromeImage:0.75) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6522
     (i asThresholdMonochromeImage:1) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6523
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6524
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6525
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6526
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6527
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6528
     i := Image fromFile:'goodies/bitmaps/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6529
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6530
     (i asThresholdMonochromeImage:0.125) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6531
     (i asThresholdMonochromeImage:0.25) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6532
     (i asThresholdMonochromeImage:0.5) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6533
     (i asThresholdMonochromeImage:0.625) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6534
     (i asThresholdMonochromeImage:0.75) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6535
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6536
8208
05a688e9dc8c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8194
diff changeset
  6537
    "Created: / 07-06-1996 / 16:15:17 / cg"
05a688e9dc8c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8194
diff changeset
  6538
    "Modified: / 08-06-1996 / 14:51:57 / cg"
05a688e9dc8c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8194
diff changeset
  6539
    "Modified (format): / 23-10-2017 / 10:49:54 / cg"
7904
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6540
! !
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6541
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6542
!Image methodsFor:'converting greyscale images'!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6543
8103
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6544
anyImageAsFormOn:aDevice
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6545
    "return a (usually truecolor) deviceForm from an arbitrary image."
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6546
8524
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  6547
    (samplesPerPixel == 2) ifTrue:[
8103
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6548
        'Image [info]: alpha plane ignored' infoPrintCR.
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6549
    ].
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6550
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6551
    (aDevice visualType == #TrueColor) ifTrue:[
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6552
        ^ self anyImageAsTrueColorFormOn:aDevice
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6553
    ].
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6554
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6555
    "/ PseudoColor conversion also works, although possibly with suboptimal results
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6556
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6557
    ^ self anyImageAsPseudoFormOn:aDevice
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6558
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6559
    "Created: / 25-08-2017 / 09:31:17 / cg"
8524
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  6560
    "Modified: / 19-10-2018 / 16:01:01 / Stefan Vogel"
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  6561
!
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  6562
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  6563
anyImageAsPseudoFormOn:aDevice
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  6564
    "return a (usually truecolor) deviceForm from an arbitrary image."
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  6565
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  6566
    ^ self subclassResponsibility.
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  6567
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  6568
    "Created: / 19-10-2018 / 16:02:16 / Stefan Vogel"
8103
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6569
!
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6570
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6571
greyImageAsFormOn:aDevice
1932
6afe07d9c88c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1927
diff changeset
  6572
    "return a grey-deviceForm from the grey image."
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6573
1063
ba1bf8091bc1 unused variable cleanup
Claus Gittinger <cg@exept.de>
parents: 1057
diff changeset
  6574
    |pictureDepth nPlanes|
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6575
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  6576
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6577
    nPlanes := samplesPerPixel.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6578
    (nPlanes == 2) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6579
        'Image [info]: alpha plane ignored' infoPrintCR.
3872
390fabbc3036 comments and slight cleanup
Claus Gittinger <cg@exept.de>
parents: 3871
diff changeset
  6580
    ].
390fabbc3036 comments and slight cleanup
Claus Gittinger <cg@exept.de>
parents: 3871
diff changeset
  6581
    "/ first plane only
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6582
    pictureDepth := bitsPerSample at:1.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6583
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6584
    "monochrome is very easy ..."
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6585
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6586
    (pictureDepth == 1) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6587
        ^ Form width:width height:height fromArray:self bits onDevice:aDevice
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6588
    ].
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6589
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6590
    (aDevice visualType == #TrueColor) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6591
        ^ self greyImageAsTrueColorFormOn:aDevice
1932
6afe07d9c88c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1927
diff changeset
  6592
    ].
858
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  6593
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  6594
    "/ PseudoColor conversion also works for StaticColor,
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  6595
    "/ GrayScale and DirectColor; although possibly with suboptimal results
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  6596
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  6597
    ^ self greyImageAsPseudoFormOn:aDevice
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  6598
1932
6afe07d9c88c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1927
diff changeset
  6599
    "Modified: 19.10.1997 / 05:17:25 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6600
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6601
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6602
greyImageAsPseudoFormOn:aDevice
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6603
    "return an 8-bit pseudo Form from the grey image"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6604
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  6605
    |wideBits pictureDepth f map
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  6606
     colorMap usedColors nUsed aColor
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6607
     nColors "{ Class: SmallInteger }"
1766
08b918d293a6 fixed conversion of greyScale images with colorCube
Claus Gittinger <cg@exept.de>
parents: 1764
diff changeset
  6608
     range id
1932
6afe07d9c88c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1927
diff changeset
  6609
     cube nR nG nB grayColors
6afe07d9c88c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1927
diff changeset
  6610
     fit|
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
    pictureDepth := bitsPerSample at:1.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6613
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  6614
    (#[2 4 8] includes:pictureDepth) ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6615
        self error:'currently only depth-2, 4 or 8 supported'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6616
        ^ nil
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6617
    ].
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6618
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6619
    wideBits := ByteArray uninitializedNew:(width * height).
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6620
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6621
    (pictureDepth == 8) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6622
        "for 8bits, we scan for used colors first;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6623
         to avoid allocating too many colors"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6624
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6625
        (grayColors := aDevice fixGrayColors) notNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6626
            DitherAlgorithm == #floydSteinberg ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6627
                f := self
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6628
                       asFloydSteinbergDitheredDepth8FormOn:aDevice
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6629
                       colors:grayColors
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6630
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6631
            f notNil ifTrue:[^ f].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6632
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6633
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6634
        (cube := aDevice fixColors) notNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6635
            nR := aDevice numFixRed.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6636
            nG := aDevice numFixGreen.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6637
            nB := aDevice numFixBlue.
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
            DitherAlgorithm == #floydSteinberg ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6640
                f := self
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6641
                       asFloydSteinbergDitheredDepth8FormOn:aDevice
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6642
                       colors:cube
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6643
                       nRed:nR
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6644
                       nGreen:nG
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6645
                       nBlue:nB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6646
            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6647
                f := self
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6648
                       asNearestPaintDepth8FormOn:aDevice
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6649
                       colors:cube
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6650
                       nRed:nR
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6651
                       nGreen:nG
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6652
                       nBlue:nB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6653
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6654
            f notNil ifTrue:[^ f].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6655
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6656
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6657
        usedColors := self bits usedValues.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6658
        nUsed := usedColors max + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6659
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6660
        colorMap := Array new:nUsed.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6661
        range := 100 / 255.0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6662
        usedColors do:[:grey |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6663
            colorMap at:(grey + 1) put:(Color gray:(range * grey))
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6664
        ].
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  6665
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6666
        nColors := (1 bitShift:pictureDepth).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6667
        colorMap := Array new:nColors.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6668
        range := 100 / (nColors - 1) asFloat.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6669
        1 to:nColors do:[:i |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6670
            colorMap at:i put:(Color gray:(i - 1) * range).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6671
        ].
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6672
    ].
1932
6afe07d9c88c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1927
diff changeset
  6673
    photometric ~~ #blackIs0 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6674
        colorMap reverse
1932
6afe07d9c88c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1927
diff changeset
  6675
    ].
6afe07d9c88c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1927
diff changeset
  6676
6afe07d9c88c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1927
diff changeset
  6677
    "allocate those colors & setup the translation map"
6afe07d9c88c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1927
diff changeset
  6678
6afe07d9c88c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1927
diff changeset
  6679
    fit := true.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6680
    map := ByteArray uninitializedNew:256.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6681
    nColors := colorMap size.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6682
    1 to:nColors do:[:i |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6683
        aColor := colorMap at:i.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6684
        aColor notNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6685
            aColor := aColor onDevice:aDevice.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6686
            colorMap at:i put:aColor.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6687
            id := aColor colorId.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6688
            id isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6689
                id := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6690
                fit := false.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6691
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6692
            map at:i put:id
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6693
        ]
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  6694
    ].
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6695
1932
6afe07d9c88c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1927
diff changeset
  6696
    fit ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6697
        "/ here comes the hard part - some grey value
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6698
        "/ could not be allocated.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6699
        "/ Must dither.
1932
6afe07d9c88c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1927
diff changeset
  6700
6afe07d9c88c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1927
diff changeset
  6701
    ].
6afe07d9c88c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1927
diff changeset
  6702
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6703
    "expand & translate"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  6704
    self bits
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6705
        expandPixels:pictureDepth
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6706
        width:width height:height
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6707
        into:wideBits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6708
        mapping:map.
4780
03c3e810a584 Change senders of obsolete messages Form>>...on: to ...onDevice:
Stefan Vogel <sv@exept.de>
parents: 4769
diff changeset
  6709
03c3e810a584 Change senders of obsolete messages Form>>...on: to ...onDevice:
Stefan Vogel <sv@exept.de>
parents: 4769
diff changeset
  6710
    f := Form width:width height:height depth:8 onDevice:aDevice.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6711
    f isNil ifTrue:[^ nil].
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  6712
    f colorMap:colorMap.
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  6713
    aDevice
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6714
        drawBits:wideBits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6715
        depth:8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6716
        padding:8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6717
        width:width height:height
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6718
        x:0 y:0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6719
        into:(f id)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6720
        x:0 y:0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6721
        width:width height:height
7755
75f5eba88e77 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 7689
diff changeset
  6722
        with:(f initGC).
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6723
    ^ f
746
f5479d603f64 gray vs. grey
Claus Gittinger <cg@exept.de>
parents: 744
diff changeset
  6724
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  6725
    "Modified: / 19-10-1997 / 05:19:44 / cg"
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  6726
    "Modified: / 30-01-2017 / 19:37:01 / stefan"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  6727
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  6728
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6729
greyImageAsTrueColorFormOn:aDevice
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6730
    "return a true-color device-form for the grey-image receiver.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6731
     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
  6732
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  6733
    |myDepth    "{ Class: SmallInteger }"
1143
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  6734
     nColors    "{ Class: SmallInteger }"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6735
     colorValues
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  6736
     scaleDown
1143
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  6737
     scaleRed   "{ Class: SmallInteger }"
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  6738
     scaleGreen "{ Class: SmallInteger }"
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  6739
     scaleBlue  "{ Class: SmallInteger }"
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  6740
     redShift   "{ Class: SmallInteger }"
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  6741
     blueShift  "{ Class: SmallInteger }"
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  6742
     greenShift "{ Class: SmallInteger }"
8096
42e3303fe2c2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8093
diff changeset
  6743
     form bestFormat usedDeviceDepth usedDeviceBitsPerPixel
1175
5595569cfbd3 newStyle info & error messages
Claus Gittinger <cg@exept.de>
parents: 1170
diff changeset
  6744
     greyValue  "{ Class: SmallInteger }"
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6745
     h          "{ Class: SmallInteger }"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6746
     w          "{ Class: SmallInteger }"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6747
     pixelArray newPixelArray i|
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6748
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6749
    "/ this is a slow fallback method; this ought to be
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6750
    "/ redefined in DepthxImage for more performance.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6751
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6752
    myDepth := self depth.
5315
cbac968cee6c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5314
diff changeset
  6753
    myDepth > 16 ifTrue:[
8096
42e3303fe2c2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8093
diff changeset
  6754
        "/ for now: deep greyscale images are not supported.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6755
        self error:'unsupported depth' mayProceed:true.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6756
        ^ nil
5315
cbac968cee6c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5314
diff changeset
  6757
    ].
5314
517094dfa71c changed #greyImageAsTrueColorFormOn:
Claus Gittinger <cg@exept.de>
parents: 5313
diff changeset
  6758
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6759
    "/ compute scale to map from my pixels into devices range
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6760
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6761
    scaleDown := 1 bitShift:myDepth.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6762
    scaleRed := (1 bitShift:aDevice bitsRed).
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6763
    scaleGreen := (1 bitShift:aDevice bitsGreen).
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6764
    scaleBlue := (1 bitShift:aDevice bitsBlue).
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6765
    redShift := aDevice shiftRed.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6766
    greenShift := aDevice shiftGreen.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6767
    blueShift := aDevice shiftBlue.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6768
1143
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  6769
    "/ prepare the map
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  6770
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6771
    nColors := (1 bitShift:myDepth).
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6772
    colorValues := Array new:nColors.
6256
1e510d7aea8e Inline block variable rename to avoid stc bug
Stefan Vogel <sv@exept.de>
parents: 6166
diff changeset
  6773
    1 to:nColors do:[:colorIdx |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6774
        |v gv bv rv nv|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6775
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6776
        "/ scale down to 0..1
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6777
        v := (colorIdx-1) / scaleDown.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6778
        rv := (v * scaleRed) truncated.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6779
        gv := (v * scaleGreen) truncated.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6780
        bv := (v * scaleBlue) truncated.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6781
        nv := rv bitShift:redShift.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6782
        nv := nv bitOr:(gv bitShift:greenShift).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6783
        nv := nv bitOr:(bv bitShift:blueShift).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6784
        colorValues at:colorIdx put:nv
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  6785
    ].
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6786
    photometric == #whiteIs0 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6787
        "/ reverse the order; 0 is brightest
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6788
        colorValues reverse
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6789
    ].
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6790
8096
42e3303fe2c2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8093
diff changeset
  6791
    "/ the temporary helper image is only needed to allow
42e3303fe2c2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8093
diff changeset
  6792
    "/ the rowAt:putAll: calls below.
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6793
    bestFormat := self bestSupportedImageFormatFor:aDevice.
235
579f3f804a46 padding info in supportedFormats
Claus Gittinger <cg@exept.de>
parents: 230
diff changeset
  6794
    usedDeviceDepth := bestFormat at:#depth.
579f3f804a46 padding info in supportedFormats
Claus Gittinger <cg@exept.de>
parents: 230
diff changeset
  6795
    usedDeviceBitsPerPixel := bestFormat at:#bitsPerPixel.
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6796
1668
95dafe4184d5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1667
diff changeset
  6797
    i := (Image implementorForDepth:usedDeviceBitsPerPixel) new.
95dafe4184d5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1667
diff changeset
  6798
    i width:width height:height.
3912
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
  6799
    i createPixelStore.
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6800
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6801
    "/ now, walk over the image and replace
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6802
    "/ colorMap indices by color values in the bits array
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6803
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6804
    h := height - 1.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6805
    w := width - 1.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6806
    pixelArray := self pixelArraySpecies new:width.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6807
    newPixelArray := i pixelArraySpecies new:width.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6808
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6809
    0 to:h do:[:y |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6810
        self rowAt:y into:pixelArray.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6811
        0 to:w do:[:x |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6812
            greyValue := pixelArray at:(x+1).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6813
            newPixelArray at:(x+1) put:(colorValues at:greyValue + 1).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6814
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6815
        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
  6816
    ].
03c3e810a584 Change senders of obsolete messages Form>>...on: to ...onDevice:
Stefan Vogel <sv@exept.de>
parents: 4769
diff changeset
  6817
03c3e810a584 Change senders of obsolete messages Form>>...on: to ...onDevice:
Stefan Vogel <sv@exept.de>
parents: 4769
diff changeset
  6818
    form := Form width:width height:height depth:usedDeviceDepth onDevice:aDevice.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6819
    form isNil ifTrue:[^ nil].
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6820
    form initGC.
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6821
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  6822
    form
8096
42e3303fe2c2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8093
diff changeset
  6823
        copyBitsFrom:i bits
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6824
        bitsPerPixel:usedDeviceBitsPerPixel
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6825
        depth:usedDeviceDepth
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6826
        padding:8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6827
        width:width height:height
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6828
        x:0 y:0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6829
        toX:0 y:0.
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6830
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6831
    ^ form
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6832
5710
9928e8b52195 changed: #greyImageAsTrueColorFormOn:
Claus Gittinger <cg@exept.de>
parents: 5655
diff changeset
  6833
    "Created: / 20-10-1995 / 22:05:10 / cg"
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  6834
    "Modified (format): / 31-01-2017 / 14:42:05 / stefan"
8096
42e3303fe2c2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8093
diff changeset
  6835
    "Modified (format): / 23-08-2017 / 16:35:13 / cg"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  6836
! !
48194c26a46c Initial revision
claus
parents:
diff changeset
  6837
48194c26a46c Initial revision
claus
parents:
diff changeset
  6838
!Image methodsFor:'converting palette images'!
48194c26a46c Initial revision
claus
parents:
diff changeset
  6839
48194c26a46c Initial revision
claus
parents:
diff changeset
  6840
paletteImageAsFormOn:aDevice
72
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
  6841
    "return a device-form for the palette-image receiver"
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
  6842
380
c5ffc6d48a9e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 379
diff changeset
  6843
    |type ddepth|
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6844
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  6845
    ddepth := aDevice depth.
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  6846
    type := aDevice visualType.
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  6847
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6848
    (type == #TrueColor) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6849
        DitherAlgorithm == #floydSteinberg ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6850
            ddepth == 8 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6851
                self depth == 8 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6852
                    "/ use fixColor dither algorithm
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6853
                    ^ self asDitheredTrueColor8FormOn:aDevice
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6854
                ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6855
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6856
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6857
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6858
        ^ self paletteImageAsTrueColorFormOn:aDevice
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6859
    ].
858
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  6860
8141
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
  6861
    aDevice hasGrayscales ifFalse:[
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
  6862
        ^ self asMonochromeFormOn:aDevice
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
  6863
    ].
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
  6864
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
  6865
    (type == #StaticGray) ifTrue:[
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
  6866
        "/ ddepth == 8 ifTrue:[
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
  6867
        "/     ^ self paletteImageAsGray8FormOn:aDevice
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
  6868
        "/ ].
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
  6869
        ^ self asGrayFormOn:aDevice
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
  6870
    ].
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
  6871
858
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  6872
    "/ the PseudoColor conversion also works for
8141
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
  6873
    "/ StaticColor, GrayScale & DirectColor; 
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
  6874
    "/ although possibly with suboptimal results
858
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  6875
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  6876
    ^ self paletteImageAsPseudoFormOn:aDevice
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  6877
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  6878
    "Modified: / 14-06-1996 / 19:31:01 / cg"
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  6879
    "Modified: / 30-01-2017 / 20:55:32 / stefan"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  6880
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  6881
48194c26a46c Initial revision
claus
parents:
diff changeset
  6882
paletteImageAsPseudoFormOn:aDevice
72
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
  6883
    "return a pseudo-deviceForm from the palette image."
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  6884
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  6885
    |tempImage d temp8|
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  6886
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  6887
    d := self depth.
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  6888
    (#[1 2 4 8] includes:d) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6889
        "
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6890
         fallback code for some depth's:
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6891
         create a temporary Depth8Image and use its conversion method
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6892
        "
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6893
        temp8 := ByteArray uninitializedNew:(width * height).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6894
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6895
        self bits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6896
            expandPixels:d
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6897
            width:width height:height
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6898
            into:temp8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6899
            mapping:nil.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6900
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6901
        tempImage := Image width:width height:height depth:8 fromArray:temp8.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6902
        tempImage colorMap:colorMap.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6903
        ^ tempImage paletteImageAsPseudoFormOn:aDevice
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  6904
    ].
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
  6905
    ^ self subclassResponsibility
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  6906
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  6907
    "Modified: / 30-01-2017 / 19:37:57 / stefan"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  6908
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  6909
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6910
paletteImageAsTrueColorFormOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6911
    "return a true-color device-form for the palette-image receiver."
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6912
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  6913
    |nColors "{ Class: SmallInteger }"
1605
64151392ff64 added generic #paletteImageAsTrueColorForm implementation
Claus Gittinger <cg@exept.de>
parents: 1595
diff changeset
  6914
     h       "{ Class: SmallInteger }"
64151392ff64 added generic #paletteImageAsTrueColorForm implementation
Claus Gittinger <cg@exept.de>
parents: 1595
diff changeset
  6915
     pixel   "{ Class: SmallInteger }"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  6916
     colorValues
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6917
     scaleRed scaleGreen scaleBlue redShift greenShift blueShift
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  6918
     form imageBits bestFormat usedDeviceDepth usedDeviceBitsPerPixel
4187
411b7b76a8bb fixedPalette has more functionality
Claus Gittinger <cg@exept.de>
parents: 4175
diff changeset
  6919
     i pixelArray newPixelArray
411b7b76a8bb fixedPalette has more functionality
Claus Gittinger <cg@exept.de>
parents: 4175
diff changeset
  6920
     clr r g b rv gv bv v "{ Class: SmallInteger }" |
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6921
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6922
    "/ this is a slow fallback method; this ought to be
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6923
    "/ redefined in DepthxImage for more performance.
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6924
4187
411b7b76a8bb fixedPalette has more functionality
Claus Gittinger <cg@exept.de>
parents: 4175
diff changeset
  6925
    bestFormat := self bestSupportedImageFormatFor:aDevice.
411b7b76a8bb fixedPalette has more functionality
Claus Gittinger <cg@exept.de>
parents: 4175
diff changeset
  6926
    usedDeviceDepth := bestFormat at:#depth.
411b7b76a8bb fixedPalette has more functionality
Claus Gittinger <cg@exept.de>
parents: 4175
diff changeset
  6927
    usedDeviceDepth == 1 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6928
        ^ self asMonochromeFormOn:aDevice.
4187
411b7b76a8bb fixedPalette has more functionality
Claus Gittinger <cg@exept.de>
parents: 4175
diff changeset
  6929
    ].
411b7b76a8bb fixedPalette has more functionality
Claus Gittinger <cg@exept.de>
parents: 4175
diff changeset
  6930
    usedDeviceBitsPerPixel := bestFormat at:#bitsPerPixel.
411b7b76a8bb fixedPalette has more functionality
Claus Gittinger <cg@exept.de>
parents: 4175
diff changeset
  6931
411b7b76a8bb fixedPalette has more functionality
Claus Gittinger <cg@exept.de>
parents: 4175
diff changeset
  6932
411b7b76a8bb fixedPalette has more functionality
Claus Gittinger <cg@exept.de>
parents: 4175
diff changeset
  6933
    scaleRed := ((1 bitShift:aDevice bitsRed) - 1) / 255.
411b7b76a8bb fixedPalette has more functionality
Claus Gittinger <cg@exept.de>
parents: 4175
diff changeset
  6934
    scaleGreen := ((1 bitShift:aDevice bitsGreen) - 1) / 255.
411b7b76a8bb fixedPalette has more functionality
Claus Gittinger <cg@exept.de>
parents: 4175
diff changeset
  6935
    scaleBlue := ((1 bitShift:aDevice bitsBlue) - 1) / 255.
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6936
    redShift := aDevice shiftRed.
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6937
    greenShift := aDevice shiftGreen.
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6938
    blueShift := aDevice shiftBlue.
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6939
4187
411b7b76a8bb fixedPalette has more functionality
Claus Gittinger <cg@exept.de>
parents: 4175
diff changeset
  6940
    nColors := colorMap size.
411b7b76a8bb fixedPalette has more functionality
Claus Gittinger <cg@exept.de>
parents: 4175
diff changeset
  6941
    nColors <= 4096 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6942
        "/ precompute scales to map from 0..100 into devices range
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6943
        "/ (this may be different for the individual components)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6944
        colorValues := Array uninitializedNew:nColors.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6945
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6946
        1 to:nColors do:[:index |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6947
            r := colorMap redByteAt:index.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6948
            g := colorMap greenByteAt:index.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6949
            b := colorMap blueByteAt:index.
8103
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6950
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6951
            rv := (r * scaleRed) rounded.
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6952
            gv := (g * scaleGreen) rounded.
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6953
            bv := (b * scaleBlue) rounded.
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6954
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6955
            v := rv bitShift:redShift.
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6956
            v := v bitOr:(gv bitShift:greenShift).
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6957
            v := v bitOr:(bv bitShift:blueShift).
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6958
            colorValues at:index put:v.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6959
        ].
2864
dd151bfdff9d care for deep devices which do not support deep bitmaps
Claus Gittinger <cg@exept.de>
parents: 2832
diff changeset
  6960
    ].
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6961
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6962
    "/ the temporary helper image is only needed to allow
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6963
    "/ the rowAt:putAll: calls below.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6964
1665
e0329f98904d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1664
diff changeset
  6965
    i := (Image implementorForDepth:usedDeviceBitsPerPixel) new.
e0329f98904d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1664
diff changeset
  6966
    i width:width height:height.
3912
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
  6967
    i createPixelStore.
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
  6968
    imageBits := i bits.
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6969
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6970
    "/ now, walk over the image and replace
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6971
    "/ colorMap indices by color values in the bits array
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6972
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6973
    h := height - 1.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6974
    pixelArray := self pixelArraySpecies new:width.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6975
    newPixelArray := i pixelArraySpecies new:width.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6976
4187
411b7b76a8bb fixedPalette has more functionality
Claus Gittinger <cg@exept.de>
parents: 4175
diff changeset
  6977
    colorValues notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6978
        0 to:h do:[:y |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6979
            self rowAt:y into:pixelArray.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6980
            1 to:width do:[:x |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6981
                pixel := pixelArray at:x.
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  6982
                newPixelArray at:x put:(colorValues at:pixel + 1 ifAbsent:[0]).
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6983
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6984
            i rowAt:y putAll:newPixelArray.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6985
        ].
4187
411b7b76a8bb fixedPalette has more functionality
Claus Gittinger <cg@exept.de>
parents: 4175
diff changeset
  6986
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6987
        0 to:h do:[:y |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6988
            self rowAt:y into:pixelArray.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6989
            1 to:width do:[:x |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6990
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6991
                pixel := pixelArray at:x.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6992
                clr := self colorFromValue:pixel.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6993
                r := clr redByte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6994
                g := clr greenByte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6995
                b := clr blueByte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6996
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6997
                rv := (r * scaleRed) rounded.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6998
                gv := (g * scaleGreen) rounded.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6999
                bv := (b * scaleBlue) rounded.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7000
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7001
                v := rv bitShift:redShift.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7002
                v := v bitOr:(gv bitShift:greenShift).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7003
                v := v bitOr:(bv bitShift:blueShift).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7004
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7005
                newPixelArray at:x put:v.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7006
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7007
            i rowAt:y putAll:newPixelArray.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7008
        ].
4780
03c3e810a584 Change senders of obsolete messages Form>>...on: to ...onDevice:
Stefan Vogel <sv@exept.de>
parents: 4769
diff changeset
  7009
    ].
03c3e810a584 Change senders of obsolete messages Form>>...on: to ...onDevice:
Stefan Vogel <sv@exept.de>
parents: 4769
diff changeset
  7010
03c3e810a584 Change senders of obsolete messages Form>>...on: to ...onDevice:
Stefan Vogel <sv@exept.de>
parents: 4769
diff changeset
  7011
    form := Form width:width height:height depth:usedDeviceDepth onDevice:aDevice.
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  7012
    form isNil ifTrue:[^ nil].
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  7013
    form initGC.
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  7014
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  7015
    form
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7016
        copyBitsFrom:imageBits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7017
        bitsPerPixel:usedDeviceBitsPerPixel
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7018
        depth:usedDeviceDepth
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7019
        padding:8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7020
        width:width height:height
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7021
        x:0 y:0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7022
        toX:0 y:0.
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  7023
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  7024
    ^ form
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  7025
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  7026
    "Modified: / 31-01-2017 / 15:01:05 / stefan"
8103
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  7027
    "Modified: / 25-08-2017 / 08:54:23 / cg"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  7028
! !
48194c26a46c Initial revision
claus
parents:
diff changeset
  7029
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7030
!Image methodsFor:'converting rgb images'!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7031
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7032
asDitheredTrueColor8FormOn:aDevice
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7033
    "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
  7034
     Return the device-form.
1771
ee831cb59127 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1766
diff changeset
  7035
     This method is only valid for trueColor displays."
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7036
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7037
    |fixColors pixel
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7038
     dstIdx     "{ Class: SmallInteger }"
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7039
     shiftRed   "{ Class: SmallInteger }"
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7040
     shiftGreen "{ Class: SmallInteger }"
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7041
     shiftBlue  "{ Class: SmallInteger }"
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7042
     nRed    "{ Class: SmallInteger }"
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7043
     nGreen  "{ Class: SmallInteger }"
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7044
     nBlue   "{ Class: SmallInteger }"|
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7045
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7046
    shiftRed := aDevice shiftRed.
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7047
    shiftGreen := aDevice shiftGreen.
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7048
    shiftBlue := aDevice shiftBlue.
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7049
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  7050
    nRed := 1 bitShift:aDevice bitsRed.
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  7051
    nGreen := 1 bitShift:aDevice bitsGreen.
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  7052
    nBlue := 1 bitShift:aDevice bitsBlue.
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7053
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7054
    fixColors := Array new:(nRed * nGreen * nBlue).
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7055
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7056
    dstIdx := 1.
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7057
    0 to:nRed - 1 do:[:sR |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7058
        0 to:nGreen - 1 do:[:sG |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7059
            0 to:nBlue - 1 do:[:sB |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7060
                pixel := (sR bitShift:shiftRed)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7061
                         + (sG bitShift:shiftGreen)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7062
                         + (sB bitShift:shiftBlue).
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  7063
                fixColors at:dstIdx put:(Color colorId:pixel).
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7064
                dstIdx := dstIdx + 1
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7065
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7066
        ]
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7067
    ].
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7068
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7069
    ^ self
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7070
        asFloydSteinbergDitheredDepth8FormOn:aDevice
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7071
        colors:fixColors
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7072
        nRed:nRed nGreen:nGreen nBlue:nBlue
1771
ee831cb59127 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1766
diff changeset
  7073
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  7074
    "Created: / 14-06-1996 / 17:23:52 / cg"
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  7075
    "Modified: / 23-06-1997 / 15:22:36 / cg"
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  7076
    "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
  7077
!
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7078
5919
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7079
compressColorMap
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7080
    "calculates a new color map for the image, using only used colors"
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7081
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 6037
diff changeset
  7082
    |depth newColorMap usedColors oldToNew oldBits newBits tmpBits sortBlockForColors|
5919
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7083
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7084
    depth := self depth.
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7085
    usedColors := self realUsedColors.
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7086
    sortBlockForColors := [:a :b |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7087
            a redByte == b redByte ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7088
                a greenByte == b greenByte ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7089
                    a blueByte < b blueByte
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7090
                ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7091
                    a greenByte < b greenByte
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7092
                ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7093
            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7094
                a redByte < b redByte
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7095
            ]
5919
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7096
      ].
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7097
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7098
    "/ translation table
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7099
    oldToNew := ByteArray new:(1 bitShift:depth).
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7100
    newColorMap := usedColors asArray.
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7101
    newColorMap sort:sortBlockForColors.
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7102
    self colorMap notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7103
        self colorMap asArray keysAndValuesDo:[:oldIdx :clr |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7104
            |newPixel|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7105
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7106
            (usedColors includes:clr) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7107
                newPixel := newColorMap indexOf:clr.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7108
                oldToNew at:oldIdx put:newPixel-1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7109
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7110
        ].
5919
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7111
    ].
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7112
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7113
    oldBits := self bits.
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7114
    newBits := ByteArray new:(oldBits size).
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7115
    depth ~~ 8 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7116
        "/ expand/compress can only handle 8bits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7117
        tmpBits := ByteArray uninitializedNew:(self width*self height).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7118
        oldBits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7119
            expandPixels:depth
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7120
            width:self width
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7121
            height:self height
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7122
            into:tmpBits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7123
            mapping:oldToNew.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7124
        tmpBits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7125
            compressPixels:depth
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7126
            width:self width
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7127
            height:self height
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7128
            into:newBits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7129
            mapping:nil
5919
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7130
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7131
        oldBits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7132
            expandPixels:depth
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7133
            width:self width
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7134
            height:self height
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7135
            into:newBits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7136
            mapping:oldToNew.
5919
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7137
    ].
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7138
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7139
    self bits:newBits.
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7140
    self colorMap:newColorMap.
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7141
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7142
    "Created: / 17-07-2012 / 12:13:18 / anwild"
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7143
!
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7144
8665
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7145
copyPixels32AlphaHighTo24From:anImage
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7146
    "tuned helper to copy pixels from a 32bit rgba (alpha in high byte)
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7147
     to me as a 24bit non-alpha rgb image"
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7148
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7149
    |imageBits|
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7150
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7151
    imageBits := anImage bits.
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7152
%{
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7153
    OBJ _myBits = __INST(bytes);
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7154
    OBJ w = __INST(width);
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7155
    OBJ h = __INST(height);
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7156
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7157
    if (__isByteArrayLike(_myBits)
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7158
     && __isByteArrayLike(imageBits)
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7159
     && __bothSmallInteger(w, h)) {
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7160
        int _idx;
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7161
        int _w = __intVal(w);
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7162
        int _h = __intVal(h);
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7163
        int _mySize = __byteArraySize(_myBits);
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7164
        int _imgSize = __byteArraySize(imageBits);
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7165
        char *_myBitsPtr = __ByteArrayInstPtr(_myBits)->ba_element;
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7166
        char *_imgBitsPtr = __ByteArrayInstPtr(imageBits)->ba_element;
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7167
        char *_myBitsEndPtr = _myBitsPtr + (_w * _h * 3);
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7168
        char *_imgBitsEndPtr = _imgBitsPtr + (_w * _h * 4);
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7169
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7170
        if ((_w * _h * 3) > _mySize) goto error;
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7171
        if ((_w * _h * 4) > _imgSize) goto error;
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7172
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7173
#if (__POINTER_SIZE__ == 8) && defined(__LSBFIRST__)
8708
b637a45bb4d1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8691
diff changeset
  7174
        // fetch 4 pixels (4*32bit in 2 INTs); store in 3 ints (4*24bit)
8665
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7175
        while (_myBitsPtr < (_myBitsEndPtr-sizeof(int)*3)) {
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7176
            // LSB argbargb; r in LSB
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7177
            // a2 b2 g2 r2 a1 b1 g1 r1 
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7178
            unsigned INT in12 = ((unsigned INT*)_imgBitsPtr)[0];
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7179
            // a4 b4 g4 r4 a3 b3 g3 r3
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7180
            unsigned INT in34 = ((unsigned INT*)_imgBitsPtr)[1];
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7181
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7182
            // a2 b2 g2 r2 a1 b1 g1 r1 =>    b1 g1 r1
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7183
            // a2 b2 g2 r2 a1 b1 g1 r1 => r2    
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7184
            ((unsigned int*)_myBitsPtr)[0] = (unsigned int)(((in12) & 0x00FFFFFFLL) 
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7185
                                                         | ((in12 >> 8) & 0xFF000000LL));
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7186
            // a2 b2 g2 r2 a1 b1 g1 r1 =>       b2 g2
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7187
            // a4 b4 g4 r4 a3 b3 g3 r3 => g3 r3
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7188
            ((unsigned int*)_myBitsPtr)[1] = (unsigned int)(((in12 >> 40) & 0x0000FFFFLL) 
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7189
                                                         |   ((in34 << 16) & 0xFFFF0000LL));
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7190
            // a4 b4 g4 r4 a3 b3 g3 r3 =>          b3
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7191
            // a4 b4 g4 r4 a3 b3 g3 r3 => b4 g4 r4
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7192
            ((unsigned int*)_myBitsPtr)[2] = (unsigned int)(((in34 >> 16) & 0x000000FFLL) 
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7193
                                                         |  ((in34 >> 24) & 0xFFFFFF00LL));
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7194
            _imgBitsPtr += (2 * sizeof(INT));
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7195
            _myBitsPtr += (3 * sizeof(int));
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7196
        }
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7197
#endif
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7198
        while (_myBitsPtr < _myBitsEndPtr) {
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7199
            // fetch rgba => r..g..b
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7200
#if defined(__LSBFIRST__)
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7201
            unsigned int in = ((unsigned int*)_imgBitsPtr)[0];
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7202
            _myBitsPtr[0] = (in) & 0xFF;
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7203
            _myBitsPtr[1] = (in >> 8) & 0xFF;
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7204
            _myBitsPtr[2] = (in >> 16) & 0xFF;
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7205
#else
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7206
            unsigned char _r = _imgBitsPtr[0];
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7207
            unsigned char _g = _imgBitsPtr[1];
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7208
            unsigned char _b = _imgBitsPtr[2];
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7209
            _myBitsPtr[0] = _r;
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7210
            _myBitsPtr[1] = _g;
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7211
            _myBitsPtr[2] = _b;
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7212
#endif
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7213
            _imgBitsPtr += 4;
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7214
            _myBitsPtr += 3;
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7215
        }
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7216
        RETURN( self );
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7217
    }
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7218
error: ;
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7219
    console_printf("Image: oops - bits-size in copyPixels32\n");
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7220
%}.
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7221
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7222
    anImage valuesFromX:0 y:0 toX:(self width-1) y:(self height-1) do:[:x :y :pixel |
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7223
        self pixelAtX:x y:y put:(pixel bitAnd:16rFFFFFF)
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7224
    ].
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7225
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7226
    "Created: / 25-03-2019 / 14:48:52 / Claus Gittinger"
8708
b637a45bb4d1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8691
diff changeset
  7227
    "Modified: / 27-06-2019 / 15:31:33 / Claus Gittinger"
8665
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7228
!
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7229
7282
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7230
copyPixels32AlphaLowTo24From:anImage
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7231
    "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
  7232
     to me as a 24bit non-alpha rgb image"
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7233
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7234
    |imageBits|
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7235
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7236
    imageBits := anImage bits.
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7237
%{
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7238
    OBJ _myBits = __INST(bytes);
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7239
    OBJ w = __INST(width);
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7240
    OBJ h = __INST(height);
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7241
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7242
    if (__isByteArrayLike(_myBits)
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7243
     && __isByteArrayLike(imageBits)
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7244
     && __bothSmallInteger(w, h)) {
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7245
        int _idx;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7246
        int _w = __intVal(w);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7247
        int _h = __intVal(h);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7248
        int _mySize = __byteArraySize(_myBits);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7249
        int _imgSize = __byteArraySize(imageBits);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7250
        char *_myBitsPtr = __ByteArrayInstPtr(_myBits)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7251
        char *_imgBitsPtr = __ByteArrayInstPtr(imageBits)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7252
        char *_myBitsEndPtr = _myBitsPtr + (_w * _h * 3);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7253
        char *_imgBitsEndPtr = _imgBitsPtr + (_w * _h * 4);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7254
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7255
        if ((_w * _h * 3) > _mySize) goto error;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7256
        if ((_w * _h * 4) > _imgSize) goto error;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7257
8664
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7258
#if (__POINTER_SIZE__ == 8) && defined(__LSBFIRST__)
8708
b637a45bb4d1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8691
diff changeset
  7259
        // fetch 4 pixels (4*32bit in 2 INTs); store in 3 ints (4*24bit)
8664
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7260
        while (_myBitsPtr < (_myBitsEndPtr-sizeof(int)*3)) {
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7261
            // LSB argbargb; r in LSB
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7262
            // b2 g2 r2 a2 b1 g1 r1 a1
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7263
            unsigned INT in12 = ((unsigned INT*)_imgBitsPtr)[0];
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7264
            // b4 g4 r4 a4 b3 g3 r3 a3
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7265
            unsigned INT in34 = ((unsigned INT*)_imgBitsPtr)[1];
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7266
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7267
            // b2 g2 r2 a2 b1 g1 r1 a1 =>    b1 g1 r1
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7268
            // b2 g2 r2 a2 b1 g1 r1 a1 => r2    
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7269
            ((unsigned int*)_myBitsPtr)[0] = (unsigned int)(((in12 >> 8) & 0x00FFFFFFLL) 
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7270
                                                         | ((in12 >> 16) & 0xFF000000LL));
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7271
            // b2 g2 r2 a2 b1 g1 r1 a1 =>       b2 g2
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7272
            // b4 g4 r4 a4 b3 g3 r3 a3 => g3 r3
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7273
            ((unsigned int*)_myBitsPtr)[1] = (unsigned int)(((in12 >> 48) & 0x0000FFFFLL) 
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7274
                                                         |   ((in34 << 8) & 0xFFFF0000LL));
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7275
            // b4 g4 r4 a4 b3 g3 r3 a3 =>          b3
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7276
            // b4 g4 r4 a4 b3 g3 r3 a3 => b4 g4 r4
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7277
            ((unsigned int*)_myBitsPtr)[2] = (unsigned int)(((in34 >> 24) & 0x000000FFLL) 
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7278
                                                         |  ((in34 >> 32) & 0xFFFFFF00LL));
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7279
            _imgBitsPtr += (2 * sizeof(INT));
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7280
            _myBitsPtr += (3 * sizeof(int));
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7281
        }
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7282
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7283
        while (_myBitsPtr < _myBitsEndPtr) {
8664
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7284
            // fetch bgra => r..g..b
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7285
#if defined(__LSBFIRST__)
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7286
            unsigned int in = ((unsigned int*)_imgBitsPtr)[0];
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7287
            _myBitsPtr[0] = (in >> 8) & 0xFF;
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7288
            _myBitsPtr[1] = (in >> 16) & 0xFF;
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7289
            _myBitsPtr[2] = (in >> 24) & 0xFF;
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7290
#else
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7291
            unsigned char _r = _imgBitsPtr[0];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7292
            unsigned char _g = _imgBitsPtr[1];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7293
            unsigned char _b = _imgBitsPtr[2];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7294
            _myBitsPtr[0] = _r;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7295
            _myBitsPtr[1] = _g;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7296
            _myBitsPtr[2] = _b;
8664
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7297
#endif
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7298
            _imgBitsPtr += 4;
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7299
            _myBitsPtr += 3;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7300
        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7301
        RETURN( self );
7282
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7302
    }
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7303
error: ;
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7304
    console_printf("Image: oops - bits-size in copyPixels32\n");
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7305
%}.
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7306
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7307
    anImage valuesFromX:0 y:0 toX:(self width-1) y:(self height-1) do:[:x :y :pixel |
8665
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7308
        self pixelAtX:x y:y put:((pixel bitShift:-8) bitAnd:16rFFFFFF)
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7309
    ].
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7310
8708
b637a45bb4d1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8691
diff changeset
  7311
    "Modified: / 27-06-2019 / 15:32:03 / Claus Gittinger"
7282
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7312
!
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7313
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7314
rgbImageAsFormOn:aDevice
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7315
    "convert am rgb image to a device-form on aDevice.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7316
     Return the device-form."
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7317
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7318
    |visual|
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7319
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7320
    visual := aDevice visualType.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7321
    (visual == #StaticGray) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7322
        ^ self asGrayFormOn:aDevice
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  7323
    ].
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7324
    (visual == #TrueColor) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7325
        ^ self rgbImageAsTrueColorFormOn:aDevice
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  7326
    ].
858
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  7327
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  7328
    "/ PseudoColor conversion also works for StaticColor, GrayScale
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  7329
    "/ and DirectColor displays; although possibly with suboptimal results
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  7330
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7331
    ^ self rgbImageAsPseudoFormOn:aDevice
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7332
858
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  7333
    "Modified: 14.6.1996 / 19:30:06 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7334
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7335
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7336
rgbImageAsPseudoFormOn:aDevice
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7337
    "return a pseudocolor form from the rgb-picture"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7338
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  7339
    |n     "{ Class: SmallInteger }"
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  7340
     depth "{ Class: SmallInteger }"
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  7341
     palette f|
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  7342
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  7343
    (depth := self depth) <= 8 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7344
        "/ simulate it via a temporary palette image
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7345
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7346
        palette := Array new:(1 bitShift:depth).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7347
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7348
        n := (1 bitShift:depth)-1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7349
        0 to:n do:[:pixelValue |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7350
            palette at:(pixelValue+1) put:(self colorFromValue:pixelValue)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7351
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7352
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7353
        self setColorMap:palette.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7354
        photometric := #palette.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7355
        f := self paletteImageAsPseudoFormOn:aDevice.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7356
        self setColorMap:nil.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7357
        photometric := #rgb.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7358
        ^ f
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  7359
    ].
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  7360
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7361
    ^ self subclassResponsibility
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  7362
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  7363
    "Modified: 8.6.1996 / 10:58:25 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7364
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7365
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7366
rgbImageAsTrueColorFormOn:aDevice
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7367
    "return a truecolor form from the rgb-picture."
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7368
1063
ba1bf8091bc1 unused variable cleanup
Claus Gittinger <cg@exept.de>
parents: 1057
diff changeset
  7369
    |bestFormat usedDeviceDepth usedDeviceBitsPerPixel
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7370
     form|
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  7371
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  7372
    bestFormat := self bestSupportedImageFormatFor:aDevice.
235
579f3f804a46 padding info in supportedFormats
Claus Gittinger <cg@exept.de>
parents: 230
diff changeset
  7373
    usedDeviceDepth := bestFormat at:#depth.
579f3f804a46 padding info in supportedFormats
Claus Gittinger <cg@exept.de>
parents: 230
diff changeset
  7374
    usedDeviceBitsPerPixel := bestFormat at:#bitsPerPixel.
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  7375
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7376
    "/ 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
  7377
    usedDeviceBitsPerPixel == 15 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7378
        usedDeviceBitsPerPixel := 16
399
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
  7379
    ].
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
  7380
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7381
    "/
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7382
    "/ only the trivial case, where the depths match
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7383
    "/ is handled here; conversions are supposed to
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7384
    "/ be done in concrete subclasses (see D24Image)
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7385
    "/
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7386
    self bitsPerPixel == usedDeviceBitsPerPixel ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7387
        "/ kludge - convert to a deep image first, then to a form.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7388
        ^ ((Image implementorForDepth:usedDeviceBitsPerPixel) fromImage:self) asFormOn:aDevice
5126
d3f2baf80581 color conversions fixed (16bit images)
Claus Gittinger <cg@exept.de>
parents: 5074
diff changeset
  7389
"/        '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
  7390
"/        ^ self asMonochromeFormOn:aDevice
4757
60d27f8e65bb some fixes for depth32
Claus Gittinger <cg@exept.de>
parents: 4745
diff changeset
  7391
    ].
60d27f8e65bb some fixes for depth32
Claus Gittinger <cg@exept.de>
parents: 4745
diff changeset
  7392
60d27f8e65bb some fixes for depth32
Claus Gittinger <cg@exept.de>
parents: 4745
diff changeset
  7393
    form := Form width:width height:height depth:usedDeviceDepth onDevice:aDevice.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7394
    form isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7395
        'Image [warning]: display bitmap creation failed' errorPrintCR.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7396
        ^ nil
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  7397
    ].
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  7398
    form initGC.
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  7399
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  7400
    form
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7401
        copyBitsFrom:self bits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7402
        bitsPerPixel:usedDeviceBitsPerPixel
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7403
        depth:usedDeviceDepth
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7404
        padding:8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7405
        width:width height:height
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7406
        x:0 y:0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7407
        toX:0 y:0.
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  7408
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  7409
    ^ form
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  7410
4757
60d27f8e65bb some fixes for depth32
Claus Gittinger <cg@exept.de>
parents: 4745
diff changeset
  7411
    "Modified: / 27-05-2007 / 13:44:26 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7412
! !
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7413
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7414
!Image methodsFor:'copying'!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7415
2947
53f0ea77b1e4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2934
diff changeset
  7416
skipInstvarIndexInDeepCopy:index
53f0ea77b1e4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2934
diff changeset
  7417
    "a helper for deepCopy; only indices for which this method returns
53f0ea77b1e4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2934
diff changeset
  7418
     false are copied in a deep copy."
53f0ea77b1e4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2934
diff changeset
  7419
7494
70c399ea367b #OTHER by stefan
Stefan Vogel <sv@exept.de>
parents: 7484
diff changeset
  7420
    "
70c399ea367b #OTHER by stefan
Stefan Vogel <sv@exept.de>
parents: 7484
diff changeset
  7421
        self allInstanceVariableNames indexOf:#device
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  7422
        self allInstanceVariableNames indexOf:#deviceForm
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  7423
        self allInstanceVariableNames indexOf:#monoDeviceForm
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  7424
        self allInstanceVariableNames indexOf:#fullColorDeviceForm
7494
70c399ea367b #OTHER by stefan
Stefan Vogel <sv@exept.de>
parents: 7484
diff changeset
  7425
    "
70c399ea367b #OTHER by stefan
Stefan Vogel <sv@exept.de>
parents: 7484
diff changeset
  7426
70c399ea367b #OTHER by stefan
Stefan Vogel <sv@exept.de>
parents: 7484
diff changeset
  7427
    index == 13 ifTrue:[
70c399ea367b #OTHER by stefan
Stefan Vogel <sv@exept.de>
parents: 7484
diff changeset
  7428
        ^ true "/ skip device
70c399ea367b #OTHER by stefan
Stefan Vogel <sv@exept.de>
parents: 7484
diff changeset
  7429
    ].
70c399ea367b #OTHER by stefan
Stefan Vogel <sv@exept.de>
parents: 7484
diff changeset
  7430
    index == 14 ifTrue:[
70c399ea367b #OTHER by stefan
Stefan Vogel <sv@exept.de>
parents: 7484
diff changeset
  7431
        ^ true "/ skip deviceForm
70c399ea367b #OTHER by stefan
Stefan Vogel <sv@exept.de>
parents: 7484
diff changeset
  7432
    ].
70c399ea367b #OTHER by stefan
Stefan Vogel <sv@exept.de>
parents: 7484
diff changeset
  7433
    index == 15 ifTrue:[
70c399ea367b #OTHER by stefan
Stefan Vogel <sv@exept.de>
parents: 7484
diff changeset
  7434
        ^ true "/ skip monoDeviceForm
2947
53f0ea77b1e4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2934
diff changeset
  7435
    ].
7573
656c59bc93ad #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7565
diff changeset
  7436
    index == 16 ifTrue:[
656c59bc93ad #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7565
diff changeset
  7437
        ^ true "/ skip fullColorDeviceForm
656c59bc93ad #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7565
diff changeset
  7438
    ].
2947
53f0ea77b1e4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2934
diff changeset
  7439
    ^ false
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  7440
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  7441
    "Modified (comment): / 31-01-2017 / 15:41:40 / stefan"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7442
! !
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7443
8691
bfa5c82bf5a1 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 8665
diff changeset
  7444
!Image methodsFor:'copying-private'!
bfa5c82bf5a1 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 8665
diff changeset
  7445
bfa5c82bf5a1 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 8665
diff changeset
  7446
postCopy
bfa5c82bf5a1 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 8665
diff changeset
  7447
    "redefined to also copy the pixels and the colorMap
bfa5c82bf5a1 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 8665
diff changeset
  7448
     and clear out any device handles in the copy."
bfa5c82bf5a1 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 8665
diff changeset
  7449
bfa5c82bf5a1 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 8665
diff changeset
  7450
    bytes := bytes copy.
bfa5c82bf5a1 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 8665
diff changeset
  7451
    colorMap notNil ifTrue:[
bfa5c82bf5a1 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 8665
diff changeset
  7452
        colorMap isColormap ifTrue:[
bfa5c82bf5a1 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 8665
diff changeset
  7453
            colorMap := colorMap copy.
bfa5c82bf5a1 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 8665
diff changeset
  7454
        ] ifFalse:[
bfa5c82bf5a1 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 8665
diff changeset
  7455
            colorMap := MappedPalette withColors:colorMap.
bfa5c82bf5a1 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 8665
diff changeset
  7456
        ].
bfa5c82bf5a1 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 8665
diff changeset
  7457
    ].
bfa5c82bf5a1 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 8665
diff changeset
  7458
    device := deviceForm := monoDeviceForm := fullColorDeviceForm := nil.
bfa5c82bf5a1 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 8665
diff changeset
  7459
    mask := mask copy.
bfa5c82bf5a1 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 8665
diff changeset
  7460
    maskedPixelsAre0 := false.
bfa5c82bf5a1 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 8665
diff changeset
  7461
bfa5c82bf5a1 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 8665
diff changeset
  7462
    "Modified: / 22-08-1998 / 11:27:09 / cg"
bfa5c82bf5a1 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 8665
diff changeset
  7463
    "Modified: / 30-01-2017 / 19:16:02 / stefan"
bfa5c82bf5a1 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 8665
diff changeset
  7464
! !
bfa5c82bf5a1 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 8665
diff changeset
  7465
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7466
!Image methodsFor:'displaying'!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7467
1737
30e65b9fee9c ST-80 compatibility
ca
parents: 1733
diff changeset
  7468
asImage
30e65b9fee9c ST-80 compatibility
ca
parents: 1733
diff changeset
  7469
    "ST-80 compatibility
30e65b9fee9c ST-80 compatibility
ca
parents: 1733
diff changeset
  7470
    "
30e65b9fee9c ST-80 compatibility
ca
parents: 1733
diff changeset
  7471
    ^ self
30e65b9fee9c ST-80 compatibility
ca
parents: 1733
diff changeset
  7472
!
30e65b9fee9c ST-80 compatibility
ca
parents: 1733
diff changeset
  7473
758
51ac65155b96 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 757
diff changeset
  7474
displayFilledOn:aGC
759
52f5ceda5347 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 758
diff changeset
  7475
    "display the receiver as an opaque image.
758
51ac65155b96 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 757
diff changeset
  7476
     This allows Images to be wrapped by a FillingWrapper"
51ac65155b96 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 757
diff changeset
  7477
51ac65155b96 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 757
diff changeset
  7478
    aGC displayOpaqueForm:self x:0 y:0.
51ac65155b96 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 757
diff changeset
  7479
51ac65155b96 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 757
diff changeset
  7480
    "Created: 29.5.1996 / 10:34:18 / cg"
759
52f5ceda5347 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 758
diff changeset
  7481
    "Modified: 29.5.1996 / 10:52:36 / cg"
758
51ac65155b96 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 757
diff changeset
  7482
!
51ac65155b96 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 757
diff changeset
  7483
7928
b84b8d86ebb9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7921
diff changeset
  7484
displayOn:aGCOrStream
b84b8d86ebb9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7921
diff changeset
  7485
    "draw the receiver in the graphicsContext, aGC.
b84b8d86ebb9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7921
diff changeset
  7486
     Smalltalk-80 compatibility"
b84b8d86ebb9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7921
diff changeset
  7487
b84b8d86ebb9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7921
diff changeset
  7488
    "Compatibility
b84b8d86ebb9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7921
diff changeset
  7489
       append a printed desription on some stream (Dolphin,  Squeak)
b84b8d86ebb9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7921
diff changeset
  7490
     OR:
b84b8d86ebb9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7921
diff changeset
  7491
       display the receiver in a graphicsContext at 0@0 (ST80).
b84b8d86ebb9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7921
diff changeset
  7492
     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
  7493
     (although the fallBack is to display its printString ...)"
b84b8d86ebb9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7921
diff changeset
  7494
b84b8d86ebb9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7921
diff changeset
  7495
    "/ what a kludge - Dolphin and Squeak mean: printOn: a stream;
7930
300040dda391 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7928
diff changeset
  7496
    "/ old ST80 means: draw-yourself on a GC.
300040dda391 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7928
diff changeset
  7497
    aGCOrStream isStream ifFalse:[
300040dda391 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7928
diff changeset
  7498
        ^ super displayOn:aGCOrStream.
300040dda391 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7928
diff changeset
  7499
    ].
300040dda391 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7928
diff changeset
  7500
    
300040dda391 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7928
diff changeset
  7501
    aGCOrStream nextPutAll:(self class name).
300040dda391 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7928
diff changeset
  7502
    aGCOrStream nextPutAll:('(%1 x %2' bindWith:width with:height).
300040dda391 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7928
diff changeset
  7503
    fileName notNil ifTrue:[ aGCOrStream nextPutAll:(' from "%1"' bindWith:fileName) ].
300040dda391 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7928
diff changeset
  7504
    aGCOrStream nextPutAll:')'.
7928
b84b8d86ebb9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7921
diff changeset
  7505
b84b8d86ebb9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7921
diff changeset
  7506
    "Created: / 22-02-2017 / 15:51:29 / cg"
7930
300040dda391 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7928
diff changeset
  7507
    "Modified (format): / 22-02-2017 / 17:03:50 / cg"
7928
b84b8d86ebb9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7921
diff changeset
  7508
!
b84b8d86ebb9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7921
diff changeset
  7509
3865
18532e89cdca *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3864
diff changeset
  7510
displayOn:aGC x:x y:y
18532e89cdca *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3864
diff changeset
  7511
    "draw the receiver in the graphicsContext, aGC.
18532e89cdca *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3864
diff changeset
  7512
     Smalltalk-80 compatibility"
18532e89cdca *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3864
diff changeset
  7513
18532e89cdca *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3864
diff changeset
  7514
    aGC displayForm:self x:x y:y.
18532e89cdca *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3864
diff changeset
  7515
18532e89cdca *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3864
diff changeset
  7516
    "Modified: 23.4.1996 / 11:12:31 / cg"
18532e89cdca *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3864
diff changeset
  7517
    "Created: 12.5.1996 / 20:14:31 / cg"
758
51ac65155b96 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 757
diff changeset
  7518
!
51ac65155b96 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 757
diff changeset
  7519
3729
d2cd7d8585a3 *** empty log message ***
penk
parents: 3700
diff changeset
  7520
displayOn:aGC x:x y:y opaque:opaque
d2cd7d8585a3 *** empty log message ***
penk
parents: 3700
diff changeset
  7521
    "draw the receiver in the graphicsContext, aGC.
d2cd7d8585a3 *** empty log message ***
penk
parents: 3700
diff changeset
  7522
     Smalltalk-80 compatibility"
d2cd7d8585a3 *** empty log message ***
penk
parents: 3700
diff changeset
  7523
d2cd7d8585a3 *** empty log message ***
penk
parents: 3700
diff changeset
  7524
    opaque ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7525
        self displayOpaqueOn:aGC x:x y:y .
3729
d2cd7d8585a3 *** empty log message ***
penk
parents: 3700
diff changeset
  7526
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7527
        self displayOn:aGC x:x y:y .
3729
d2cd7d8585a3 *** empty log message ***
penk
parents: 3700
diff changeset
  7528
    ].
d2cd7d8585a3 *** empty log message ***
penk
parents: 3700
diff changeset
  7529
!
d2cd7d8585a3 *** empty log message ***
penk
parents: 3700
diff changeset
  7530
3379
0d1d05ddad7c added displayOpaque
martin
parents: 3363
diff changeset
  7531
displayOpaqueOn:aGC at:aPoint
0d1d05ddad7c added displayOpaque
martin
parents: 3363
diff changeset
  7532
    "draw the receiver in the graphicsContext, aGC.
0d1d05ddad7c added displayOpaque
martin
parents: 3363
diff changeset
  7533
     Smalltalk-80 compatibility"
0d1d05ddad7c added displayOpaque
martin
parents: 3363
diff changeset
  7534
0d1d05ddad7c added displayOpaque
martin
parents: 3363
diff changeset
  7535
    self displayOpaqueOn:aGC x:aPoint x y:aPoint y.
0d1d05ddad7c added displayOpaque
martin
parents: 3363
diff changeset
  7536
0d1d05ddad7c added displayOpaque
martin
parents: 3363
diff changeset
  7537
    "Modified: 12.5.1996 / 20:16:38 / cg"
0d1d05ddad7c added displayOpaque
martin
parents: 3363
diff changeset
  7538
!
0d1d05ddad7c added displayOpaque
martin
parents: 3363
diff changeset
  7539
1086
269243c32f69 added displayOpaque, for protocol completeness
Claus Gittinger <cg@exept.de>
parents: 1070
diff changeset
  7540
displayOpaqueOn:aGC x:x y:y
269243c32f69 added displayOpaque, for protocol completeness
Claus Gittinger <cg@exept.de>
parents: 1070
diff changeset
  7541
    "draw the receiver in the graphicsContext, aGC.
269243c32f69 added displayOpaque, for protocol completeness
Claus Gittinger <cg@exept.de>
parents: 1070
diff changeset
  7542
     Smalltalk-80 compatibility"
269243c32f69 added displayOpaque, for protocol completeness
Claus Gittinger <cg@exept.de>
parents: 1070
diff changeset
  7543
269243c32f69 added displayOpaque, for protocol completeness
Claus Gittinger <cg@exept.de>
parents: 1070
diff changeset
  7544
    aGC displayOpaqueForm:self x:x y:y.
269243c32f69 added displayOpaque, for protocol completeness
Claus Gittinger <cg@exept.de>
parents: 1070
diff changeset
  7545
269243c32f69 added displayOpaque, for protocol completeness
Claus Gittinger <cg@exept.de>
parents: 1070
diff changeset
  7546
    "Modified: 23.4.1996 / 11:12:31 / cg"
269243c32f69 added displayOpaque, for protocol completeness
Claus Gittinger <cg@exept.de>
parents: 1070
diff changeset
  7547
    "Created: 22.10.1996 / 16:35:49 / cg"
269243c32f69 added displayOpaque, for protocol completeness
Claus Gittinger <cg@exept.de>
parents: 1070
diff changeset
  7548
!
269243c32f69 added displayOpaque, for protocol completeness
Claus Gittinger <cg@exept.de>
parents: 1070
diff changeset
  7549
758
51ac65155b96 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 757
diff changeset
  7550
displayStrokedOn:aGC
759
52f5ceda5347 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 758
diff changeset
  7551
    "display the receiver as an non opaque image.
758
51ac65155b96 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 757
diff changeset
  7552
     This allows Images to be wrapped by a StrokingWrapper"
51ac65155b96 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 757
diff changeset
  7553
51ac65155b96 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 757
diff changeset
  7554
    aGC displayForm:self x:0 y:0.
51ac65155b96 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 757
diff changeset
  7555
759
52f5ceda5347 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 758
diff changeset
  7556
    "Created: 29.5.1996 / 10:34:18 / cg"
52f5ceda5347 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 758
diff changeset
  7557
    "Modified: 29.5.1996 / 10:52:30 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7558
! !
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7559
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7560
!Image methodsFor:'dither helpers'!
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7561
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7562
burkesDitheredMonochromeBits
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7563
    "return the bitmap for a dithered monochrome bitmap from the image.
6311
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
  7564
     Works for any source depths / photometric.
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
  7565
     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
  7566
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7567
    |dstIndex        "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7568
     nextDst         "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7569
     bytesPerMonoRow "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7570
     monoBits greyValues
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7571
     errorArray
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7572
     errorArray1
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7573
     e t
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7574
     w               "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7575
     h               "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7576
     bitCnt          "{Class: SmallInteger }"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  7577
     byte            "{Class: SmallInteger }"
1063
ba1bf8091bc1 unused variable cleanup
Claus Gittinger <cg@exept.de>
parents: 1057
diff changeset
  7578
     grey|
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7579
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7580
    self depth > 12 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7581
        ^ self floydSteinbergDitheredMonochromeBits
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7582
    ].
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7583
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7584
    w := width.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7585
    h := height.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7586
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7587
    bytesPerMonoRow := (w + 7) // 8.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7588
    monoBits := ByteArray uninitializedNew:(bytesPerMonoRow * h).
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7589
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7590
    errorArray := Array new:(w+4).
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7591
    errorArray1 := Array new:(w+4) withAll:0.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7592
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7593
    dstIndex := 1.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7594
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7595
    "/ 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
  7596
    "/ use table-value in loop
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7597
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7598
    greyValues := self greyMapForRange:(255*1024).
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  7599
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7600
    0 to:(h-1) do:[:y |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7601
        nextDst := dstIndex + bytesPerMonoRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7602
        byte := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7603
        bitCnt := 8.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7604
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7605
        t := errorArray.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7606
        errorArray := errorArray1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7607
        errorArray1 := t.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7608
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7609
        errorArray1 atAllPut:0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7610
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7611
        self valuesAtY:y from:0 to:(w-1) do:[:x :pixel |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7612
            |eP "{Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7613
             eD
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7614
             eI "{Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7615
             xE "{Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7616
             xN "{Class: SmallInteger }" |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7617
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7618
            "/ get the colors grey value [0 .. 1]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7619
            grey := greyValues at:(pixel + 1).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7620
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7621
            "/ adjust error
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7622
            xE := x + 2 + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7623
            grey := (grey + (errorArray at:xE)).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7624
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7625
            byte := byte bitShift:1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7626
            grey > (127*1024) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7627
                byte := byte bitOr:1.      "/ white
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7628
                e := grey - (255*1024)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7629
            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7630
                e := grey                  "/ black
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7631
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7632
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7633
            e ~= 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7634
                "/ distribute the error:
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7635
                "/                  XX  8  4
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7636
                "/             2  4  8  4  2
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7637
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7638
                eD := e.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7639
                eI := e // 32.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7640
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7641
                eP := eI * 8. eD := eD - eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7642
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7643
                xN := xE + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7644
                errorArray at:xN put:(errorArray at:xN) + eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7645
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7646
                eD := eD - eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7647
                errorArray1 at:xE put:(errorArray1 at:xE) + eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7648
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7649
                eP := eI * 4. eD := eD - eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7650
                xN := xE + 2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7651
                errorArray at:xN put:(errorArray at:xN) + eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7652
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7653
                eD := eD - eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7654
                xN := xE - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7655
                errorArray1 at:xN put:(errorArray1 at:xN) + eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7656
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7657
                eD := eD - eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7658
                xN := xE + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7659
                errorArray1 at:xN put:(errorArray1 at:xN) + eP.
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
                eP := eI * 2. eD := eD - eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7662
                xN := xE - 2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7663
                errorArray1 at:xN put:(errorArray1 at:xN) + eP.
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
                "/ eD := eD.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7666
                xN := xE + 2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7667
                errorArray1 at:xN put:(errorArray1 at:xN) + eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7668
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7669
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7670
            bitCnt := bitCnt - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7671
            bitCnt == 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7672
                monoBits at:dstIndex put:byte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7673
                dstIndex := dstIndex + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7674
                byte := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7675
                bitCnt := 8.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7676
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7677
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7678
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7679
        bitCnt ~~ 8 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7680
            byte := byte bitShift:bitCnt.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7681
            monoBits at:dstIndex put:byte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7682
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7683
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7684
        dstIndex := nextDst.
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7685
    ].
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7686
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7687
    ^ monoBits
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7688
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7689
    "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
  7690
    "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
  7691
!
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7692
874
cce9c1029d38 added floydSteinberg dithering for pseudo-8 images
Claus Gittinger <cg@exept.de>
parents: 873
diff changeset
  7693
floydSteinbergDitheredDepth8BitsColors:colors
cce9c1029d38 added floydSteinberg dithering for pseudo-8 images
Claus Gittinger <cg@exept.de>
parents: 873
diff changeset
  7694
    "return a floyd-steinberg dithered bitmap from the receiver picture,
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  7695
     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
  7696
     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
  7697
     (which need not be a colorCubes colors)."
cce9c1029d38 added floydSteinberg dithering for pseudo-8 images
Claus Gittinger <cg@exept.de>
parents: 873
diff changeset
  7698
3157
f95dc03365da added some dither helpers
Claus Gittinger <cg@exept.de>
parents: 3145
diff changeset
  7699
    ^ self floydSteinbergDitheredDepth8BitsColors:colors map:nil
f95dc03365da added some dither helpers
Claus Gittinger <cg@exept.de>
parents: 3145
diff changeset
  7700
f95dc03365da added some dither helpers
Claus Gittinger <cg@exept.de>
parents: 3145
diff changeset
  7701
!
f95dc03365da added some dither helpers
Claus Gittinger <cg@exept.de>
parents: 3145
diff changeset
  7702
f95dc03365da added some dither helpers
Claus Gittinger <cg@exept.de>
parents: 3145
diff changeset
  7703
floydSteinbergDitheredDepth8BitsColors:colors map:aMapOrNil
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7704
    "return a floyd-steinberg dithered bitmap from the receiver picture,
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  7705
     which must be a depth-24 image.
3157
f95dc03365da added some dither helpers
Claus Gittinger <cg@exept.de>
parents: 3145
diff changeset
  7706
     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
  7707
     (which need not be a colorCubes colors)."
f95dc03365da added some dither helpers
Claus Gittinger <cg@exept.de>
parents: 3145
diff changeset
  7708
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  7709
    |pseudoBits
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7710
     ditherRGBBytes ditherColors
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7711
     w       "{Class: SmallInteger }"
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7712
     h       "{Class: SmallInteger }"
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7713
     index   "{Class: SmallInteger }"
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  7714
     lookupPos "{Class: SmallInteger }"
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7715
     ditherIds failed lastColor qScramble
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  7716
     clrLookup error clr|
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7717
7996
a9afe1d564aa #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  7718
    self depth ~~ 24 ifTrue:[
a9afe1d564aa #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  7719
        ^ (Depth24Image fromImage:self) floydSteinbergDitheredDepth8BitsColors:colors map:aMapOrNil
a9afe1d564aa #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  7720
    ].
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7721
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7722
    "/ collect valid ditherColors ...
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7723
    aMapOrNil isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7724
        ditherColors := colors select:[:clr | clr notNil].
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7725
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7726
        ditherColors := colors
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7727
    ].
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7728
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7729
    "/ ... and sort by manhatten distance from black
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7730
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7731
    qScramble := #(
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7732
                "/  2rX00X00X00X00
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7733
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7734
                    2r000000000000    "/ 0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7735
                    2r000000000100    "/ 1
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7736
                    2r000000100000    "/ 2
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7737
                    2r000000100100    "/ 3
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7738
                    2r000100000000    "/ 4
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7739
                    2r000100000100    "/ 5
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7740
                    2r000100100000    "/ 6
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7741
                    2r000100100100    "/ 7
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7742
                    2r100000000000    "/ 8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7743
                    2r100000000100    "/ 9
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7744
                    2r100000100000    "/ a
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7745
                    2r100000100100    "/ b
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7746
                    2r100100000000    "/ c
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7747
                    2r100100000100    "/ d
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7748
                    2r100100100000    "/ e
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7749
                    2r100100100100    "/ f
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7750
                  ).
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7751
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7752
    ditherColors := ditherColors sort:[:a :b |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7753
                                |cr "{Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7754
                                 cg "{Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7755
                                 cb "{Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7756
                                 i1 "{Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7757
                                 i2 "{Class: SmallInteger }"|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7758
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7759
                                cr := a redByte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7760
                                cg := a greenByte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7761
                                cb := a blueByte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7762
                                i1 := qScramble at:((cr bitShift:-4) bitAnd:16r0F) + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7763
                                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
  7764
                                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
  7765
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7766
                                cr := b redByte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7767
                                cg := b greenByte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7768
                                cb := b blueByte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7769
                                i2 := qScramble at:((cr bitShift:-4) bitAnd:16r0F) + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7770
                                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
  7771
                                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
  7772
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7773
                                i1 < i2
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7774
                    ].
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7775
    aMapOrNil isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7776
        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
  7777
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7778
        ditherIds := aMapOrNil asByteArray
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7779
    ].
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7780
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7781
    "/ 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
  7782
    "/ to the position in the colorList
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7783
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7784
    clrLookup := ByteArray new:(4096).
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7785
    index := 0.
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7786
    ditherColors keysAndValuesDo:[:clrPosition :clr |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7787
        |r g b i|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7788
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7789
        r := clr redByte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7790
        g := clr greenByte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7791
        b := clr blueByte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7792
        i := qScramble at:((r bitShift:-4) bitAnd:16r0F) + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7793
        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
  7794
        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
  7795
        lookupPos := i.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7796
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  7797
        index+1 to:lookupPos do:[:idx|
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  7798
            clrLookup at:idx put:(clrPosition-1-1).
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  7799
        ].
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  7800
        index := lookupPos.
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7801
    ].
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7802
    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
  7803
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7804
"/    [index <= (4095)] whileTrue:[
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7805
"/        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
  7806
"/        index := index + 1.
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7807
"/    ].
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7808
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7809
    "/ collect ditherColor components
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7810
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7811
    lastColor := ditherColors size.
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7812
    ditherIds := ByteArray uninitializedNew:lastColor.
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7813
    ditherRGBBytes := ByteArray uninitializedNew:(lastColor * 3).
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7814
    index := 1.
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7815
    1 to:lastColor do:[:pix |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7816
        clr := ditherColors at:pix.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7817
        ditherRGBBytes at:index put:(clr redByte).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7818
        ditherRGBBytes at:index+1 put:(clr greenByte).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7819
        ditherRGBBytes at:index+2 put:(clr blueByte).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7820
        aMapOrNil isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7821
            ditherIds at:pix put:clr colorId.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7822
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7823
            ditherIds at:pix put:(aMapOrNil at:pix).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7824
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7825
        index := index + 3.
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7826
    ].
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7827
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7828
    pseudoBits := ByteArray uninitializedNew:(width * height).
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7829
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7830
    w := width + 2.
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7831
    error := ByteArray uninitializedNew:w*(3*2).
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7832
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7833
    w := width.
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7834
    h := height.
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7835
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7836
    failed := true.
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7837
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7838
%{
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7839
    int __x, __y;
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7840
    int __eR, __eG, __eB;
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7841
    unsigned char *srcP, *dstP;
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7842
    unsigned char *idP;
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7843
    unsigned char *dp;
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7844
    unsigned char *__clrLookup;
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7845
    short *errP, *eP;
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7846
    int __fR, __fG, __fB;
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7847
    int iR, iG, iB;
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7848
    int idx;
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7849
    int __w = __intVal(w);
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7850
    int __h = __intVal(h);
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7851
    int __nColors = __intVal(lastColor);
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7852
    int __wR = -1, __wG, __wB;
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7853
    static int __qScramble[16] = {
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7854
                    0x000 /* 2r000000000000    0 */,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7855
                    0x004 /* 2r000000000100    1 */,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7856
                    0x020 /* 2r000000100000    2 */,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7857
                    0x024 /* 2r000000100100    3 */,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7858
                    0x100 /* 2r000100000000    4 */,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7859
                    0x104 /* 2r000100000100    5 */,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7860
                    0x120 /* 2r000100100000    6 */,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7861
                    0x124 /* 2r000100100100    7 */,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7862
                    0x800 /* 2r100000000000    8 */,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7863
                    0x804 /* 2r100000000100    9 */,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7864
                    0x820 /* 2r100000100000    a */,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7865
                    0x824 /* 2r100000100100    b */,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7866
                    0x900 /* 2r100100000000    c */,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7867
                    0x904 /* 2r100100000100    d */,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7868
                    0x920 /* 2r100100100000    e */,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7869
                    0x924 /* 2r100100100100    f */,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7870
                  };
5476
06e08505bc6f __isByteArray() to __isByteArrayLike() in primitive code
Stefan Vogel <sv@exept.de>
parents: 5352
diff changeset
  7871
06e08505bc6f __isByteArray() to __isByteArrayLike() in primitive code
Stefan Vogel <sv@exept.de>
parents: 5352
diff changeset
  7872
    if (__isByteArrayLike(__INST(bytes))
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7873
     && __isByteArray(pseudoBits)
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7874
     && __isByteArray(ditherRGBBytes)
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7875
     && __isByteArray(ditherIds)
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7876
     && __isByteArray(clrLookup)
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7877
     && __isByteArray(error)) {
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7878
        failed = false;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7879
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7880
        srcP = __ByteArrayInstPtr(__INST(bytes))->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7881
        dstP = __ByteArrayInstPtr(pseudoBits)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7882
        idP = __ByteArrayInstPtr(ditherIds)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7883
        __clrLookup = __ByteArrayInstPtr(clrLookup)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7884
        errP = (short *) __ByteArrayInstPtr(error)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7885
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7886
        /*
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7887
         * clear error accumulator
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7888
         */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7889
        eP = errP;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7890
        bzero(eP, (__w+2) * 2 * 3);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7891
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7892
        for (__y=__h; __y>0; __y--) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7893
            __eR = __eG = __eB = 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
            eP = &(errP[3]);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7896
            __eR = eP[0];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7897
            __eG = eP[1];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7898
            __eB = eP[2];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7899
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7900
            for (__x=__w; __x>0; __x--) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7901
                int __want;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7902
                int pix;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7903
                int __wantR, __wantG, __wantB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7904
                int idx;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7905
                int tR, tG, tB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7906
                int nR, nG, nB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7907
                int dR, dG, dB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7908
                int minDelta, bestIdx;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7909
                int cnt;
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
                __wantR = *srcP++;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7912
                __wantG = *srcP++;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7913
                __wantB = *srcP++;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7914
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7915
                /*
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7916
                 * wR, wG and wB is the wanted r/g/b value;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7917
                 */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7918
                __wantR = __wantR + __eR;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7919
                __wantG = __wantG + __eG;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7920
                __wantB = __wantB + __eB;
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7921
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7922
#define RED_SCALE 30
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7923
#define GREEN_SCALE 59
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7924
#define BLUE_SCALE 11
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7925
#define GOOD_DELTA 30
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7926
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7927
#define xRED_SCALE 1
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7928
#define xGREEN_SCALE 1
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7929
#define xBLUE_SCALE 1
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7930
#define xGOOD_DELTA 3
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7931
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7932
#define FAST_LOOKUP
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7933
/* #define ONE_SHOT */
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7934
#define NPROBE 8
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7935
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7936
#ifndef FAST_LOOKUP
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7937
                if ((__wantR == __wR)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7938
                 && (__wantG == __wG)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7939
                 && (__wantB == __wB)) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7940
                    /*
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7941
                     * same color again - reuse last bestMatch
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7942
                     */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7943
                } else
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7944
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7945
                {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7946
                    __wR = __wantR;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7947
                    __wG = __wantG;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7948
                    __wB = __wantB;
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7949
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7950
#ifdef FAST_LOOKUP
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7951
                    if(__wR > 255) __wR = 255;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7952
                    else if (__wR < 0) __wR = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7953
                    if(__wG > 255) __wG = 255;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7954
                    else if (__wG < 0) __wG = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7955
                    if(__wB > 255) __wB = 255;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7956
                    else if (__wB < 0) __wB = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7957
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7958
                    {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7959
                        int lookupIndex;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7960
                        int idx, idx0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7961
                        int d, delta;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7962
                        unsigned char *dp0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7963
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7964
                        dp = __ByteArrayInstPtr(ditherRGBBytes)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7965
                        lookupIndex =    __qScramble[((__wR & 0xF0)>>4)];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7966
                        lookupIndex |=   __qScramble[((__wG & 0xF0)>>4)] >> 1;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7967
                        lookupIndex |=   __qScramble[((__wB & 0xF0)>>4)] >> 2;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7968
                        idx = bestIdx =__clrLookup[lookupIndex];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7969
                        dp += (idx+idx+idx);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7970
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7971
                        /* try color at lookupIndex */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7972
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7973
                        d = dp[0];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7974
                        delta = (__wR - d) * RED_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7975
                        if (delta < 0) delta = -delta;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7976
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7977
                        d = dp[1];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7978
                        if (__wG > d)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7979
                            delta += (__wG - d) * GREEN_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7980
                        else
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7981
                            delta += (d - __wG) * GREEN_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7982
                        d = dp[2];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7983
                        if (__wB > d)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7984
                            delta += (__wB - d) * BLUE_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7985
                        else
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7986
                            delta += (d - __wB) * BLUE_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7987
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7988
                        if (delta <= GOOD_DELTA) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7989
                            goto foundBest;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7990
                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7991
                        minDelta = delta;
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7992
# ifndef ONE_SHOT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7993
                        idx0 = idx; dp0 = dp;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7994
                        cnt = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7995
                        while ((++cnt <= NPROBE) && (idx > 0)) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7996
                            /* try previous color(s) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7997
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7998
                            idx--; dp -= 3;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7999
                            d = dp[0];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8000
                            delta = (__wR - d) * RED_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8001
                            if (delta < 0) delta = -delta;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8002
                            d = dp[1];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8003
                            if (__wG > d)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8004
                                delta += (__wG - d) * GREEN_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8005
                            else
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8006
                                delta += (d - __wG) * GREEN_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8007
                            d = dp[2];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8008
                            if (__wB > d)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8009
                                delta += (__wB - d) * BLUE_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8010
                            else
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8011
                                delta += (d - __wB) * BLUE_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8012
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8013
                            if (delta < minDelta) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8014
                                bestIdx = idx;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8015
                                if (delta <= GOOD_DELTA) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8016
                                    goto foundBest;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8017
                                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8018
                                minDelta = delta;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8019
                            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8020
                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8021
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8022
                        idx = idx0; dp = dp0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8023
                        cnt = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8024
                        while ((++cnt <= NPROBE) && (++idx < __nColors)) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8025
                            /* try next color */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8026
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8027
                            dp += 3;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8028
                            d = dp[0];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8029
                            delta = (__wR - d) * RED_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8030
                            if (delta < 0) delta = -delta;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8031
                            d = dp[1];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8032
                            if (__wG > d)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8033
                                delta += (__wG - d) * GREEN_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8034
                            else
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8035
                                delta += (d - __wG) * GREEN_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8036
                            d = dp[2];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8037
                            if (__wB > d)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8038
                                delta += (__wB - d) * BLUE_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8039
                            else
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8040
                                delta += (d - __wB) * BLUE_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8041
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8042
                            if (delta < minDelta) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8043
                                bestIdx = idx;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8044
                                if (delta <= GOOD_DELTA) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8045
                                    goto foundBest;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8046
                                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8047
                                minDelta = delta;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8048
                            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8049
                        }
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  8050
# endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8051
                    }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8052
        foundBest: ;
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  8053
#else
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  8054
/*
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8055
                    if(__wR > 255) __wR = 255;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8056
                    else if (__wR < 0) __wR = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8057
                    if(__wG > 255) __wG = 255;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8058
                    else if (__wG < 0) __wG = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8059
                    if(__wB > 255) __wB = 255;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8060
                    else if (__wB < 0) __wB = 0;
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  8061
*/
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  8062
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8063
                    /* find the best matching color */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8064
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8065
                    minDelta = 99999;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8066
                    bestIdx = -1;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8067
                    dp = __ByteArrayInstPtr(ditherRGBBytes)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8068
                    for (idx = 0; idx<__nColors; idx++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8069
                        int d, delta;
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
                        d = dp[0];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8072
                        delta = (__wR - d) * RED_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8073
                        if (delta < 0) delta = -delta;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8074
                        if (delta < minDelta) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8075
                            d = dp[1];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8076
                            if (__wG > d)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8077
                                delta += (__wG - d) * GREEN_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8078
                            else
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8079
                                delta += (d - __wG) * GREEN_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8080
                            if (delta < minDelta) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8081
                                d = dp[2];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8082
                                if (__wB > d)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8083
                                    delta += (__wB - d) * BLUE_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8084
                                else
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8085
                                    delta += (d - __wB) * BLUE_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8086
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8087
                                if (delta < minDelta) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8088
                                    bestIdx = idx;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8089
                                    if (delta <= GOOD_DELTA) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8090
                                        break;
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
                                    minDelta = delta;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8093
                                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8094
                            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8095
                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8096
                        dp += 3;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8097
                    }
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  8098
#endif
7522
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
                dp = __ByteArrayInstPtr(ditherRGBBytes)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8101
                dp += bestIdx * 3;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8102
                dR = dp[0];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8103
                dG = dp[1];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8104
                dB = dp[2];
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  8105
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  8106
/*
4725
c8896df7bd3f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4717
diff changeset
  8107
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
  8108
                __wantR, __wantG, __wantB,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8109
                __wR, __wG, __wB,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8110
                dR, dG, dB);
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  8111
*/
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8112
                /*
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8113
                 * store the corresponding dither colors colorId
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8114
                 */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8115
                *dstP++ = idP[bestIdx];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8116
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8117
                /*
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8118
                 * the new error & distribute the error
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
                __eR = __wantR - dR;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8121
                if (__eR) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8122
                    tR = __eR >> 4;  /* 16th of error */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8123
                    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
  8124
                    eP[0] = tR*5;         /* 5/16th for (x / y+1) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8125
                    eP[-3] = tR*3;        /* 3/16th for (x-1 / y+1) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8126
                    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
  8127
                    __eR = nR;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8128
                } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8129
                    __eR = eP[3];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8130
                    eP[0] = eP[-3] = eP[3] = 0;
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
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8133
                __eG = __wantG - dG;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8134
                if (__eG) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8135
                    tG = __eG >> 4;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8136
                    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
  8137
                    eP[1] = tG*5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8138
                    eP[-2] = tG*3;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8139
                    eP[4] = __eG - (tG*15);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8140
                    __eG = nG;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8141
                } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8142
                    __eG = eP[4];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8143
                    eP[1] = eP[-2] = eP[4] = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8144
                }
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
                __eB = __wantB - dB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8147
                if (__eB) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8148
                    tB = __eB >> 4;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8149
                    nB = eP[5] + (tB * 7);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8150
                    eP[2] = tB*5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8151
                    eP[-1] = tB*3;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8152
                    eP[5] = __eB - (tB*15);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8153
                    __eB = nB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8154
                } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8155
                    __eB = eP[5];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8156
                    eP[2] = eP[-1] = eP[5] = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8157
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8158
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8159
                eP += 3;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8160
            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8161
        }
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  8162
    }
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  8163
%}.
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  8164
    failed ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8165
        self primitiveFailed.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8166
        ^ nil
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  8167
    ].
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  8168
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  8169
    ^ pseudoBits
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  8170
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  8171
    "Modified: / 30-01-2017 / 19:58:45 / stefan"
7996
a9afe1d564aa #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  8172
    "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
  8173
!
cce9c1029d38 added floydSteinberg dithering for pseudo-8 images
Claus Gittinger <cg@exept.de>
parents: 873
diff changeset
  8174
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8175
floydSteinbergDitheredDepth8BitsColors:fixColors nRed:nRed nGreen:nGreen nBlue:nBlue
858
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  8176
    "return a floyd-steinberg dithered bitmap from the receiver picture,
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8177
     which must be a depth-8 image.
858
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  8178
     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
  8179
     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
  8180
     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
  8181
     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
  8182
     Color class.
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8183
     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
  8184
     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
  8185
     for example to create dithered Depth4Images from Depth8Images."
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8186
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8187
    |pseudoBits
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8188
     rgbBytes
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8189
     w       "{Class: SmallInteger }"
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8190
     h       "{Class: SmallInteger }"
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8191
     index   "{Class: SmallInteger }"
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8192
     fixR    "{Class: SmallInteger }"
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8193
     fixG    "{Class: SmallInteger }"
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8194
     fixB    "{Class: SmallInteger }"
879
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8195
     fixGfixB
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8196
     fixIds failed map lastColor
879
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8197
     rgbIDX  "{Class: SmallInteger }"
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8198
     idxAndErrRBytes idxAndErrGBytes idxAndErrBBytes
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8199
     error clr|
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8200
858
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  8201
    self depth ~~ 8 ifTrue:[^ nil].
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  8202
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8203
    fixR := nRed.
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8204
    fixR == 0 ifTrue:[ ^ nil].
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8205
    fixG := nGreen.
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8206
    fixG == 0 ifTrue:[ ^ nil].
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8207
    fixB := nBlue.
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8208
    fixB == 0 ifTrue:[ ^ nil].
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8209
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8210
    "/ simple check
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8211
    (fixR * fixG * fixB) ~~ fixColors size ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8212
        self error:'invalid color array passed'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8213
        ^ nil
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8214
    ].
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8215
    fixIds := (fixColors asArray collect:[:clr | clr colorId]) asByteArray.
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8216
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8217
    "/
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8218
    "/ collect color components as integer values (for integer arithmetic)
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8219
    "/
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8220
    rgbBytes := ByteArray uninitializedNew:256 * 3.
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8221
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8222
    index := 1.
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8223
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8224
    photometric == #palette ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8225
        lastColor := colorMap size - 1
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8226
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8227
        lastColor := 255.
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8228
    ].
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8229
    0 to:lastColor do:[:pix |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8230
        clr := self colorFromValue:pix.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8231
        rgbBytes at:index put:(clr redByte).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8232
        rgbBytes at:index+1 put:(clr greenByte).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8233
        rgbBytes at:index+2 put:(clr blueByte).
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
        index := index + 3.
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8236
    ].
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8237
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8238
    pseudoBits := ByteArray uninitializedNew:(width * height).
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8239
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8240
    w := width + 2.
1636
c30f6644666e dont use bcopy in #floydSteinbergDitheredDepth8BitsColors
Claus Gittinger <cg@exept.de>
parents: 1630
diff changeset
  8241
    error := ByteArray new:w*(3*2).
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8242
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8243
    w := width.
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8244
    h := height.
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8245
879
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8246
    idxAndErrRBytes := ByteArray uninitializedNew:256*2.
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8247
    idxAndErrGBytes := ByteArray uninitializedNew:256*2.
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8248
    idxAndErrBBytes := ByteArray uninitializedNew:256*2.
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8249
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8250
    fixGfixB := fixG * fixB.
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8251
    index := 1.
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8252
    0 to:255 do:[:i |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8253
        rgbIDX := (i * (fixR-1) + 128) // 255. "red index rounded"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8254
        idxAndErrRBytes at:index put:(rgbIDX * fixGfixB).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8255
        idxAndErrRBytes at:index+1 put:i - (rgbIDX * 255 // (fixR-1)) + 128.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8256
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8257
        rgbIDX := (i * (fixG-1) + 128) // 255. "green index rounded"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8258
        idxAndErrGBytes at:index put:(rgbIDX * fixB).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8259
        idxAndErrGBytes at:index+1 put:i - (rgbIDX * 255 // (fixG-1)) + 128.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8260
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8261
        rgbIDX := (i * (fixB-1) + 128) // 255. "blue index rounded"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8262
        idxAndErrBBytes at:index put:(rgbIDX ).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8263
        idxAndErrBBytes at:index+1 put:i - (rgbIDX * 255 // (fixB-1)) + 128.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8264
        index := index + 2.
879
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8265
    ].
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8266
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8267
    failed := true.
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8268
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8269
%{
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8270
    int __x, __y;
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8271
    int __eR, __eG, __eB;
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8272
    unsigned char *srcP, *dstP;
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8273
    unsigned char *rgbP;
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8274
    unsigned char *idP;
879
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8275
    unsigned char *__idxAndErrRBytes, *__idxAndErrGBytes, *__idxAndErrBBytes;
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8276
    short *errP, *eP;
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8277
    int idx;
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8278
    int __w = __intVal(w);
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8279
5476
06e08505bc6f __isByteArray() to __isByteArrayLike() in primitive code
Stefan Vogel <sv@exept.de>
parents: 5352
diff changeset
  8280
    if (__isByteArrayLike(__INST(bytes))
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8281
     && __isByteArray(pseudoBits)
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8282
     && __isByteArray(rgbBytes)
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8283
     && __isByteArray(fixIds)
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8284
     && __isByteArray(error)
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8285
     && __bothSmallInteger(fixR, fixG)
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8286
     && __isSmallInteger(fixB)) {
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8287
        failed = false;
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
        srcP = __ByteArrayInstPtr(__INST(bytes))->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8290
        dstP = __ByteArrayInstPtr(pseudoBits)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8291
        rgbP = __ByteArrayInstPtr(rgbBytes)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8292
        idP = __ByteArrayInstPtr(fixIds)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8293
        __idxAndErrRBytes = __ByteArrayInstPtr(idxAndErrRBytes)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8294
        __idxAndErrGBytes = __ByteArrayInstPtr(idxAndErrGBytes)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8295
        __idxAndErrBBytes = __ByteArrayInstPtr(idxAndErrBBytes)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8296
        errP = (short *) __ByteArrayInstPtr(error)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8297
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8298
        eP = errP;
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
        for (__y=__intVal(h); __y>0; __y--) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8301
            __eR = __eG = __eB = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8302
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8303
            eP = &(errP[3]);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8304
            __eR = eP[0];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8305
            __eG = eP[1];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8306
            __eB = eP[2];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8307
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8308
            for (__x=__w; __x>0; __x--) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8309
                int __want;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8310
                int pix;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8311
                int idx;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8312
                int tR, tG, tB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8313
                int nR, nG, nB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8314
                int iRGB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8315
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8316
                pix = *srcP++;
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
                /*
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8319
                 * wR, wG and wB is the wanted r/g/b value;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8320
                 */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8321
                pix = pix+pix+pix;  /* pix * 3 */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8322
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8323
                /*
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8324
                 * compute indexR/G/B and the new error:
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
                __want = rgbP[pix]   + __eR;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8327
                if (__want > 255) __want = 255;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8328
                else if (__want < 0) __want = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8329
                __want += __want;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8330
                idx = __idxAndErrRBytes[__want];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8331
                __eR = __idxAndErrRBytes[__want+1];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8332
                __eR -= 128;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8333
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8334
                __want = rgbP[pix+1] + __eG;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8335
                if (__want > 255) __want = 255;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8336
                else if (__want < 0) __want = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8337
                __want += __want;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8338
                idx += __idxAndErrGBytes[__want];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8339
                __eG = __idxAndErrGBytes[__want+1];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8340
                __eG -= 128;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8341
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8342
                __want = rgbP[pix+2] + __eB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8343
                if (__want > 255) __want = 255;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8344
                else if (__want < 0) __want = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8345
                __want += __want;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8346
                idx += __idxAndErrBBytes[__want];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8347
                __eB = __idxAndErrBBytes[__want+1];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8348
                __eB -= 128;
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
                 * store the corresponding dither colors colorId
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8352
                 */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8353
                *dstP++ = idP[idx];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8354
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8355
                /*
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8356
                 * distribute the error
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8357
                 */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8358
                if (__eR) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8359
                    tR = __eR >> 4;  /* 16th of error */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8360
                    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
  8361
                    eP[0] = tR*5;         /* 5/16th for (x / y+1) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8362
                    eP[-3] = tR*3;        /* 3/16th for (x-1 / y+1) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8363
                    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
  8364
                    __eR = nR;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8365
                } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8366
                    __eR = eP[3];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8367
                    eP[0] = eP[-3] = eP[3] = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8368
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8369
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8370
                if (__eG) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8371
                    tG = __eG >> 4;  /* 16th of error */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8372
                    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
  8373
                    eP[1] = tG*5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8374
                    eP[-2] = tG*3;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8375
                    eP[4] = __eG - (tG*15);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8376
                    __eG = nG;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8377
                } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8378
                    __eG = eP[4];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8379
                    eP[1] = eP[-2] = eP[4] = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8380
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8381
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8382
                if (__eB) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8383
                    tB = __eB >> 4;  /* 16th of error */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8384
                    nB = eP[5] + (tB * 7);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8385
                    eP[2] = tB*5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8386
                    eP[-1] = tB*3;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8387
                    eP[5] = __eB - (tB*15);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8388
                    __eB = nB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8389
                } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8390
                    __eB = eP[5];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8391
                    eP[2] = eP[-1] = eP[5] = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8392
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8393
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8394
                eP += 3;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8395
            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8396
        }
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8397
    }
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8398
%}.
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8399
    failed ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8400
        self primitiveFailed.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8401
        ^ nil
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8402
    ].
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8403
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8404
    ^ pseudoBits
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8405
!
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8406
1782
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8407
floydSteinbergDitheredGrayBitsDepth:depth
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8408
    "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
  8409
     Works for any source depths / photometric,
1782
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8410
     but possibly slow since each pixel is processed individually.
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8411
     Redefined by some subclasses for more performance (D8Image/D24Image)"
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8412
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8413
    |dstIndex        "{Class: SmallInteger }"
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8414
     nextDst         "{Class: SmallInteger }"
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8415
     bytesPerOutRow  "{Class: SmallInteger }"
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8416
     outBits greyValues greyErrors greyPixels greyLevels
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8417
     errorArray
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8418
     nextErrorArray
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8419
     t
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8420
     w               "{Class: SmallInteger }"
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8421
     h               "{Class: SmallInteger }"
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8422
     bitCnt          "{Class: SmallInteger }"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8423
     byte            "{Class: SmallInteger }"
1782
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8424
     grey
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8425
     eR eRB eB eLB |
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8426
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8427
    depth > 8 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8428
        self error:'unimplemented conversion'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8429
        ^ nil
1782
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8430
    ].
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8431
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8432
    w := width.
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8433
    h := height.
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8434
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8435
    bytesPerOutRow := ((w * depth) + 7) // 8.
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8436
    outBits := ByteArray uninitializedNew:(bytesPerOutRow * h).
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8437
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8438
    greyLevels := (1 bitShift:depth) - 1.
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8439
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8440
    errorArray := Array new:w+2.
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8441
    nextErrorArray := Array new:w+2.
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8442
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8443
    nextErrorArray atAllPut:0.
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8444
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8445
    dstIndex := 1.
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8446
    bitCnt := 8.
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8447
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8448
    self depth <= 12 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8449
        "/ fetch scaled brightness values outside of loop into a table;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8450
        "/ use table-value in loop
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8451
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8452
        greyValues := self greyMapForRange:(greyLevels).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8453
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8454
        greyPixels := greyValues collect:[:v | v isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8455
                                                   0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8456
                                               ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8457
                                                   v truncated]].
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
        greyPixels := ByteArray withAll:greyPixels.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8460
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8461
        greyErrors := greyValues collect:[:v | v isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8462
                                                   0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8463
                                               ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8464
                                                   ((v - v truncated) * 1024) truncated
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8465
                                               ]].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8466
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8467
        0 to:(h-1) do:[:y |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8468
            nextDst := dstIndex + bytesPerOutRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8469
            byte := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8470
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8471
            t := errorArray.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8472
            errorArray := nextErrorArray.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8473
            nextErrorArray := t.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8474
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8475
            nextErrorArray atAllPut:0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8476
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8477
            self valuesAtY:y from:0 to:(w-1) do:[:x :value |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8478
                |e     "{ Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8479
                 pixel "{ Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8480
                 error "{ Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8481
                 e16   "{ Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8482
                 xE    "{ Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8483
                 xN    "{ Class: SmallInteger }" |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8484
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8485
                pixel := greyPixels at:(value + 1).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8486
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8487
                "/ adjust error
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8488
                xE := x + 2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8489
                error := (greyErrors at:(value + 1)) + (errorArray at:xE).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8490
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8491
                byte := byte bitShift:depth.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8492
                error > 512 "0.5" ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8493
                    pixel := pixel + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8494
                    e := error - 1024 "1.0"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8495
                ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8496
                    e := error
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8497
                ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8498
                byte := byte bitOr:pixel.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8499
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8500
                e ~= 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8501
                    e16 := e // 16.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8502
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8503
                    eR  := e16 * 7.              "/ 7/16 to right
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8504
                    eRB := e16 "* 1".            "/ 1/16 to right below
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8505
                    eB  := e16 * 5.              "/ 5/16 to below
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8506
                    eLB := e - eR - eRB - eB.  "/ 3/16 to left below
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8507
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8508
                    xN := xE + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8509
                    eR ~= 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8510
                        errorArray     at:xN put:(errorArray at:xN) + eR.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8511
                    ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8512
                    eRB ~= 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8513
                        nextErrorArray at:xN put:(nextErrorArray at:xN) + eRB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8514
                    ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8515
                    eB ~= 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8516
                        nextErrorArray at:xE put:(nextErrorArray at:xE) + eB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8517
                    ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8518
                    eLB ~= 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8519
                        xN := xE - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8520
                        nextErrorArray at:xN put:(nextErrorArray at:xN) + eLB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8521
                    ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8522
                ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8523
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8524
                bitCnt := bitCnt - depth.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8525
                bitCnt == 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8526
                    outBits at:dstIndex put:byte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8527
                    dstIndex := dstIndex + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8528
                    byte := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8529
                    bitCnt := 8.
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
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8533
            bitCnt ~~ 8 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8534
                byte := byte bitShift:bitCnt.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8535
                outBits at:dstIndex put:byte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8536
                bitCnt := 8.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8537
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8538
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8539
            dstIndex := nextDst.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8540
        ].
1782
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8541
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8542
        0 to:(h-1) do:[:y |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8543
            nextDst := dstIndex + bytesPerOutRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8544
            byte := 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
            t := errorArray.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8547
            errorArray := nextErrorArray.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8548
            nextErrorArray := t.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8549
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8550
            nextErrorArray atAllPut:0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8551
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8552
            self colorsAtY:y from:0 to:(w-1) do:[:x :clr |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8553
                |e     "{ Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8554
                 pixel "{ Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8555
                 error "{ Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8556
                 e16   "{ Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8557
                 xE    "{ Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8558
                 xN    "{ Class: SmallInteger }" |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8559
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8560
                grey := (clr brightness * greyLevels).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8561
                pixel := grey truncated.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8562
                error := ((grey - pixel) * 1024) truncated.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8563
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8564
                "/ adjust error
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8565
                xE := x + 2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8566
                error := error + (errorArray at:xE).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8567
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8568
                byte := byte bitShift:depth.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8569
                error > 512 "0.5" ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8570
                    pixel := pixel + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8571
                    e := error - 1024 "1.0"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8572
                ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8573
                    e := error
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8574
                ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8575
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8576
                byte := byte bitOr:pixel.
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
                e ~= 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8579
                    e16 := e // 16.
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
                    eR  := e16 * 7.              "/ 7/16 to right
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8582
                    eRB := e16 "* 1".            "/ 1/16 to right below
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8583
                    eB  := e16 * 5.              "/ 5/16 to below
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8584
                    eLB := e - eR - eRB - eB.  "/ 3/16 to left below
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8585
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8586
                    xN := xE + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8587
                    eR ~= 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8588
                        errorArray     at:xN put:(errorArray at:xN) + eR.
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
                    eRB ~= 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8591
                        nextErrorArray at:xN put:(nextErrorArray at:xN) + eRB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8592
                    ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8593
                    eB ~= 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8594
                        nextErrorArray at:xE put:(nextErrorArray at:xE) + eB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8595
                    ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8596
                    eLB ~= 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8597
                        xN := xE - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8598
                        nextErrorArray at:xN put:(nextErrorArray at:xN) + eLB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8599
                    ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8600
                ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8601
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8602
                bitCnt := bitCnt - depth.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8603
                bitCnt == 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8604
                    outBits at:dstIndex put:byte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8605
                    dstIndex := dstIndex + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8606
                    byte := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8607
                    bitCnt := 8.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8608
                ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8609
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8610
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8611
            bitCnt ~~ 8 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8612
                byte := byte bitShift:bitCnt.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8613
                outBits at:dstIndex put:byte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8614
                bitCnt := 8.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8615
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8616
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8617
            dstIndex := nextDst.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8618
        ].
1782
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8619
    ].
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8620
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8621
    ^ outBits
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8622
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8623
    "Created: 10.6.1996 / 13:28:22 / cg"
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8624
    "Modified: 11.6.1996 / 00:13:38 / cg"
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8625
!
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8626
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8627
floydSteinbergDitheredMonochromeBits
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8628
    "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
  8629
     Works for any source depths / photometric,
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8630
     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
  8631
     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
  8632
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8633
    |dstIndex        "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8634
     nextDst         "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8635
     bytesPerMonoRow "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8636
     monoBits greyValues
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8637
     errorArray
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8638
     nextErrorArray
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8639
     e eD t
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8640
     w               "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8641
     h               "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8642
     bitCnt          "{Class: SmallInteger }"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8643
     byte            "{Class: SmallInteger }"
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8644
     grey
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8645
     eR eRB eB eLB |
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8646
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8647
    w := width.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8648
    h := height.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8649
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8650
    bytesPerMonoRow := (w + 7) // 8.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8651
    monoBits := ByteArray uninitializedNew:(bytesPerMonoRow * h).
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8652
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8653
    errorArray := Array new:w+2.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8654
    nextErrorArray := Array new:w+2.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8655
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8656
    nextErrorArray atAllPut:0.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8657
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8658
    dstIndex := 1.
828
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8659
    bitCnt := 8.
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8660
    byte := 0.
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8661
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8662
    self depth <= 12 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8663
        "/ fetch scaled brightness values outside of loop into a table;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8664
        "/ use table-value in loop
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8665
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8666
        greyValues := self greyMapForRange:(255 * 1024).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8667
        greyValues := greyValues collect:[:v | v rounded].
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
        0 to:(h-1) do:[:y |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8670
            nextDst := dstIndex + bytesPerMonoRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8671
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8672
            t := errorArray.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8673
            errorArray := nextErrorArray.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8674
            nextErrorArray := t.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8675
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8676
            nextErrorArray atAllPut:0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8677
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8678
            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
  8679
%{
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8680
                int __grey, __e;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8681
                int __byte = __intVal(byte);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8682
                OBJ *__errorArray = __ArrayInstPtr(errorArray)->a_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8683
                OBJ *__nextErrorArray = __ArrayInstPtr(nextErrorArray)->a_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8684
                int __x = __intVal(x);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8685
                int __eR, __eB, __eRB, __eLB, __eI;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8686
                int __bitCnt = __intVal(bitCnt);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8687
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8688
                __grey = __intVal(__ArrayInstPtr(greyValues)->a_element[__intVal(pixel)]);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8689
                __grey += __intVal(__errorArray[__x+1]);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8690
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8691
                __byte <<= 1;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8692
                if (__grey > 127*1024) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8693
                    __e = __grey - (255*1024);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8694
                    __byte |= 1;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8695
                } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8696
                    __e = __grey;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8697
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8698
                if (__e) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8699
                    __eI = __e >> 4;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8700
                    __eR  = __eI * 7;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8701
                    __eRB = __eI * 1;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8702
                    __eB  = __eI * 5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8703
                    __eLB = __e - __eR - __eRB - __eB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8704
                    __errorArray[__x+2] = __MKSMALLINT(__intVal(__errorArray[__x+2]) + __eR);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8705
                    __nextErrorArray[__x+2] = __MKSMALLINT(__intVal(__nextErrorArray[__x+2]) + __eRB);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8706
                    __nextErrorArray[__x+1] = __MKSMALLINT(__intVal(__nextErrorArray[__x+1]) + __eB);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8707
                    __nextErrorArray[__x  ] = __MKSMALLINT(__intVal(__nextErrorArray[__x  ]) + __eLB);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8708
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8709
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8710
                __bitCnt--;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8711
                if (__bitCnt == 0) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8712
                    int __dstIndex = __intVal(dstIndex);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8713
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8714
                    __ByteArrayInstPtr(monoBits)->ba_element[__dstIndex-1] = __byte;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8715
                    dstIndex = __MKSMALLINT(__dstIndex + 1);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8716
                    __byte = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8717
                    __bitCnt = 8;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8718
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8719
                byte = __MKSMALLINT(__byte);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8720
                bitCnt = __MKSMALLINT(__bitCnt);
828
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8721
%}.
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8722
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8723
"/                |eI "{ Class: SmallInteger }"
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8724
"/                 xE "{ Class: SmallInteger }"
829
d104ec97c38c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  8725
"/                 xN "{ Class: SmallInteger }" |
d104ec97c38c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  8726
"/
828
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8727
"/                "/ get the colors grey value [0 .. 1]
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8728
"/                grey := greyValues at:(pixel + 1).
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8729
"/
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8730
"/                "/ adjust error
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8731
"/                xE := x + 2.
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8732
"/                grey := (grey + (errorArray at:xE)).
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8733
"/
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8734
"/                byte := byte bitShift:1.
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8735
"/                grey > (127*1024) ifTrue:[
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8736
"/                    byte := byte bitOr:1.      "/ white
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8737
"/                    e := grey - (255*1024)
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8738
"/                ] ifFalse:[
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8739
"/                    e := grey                  "/ black
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8740
"/                ].
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8741
"/                e ~= 0 ifTrue:[
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8742
"/                    eD := e.
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8743
"/                    eI := e // 16.
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8744
"/
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8745
"/                    eR  := eI * 7.              "/ 7/16 to right
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8746
"/                    eRB := eI * 1.              "/ 1/16 to right below
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8747
"/                    eB  := eI * 5.              "/ 5/16 to below
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8748
"/                    eLB := eD - eR - eRB - eB.  "/ 3/16 to left below
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8749
"/
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8750
"/                    xN := xE + 1.
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8751
"/                    eR ~= 0 ifTrue:[
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8752
"/                        errorArray     at:xN put:(errorArray at:xN) + eR.
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8753
"/                    ].
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8754
"/                    eRB ~= 0 ifTrue:[
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8755
"/                        nextErrorArray at:xN put:(nextErrorArray at:xN) + eRB.
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8756
"/                    ].
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8757
"/                    eB ~= 0 ifTrue:[
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8758
"/                        nextErrorArray at:xE put:(nextErrorArray at:xE) + eB.
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8759
"/                    ].
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8760
"/                    eLB ~= 0 ifTrue:[
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8761
"/                        xN := xE - 1.
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8762
"/                        nextErrorArray at:xN put:(nextErrorArray at:xN) + eLB.
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8763
"/                    ].
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8764
"/                ].
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8765
"/
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8766
"/                bitCnt := bitCnt - 1.
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8767
"/                bitCnt == 0 ifTrue:[
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8768
"/                    monoBits at:dstIndex put:byte.
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8769
"/                    dstIndex := dstIndex + 1.
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8770
"/                    byte := 0.
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8771
"/                    bitCnt := 8.
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8772
"/                ].
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8773
                  0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8774
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8775
            bitCnt ~~ 8 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8776
                byte := byte bitShift:bitCnt.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8777
                monoBits at:dstIndex put:byte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8778
                bitCnt := 8.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8779
                byte := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8780
            ].
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
            dstIndex := nextDst.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8783
        ].
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8784
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8785
        'Image [info]: slow floydSteinberg dither ..' infoPrintCR.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8786
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8787
        0 to:(h-1) do:[:y |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8788
            nextDst := dstIndex + bytesPerMonoRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8789
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8790
            t := errorArray.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8791
            errorArray := nextErrorArray.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8792
            nextErrorArray := t.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8793
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8794
            nextErrorArray atAllPut:0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8795
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8796
            self colorsAtY:y from:0 to:(w-1) do:[:x :clr |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8797
                |eI "{ Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8798
                 xE "{ Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8799
                 xN "{ Class: SmallInteger }" |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8800
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8801
                "/ get the colors grey value [0 .. 1]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8802
                grey := (clr brightness * 255).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8803
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8804
                "/ adjust error
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8805
                xE := x + 2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8806
                grey := (grey + (errorArray at:xE)) rounded.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8807
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8808
                byte := byte bitShift:1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8809
                grey > 127 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8810
                    byte := byte bitOr:1.      "/ white
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8811
                    e := grey - 255
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8812
                ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8813
                    e := grey                  "/ black
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8814
                ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8815
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8816
                e ~= 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8817
                    eD := e.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8818
                    eI := e // 16.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8819
                    eR  := eI * 7.              "/ 7/16 to right
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8820
                    eRB := eI "* 1".            "/ 1/16 to right below
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8821
                    eB  := eI * 5.              "/ 5/16 to below
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8822
                    eLB := eD - eR - eRB - eB.  "/ 3/16 to left below
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8823
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8824
                    xN := xE + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8825
                    eR ~= 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8826
                        errorArray     at:xN put:(errorArray at:xN) + eR.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8827
                    ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8828
                    eRB ~= 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8829
                        nextErrorArray at:xN put:(nextErrorArray at:xN) + eRB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8830
                    ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8831
                    eB ~= 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8832
                        nextErrorArray at:xE put:(nextErrorArray at:xE) + eB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8833
                    ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8834
                    eLB ~= 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8835
                        xN := xE - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8836
                        nextErrorArray at:xN put:(nextErrorArray at:xN) + eLB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8837
                    ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8838
                ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8839
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8840
                bitCnt := bitCnt - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8841
                bitCnt == 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8842
                    monoBits at:dstIndex put:byte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8843
                    dstIndex := dstIndex + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8844
                    byte := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8845
                    bitCnt := 8.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8846
                ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8847
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8848
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8849
            bitCnt ~~ 8 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8850
                byte := byte bitShift:bitCnt.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8851
                monoBits at:dstIndex put:byte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8852
                bitCnt := 8.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8853
                byte := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8854
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8855
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8856
            dstIndex := nextDst.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8857
        ].
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8858
    ].
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8859
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8860
    ^ monoBits
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8861
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8862
    "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
  8863
    "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
  8864
!
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8865
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8866
nearestPaintDepth8BitsColors:fixColors nRed:nRed nGreen:nGreen nBlue:nBlue
879
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8867
    "return a nearest paint bitmap from the receiver picture,
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8868
     which must be a depth-8 image.
879
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8869
     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
  8870
     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
  8871
     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
  8872
     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
  8873
     Color class."
879
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8874
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8875
    |pseudoBits
879
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8876
     fixR    "{Class: SmallInteger }"
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8877
     fixG    "{Class: SmallInteger }"
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8878
     fixB    "{Class: SmallInteger }"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8879
     fixGfixB
884
d7cc8a20505b oops - nearest paint color conversion can be done much faster
Claus Gittinger <cg@exept.de>
parents: 883
diff changeset
  8880
     r       "{Class: SmallInteger }"
d7cc8a20505b oops - nearest paint color conversion can be done much faster
Claus Gittinger <cg@exept.de>
parents: 883
diff changeset
  8881
     g       "{Class: SmallInteger }"
d7cc8a20505b oops - nearest paint color conversion can be done much faster
Claus Gittinger <cg@exept.de>
parents: 883
diff changeset
  8882
     b       "{Class: SmallInteger }"
d7cc8a20505b oops - nearest paint color conversion can be done much faster
Claus Gittinger <cg@exept.de>
parents: 883
diff changeset
  8883
     idx     "{Class: SmallInteger }"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8884
     idMap lastColor
879
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8885
     clr|
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8886
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8887
    self depth ~~ 8 ifTrue:[^ nil].
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8888
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8889
    photometric == #palette ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8890
        lastColor := colorMap size - 1
879
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8891
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8892
        lastColor := 255.
879
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8893
    ].
884
d7cc8a20505b oops - nearest paint color conversion can be done much faster
Claus Gittinger <cg@exept.de>
parents: 883
diff changeset
  8894
    idMap := ByteArray uninitializedNew:256.
d7cc8a20505b oops - nearest paint color conversion can be done much faster
Claus Gittinger <cg@exept.de>
parents: 883
diff changeset
  8895
3915
dd2dae91c068 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3914
diff changeset
  8896
    (nRed isNil or:[nGreen isNil or:[nBlue isNil]]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8897
        0 to:lastColor do:[:pix |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8898
            |clr repClr|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8899
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8900
            clr := self colorFromValue:pix.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8901
            repClr := clr nearestIn:fixColors.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8902
            idMap at:(pix+1) put:(fixColors identityIndexOf:repClr)-1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8903
        ].
3914
875c38aa66ab *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3913
diff changeset
  8904
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8905
        fixR := nRed.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8906
        fixR == 0 ifTrue:[ ^ nil].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8907
        fixG := nGreen.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8908
        fixG == 0 ifTrue:[ ^ nil].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8909
        fixB := nBlue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8910
        fixB == 0 ifTrue:[ ^ nil].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8911
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8912
        "/ simple check
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8913
        (fixR * fixG * fixB) ~~ fixColors size ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8914
            self error:'invalid color array passed'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8915
            ^ nil
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8916
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8917
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8918
        "/
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8919
        "/ collect colorIds
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8920
        "/
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8921
        fixGfixB := fixG * fixB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8922
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8923
        0 to:lastColor do:[:pix |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8924
            clr := self colorFromValue:pix.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8925
            r := clr redByte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8926
            g := clr greenByte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8927
            b := clr blueByte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8928
            idx := ((r * (fixR-1) + 128) // 255) * fixGfixB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8929
            idx := idx + (((g * (fixG-1) + 128) // 255) * fixB).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8930
            idx := idx + ((b * (fixB-1) + 128) // 255).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8931
            idMap at:(pix+1) put:(fixColors at:(idx+1)) colorId.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8932
        ].
879
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8933
    ].
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8934
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8935
    pseudoBits := ByteArray uninitializedNew:(width * height).
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8936
884
d7cc8a20505b oops - nearest paint color conversion can be done much faster
Claus Gittinger <cg@exept.de>
parents: 883
diff changeset
  8937
    "/ translate
d7cc8a20505b oops - nearest paint color conversion can be done much faster
Claus Gittinger <cg@exept.de>
parents: 883
diff changeset
  8938
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
  8939
    self bits
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8940
        expandPixels:8         "xlate only"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8941
        width:width height:height
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8942
        into:pseudoBits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8943
        mapping:idMap.
879
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8944
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8945
    ^ pseudoBits
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8946
884
d7cc8a20505b oops - nearest paint color conversion can be done much faster
Claus Gittinger <cg@exept.de>
parents: 883
diff changeset
  8947
    "Modified: 18.6.1996 / 09:18:09 / cg"
879
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8948
!
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8949
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8950
nfloydSteinbergDitheredDepth8BitsColors:colors
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8951
    "return a floyd-steinberg dithered bitmap from the receiver picture,
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8952
     which must be a depth-8 image.
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8953
     This method expects an array of colors to be used for dithering
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8954
     (which need not be a colorCubes colors)."
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8955
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8956
    |pseudoBits
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8957
     rgbBytes
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8958
     ditherRGBBytes ditherColors
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8959
     w       "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8960
     h       "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8961
     index   "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8962
     numR    "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8963
     numG    "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8964
     numB    "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8965
     bitsR    "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8966
     bitsG    "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8967
     bitsB    "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8968
     maxBits  "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8969
     maskR    "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8970
     maskG    "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8971
     maskB    "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8972
     shR      "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8973
     shG      "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8974
     shB      "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8975
     ditherIds failed map lastColor colorsByDistance qScramble
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8976
     clrLookup lookupPos cube nCube
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8977
     dR  "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8978
     dG  "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8979
     dB  "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8980
     iR    "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8981
     iRG   "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8982
     iRGB  "{Class: SmallInteger }"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8983
     clr
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8984
     rI  "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8985
     gI  "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8986
     bI  "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8987
     maxIDX  "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8988
     subCubeColorCollection
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8989
     error
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8990
     dl "{Class: SmallInteger }"|
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8991
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8992
    self depth ~~ 8 ifTrue:[^ nil].
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8993
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8994
    "/
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8995
    "/ collect color components as integer values (for integer arithmetic)
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8996
    "/
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8997
    rgbBytes := ByteArray uninitializedNew:256 * 3.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8998
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8999
    photometric == #palette ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9000
        lastColor := colorMap size - 1
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9001
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9002
        lastColor := 255.
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9003
    ].
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9004
    index := 1.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9005
    0 to:lastColor do:[:pix |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9006
        clr := self colorFromValue:pix.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9007
        rgbBytes at:index put:(clr redByte).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9008
        rgbBytes at:index+1 put:(clr greenByte).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9009
        rgbBytes at:index+2 put:(clr blueByte).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9010
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9011
        index := index + 3.
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9012
    ].
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9013
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9014
    "/ collect valid ditherColors ...
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9015
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9016
    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
  9017
    ditherColors := ditherColors select:[:clr | clr colorId notNil].
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9018
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9019
    "/ collect ditherColor components
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9020
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9021
    lastColor := ditherColors size.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9022
    ditherIds := ByteArray uninitializedNew:lastColor.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9023
    ditherRGBBytes := ByteArray uninitializedNew:(lastColor * 3).
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9024
    index := 1.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9025
    1 to:lastColor do:[:pix |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9026
        clr := ditherColors at:pix.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9027
        ditherRGBBytes at:index put:(clr redByte).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9028
        ditherRGBBytes at:index+1 put:(clr greenByte).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9029
        ditherRGBBytes at:index+2 put:(clr blueByte).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9030
        ditherIds at:pix put:clr colorId.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9031
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9032
        index := index + 3.
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9033
    ].
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9034
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9035
    "/ place the ditherColor positions into a color cube
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9036
    bitsR := 5.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9037
    bitsG := 6.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9038
    bitsB := 4.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9039
    maxBits := 6.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9040
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9041
"/    bitsR := 4.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9042
"/    bitsG := 4.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9043
"/    bitsB := 3.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9044
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9045
    numR := 1 bitShift:bitsR.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9046
    numG := 1 bitShift:bitsG.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9047
    numB := 1 bitShift:bitsB.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9048
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9049
    maskR := (numR-1) bitShift:(bitsG + bitsB).
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9050
    maskG := (numG-1) bitShift:bitsB.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9051
    maskB := numB-1.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9052
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9053
    shR := -16+bitsR+bitsG+bitsB.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9054
    shG := -16+bitsG+bitsB.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9055
    shB := -16+bitsB.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9056
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9057
    maxIDX := numR*numG*numB.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9058
    cube := Array new:maxIDX.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9059
    1 to:lastColor do:[:clrIdx |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9060
        clr := ditherColors at:clrIdx.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9061
        rI := clr scaledRed. rI := (rI bitShift:shR) bitAnd:maskR.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9062
        gI := clr scaledGreen. gI := (gI bitShift:shG) bitAnd:maskG.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9063
        bI := clr scaledBlue. bI := (bI bitShift:shB) bitAnd:maskB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9064
        index := rI + gI + bI + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9065
        subCubeColorCollection := cube at:index.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9066
        subCubeColorCollection isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9067
            subCubeColorCollection := OrderedCollection new.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9068
            cube at:index put:subCubeColorCollection.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9069
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9070
        subCubeColorCollection add:(clrIdx - 1).
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9071
    ].
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9072
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9073
    shR := 1 bitShift:(bitsG+bitsB).
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9074
    shG := 1 bitShift:(bitsB).
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9075
    shB := 1.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9076
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9077
    1 to:maxIDX do:[:i |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9078
        subCubeColorCollection := cube at:i.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9079
        subCubeColorCollection notNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9080
            cube at:i put:(subCubeColorCollection asByteArray)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9081
        ]
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9082
    ].
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9083
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9084
"/    nCube := cube copy.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9085
"/
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9086
"/    cube keysAndValuesDo:[:i :indices |
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9087
"/        indices notNil ifTrue:[
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9088
"/            nCube at:i put:(indices asByteArray)
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9089
"/        ] ifFalse:[
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9090
"/            "/ find nearest color
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  9091
"/
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9092
"/            dl := 1.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9093
"/            [dl < maxBits] whileTrue:[
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9094
"/                dR := dl negated.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9095
"/                [dR <= dl] whileTrue:[
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9096
"/                    iR := i + (dR * shR).
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  9097
"/                    (iR > 0 and:[iR < maxIDX]) ifTrue:[
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9098
"/                        dG := dl negated.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9099
"/                        [dG < dl] whileTrue:[
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9100
"/                            iRG := iR + (dG * shG).
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9101
"/                            (iRG > 0 and:[iRG < maxIDX]) ifTrue:[
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9102
"/                                dB := dl negated.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9103
"/                                [dB < dl] whileTrue:[
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9104
"/                                    iRGB := iRG + dB.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9105
"/                                    (iRG > 0 and:[iRG < maxIDX]) ifTrue:[
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9106
"/                                        (cube at:iRGB) notNil ifTrue:[
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9107
"/                                            nCube at:i put:(cube at:iRGB).
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9108
"/                                            dB := dG := dR := dl := 999.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9109
"/                                        ]
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9110
"/                                    ].
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9111
"/                                    dB := dB + 1.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9112
"/                                ]
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9113
"/                            ].
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9114
"/                            dG := dG + 1.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9115
"/                        ]
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9116
"/                    ].
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9117
"/                    dR := dR + 1.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9118
"/                ].
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9119
"/                dl := dl + 1.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9120
"/            ]
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9121
"/        ]
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9122
"/    ].
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9123
"/self halt.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9124
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9125
    "/ now, cube contains collections of colors which are
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  9126
    "/ positioned in a subCube; quickly accessed by a lookup
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9127
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9128
    pseudoBits := ByteArray uninitializedNew:(width * height).
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9129
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9130
    w := width.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9131
    h := height.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9132
    error := ByteArray new:(w+2)*3*2.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9133
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9134
%{
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9135
#define BITSR   5
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9136
#define BITSG   6
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9137
#define BITSB   4
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9138
#define MAXBITS 6
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9139
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9140
#define xBITSR   4
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9141
#define xBITSG   4
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9142
#define xBITSB   3
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9143
#define xMAXBITS 4
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9144
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9145
#define NR      32 /* (1<<BITSR) */
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9146
#define NG      64 /* (1<<BITSG) */
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9147
#define NB      16 /* (1<<BITSB) */
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9148
#define MAXRGB  64 /* (1<<MAXBITS) */
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9149
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9150
#define SHR     (BITSG+BITSB)
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9151
#define SHG     BITSB
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9152
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9153
#define REMEMBER_SEARCH
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9154
#define xNO_FLOYD_STEINBERG
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9155
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9156
    int __x, __y;
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9157
    int __eR, __eG, __eB;
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9158
    unsigned char *srcP, *dstP;
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9159
    unsigned char *rgbP;
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9160
    unsigned char *idP;
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9161
    short *errP, *eP;
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9162
    int __fR, __fG, __fB;
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9163
    int idx;
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9164
    int __w = __intVal(w);
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9165
    int __h = __intVal(h);
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9166
    int __nColors = __intVal(lastColor);
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9167
    int __wR = -1, __wG, __wB;
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9168
    OBJ *__cube;
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9169
    int cubeIndex, cubeIndex2;
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9170
5476
06e08505bc6f __isByteArray() to __isByteArrayLike() in primitive code
Stefan Vogel <sv@exept.de>
parents: 5352
diff changeset
  9171
    if (__isByteArrayLike(__INST(bytes))
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9172
     && __isByteArray(pseudoBits)
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9173
     && __isByteArray(rgbBytes)
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9174
     && __isByteArray(ditherRGBBytes)
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9175
     && __isByteArray(ditherIds)
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9176
     && __isByteArray(error)) {
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9177
        failed = false;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9178
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9179
        srcP = __ByteArrayInstPtr(__INST(bytes))->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9180
        dstP = __ByteArrayInstPtr(pseudoBits)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9181
        rgbP = __ByteArrayInstPtr(rgbBytes)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9182
        idP = __ByteArrayInstPtr(ditherIds)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9183
        errP = (short *) __ByteArrayInstPtr(error)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9184
        __cube = __ArrayInstPtr(cube)->a_element;
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
        eP = errP;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9187
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9188
        for (__y=__h; __y>0; __y--) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9189
            eP = &(errP[3]);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9190
            __eR = eP[0];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9191
            __eG = eP[1];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9192
            __eB = eP[2];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9193
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9194
            for (__x=__w; __x>0; __x--) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9195
                int __want;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9196
                int pix;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9197
                int __wantR, __wantG, __wantB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9198
                int idx;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9199
                int tR, tG, tB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9200
                int nR, nG, nB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9201
                int __dR, __dG, __dB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9202
                int minDelta, bestIdx;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9203
                int __iR, __iG, __iB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9204
                int cR, cG, cB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9205
                int delta;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9206
                OBJ subCubeColors;
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
                pix = *srcP++;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9209
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9210
                /*
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9211
                 * wR, wG and wB is the wanted r/g/b value;
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
                idx = pix+pix+pix;  /* pix * 3 */
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
                __wR = __wantR = rgbP[idx] + __eR;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9216
                __wG = __wantG = rgbP[idx+1] + __eG;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9217
                __wB = __wantB = rgbP[idx+2] + __eB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9218
                if(__wR > 255) __wR = 255;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9219
                else if (__wR < 0) __wR = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9220
                if(__wG > 255) __wG = 255;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9221
                else if (__wG < 0) __wG = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9222
                if(__wB > 255) __wB = 255;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9223
                else if (__wB < 0) __wB = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9224
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9225
                __iR = __wR >> (8-BITSR);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9226
                __iG = __wG >> (8-BITSG);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9227
                __iB = __wB >> (8-BITSB);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9228
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9229
                cubeIndex = (__iR<<SHR) + (__iG<<SHG) + __iB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9230
                subCubeColors = __cube[cubeIndex];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9231
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9232
                if (subCubeColors == nil) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9233
                    /* search around in spirals, for the first match */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9234
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9235
                    delta = 1;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9236
                    while (delta < MAXRGB) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9237
                        /* check plane above */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9238
                        cR = __iR + delta;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9239
                        if ((unsigned)cR < NR) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9240
                            for (cG=__iG-delta; cG<=__iG+delta; cG++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9241
                                if ((unsigned)cG < NG) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9242
                                    for (cB=__iB-delta; cB<=__iB+delta; cB++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9243
                                        if ((unsigned)cB < NB) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9244
                                            cubeIndex2 = (cR<<SHR) + (cG<<SHG) + cB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9245
                                            subCubeColors = __cube[cubeIndex2];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9246
                                            if (__isNonNilObject(subCubeColors)) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9247
                                                goto found;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9248
                                            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9249
                                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9250
                                    }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9251
                                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9252
                            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9253
                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9254
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9255
                        /* check plane below */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9256
                        cR = __iR - delta;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9257
                        if ((unsigned)cR < NR) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9258
                            for (cG=__iG-delta; cG<=__iG+delta; cG++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9259
                                if ((unsigned)cG < NG) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9260
                                    for (cB=__iB-delta; cB<=__iB+delta; cB++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9261
                                        if ((unsigned)cB < NB) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9262
                                            cubeIndex2 = (cR<<SHR) + (cG<<SHG) + cB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9263
                                            subCubeColors = __cube[cubeIndex2];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9264
                                            if (__isNonNilObject(subCubeColors)) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9265
                                                goto found;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9266
                                            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9267
                                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9268
                                    }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9269
                                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9270
                            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9271
                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9272
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9273
                        /* check plane to the right */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9274
                        cG = __iG + delta;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9275
                        if ((unsigned)cG < NG) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9276
                            for (cR=__iR-delta+1; cR<=__iR+delta-1; cR++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9277
                                if ((unsigned)cR < NR) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9278
                                    for (cB=__iB-delta; cB<=__iB+delta; cB++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9279
                                        if ((unsigned)cB < NB) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9280
                                            cubeIndex2 = (cR<<SHR) + (cG<<SHG) + cB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9281
                                            subCubeColors = __cube[cubeIndex2];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9282
                                            if (__isNonNilObject(subCubeColors)) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9283
                                                goto found;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9284
                                            }
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
                                    }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9287
                                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9288
                            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9289
                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9290
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9291
                        /* check plane to the left */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9292
                        cG = __iG - delta;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9293
                        if ((unsigned)cG < NG) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9294
                            for (cR=__iR-delta+1; cR<=__iR+delta-1; cR++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9295
                                if ((unsigned)cR < NR) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9296
                                    for (cB=__iB-delta; cB<=__iB+delta; cB++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9297
                                        if ((unsigned)cB < NB) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9298
                                            cubeIndex2 = (cR<<SHR) + (cG<<SHG) + cB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9299
                                            subCubeColors = __cube[cubeIndex2];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9300
                                            if (__isNonNilObject(subCubeColors)) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9301
                                                goto found;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9302
                                            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9303
                                        }
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
                                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9306
                            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9307
                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9308
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9309
                        /* check plane at back */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9310
                        cB = __iB + delta;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9311
                        if ((unsigned)cB < NB) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9312
                            for (cR=__iR-delta+1; cR<=(__iR+delta-1); cR++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9313
                                if ((unsigned)cR < NR) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9314
                                    for (cG=__iG-delta+1; cG<=(__iG+delta-1); cG++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9315
                                        if ((unsigned)cG < NG) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9316
                                            cubeIndex2 = (cR<<SHR) + (cG<<SHG) + cB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9317
                                            subCubeColors = __cube[cubeIndex2];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9318
                                            if (__isNonNilObject(subCubeColors)) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9319
                                                goto found;
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
                                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9322
                                    }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9323
                                }
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
                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9326
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9327
                        /* check plane at front */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9328
                        cB = __iB - delta;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9329
                        if ((unsigned)cB < NB) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9330
                            for (cR=__iR-delta+1; cR<=(__iR+delta-1); cR++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9331
                                if ((unsigned)cR < NR) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9332
                                    for (cG=__iG-delta+1; cG<=(__iG+delta-1); cG++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9333
                                        if ((unsigned)cG < NG) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9334
                                            cubeIndex2 = (cR<<SHR) + (cG<<SHG) + cB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9335
                                            subCubeColors = __cube[cubeIndex2];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9336
                                            if (__isNonNilObject(subCubeColors)) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9337
                                                goto found;
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
                                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9340
                                    }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9341
                                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9342
                            }
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
                        delta = delta + 1;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9345
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9346
                    }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9347
                    /* cannot happen - will lead to a segmentation violation ... */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9348
                    subCubeColors = nil;
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9349
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9350
    found:
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9351
                    __iR = cR;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9352
                    __iG = cG;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9353
                    __iB = cB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9354
                    bestIdx = __ByteArrayInstPtr(subCubeColors)->ba_element[0];
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9355
#ifdef REMEMBER_SEARCH
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9356
                    __cube[cubeIndex] = __MKSMALLINT(bestIdx);
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9357
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9358
                } else {
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9359
#ifdef REMEMBER_SEARCH
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9360
                    if (__isSmallInteger(subCubeColors)) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9361
                        bestIdx = __intVal(subCubeColors);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9362
                    } else
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9363
#endif
7522
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
                        bestIdx = __ByteArrayInstPtr(subCubeColors)->ba_element[0];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9366
                    }
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
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9369
                /*
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9370
                 * ok, now, we have found a collection of nearby
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9371
                 * colors in subCubeColors.
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
                 * 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
  9374
                 * don't care for searching the best - simply take the
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9375
                 * first color found there.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9376
                 * (statistic reduces the error to even a smaller value).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9377
                 * There is no real problem due to that error, since
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9378
                 * it will be diffused anyway ...
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9379
                 */
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9380
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9381
#ifndef NO_FLOYD_STEINBERG
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9382
                {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9383
                    unsigned char *dp;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9384
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9385
                    /*
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9386
                     * fetch that colors r/g/b components
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9387
                     */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9388
                    dp = __ByteArrayInstPtr(ditherRGBBytes)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9389
                    dp += bestIdx * 3;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9390
                    __dR = dp[0];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9391
                    __dG = dp[1];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9392
                    __dB = dp[2];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9393
                }
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9394
#endif
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9395
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9396
/*
4725
c8896df7bd3f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4717
diff changeset
  9397
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
  9398
                __wantR, __wantG, __wantB,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9399
                __wR, __wG, __wB,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9400
                __dR, __dG, __dB);
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9401
*/
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9402
                /*
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9403
                 * store the corresponding dither colors colorId
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9404
                 */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9405
                *dstP++ = idP[bestIdx];
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9406
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9407
#ifndef NO_FLOYD_STEINBERG
7522
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
                 * the new error & distribute the error
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9410
                 */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9411
                __eR = __wantR - __dR;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9412
                if (__eR) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9413
                    tR = __eR >> 4;  /* 16th of error */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9414
                    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
  9415
                    eP[0] = tR*5;         /* 5/16th for (x / y+1) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9416
                    eP[-3] = tR*3;        /* 3/16th for (x-1 / y+1) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9417
                    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
  9418
                    __eR = nR;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9419
                } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9420
                    __eR = eP[3];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9421
                    eP[0] = eP[-3] = eP[3] = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9422
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9423
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9424
                __eG = __wantG - __dG;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9425
                if (__eG) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9426
                    tG = __eG >> 4;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9427
                    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
  9428
                    eP[1] = tG*5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9429
                    eP[-2] = tG*3;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9430
                    eP[4] = __eG - (tG*15);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9431
                    __eG = nG;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9432
                } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9433
                    __eG = eP[4];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9434
                    eP[1] = eP[-2] = eP[4] = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9435
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9436
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9437
                __eB = __wantB - __dB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9438
                if (__eB) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9439
                    tB = __eB >> 4;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9440
                    nB = eP[5] + (tB * 7);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9441
                    eP[2] = tB*5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9442
                    eP[-1] = tB*3;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9443
                    eP[5] = __eB - (tB*15);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9444
                    __eB = nB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9445
                } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9446
                    __eB = eP[5];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9447
                    eP[2] = eP[-1] = eP[5] = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9448
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9449
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9450
                eP += 3;
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9451
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9452
            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9453
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9454
            /*
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9455
             * allow for an interrupt after every row.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9456
             * but care to refetch C variables
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9457
             */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9458
            if (InterruptPending) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9459
                int d_srcP = srcP - __ByteArrayInstPtr(__INST(bytes))->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9460
                int d_dstP = dstP - __ByteArrayInstPtr(pseudoBits)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9461
                int d_errP = errP - (short *) __ByteArrayInstPtr(error)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9462
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9463
                __interrupt__();
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9464
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9465
                srcP = __ByteArrayInstPtr(__INST(bytes))->ba_element + d_srcP;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9466
                dstP = __ByteArrayInstPtr(pseudoBits)->ba_element + d_dstP;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9467
                rgbP = __ByteArrayInstPtr(rgbBytes)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9468
                idP = __ByteArrayInstPtr(ditherIds)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9469
                errP = (short *) __ByteArrayInstPtr(error)->ba_element + d_errP;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9470
                __cube = __ArrayInstPtr(cube)->a_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9471
            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9472
        }
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9473
    }
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9474
%}.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9475
    failed ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9476
        self primitiveFailed.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9477
        ^ nil
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9478
    ].
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9479
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9480
    ^ pseudoBits
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9481
!
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9482
1782
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  9483
orderedDitheredGrayBitsDepth:depth
861
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
  9484
    "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
  9485
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
  9486
    ^ self
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9487
        orderedDitheredGrayBitsWithDitherMatrix:(self class orderedDitherMatrixOfSize:8)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9488
        ditherWidth:8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9489
        depth:depth.
1782
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  9490
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  9491
    "Created: 24.6.1997 / 22:20:12 / cg"
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  9492
!
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  9493
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  9494
orderedDitheredGrayBitsWithDitherMatrix:ditherMatrix ditherWidth:dW depth:depth
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9495
    "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
  9496
     with a constant ditherMatrix, this can be used for thresholding.
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  9497
     Works for any source depths / photometric,
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9498
     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
  9499
     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
  9500
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  9501
    |dH nDither
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9502
     greyLevels greyValues greyPixels greyErrors
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9503
     dstIndex        "{Class: SmallInteger }"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  9504
     nextDst
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9505
     bytesPerOutRow  "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9506
     pixelsPerByte   "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9507
     outBits
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9508
     w               "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9509
     h               "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9510
     bitCnt          "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9511
     byte            "{Class: SmallInteger }" |
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9512
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9513
    depth > 8 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9514
        'IMAGE: unimplemented orderedDither conversion' errorPrintCR.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9515
        ^ nil
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9516
    ].
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9517
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9518
    nDither := ditherMatrix size.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9519
    dH := nDither / dW.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9520
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9521
    w := width.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9522
    h := height.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9523
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9524
    greyLevels := 1 bitShift:depth.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9525
    pixelsPerByte := 8 / depth.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9526
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9527
    bytesPerOutRow := (w * depth + 7) // 8.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9528
    outBits := ByteArray uninitializedNew:(bytesPerOutRow * h).
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9529
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9530
    dstIndex := 1.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9531
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9532
    self bitsPerPixel <= 12 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9533
        "/ fetch scaled brightness values outside of loop into a table;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9534
        "/ use table-value in loop
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9535
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9536
        greyValues := self greyMapForRange:(greyLevels-1).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9537
        greyPixels := greyValues collect:[:v | v isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9538
                                                   0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9539
                                               ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9540
                                                   v truncated]].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9541
        greyPixels := ByteArray withAll:greyPixels.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9542
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9543
        greyErrors := greyValues collect:[:v | v isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9544
                                                   0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9545
                                               ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9546
                                                   ((v - v truncated) * nDither) rounded
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9547
                                               ]].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9548
        greyErrors := ByteArray withAll:greyErrors.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9549
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9550
        0 to:(h-1) do:[:y |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9551
            nextDst := dstIndex + bytesPerOutRow.
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
            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
  9556
%{
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9557
                int __dW = __intVal(dW);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9558
                int __byte = __intVal(byte);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9559
                /* Note: __value is reserved in Visual C++ 8 (2005) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9560
                int __val = __intVal(value);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9561
                int __dT;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9562
                int __dstIdx;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9563
                int __pixel, __grey;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9564
                int __bitCnt = __intVal(bitCnt);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9565
                unsigned char *__greyPixels = __ByteArrayInstPtr(greyPixels)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9566
                unsigned char *__greyErrors = __ByteArrayInstPtr(greyErrors)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9567
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9568
                __pixel = __greyPixels[__val];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9569
                __grey = __greyErrors[__val];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9570
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9571
                __dT = __ByteArrayInstPtr(ditherMatrix)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9572
                            ->ba_element[__intVal(x) % __dW
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9573
                                         + (__intVal(y) % __intVal(dH)) * __dW];
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
                if (__grey > __dT) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9576
                    __pixel++;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9577
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9578
                __byte = (__byte << __intVal(depth)) | __pixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9579
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9580
                __bitCnt = __bitCnt - __intVal(depth);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9581
                if (__bitCnt == 0) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9582
                    __dstIdx = __intVal(dstIndex);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9583
                    __ByteArrayInstPtr(outBits)->ba_element[__dstIdx-1] = __byte;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9584
                    __dstIdx = __dstIdx + 1;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9585
                    dstIndex = __MKSMALLINT(__dstIdx);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9586
                    __byte = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9587
                    __bitCnt = 8;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9588
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9589
                byte = __MKSMALLINT(__byte);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9590
                bitCnt = __MKSMALLINT(__bitCnt);
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9591
%}.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9592
                0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9593
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9594
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9595
            bitCnt ~~ 8 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9596
                byte := byte bitShift:bitCnt.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9597
                outBits at:dstIndex put:byte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9598
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9599
            dstIndex := nextDst.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9600
        ].
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9601
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9602
        'Image [info]: slow ordered dither ..' infoPrintCR.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9603
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9604
        0 to:(h-1) do:[:y |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9605
            nextDst := dstIndex + bytesPerOutRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9606
            byte := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9607
            bitCnt := 8.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9608
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9609
            "/ this is the representaion independent (but slow)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9610
            "/ inner loop - it extracts colors from the receiver
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9611
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9612
            self colorsAtY:y from:0 to:(w-1) do:[:x :clr |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9613
                |dstClr grey dT pixel|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9614
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9615
                "/ get the colors grey value [0 .. 1]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9616
                grey := clr brightness.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9617
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9618
                "/ remap into [0 .. greyLevels-1]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9619
                grey := grey * (greyLevels-1).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9620
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9621
                "/ get threshold pixel [0 .. greyLevels-1]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9622
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9623
                pixel := grey truncated.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9624
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9625
                "/ compute the error [0..1]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9626
                grey := grey - pixel.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9627
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9628
                "/ map into dither space [0 .. nDither]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9629
                grey := (grey * (nDither)) rounded.
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9630
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9631
%{
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9632
                int __dW = __intVal(dW);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9633
                int __byte = __intVal(byte);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9634
                int __dT;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9635
                int __dstIdx;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9636
                int __pixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9637
                int __bitCnt = __intVal(bitCnt);
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
                __dT = __ByteArrayInstPtr(ditherMatrix)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9640
                            ->ba_element[__intVal(x) % __dW
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9641
                                         + (__intVal(y) % __intVal(dH)) * __dW];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9642
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9643
                __pixel = __intVal(pixel);
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
                if (__intVal(grey) > __dT) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9646
                    __pixel++;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9647
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9648
                __byte = (__byte << __intVal(depth)) | __pixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9649
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9650
                __bitCnt = __bitCnt - __intVal(depth);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9651
                if (__bitCnt == 0) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9652
                    __dstIdx = __intVal(dstIndex);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9653
                    __ByteArrayInstPtr(outBits)->ba_element[__dstIdx-1] = __byte;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9654
                    __dstIdx = __dstIdx + 1;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9655
                    dstIndex = __MKSMALLINT(__dstIdx);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9656
                    __byte = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9657
                    __bitCnt = 8;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9658
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9659
                byte = __MKSMALLINT(__byte);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9660
                bitCnt = __MKSMALLINT(__bitCnt);
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9661
%}.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9662
                0
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
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9665
            bitCnt ~~ 8 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9666
                byte := byte bitShift:bitCnt.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9667
                outBits at:dstIndex put:byte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9668
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9669
            dstIndex := nextDst.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9670
        ].
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9671
    ].
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9672
    ^ outBits
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9673
!
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9674
831
ceb4e9f32262 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  9675
orderedDitheredMonochromeBits
ceb4e9f32262 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  9676
    "return the bitmap for a dithered monochrome bitmap from the image;
ceb4e9f32262 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  9677
     using a default ditherMatrix."
ceb4e9f32262 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  9678
ceb4e9f32262 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  9679
    ^ self
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9680
        orderedDitheredMonochromeBitsWithDitherMatrix:(self class orderedDitherMatrixOfSize:8)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9681
        ditherWidth:8
831
ceb4e9f32262 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  9682
ceb4e9f32262 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  9683
    "Created: 11.6.1996 / 16:48:57 / cg"
ceb4e9f32262 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  9684
!
ceb4e9f32262 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  9685
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9686
orderedDitheredMonochromeBitsWithDitherMatrix:ditherMatrix ditherWidth:dW
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9687
    "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
  9688
     with a constant ditherMatrix, this can be used for thresholding.
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  9689
     Works for any source depths / photometric,
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9690
     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
  9691
     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
  9692
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  9693
    |dH nDither
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9694
     greyValues
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9695
     dstIndex        "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9696
     nextDst         "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9697
     bytesPerMonoRow "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9698
     monoBits
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9699
     w               "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9700
     h               "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9701
     bitCnt          "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9702
     byte            "{Class: SmallInteger }" |
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9703
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9704
    nDither := ditherMatrix size.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9705
    dH := nDither / dW.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9706
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9707
    w := width.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9708
    h := height.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9709
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9710
    bytesPerMonoRow := (w + 7) // 8.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9711
    monoBits := ByteArray uninitializedNew:(bytesPerMonoRow * h).
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9712
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9713
    dstIndex := 1.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9714
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9715
    self bitsPerPixel <= 12 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9716
        "/ fetch scaled brightness values outside of loop into a table;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9717
        "/ use table-value in loop
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9718
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9719
        greyValues := self greyByteMapForRange:nDither.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9720
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9721
        0 to:(h-1) do:[:y |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9722
            nextDst := dstIndex + bytesPerMonoRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9723
            byte := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9724
            bitCnt := 8.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9725
            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
  9726
%{
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9727
                int __dW = __intVal(dW);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9728
                int __byte = __intVal(byte);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9729
                int __dT;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9730
                int __dstIdx;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9731
                int __bitCnt = __intVal(bitCnt);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9732
                int __grey;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9733
                unsigned char *__greyValues = __ByteArrayInstPtr(greyValues)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9734
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9735
                __grey = __greyValues[__intVal(value)];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9736
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9737
                __dT = __ByteArrayInstPtr(ditherMatrix)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9738
                            ->ba_element[__intVal(x) % __dW
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9739
                                         + (__intVal(y) % __intVal(dH)) * __dW];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9740
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9741
                __byte = __byte << 1;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9742
                if (__grey > __dT) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9743
                    __byte = __byte | 1;            /* white */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9744
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9745
                __bitCnt = __bitCnt - 1;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9746
                if (__bitCnt == 0) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9747
                    __dstIdx = __intVal(dstIndex);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9748
                    __ByteArrayInstPtr(monoBits)->ba_element[__dstIdx-1] = __byte;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9749
                    __dstIdx = __dstIdx + 1;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9750
                    dstIndex = __MKSMALLINT(__dstIdx);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9751
                    __byte = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9752
                    __bitCnt = 8;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9753
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9754
                byte = __MKSMALLINT(__byte);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9755
                bitCnt = __MKSMALLINT(__bitCnt);
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9756
%}.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9757
                0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9758
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9759
            bitCnt ~~ 8 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9760
                byte := byte bitShift:bitCnt.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9761
                monoBits at:dstIndex put:byte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9762
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9763
            dstIndex := nextDst.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9764
        ].
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9765
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9766
        'Image [info]: slow ordered dither ..' infoPrintCR.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9767
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9768
        0 to:(h-1) do:[:y |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9769
            nextDst := dstIndex + bytesPerMonoRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9770
            byte := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9771
            bitCnt := 8.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9772
            self colorsAtY:y from:0 to:(w-1) do:[:x :clr |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9773
                |dstClr grey dT|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9774
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9775
                "/ get the colors grey value [0 .. 1]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9776
                grey := clr brightness.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9777
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9778
                "/ map into dither space [0 .. nDither]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9779
                grey := (grey * (nDither)) rounded.
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9780
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9781
%{
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9782
                int __dW = __intVal(dW);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9783
                int __byte = __intVal(byte);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9784
                int __dT;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9785
                int __dstIdx;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9786
                int __bitCnt = __intVal(bitCnt);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9787
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9788
                __dT = __ByteArrayInstPtr(ditherMatrix)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9789
                            ->ba_element[__intVal(x) % __dW
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9790
                                         + (__intVal(y) % __intVal(dH)) * __dW];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9791
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9792
                __byte = __byte << 1;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9793
                if (__intVal(grey) > __dT) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9794
                    __byte = __byte | 1;            /* white */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9795
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9796
                __bitCnt = __bitCnt - 1;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9797
                if (__bitCnt == 0) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9798
                    __dstIdx = __intVal(dstIndex);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9799
                    __ByteArrayInstPtr(monoBits)->ba_element[__dstIdx-1] = __byte;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9800
                    __dstIdx = __dstIdx + 1;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9801
                    dstIndex = __MKSMALLINT(__dstIdx);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9802
                    __byte = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9803
                    __bitCnt = 8;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9804
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9805
                byte = __MKSMALLINT(__byte);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9806
                bitCnt = __MKSMALLINT(__bitCnt);
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9807
%}.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9808
                0
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9810
"/                dT := ditherMatrix at:(x \\ dW) + (y \\ dH * dW) + 1.
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  9811
"/
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9812
"/                byte := byte bitShift:1.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9813
"/                grey < dT ifTrue:[
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9814
"/                    byte := byte bitOr:1.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9815
"/                ].
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9816
"/                bitCnt := bitCnt - 1.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9817
"/                bitCnt == 0 ifTrue:[
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9818
"/                    monoBits at:dstIndex put:byte.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9819
"/                    dstIndex := dstIndex + 1.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9820
"/                    byte := 0.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9821
"/                    bitCnt := 8.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9822
"/                ].
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9823
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9824
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9825
            bitCnt ~~ 8 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9826
                byte := byte bitShift:bitCnt.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9827
                monoBits at:dstIndex put:byte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9828
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9829
            dstIndex := nextDst.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9830
        ].
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9831
    ].
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9832
    ^ monoBits
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9833
!
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9834
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9835
stevensonArceDitheredMonochromeBits
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9836
    "return the bitmap for a dithered monochrome bitmap from the image.
6311
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
  9837
     Works for any source depths / photometric.
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
  9838
     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
  9839
1063
ba1bf8091bc1 unused variable cleanup
Claus Gittinger <cg@exept.de>
parents: 1057
diff changeset
  9840
    |dstIndex        "{Class: SmallInteger }"
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9841
     nextDst         "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9842
     bytesPerMonoRow "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9843
     monoBits greyValues
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9844
     errorArray
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9845
     errorArray1 errorArray2 errorArray3
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9846
     e t
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9847
     w               "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9848
     h               "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9849
     bitCnt          "{Class: SmallInteger }"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  9850
     byte            "{Class: SmallInteger }"
1063
ba1bf8091bc1 unused variable cleanup
Claus Gittinger <cg@exept.de>
parents: 1057
diff changeset
  9851
     grey
ba1bf8091bc1 unused variable cleanup
Claus Gittinger <cg@exept.de>
parents: 1057
diff changeset
  9852
     xE              "{Class: SmallInteger }" |
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9853
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9854
    self depth > 12 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9855
        ^ self floydSteinbergDitheredMonochromeBits
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9856
    ].
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9857
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9858
    w := width.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9859
    h := height.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9860
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9861
    bytesPerMonoRow := (w + 7) // 8.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9862
    monoBits := ByteArray uninitializedNew:(bytesPerMonoRow * h).
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9863
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9864
    errorArray := Array new:(w+6).
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9865
    errorArray1 := Array new:(w+6) withAll:0.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9866
    errorArray2 := Array new:(w+6) withAll:0.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9867
    errorArray3 := Array new:(w+6) withAll:0.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9868
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9869
    dstIndex := 1.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9870
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9871
    "/ 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
  9872
    "/ use table-value in loop
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9873
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9874
    greyValues := self greyMapForRange:(255 * 1024).
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  9875
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9876
    0 to:(h-1) do:[:y |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9877
        nextDst := dstIndex + bytesPerMonoRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9878
        byte := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9879
        bitCnt := 8.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9880
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9881
        t := errorArray.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9882
        errorArray := errorArray1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9883
        errorArray1 := errorArray2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9884
        errorArray2 := errorArray3.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9885
        errorArray3 := t.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9886
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9887
        errorArray3 atAllPut:0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9888
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9889
        self valuesAtY:y from:0 to:(w-1) do:[:x :pixel |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9890
            |eP eD|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9891
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9892
            "/ get the colors grey value [0 .. 1]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9893
            grey := greyValues at:(pixel + 1).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9894
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9895
            "/ adjust error
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9896
            xE := x + 3 + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9897
            grey := (grey + (errorArray at:xE)).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9898
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9899
            byte := byte bitShift:1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9900
            grey > (127 * 1024) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9901
                byte := byte bitOr:1.      "/ white
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9902
                e := grey - (255 * 1024)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9903
            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9904
                e := grey                  "/ black
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9905
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9906
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9907
            e ~= 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9908
                "/ distribute the error:
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9909
                "/                  XX    32
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9910
                "/         12    26    30    16
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9911
                "/            12    26    12
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9912
                "/          5    12    12     5
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9913
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9914
                eD := e.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9915
                e := e // 200.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9916
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9917
                eP := e * 32. eD := eD - eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9918
                errorArray at:xE+2 put:(errorArray at:xE+2) + eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9919
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9920
                eP := e * 30. eD := eD - eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9921
                errorArray1 at:xE+1 put:(errorArray1 at:xE+1) + eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9922
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9923
                eP := e * 16. eD := eD - eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9924
                errorArray1 at:xE+3 put:(errorArray1 at:xE+3) + eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9925
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9926
                eP := e * 26. eD := eD - eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9927
                errorArray1 at:xE-1 put:(errorArray1 at:xE-1) + eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9928
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9929
                eD := eD - eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9930
                errorArray2 at:xE put:(errorArray2 at:xE) + eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9931
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9932
                eP := e * 12. eD := eD - eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9933
                errorArray1 at:xE-3 put:(errorArray1 at:xE-3) + eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9934
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9935
                eD := eD - eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9936
                errorArray2 at:xE-2 put:(errorArray2 at:xE-2) + eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9937
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9938
                eD := eD - eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9939
                errorArray2 at:xE+2 put:(errorArray2 at:xE+2) + eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9940
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9941
                eD := eD - eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9942
                errorArray3 at:xE-1 put:(errorArray3 at:xE-1) + eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9943
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9944
                eD := eD - eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9945
                errorArray3 at:xE+1 put:(errorArray3 at:xE+1) + eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9946
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9947
                eP := e * 5. eD := eD - eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9948
                errorArray3 at:xE-3 put:(errorArray3 at:xE-3) + eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9949
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9950
                eP := eD.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9951
                errorArray3 at:xE+3 put:(errorArray3 at:xE+3) + eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9952
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9953
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9954
            bitCnt := bitCnt - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9955
            bitCnt == 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9956
                monoBits at:dstIndex put:byte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9957
                dstIndex := dstIndex + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9958
                byte := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9959
                bitCnt := 8.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9960
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9961
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9962
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9963
        bitCnt ~~ 8 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9964
            byte := byte bitShift:bitCnt.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9965
            monoBits at:dstIndex put:byte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9966
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9967
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9968
        dstIndex := nextDst.
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9969
    ].
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9970
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9971
    ^ monoBits
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9972
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9973
    "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
  9974
    "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
  9975
! !
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9976
861
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
  9977
!Image methodsFor:'drawing'!
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
  9978
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
  9979
displayArcOrigin:origin corner:corner from:startAngle angle:angle withColor:aColor
8231
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
  9980
    "draw part of a circle/ellipse with some pixel value.
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
  9981
     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
  9982
5138
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9983
    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
  9984
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9985
    "
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9986
     |cm i|
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9987
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9988
     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
  9989
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9990
     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
  9991
     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
  9992
     i inspect.
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9993
    "
8231
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
  9994
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
  9995
    "Modified (comment): / 07-12-2017 / 15:01:42 / cg"
5138
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9996
!
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9997
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9998
displayArcOrigin:origin corner:corner from:startAngle angle:angle withValue:aPixelValueOrNil
8231
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
  9999
    "draw part of a circle/ellipse with some pixel value.
5138
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10000
     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
 10001
     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
 10002
     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
 10003
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10004
    |tempForm wI "{ Class: SmallInteger }"
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10005
     hI "{ Class: SmallInteger }" tempImage|
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10006
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10007
    wI := self width.
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10008
    hI := self height.
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10009
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10010
    tempForm := Form width:wI height:hI depth:1 onDevice:Screen current.
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 10011
    tempForm
7480
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10012
        paint:(Color colorId:1) on:(Color colorId:0);
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10013
        clear.
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10014
    tempForm displayArcOrigin:origin corner:corner from:startAngle angle:angle.
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10015
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10016
    tempImage := tempForm asImage.
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10017
    0 to:hI-1 do:[:yRun|
7480
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10018
        0 to:wI-1 do:[:xRun|
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10019
            (tempImage pixelAtX:xRun y:yRun) == 1 ifTrue:[
7480
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10020
                self atImageAndMask:xRun@yRun putValue:aPixelValueOrNil.
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10021
            ].
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10022
        ].
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10023
    ].
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10024
    tempForm destroy.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10025
    tempImage close.
5352
82a42045e996 changed:8 methods
Claus Gittinger <cg@exept.de>
parents: 5341
diff changeset
 10026
    self release. "/ device-image is no longer valid
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10027
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10028
    "
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10029
     |cm i|
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10030
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10031
     cm :=  Array with:Color white with:Color black with:Color red.
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10032
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10033
     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
 10034
     i displayArcOrigin:100@100 corner:200@200 from:0 angle:90 withColor:Color red.
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10035
     i inspect.
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10036
    "
8231
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
 10037
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
 10038
    "Modified (comment): / 07-12-2017 / 15:01:35 / cg"
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10039
!
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10040
8164
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10041
drawEllipse:aRectangle with:aColorOrPixelValue
8231
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
 10042
    "draw a circle/ellipse with some pixel value or color.
8164
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10043
     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
 10044
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10045
    |pixelValue|
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10046
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10047
    (pixelValue := aColorOrPixelValue) isInteger ifFalse:[
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10048
        pixelValue := (self valueFromColor:aColorOrPixelValue).
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10049
    ].
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10050
    self drawEllipse:aRectangle withValue:pixelValue.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10051
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10052
    "Created: / 05-09-2017 / 14:54:52 / cg"
8231
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
 10053
    "Modified (comment): / 07-12-2017 / 15:01:00 / cg"
8164
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10054
!
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10055
4994
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
 10056
drawEllipse:aRectangle withColor:aColor
8231
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
 10057
    "draw a circle/ellipse with some pixel value.
4994
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
 10058
     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
 10059
7961
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10060
    self drawEllipse:aRectangle withValue:(self valueFromColor:aColor) lineWidth:nil
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10061
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10062
    "
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10063
     |i|
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10064
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10065
     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
 10066
     i drawEllipse:(0@0 corner:80@100) withColor:Color red.
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10067
     i inspect.
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10068
    "
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10069
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10070
    "Modified: / 26-02-2017 / 17:13:47 / cg"
8231
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
 10071
    "Modified (comment): / 07-12-2017 / 15:01:03 / cg"
7961
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10072
!
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10073
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10074
drawEllipse:aRectangle withColor:aColor lineWidth:lw
8231
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
 10075
    "draw a circle/ellipse with some pixel value.
7961
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10076
     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
 10077
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10078
    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
 10079
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10080
    "
7905
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10081
     |i|
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10082
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10083
     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
 10084
     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
 10085
     i inspect.
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10086
    "
7905
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10087
7961
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10088
    "Created: / 26-02-2017 / 17:12:37 / cg"
8231
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
 10089
    "Modified (comment): / 07-12-2017 / 15:01:06 / cg"
5138
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10090
!
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10091
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10092
drawEllipse:aRectangle withValue:aPixelValueOrNil
8231
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
 10093
    "draw a circle/ellipse with some pixel value.
5138
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10094
     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
 10095
     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
 10096
     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
 10097
7961
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10098
    self drawEllipse:aRectangle withValue:aPixelValueOrNil lineWidth:nil
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10099
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10100
    "
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10101
     |i|
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10102
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10103
     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
 10104
     i drawEllipse:(0@0 corner:80@100) withColor:Color red.
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10105
     i inspect.
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10106
    "
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10107
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10108
    "Modified: / 26-02-2017 / 17:13:36 / cg"
8231
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
 10109
    "Modified (comment): / 07-12-2017 / 15:01:08 / cg"
7961
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10110
!
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10111
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10112
drawEllipse:aRectangle withValue:aPixelValueOrNil lineWidth:lineWidthOrNil
8231
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
 10113
    "draw a circle/ellipse with some pixel value.
7961
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10114
     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
 10115
     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
 10116
     otherwise to 1. (used by the bitmap editor)"
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10117
4994
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
 10118
    |tempForm xI "{ Class: SmallInteger }"
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
 10119
     yI "{ Class: SmallInteger }"
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
 10120
     wI "{ Class: SmallInteger }"
7961
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10121
     hI "{ Class: SmallInteger }" 
8222
194b512106a2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8209
diff changeset
 10122
     tempImage lw display|
194b512106a2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8209
diff changeset
 10123
194b512106a2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8209
diff changeset
 10124
    (display := Screen current) isNil ifTrue:[
194b512106a2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8209
diff changeset
 10125
        self error:'No display - cannot draw ellipse'
194b512106a2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8209
diff changeset
 10126
    ].    
7961
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10127
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10128
    lw := lineWidthOrNil ? 1.
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10129
     
4994
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
 10130
    wI := aRectangle width.
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
 10131
    hI := aRectangle height.
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
 10132
8222
194b512106a2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8209
diff changeset
 10133
    tempForm := Form width:wI+lw height:hI+lw depth:1 onDevice:display.
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 10134
    tempForm
7480
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10135
        paint:(Color colorId:1) on:(Color colorId:0);
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10136
        clear.
7961
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10137
    tempForm lineWidth:lw.
8231
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
 10138
    tempForm displayArcIn:((lw@lw)//2 extent:(wI-lw)@(hI-lw)) from:0 angle:360.
4994
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
 10139
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
 10140
    xI := aRectangle left.
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
 10141
    yI := aRectangle top.
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
 10142
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10143
    tempImage := tempForm asImage.
7961
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10144
    0 to:hI+lw-1 do:[:yRun|
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10145
        0 to:wI+lw-1 do:[:xRun|
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10146
            (tempImage pixelAtX:xRun y:yRun) == 1 ifTrue:[
7480
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10147
                self atImageAndMask: (xI+xRun)@(yI+yRun) putValue:aPixelValueOrNil.
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10148
            ].
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10149
        ].
4994
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
 10150
    ].
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10151
    tempForm destroy.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10152
    tempImage close.
5352
82a42045e996 changed:8 methods
Claus Gittinger <cg@exept.de>
parents: 5341
diff changeset
 10153
    self release. "/ device-image is no longer valid
4994
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
 10154
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
 10155
    "
7905
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10156
     |i|
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10157
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10158
     i := Depth8Image extent:300@400 depth:8 palette:{ Color white . Color black  . Color red }.
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10159
     i drawEllipse:(0@0 corner:80@100) withColor:Color red.
4994
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
 10160
     i inspect.
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
 10161
    "
7961
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10162
    "
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10163
     |i|
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10164
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10165
     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
 10166
     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
 10167
     i inspect.
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10168
    "
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10169
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10170
    "Created: / 26-02-2017 / 17:13:16 / cg"
8231
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
 10171
    "Modified (comment): / 07-12-2017 / 15:01:11 / cg"
4994
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
 10172
!
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
 10173
8164
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10174
drawLineFrom:startPoint to:endPoint with:aColorOrPixelValue
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10175
    "draw a line with some pixel value.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10176
     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
 10177
     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
 10178
     (such as the HumanReadableImageGenerator)"
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10179
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10180
    |pixelValue|
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10181
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10182
    (pixelValue := aColorOrPixelValue) isInteger ifFalse:[
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10183
        pixelValue := self valueFromColor:aColorOrPixelValue
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10184
    ].
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10185
    self drawLineFrom:startPoint to:endPoint withValue:pixelValue
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10186
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10187
    "
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10188
     |i|
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10189
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10190
     i := Depth1Image extent:100@100 depth:1 palette:nil.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10191
     i photometric:#blackIs0.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10192
     i drawLineFrom:5@5 to:94@5 withColor:1.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10193
     i drawLineFrom:94@5 to:94@94 withColor:1.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10194
     i drawLineFrom:94@94 to:5@94 withColor:1.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10195
     i drawLineFrom:5@94 to:5@5 withColor:1.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10196
     i drawLineFrom:10@10 to:90@90 withColor:1.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10197
     i drawLineFrom:90@10 to:10@90 withColor:1.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10198
     i inspect.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10199
    "
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10200
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10201
    "Created: / 05-09-2017 / 14:55:50 / cg"
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10202
!
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10203
5235
e9ab91666ebf *** empty log message ***
sr
parents: 5216
diff changeset
 10204
drawLineFrom:startPoint to:endPoint withColor:aColorOrPixelValue
4955
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10205
    "draw a line with some pixel value.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10206
     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
 10207
     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
 10208
     (such as the HumanReadableImageGenerator)"
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10209
5235
e9ab91666ebf *** empty log message ***
sr
parents: 5216
diff changeset
 10210
    |pixelValue|
e9ab91666ebf *** empty log message ***
sr
parents: 5216
diff changeset
 10211
e9ab91666ebf *** empty log message ***
sr
parents: 5216
diff changeset
 10212
    pixelValue := aColorOrPixelValue.
e9ab91666ebf *** empty log message ***
sr
parents: 5216
diff changeset
 10213
    pixelValue isInteger ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10214
        pixelValue := self valueFromColor:aColorOrPixelValue
5235
e9ab91666ebf *** empty log message ***
sr
parents: 5216
diff changeset
 10215
    ].
e9ab91666ebf *** empty log message ***
sr
parents: 5216
diff changeset
 10216
    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
 10217
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10218
    "
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10219
     |i|
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10220
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10221
     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
 10222
     i photometric:#blackIs0.
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10223
     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
 10224
     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
 10225
     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
 10226
     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
 10227
     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
 10228
     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
 10229
     i inspect.
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10230
    "
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10231
!
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10232
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10233
drawLineFrom:startPoint to:endPoint withValue:aPixelValueOrNil
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10234
    "draw a line with some pixel value.
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10235
     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
 10236
     The only use for this is when we have to generate images in a headless webService
8194
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 10237
     (such as the HumanReadableImageGenerator) or in the image editor.
5138
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10238
     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
 10239
     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
 10240
4955
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10241
    |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
 10242
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10243
    x0 := startPoint x.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10244
    y0 := startPoint y.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10245
    x1 := endPoint x.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10246
    y1 := endPoint y.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10247
8194
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 10248
    (x1 - x0) == 0 ifTrue:[
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 10249
        y0 to: y1 do:[:y |
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 10250
            self atImageAndMask:x0@y putValue:aPixelValueOrNil.
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 10251
        ].
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 10252
        ^ self.
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 10253
    ].
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 10254
    (y1 - y0) == 0 ifTrue:[
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 10255
        x0 to: x1 do:[:x |
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 10256
            self atImageAndMask:x@y0 putValue:aPixelValueOrNil.
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 10257
        ].
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 10258
        ^ self.
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 10259
    ].
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 10260
4955
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10261
    steep := (y1 - y0) abs > (x1 - x0) abs.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10262
    steep ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10263
        t := x0. x0 := y0. y0 := t.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10264
        t := x1. x1 := y1. y1 := t.
4955
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10265
    ].
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10266
    x0 > x1 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10267
        t := x0. x0 := x1. x1 := t.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10268
        t := y0. y0 := y1. y1 := t.
4955
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10269
    ].
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10270
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10271
    deltax := x1 - x0.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10272
    deltay := (y1 - y0) abs.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10273
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10274
    error := 0.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10275
    deltaerr := deltay / deltax.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10276
    y := y0.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10277
    y0 < y1 ifTrue:[ ystep := 1 ] ifFalse:[ ystep := -1 ].
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10278
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10279
    x0 to: x1 do:[:x |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10280
        steep ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10281
            self atImageAndMask:y@x putValue:aPixelValueOrNil.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10282
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10283
            self atImageAndMask:x@y putValue:aPixelValueOrNil.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10284
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10285
        error := error + deltaerr.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10286
        error >= 0.5 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10287
            y := y + ystep.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10288
            error := error - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10289
        ]
4955
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10290
    ].
5352
82a42045e996 changed:8 methods
Claus Gittinger <cg@exept.de>
parents: 5341
diff changeset
 10291
    self release. "/ device-image is no longer valid
4955
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10292
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10293
    "
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10294
     |i|
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10295
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10296
     i := Depth1Image extent:100@100 depth:1 palette:nil.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10297
     i photometric:#blackIs0.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10298
     i drawLineFrom:5@5 to:94@5 withColor:1.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10299
     i drawLineFrom:94@5 to:94@94 withColor:1.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10300
     i drawLineFrom:94@94 to:5@94 withColor:1.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10301
     i drawLineFrom:5@94 to:5@5 withColor:1.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10302
     i drawLineFrom:10@10 to:90@90 withColor:1.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10303
     i drawLineFrom:90@10 to:10@90 withColor:1.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10304
     i inspect.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10305
    "
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10306
!
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10307
8164
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10308
drawRectangle: aRectangle with:aColorOrPixelValue
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10309
    "draw a rectangle with some pixel value.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10310
     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
 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 drawRectangle: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
    "
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10320
     |i|
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10321
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10322
     i := Depth1Image extent:100@100 depth:1 palette:nil.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10323
     i photometric:#blackIs0.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10324
     i drawRectangle:(10@10 corner:90@90) withColor:1.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10325
     i inspect.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10326
    "
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10327
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10328
    "Created: / 05-09-2017 / 14:58:10 / cg"
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10329
!
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10330
2801
9f71b58c0726 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2772
diff changeset
 10331
drawRectangle: aRectangle withColor:aColor
9f71b58c0726 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2772
diff changeset
 10332
    "draw a rectangle with some pixel value.
9f71b58c0726 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2772
diff changeset
 10333
     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
 10334
5138
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10335
    self drawRectangle:aRectangle withValue:(self valueFromColor:aColor)
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10336
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10337
    "
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10338
     |i|
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10339
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10340
     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
 10341
     i photometric:#blackIs0.
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10342
     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
 10343
     i inspect.
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10344
    "
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10345
!
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10346
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10347
drawRectangle: aRectangle withValue:aPixelValueOrNil
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10348
    "draw a rectangle with some pixel value.
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10349
     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
 10350
     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
 10351
     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
 10352
7918
ad5373d62245 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7916
diff changeset
 10353
    |xLeft  "{ Class: SmallInteger }"
ad5373d62245 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7916
diff changeset
 10354
     xRight "{ Class: SmallInteger }"
ad5373d62245 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7916
diff changeset
 10355
     yTop   "{ Class: SmallInteger }"
ad5373d62245 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7916
diff changeset
 10356
     yBot   "{ Class: SmallInteger }"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 10357
     wI "{ Class: SmallInteger }"
2801
9f71b58c0726 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2772
diff changeset
 10358
     hI "{ Class: SmallInteger }"|
9f71b58c0726 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2772
diff changeset
 10359
9f71b58c0726 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2772
diff changeset
 10360
    wI := aRectangle width.
9f71b58c0726 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2772
diff changeset
 10361
    hI := aRectangle height.
9f71b58c0726 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2772
diff changeset
 10362
7918
ad5373d62245 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7916
diff changeset
 10363
    xLeft := aRectangle left.
ad5373d62245 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7916
diff changeset
 10364
    xRight := xLeft+wI-1.
ad5373d62245 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7916
diff changeset
 10365
    yTop := aRectangle top.
ad5373d62245 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7916
diff changeset
 10366
    yBot := yTop+hI-1.
ad5373d62245 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7916
diff changeset
 10367
ad5373d62245 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7916
diff changeset
 10368
    xLeft to:xLeft+wI-1 do:[:xRun|
ad5373d62245 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7916
diff changeset
 10369
        self atImageAndMask: xRun@yTop put:aPixelValueOrNil.
ad5373d62245 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7916
diff changeset
 10370
        self atImageAndMask: xRun@yBot put:aPixelValueOrNil
ad5373d62245 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7916
diff changeset
 10371
    ].
ad5373d62245 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7916
diff changeset
 10372
    yTop+1 to:yTop+hI-2 do:[:yRun|
ad5373d62245 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7916
diff changeset
 10373
        self atImageAndMask: xLeft@yRun put:aPixelValueOrNil.
ad5373d62245 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7916
diff changeset
 10374
        self atImageAndMask: xRight@yRun put:aPixelValueOrNil
4955
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10375
    ].
5352
82a42045e996 changed:8 methods
Claus Gittinger <cg@exept.de>
parents: 5341
diff changeset
 10376
    self release. "/ device-image is no longer valid
4955
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10377
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10378
    "
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10379
     |i|
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10380
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10381
     i := Depth1Image extent:100@100 depth:1 palette:nil.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10382
     i photometric:#blackIs0.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10383
     i drawRectangle:(10@10 corner:90@90) withColor:1.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10384
     i inspect.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10385
    "
7918
ad5373d62245 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7916
diff changeset
 10386
ad5373d62245 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7916
diff changeset
 10387
    "Modified: / 21-02-2017 / 01:41:39 / cg"
2801
9f71b58c0726 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2772
diff changeset
 10388
!
9f71b58c0726 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2772
diff changeset
 10389
5135
0a2a850a20cc *** empty log message ***
sr
parents: 5126
diff changeset
 10390
fillAntiAliasedArc:origin radius:r from:startAngle angle:angle withColor:aColor colorDictionary:colorDictionary blendStart:blendStart
8231
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
 10391
    "fill par tof an antialiased circle/ellipse with some pixel value.
7905
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10392
     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
 10393
     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
 10394
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 10395
    |tempForm wI "{ Class: SmallInteger }"
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 10396
     hI "{ Class: SmallInteger }"
8222
194b512106a2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8209
diff changeset
 10397
     colorValue tempImage display|
194b512106a2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8209
diff changeset
 10398
194b512106a2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8209
diff changeset
 10399
    (display := Screen current) isNil ifTrue:[
194b512106a2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8209
diff changeset
 10400
        self error:'No display - cannot draw arc'
194b512106a2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8209
diff changeset
 10401
    ].    
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 10402
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 10403
    wI := self width.
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 10404
    hI := self height.
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 10405
8222
194b512106a2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8209
diff changeset
 10406
    tempForm := Form width:wI height:hI depth:1 onDevice:display.
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 10407
    tempForm
7480
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10408
        paint:(Color colorId:1) on:(Color colorId:0);
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10409
        clear.
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 10410
    tempForm fillArc:origin radius:r from:startAngle angle:angle.
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 10411
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 10412
    colorValue := self valueFromColor:aColor.
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10413
    tempImage := tempForm asImage.
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 10414
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 10415
    0 to:hI-1 do:[:yRun|
7480
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10416
        0 to:wI-1 do:[:xRun|
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10417
            (tempImage pixelAtX:xRun y:yRun) == 1 ifTrue:[
7480
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10418
                self atImageAndMask:xRun@yRun putValue:colorValue.
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10419
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10420
                #(left right) do:[:aHorizontal |
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10421
                    #(top bottom) do:[:aVertical |
7905
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10422
                        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
 10423
                        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
 10424
                    ].
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10425
                ].
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10426
            ].
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10427
        ].
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10428
    ].
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10429
    tempForm destroy.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10430
    tempImage close.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10431
    self release. "/ device-image is no longer valid
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10432
7480
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10433
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10434
    "
7905
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10435
        |aaImgArray|
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10436
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10437
        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
 10438
        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
 10439
            colorDictionary:aaImgArray first
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10440
            blendStart:aaImgArray second.
7484
ac97ca090d0c #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 7483
diff changeset
 10441
        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
 10442
            colorDictionary:aaImgArray first
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10443
            blendStart:aaImgArray second.
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10444
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10445
        aaImgArray last inspect.
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 6037
diff changeset
 10446
    "
7905
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10447
8222
194b512106a2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8209
diff changeset
 10448
    "Modified: / 21-11-2017 / 16:28:05 / cg"
8231
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
 10449
    "Modified (comment): / 07-12-2017 / 15:02:06 / cg"
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 6037
diff changeset
 10450
!
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 6037
diff changeset
 10451
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 6037
diff changeset
 10452
fillArc:origin radius:r from:startAngle angle:angle withColor:aColorOrIndex
8231
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
 10453
    "fill part of a circle/ellipse with some pixel value.
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10454
     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
 10455
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10456
    |tempForm tempImage
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10457
     wI "{ Class: SmallInteger }"
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10458
     hI "{ Class: SmallInteger }"
8222
194b512106a2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8209
diff changeset
 10459
     colorValue display|
194b512106a2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8209
diff changeset
 10460
194b512106a2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8209
diff changeset
 10461
    (display := Screen current) isNil ifTrue:[
194b512106a2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8209
diff changeset
 10462
        self error:'No display - cannot fill arc'
194b512106a2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8209
diff changeset
 10463
    ].    
194b512106a2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8209
diff changeset
 10464
    
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10465
    wI := self width.
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10466
    hI := self height.
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10467
8222
194b512106a2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8209
diff changeset
 10468
    tempForm := Form width:wI height:hI depth:1 onDevice:display.
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 10469
    tempForm
7480
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10470
        paint:(Color colorId:1) on:(Color colorId:0);
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10471
        clear.
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10472
    tempForm fillArc:origin radius:r from:startAngle angle:angle.
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10473
4997
15d53562d4e8 changed #fillArc:radius:from:angle:withColor:
sr
parents: 4996
diff changeset
 10474
    aColorOrIndex isInteger ifTrue:[
7480
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10475
        colorValue := aColorOrIndex.
4997
15d53562d4e8 changed #fillArc:radius:from:angle:withColor:
sr
parents: 4996
diff changeset
 10476
    ] ifFalse:[
7480
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10477
        colorValue := self valueFromColor:aColorOrIndex.
4997
15d53562d4e8 changed #fillArc:radius:from:angle:withColor:
sr
parents: 4996
diff changeset
 10478
    ].
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10479
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10480
    tempImage := tempForm asImage.
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10481
    0 to:hI-1 do:[:yRun|
7480
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10482
        0 to:wI-1 do:[:xRun|
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10483
            (tempImage pixelAtX:xRun y:yRun) == 1 ifTrue:[
7480
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10484
                self atImageAndMask:xRun@yRun putValue:colorValue.
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10485
            ].
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10486
        ].
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10487
    ].
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10488
    tempForm destroy.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10489
    tempImage close.
5352
82a42045e996 changed:8 methods
Claus Gittinger <cg@exept.de>
parents: 5341
diff changeset
 10490
    self release. "/ device-image is no longer valid
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10491
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10492
    "
7905
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10493
     |i|
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10494
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10495
     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
 10496
     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
 10497
     i fillArc:100@100 radius:80 from:90 angle:270 withColor:Color blue.
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10498
     i inspect.
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10499
    "
7905
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10500
8222
194b512106a2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8209
diff changeset
 10501
    "Modified: / 21-11-2017 / 16:28:15 / cg"
8231
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
 10502
    "Modified (comment): / 07-12-2017 / 15:01:55 / cg"
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10503
!
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10504
8164
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10505
fillEllipse:aRectangle with:aColorOrPixelValue
8231
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
 10506
    "fill a circle/ellipse with some pixel value or color.
8164
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10507
     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
 10508
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10509
    |pixelValue|
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10510
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10511
    (pixelValue := aColorOrPixelValue) isInteger ifFalse:[
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10512
        pixelValue := self valueFromColor:aColorOrPixelValue
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10513
    ].
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10514
    self fillEllipse:aRectangle withValue:pixelValue.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10515
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10516
    "Created: / 05-09-2017 / 14:51:23 / cg"
8231
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
 10517
    "Modified (comment): / 07-12-2017 / 15:00:23 / cg"
8164
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10518
!
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10519
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10520
fillEllipse:aRectangle withColor:aColor
8231
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
 10521
    "fill a circle/ellipse with some color.
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10522
     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
 10523
5138
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10524
    self fillEllipse:aRectangle withValue:(self valueFromColor:aColor)
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10525
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10526
    "
7905
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10527
     |i|
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10528
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10529
     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
 10530
     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
 10531
     i inspect.
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10532
    "
7905
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10533
8231
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
 10534
    "Modified (comment): / 07-12-2017 / 15:00:28 / cg"
5138
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10535
!
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10536
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10537
fillEllipse:aRectangle withValue:aPixelValueOrNil
8231
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
 10538
    "fill a circle/ellipse with some pixel value.
5138
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10539
     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
 10540
     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
 10541
     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
 10542
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10543
    |tempForm xI "{ Class: SmallInteger }"
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10544
     yI "{ Class: SmallInteger }"
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10545
     wI "{ Class: SmallInteger }"
8222
194b512106a2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8209
diff changeset
 10546
     hI "{ Class: SmallInteger }" tempImage display|
194b512106a2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8209
diff changeset
 10547
194b512106a2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8209
diff changeset
 10548
    (display := Screen current) isNil ifTrue:[
194b512106a2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8209
diff changeset
 10549
        self error:'No display - cannot fill ellipse'
194b512106a2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8209
diff changeset
 10550
    ].    
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10551
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10552
    wI := aRectangle width.
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10553
    hI := aRectangle height.
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10554
8222
194b512106a2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8209
diff changeset
 10555
    tempForm := Form width:wI height:hI depth:1 onDevice:display.
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 10556
    tempForm
7480
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10557
        paint:(Color colorId:1) on:(Color colorId:0);
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10558
        clear.
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10559
    tempForm fillArcIn:(0@0 extent:wI@hI) from:0 angle:360.
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10560
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10561
    xI := aRectangle left.
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10562
    yI := aRectangle top.
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10563
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10564
    tempImage := tempForm asImage.
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10565
    0 to:hI-1 do:[:yRun|
7480
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10566
        0 to:wI-1 do:[:xRun|
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10567
            (tempImage pixelAtX:xRun y:yRun) == 1 ifTrue:[
7480
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10568
                self atImageAndMask:(xI+xRun)@(yI+yRun) putValue:aPixelValueOrNil.
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10569
            ].
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10570
        ].
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10571
    ].
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10572
    tempForm destroy.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10573
    tempImage close.
5352
82a42045e996 changed:8 methods
Claus Gittinger <cg@exept.de>
parents: 5341
diff changeset
 10574
    self release. "/ device-image is no longer valid
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10575
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10576
    "
7905
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10577
     |i|
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10578
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10579
     i := Depth8Image extent:300@400 depth:8 palette:{ Color white . Color black  . Color red }.
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10580
     i fillEllipse:(0@0 corner:80@100) withColor:Color red.
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10581
     i inspect.
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10582
    "
7905
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10583
8222
194b512106a2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8209
diff changeset
 10584
    "Modified: / 21-11-2017 / 16:28:25 / cg"
8231
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
 10585
    "Modified (comment): / 07-12-2017 / 15:00:32 / cg"
8164
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10586
!
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10587
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10588
fillRectangle:aRectangle with:aColorOrPixelValue
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10589
    "fill a rectangular area with some or pixel value."
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10590
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10591
    |pixelValue|
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10592
8231
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
 10593
    (pixelValue := aColorOrPixelValue) isColor ifTrue:[
8164
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10594
        pixelValue := self valueFromColor:aColorOrPixelValue
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10595
    ].
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10596
    self fillRectangle:aRectangle withValue:pixelValue.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10597
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10598
    "Created: / 05-09-2017 / 14:50:36 / cg"
8231
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
 10599
    "Modified: / 07-12-2017 / 14:53:15 / cg"
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10600
!
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10601
4995
3a5cb7a57b0b changed #fillRectangle:aRectangle withColor:aColor
sr
parents: 4994
diff changeset
 10602
fillRectangle:aRectangle withColor:aColor
8164
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10603
    "fill a rectangular area with some color."
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10604
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 6037
diff changeset
 10605
    self
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10606
        fillRectangle:aRectangle
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10607
        withValue:(self valueFromColor:aColor)
8164
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10608
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10609
    "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
 10610
!
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10611
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10612
fillRectangle:aRectangle withValue:aPixelValueOrNil
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10613
    "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
 10614
     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
 10615
     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
 10616
     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
 10617
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 6037
diff changeset
 10618
    self
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10619
        fillRectangleX:aRectangle left y:aRectangle top
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10620
        width:aRectangle width height:aRectangle height
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10621
        withValue:aPixelValueOrNil
1972
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
 10622
!
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
 10623
8164
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10624
fillRectangleX:x y:y width:w height:h with:aColorOrPixelValue
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10625
    "fill a rectangular area with a aColor"
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10626
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10627
    |pixelValue|
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10628
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10629
    (pixelValue := aColorOrPixelValue) isInteger ifFalse:[
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10630
        pixelValue := self valueFromColor:aColorOrPixelValue
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10631
    ].
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10632
    self fillRectangleX:x y:y width:w height:h withValue:pixelValue
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10633
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10634
    "Modified: / 05-09-2017 / 14:57:19 / cg"
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10635
!
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10636
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10637
fillRectangleX:x y:y width:w height:h withColor:aColor
1972
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
 10638
    "fill a rectangular area with a aColor"
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
 10639
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
 10640
    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
 10641
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10642
    "Created: / 05-09-2017 / 14:57:05 / cg"
1630
e75c600b1c2a added #isMask query;
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
 10643
!
e75c600b1c2a added #isMask query;
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
 10644
5138
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10645
fillRectangleX:x y:y width:w height:h withValue:aPixelValueOrNil
1630
e75c600b1c2a added #isMask query;
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
 10646
    "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
 10647
     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
 10648
     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
 10649
     otherwise to 1. (used by the bitmap editor)"
1630
e75c600b1c2a added #isMask query;
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
 10650
e75c600b1c2a added #isMask query;
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
 10651
    |xI "{ Class: SmallInteger }"
861
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 10652
     yI "{ Class: SmallInteger }"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 10653
     wI "{ Class: SmallInteger }"
5138
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10654
     hI "{ Class: SmallInteger }"
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10655
     p|
861
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 10656
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 10657
    xI := x.
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 10658
    yI := y.
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 10659
    wI := w.
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 10660
    hI := h.
5138
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10661
    p := Point new.
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 10662
8194
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 10663
    mask isNil ifTrue:[
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 10664
        yI to:yI+hI-1 do:[:yRun |
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 10665
            xI to:xI+wI-1 do:[:xRun |
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 10666
                p x:xRun y:yRun.
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 10667
                self pixelAt:p put:(aPixelValueOrNil ? 0).
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 10668
            ]
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 10669
        ].
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 10670
    ] ifFalse:[
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 10671
        yI to:yI+hI-1 do:[:yRun |
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 10672
            xI to:xI+wI-1 do:[:xRun |
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 10673
                p x:xRun y:yRun.
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 10674
                self atImageAndMask:p putValue:aPixelValueOrNil.
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 10675
            ]
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 10676
        ].
5352
82a42045e996 changed:8 methods
Claus Gittinger <cg@exept.de>
parents: 5341
diff changeset
 10677
    ].
82a42045e996 changed:8 methods
Claus Gittinger <cg@exept.de>
parents: 5341
diff changeset
 10678
    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
 10679
1630
e75c600b1c2a added #isMask query;
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
 10680
    "Created: 22.4.1997 / 14:02:14 / cg"
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 10681
    "Modified: 24.4.1997 / 17:24:58 / cg"
1972
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
 10682
!
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
 10683
8164
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10684
floodFillAt: aPoint with:aColorOrPixelValue
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10685
    "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
 10686
     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
 10687
     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
 10688
     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
 10689
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10690
    |pixelValue|
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10691
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10692
    (pixelValue := aColorOrPixelValue) isInteger ifFalse:[
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10693
        pixelValue := self valueFromColor:aColorOrPixelValue
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10694
    ].
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10695
    ^ self floodFillAt:aPoint withValue:pixelValue
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10696
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10697
    "Created: / 05-09-2017 / 14:57:34 / cg"
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10698
!
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10699
1972
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
 10700
floodFillAt: aPoint withColor: aColor
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
 10701
    "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
 10702
     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
 10703
     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
 10704
     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
 10705
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10706
    ^ self floodFillAt:aPoint withValue:(self valueFromColor:aColor)
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10707
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10708
    "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
 10709
!
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10710
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10711
floodFillAt:aPoint withValue:aPixelValueOrNil
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10712
    "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
 10713
     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
 10714
     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
 10715
     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
 10716
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10717
    ^ self floodFillAt:aPoint withValue:aPixelValueOrNil maxDeviationInLight:0 maxDeviationInHue:0
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10718
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10719
    "Modified (format): / 30-01-2017 / 20:57:36 / stefan"
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10720
    "Modified (comment): / 17-02-2017 / 15:05:19 / cg"
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10721
!
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10722
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10723
floodFillAt:aPoint withValue:aPixelValueOrNil maxDeviationInLight:maxLightError maxDeviationInHue:maxHueError
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10724
    "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
 10725
     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
 10726
     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
 10727
     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
 10728
     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
 10729
     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
 10730
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10731
    |surroundingPixelsOfDo detectedPixel detectedMask processPixelToFill
3861
e9cbd4ec6020 flood fill with mask fixed
Claus Gittinger <cg@exept.de>
parents: 3860
diff changeset
 10732
     allDetectedPixelCoordinates enumerateDetectedPixelsAndDo
7911
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10733
     toDo w h drawAction 
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10734
     detectedColor detectedHue detectedLight minHueOK maxHueOK minLightOK maxLightOK
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10735
     almostSamePixel|
2205
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
 10736
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
 10737
    w := self width.
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
 10738
    h := self height.
1972
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
 10739
7911
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10740
    detectedPixel := self pixelAt: aPoint.
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10741
    mask isNil ifTrue:[
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10742
        detectedMask := 1
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10743
    ] ifFalse:[
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10744
        detectedMask := mask pixelAt: aPoint.
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10745
    ].
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10746
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 10747
    surroundingPixelsOfDo :=
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10748
        [:pX :pY :fn |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10749
            |nX nY|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10750
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10751
            nX := pX + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10752
            nY := pY + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10753
            (nY < h) ifTrue: [fn value:pX value:nY].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10754
            (pY > 0) ifTrue: [fn value:pX value:(pY - 1)].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10755
            (nX < w) ifTrue: [fn value:nX value:pY].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10756
            (pX > 0) ifTrue: [fn value:(pX - 1) value:pY].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10757
        ].
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 10758
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 10759
    enumerateDetectedPixelsAndDo :=
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10760
        [:detectedPixels :action |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10761
            |idx|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10762
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10763
            idx := 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10764
            0 to:h-1 do:[:y |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10765
                0 to:w-1 do:[:x |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10766
                    (detectedPixels at:idx) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10767
                        action value:x value:y
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10768
                    ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10769
                    idx := idx + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10770
                ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10771
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10772
        ].
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 6037
diff changeset
 10773
7911
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10774
    (maxLightError = 0 and:[maxHueError = 0]) ifTrue:[ 
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10775
        "/ compare pixels exactly - a faster algorithm
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10776
        processPixelToFill :=
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10777
            [:spX :spY |
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10778
                |samePixel idx|
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10779
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10780
                mask isNil ifTrue:[
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10781
                    samePixel := (self pixelAtX:spX y:spY) == detectedPixel
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10782
                ] ifFalse:[
7911
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10783
                    detectedMask == 0 ifTrue:[
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10784
                        samePixel := (mask pixelAtX:spX y:spY) == 0
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10785
                    ] ifFalse:[
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10786
                        samePixel := ((self pixelAtX:spX y:spY) == detectedPixel)
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10787
                                     and:[ (mask pixelAtX:spX y:spY) == detectedMask ]
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10788
                    ].
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10789
                ].
7911
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10790
                samePixel ifTrue: [
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10791
                    idx := 1 + spX + (spY * w).
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10792
                    (allDetectedPixelCoordinates at:idx) ifFalse:[
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10793
                        allDetectedPixelCoordinates at:idx put:true.
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10794
                        toDo add:spX @ spY.
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10795
                    ].
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10796
                ]
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10797
            ].
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10798
    ] ifFalse:[
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10799
        "/ 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
 10800
        "/ hue and light for every pixel...
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10801
        detectedColor := self colorFromValue:detectedPixel.
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10802
        detectedHue := detectedColor hue.
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10803
        detectedLight := detectedColor light.
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10804
        detectedHue notNil ifTrue:[
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10805
            minHueOK := detectedHue * (1.0 - maxHueError).
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10806
            maxHueOK := detectedHue * (1.0 + maxHueError).
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10807
        ].    
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10808
        minLightOK := detectedLight * (1.0 - maxLightError).   
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10809
        maxLightOK := detectedLight * (1.0 + maxLightError).
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10810
        
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10811
        almostSamePixel := 
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10812
            [:pixelValue |
8524
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
 10813
                |same pixelColor pixelHue pixelLight|
7911
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10814
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10815
                (same := (pixelColor == detectedPixel)) ifFalse:[
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10816
                    pixelColor := self colorFromValue:pixelValue.
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10817
                    pixelHue := pixelColor hue.
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10818
                    pixelLight := pixelColor light.
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10819
                    detectedHue isNil ifTrue:[
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10820
                        "/ detect gray - what should we do?
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10821
                        same := "(pixelHue isNil) and:["pixelLight between:minLightOK and:maxLightOK"]". 
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10822
                    ] ifFalse:[    
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10823
                        pixelHue isNil ifTrue:[
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10824
                            "/ pixel is gray - what should we do?
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10825
                            "/ same := false.
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10826
                            same := pixelLight between:minLightOK and:maxLightOK.
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10827
                        ] ifFalse:[    
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10828
                            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
 10829
                        ].
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10830
                    ].
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10831
                ].
7911
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10832
                same
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10833
            ].
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10834
            
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10835
        processPixelToFill :=
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10836
            [:spX :spY |
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10837
                |samePixel idx|
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10838
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10839
                mask isNil ifTrue:[
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10840
                    samePixel := almostSamePixel value:(self pixelAtX:spX y:spY)
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10841
                ] ifFalse:[
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10842
                    detectedMask == 0 ifTrue:[
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10843
                        samePixel := (mask pixelAtX:spX y:spY) == 0
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10844
                    ] ifFalse:[
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10845
                        samePixel := (almostSamePixel value:(self pixelAtX:spX y:spY))
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10846
                                     and:[ (mask pixelAtX:spX y:spY) == detectedMask ]
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10847
                    ].
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10848
                ].
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10849
                samePixel ifTrue: [
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10850
                    idx := 1 + spX + (spY * w).
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10851
                    (allDetectedPixelCoordinates at:idx) ifFalse:[
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10852
                        allDetectedPixelCoordinates at:idx put:true.
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10853
                        toDo add:spX @ spY.
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10854
                    ].
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10855
                ]
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10856
            ].
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10857
    ].
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10858
    
5138
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10859
"/    (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
 10860
"/        allDetectedPixelCoordinates := mask floodFillAt: aPoint withColor: Color white.
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10861
"/        enumerateDetectedPixelsAndDo
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10862
"/                value:allDetectedPixelCoordinates
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10863
"/                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
 10864
"/        ^ allDetectedPixelCoordinates
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10865
"/    ].
3759
5b083b0ad909 fixed stupid flood-fill algorithm
Claus Gittinger <cg@exept.de>
parents: 3729
diff changeset
 10866
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 10867
    allDetectedPixelCoordinates := BooleanArray new:(w * h).
3759
5b083b0ad909 fixed stupid flood-fill algorithm
Claus Gittinger <cg@exept.de>
parents: 3729
diff changeset
 10868
    toDo := OrderedCollection new:1000.
5138
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10869
    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
 10870
    toDo add:aPoint.
5b083b0ad909 fixed stupid flood-fill algorithm
Claus Gittinger <cg@exept.de>
parents: 3729
diff changeset
 10871
5b083b0ad909 fixed stupid flood-fill algorithm
Claus Gittinger <cg@exept.de>
parents: 3729
diff changeset
 10872
    [toDo notEmpty] whileTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10873
        |p|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10874
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10875
        p := toDo removeLast.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10876
        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
 10877
    ].
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10878
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10879
    aPixelValueOrNil isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10880
        drawAction := [:x :y |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10881
                               mask pixelAtX:x y:y put:0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10882
                               self pixelAtX:x y:y put:0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10883
                      ].
3805
d87c919fb2a7 oops - care for filling a mask
Claus Gittinger <cg@exept.de>
parents: 3763
diff changeset
 10884
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10885
        drawAction := [:x :y |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10886
                                mask notNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10887
                                    mask pixelAtX:x y:y put:1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10888
                                ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10889
                                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
 10890
    ].
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10891
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10892
    enumerateDetectedPixelsAndDo
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10893
        value:allDetectedPixelCoordinates
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10894
        value:drawAction.
5138
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10895
5352
82a42045e996 changed:8 methods
Claus Gittinger <cg@exept.de>
parents: 5341
diff changeset
 10896
    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
 10897
    ^ allDetectedPixelCoordinates
2205
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
 10898
7911
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10899
    "Created: / 17-02-2017 / 15:03:33 / cg"
8524
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
 10900
    "Modified (format): / 19-10-2018 / 16:24:27 / Stefan Vogel"
1972
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
 10901
!
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
 10902
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
 10903
rectangle: aRectangle withColor:aColor
5216
f7ec910cfce1 Mark obsolete methods
Stefan Vogel <sv@exept.de>
parents: 5200
diff changeset
 10904
    <resource: #obsolete>
1972
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
 10905
    "draw a rectangle with some pixel value.
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
 10906
    By using #atImageAndMask:put: it also works on images with mono masks."
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
 10907
2801
9f71b58c0726 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2772
diff changeset
 10908
    self obsoleteMethodWarning.
9f71b58c0726 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2772
diff changeset
 10909
    self drawRectangle: aRectangle withColor:aColor
1972
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
 10910
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
 10911
861
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 10912
! !
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 10913
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10914
!Image methodsFor:'enumerating'!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10915
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10916
atY:y from:x1 to:x2 do:aBlock
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10917
    "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
 10918
     The block is passed the color at each pixel.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10919
     The code here provides a generic and slow implementation, and
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10920
     should be redefined in concrete subclasses, to avoid some processing
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10921
     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
 10922
     and also the color allocation)."
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10923
3433
809312fa7e4f Use <resource:#obsolete>
Stefan Vogel <sv@exept.de>
parents: 3426
diff changeset
 10924
    <resource:#obsolete>
809312fa7e4f Use <resource:#obsolete>
Stefan Vogel <sv@exept.de>
parents: 3426
diff changeset
 10925
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 10926
    self obsoleteMethodWarning:'use #colorsAtY:from:to:do:'.
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 10927
    self colorsAtY:y from:x1 to:x2 do:aBlock
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 10928
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 10929
    "Modified: 7.6.1996 / 19:13:30 / cg"
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 10930
!
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 10931
5143
72147ced8f3c +colorsAtX:from:to:do:
Claus Gittinger <cg@exept.de>
parents: 5138
diff changeset
 10932
colorsAtX:x from:y1 to:y2 do:aBlock
72147ced8f3c +colorsAtX:from:to:do:
Claus Gittinger <cg@exept.de>
parents: 5138
diff changeset
 10933
    "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
 10934
     The block is passed the color at each pixel.
72147ced8f3c +colorsAtX:from:to:do:
Claus Gittinger <cg@exept.de>
parents: 5138
diff changeset
 10935
     The code here provides a generic and slow implementation, and
72147ced8f3c +colorsAtX:from:to:do:
Claus Gittinger <cg@exept.de>
parents: 5138
diff changeset
 10936
     should be redefined in concrete subclasses, to avoid some processing
72147ced8f3c +colorsAtX:from:to:do:
Claus Gittinger <cg@exept.de>
parents: 5138
diff changeset
 10937
     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
 10938
     and also the color allocation)."
72147ced8f3c +colorsAtX:from:to:do:
Claus Gittinger <cg@exept.de>
parents: 5138
diff changeset
 10939
72147ced8f3c +colorsAtX:from:to:do:
Claus Gittinger <cg@exept.de>
parents: 5138
diff changeset
 10940
    |yStart "{Class: SmallInteger }"
72147ced8f3c +colorsAtX:from:to:do:
Claus Gittinger <cg@exept.de>
parents: 5138
diff changeset
 10941
     yEnd   "{Class: SmallInteger }"|
72147ced8f3c +colorsAtX:from:to:do:
Claus Gittinger <cg@exept.de>
parents: 5138
diff changeset
 10942
72147ced8f3c +colorsAtX:from:to:do:
Claus Gittinger <cg@exept.de>
parents: 5138
diff changeset
 10943
    yStart := y1.
72147ced8f3c +colorsAtX:from:to:do:
Claus Gittinger <cg@exept.de>
parents: 5138
diff changeset
 10944
    yEnd := y2.
72147ced8f3c +colorsAtX:from:to:do:
Claus Gittinger <cg@exept.de>
parents: 5138
diff changeset
 10945
    yStart to:yEnd do:[:yRun |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10946
        aBlock value:yRun value:(self colorAtX:x y:yRun)
5143
72147ced8f3c +colorsAtX:from:to:do:
Claus Gittinger <cg@exept.de>
parents: 5138
diff changeset
 10947
    ]
72147ced8f3c +colorsAtX:from:to:do:
Claus Gittinger <cg@exept.de>
parents: 5138
diff changeset
 10948
!
72147ced8f3c +colorsAtX:from:to:do:
Claus Gittinger <cg@exept.de>
parents: 5138
diff changeset
 10949
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 10950
colorsAtY:y from:x1 to:x2 do:aBlock
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 10951
    "perform aBlock for each pixel from x1 to x2 in row y.
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 10952
     The block is passed the color at each pixel.
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 10953
     The code here provides a generic and slow implementation, and
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 10954
     should be redefined in concrete subclasses, to avoid some processing
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 10955
     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
 10956
     and also the color allocation)."
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 10957
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10958
    |xStart "{Class: SmallInteger }"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10959
     xEnd   "{Class: SmallInteger }"|
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10960
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10961
    xStart := x1.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10962
    xEnd := x2.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10963
    xStart to:xEnd do:[:xRun |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10964
        aBlock value:xRun value:(self colorAtX:xRun y:y)
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10965
    ]
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 10966
2380
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
 10967
    "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
 10968
    "Modified: / 30.9.1998 / 22:14:16 / 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
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10971
colorsFromX:xStart y:yStart toX:xEnd y:yEnd do:aBlock
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10972
    "perform aBlock for each color in a rectangular area of the image.
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 10973
     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
 10974
     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
 10975
     The code here provides a generic and slow implementation, and
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10976
     should be redefined in concrete subclasses, to avoid some processing
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10977
     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
 10978
     and especially, the color allocations)."
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10979
940
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 10980
    |yS "{Class: SmallInteger }"
7595
c77d718d3d94 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7573
diff changeset
 10981
     yE "{Class: SmallInteger }"|
942
5e45da3c19d3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 940
diff changeset
 10982
5e45da3c19d3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 940
diff changeset
 10983
    yS := yStart.
5e45da3c19d3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 940
diff changeset
 10984
    yE := yEnd.
940
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 10985
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 10986
    yS to:yE do:[:yRun |
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 10987
        self colorsAtY:yRun from:xStart to:xEnd do:[:xRun :color |
7595
c77d718d3d94 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7573
diff changeset
 10988
            aBlock value:xRun value:yRun value:color
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 10989
        ]
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10990
    ]
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 10991
940
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 10992
    "Modified: 11.7.1996 / 19:50:47 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10993
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10994
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10995
rgbValuesAtY:y from:x1 to:x2 do:aBlock
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10996
    "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
 10997
     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
 10998
     
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10999
     Notice the difference between rgbValue and pixelValue: rgbValues are always
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11000
     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
 11001
     indices into a colormap or be non-byte-sized rgb values.
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11002
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11003
     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
 11004
     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
 11005
     (see also Image>>atY:from:to:do:).
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11006
     The code here provides a generic and slow implementation, and
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11007
     should be redefined in concrete subclasses, to avoid some processing
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11008
     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
 11009
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11010
    |xStart "{Class: SmallInteger }"
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11011
     xEnd   "{Class: SmallInteger }"|
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11012
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11013
    xStart := x1.
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11014
    xEnd := x2.
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11015
    xStart to:xEnd do:[:xRun |
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11016
        aBlock value:xRun value:(self rgbValueAtX:xRun y:y)
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11017
    ]
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11018
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11019
    "Created: / 29-08-2017 / 14:40:48 / cg"
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11020
!
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11021
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11022
rgbValuesFromX:xStart y:yStart toX:xEnd y:yEnd do:aBlock
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11023
    "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
 11024
     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
 11025
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11026
     Notice the difference between rgbValue and pixelValue: rgbValues are always
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11027
     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
 11028
     indices into a colormap or be non-byte-sized rgb values.
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11029
     
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11030
     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
 11031
     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
 11032
     The code here provides a generic and slow implementation, and
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11033
     should be redefined in concrete subclasses, to avoid some processing
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11034
     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
 11035
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11036
    |yS "{Class: SmallInteger }"
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11037
     yE "{Class: SmallInteger }"|
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11038
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11039
    yS := yStart.
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11040
    yE := yEnd.
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11041
    yS to:yE do:[:yRun |
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11042
        self rgbValuesAtY:yRun from:xStart to:xEnd do:[:xRun :rgb |
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11043
            aBlock value:xRun value:yRun value:rgb
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11044
        ]
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11045
    ]
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11046
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11047
    "Created: / 29-08-2017 / 14:39:34 / cg"
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11048
!
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11049
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11050
valueAtY:y from:x1 to:x2 do:aBlock
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11051
    "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
 11052
     Obsolete - remains for backward compatibility."
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 11053
3433
809312fa7e4f Use <resource:#obsolete>
Stefan Vogel <sv@exept.de>
parents: 3426
diff changeset
 11054
    <resource:#obsolete>
809312fa7e4f Use <resource:#obsolete>
Stefan Vogel <sv@exept.de>
parents: 3426
diff changeset
 11055
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 11056
    self obsoleteMethodWarning:'use #valuesAtY:from:to:do:'.
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 11057
    self valuesAtY:y from:x1 to:x2 do:aBlock
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 11058
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 11059
    "Modified: 7.6.1996 / 19:11:06 / cg"
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 11060
!
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 11061
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 11062
valuesAtY:y from:x1 to:x2 do:aBlock
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11063
    "WARNING: this enumerates pixel values which need photometric interpretation
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11064
     Do not confuse with #rgbValuesAtY:from:to:do:
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11065
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11066
     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
 11067
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11068
     Notice the difference between rgbValue and pixelValue: rgbValues are always
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11069
     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
 11070
     indices into a colormap or be non-byte-sized rgb values.
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11071
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 11072
     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
 11073
     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
 11074
     (see also Image>>atY:from:to:do:).
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11075
     The code here provides a generic and slow implementation, and
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11076
     should be redefined in concrete subclasses, to avoid some processing
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11077
     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
 11078
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11079
    |xStart "{Class: SmallInteger }"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11080
     xEnd   "{Class: SmallInteger }"|
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11081
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11082
    xStart := x1.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11083
    xEnd := x2.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11084
    xStart to:xEnd do:[:xRun |
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 11085
        aBlock value:xRun value:(self pixelAtX:xRun y:y)
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11086
    ]
692
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 11087
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11088
    "Created: / 07-06-1996 / 19:09:51 / cg"
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11089
    "Modified: / 24-04-1997 / 16:55:38 / cg"
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11090
    "Modified (comment): / 29-08-2017 / 14:44:50 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11091
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11092
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11093
valuesFromX:xStart y:yStart toX:xEnd y:yEnd do:aBlock
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11094
    "WARNING: this enumerates pixel values which need photometric interpretation
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11095
     Do not confuse with #rgbValuesAtY:from:to:do:
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11096
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11097
     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
 11098
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11099
     Notice the difference between rgbValue and pixelValue: rgbValues are always
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11100
     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
 11101
     indices into a colormap or be non-byte-sized rgb values.
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11102
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 11103
     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
 11104
     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
 11105
     The code here provides a generic and slow implementation, and
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11106
     should be redefined in concrete subclasses, to avoid some processing
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11107
     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
 11108
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 11109
    |yS "{Class: SmallInteger }"
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 11110
     yE "{Class: SmallInteger }"|
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 11111
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 11112
    yS := yStart.
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 11113
    yE := yEnd.
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 11114
    yS to:yE do:[:yRun |
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 11115
        self valuesAtY:yRun from:xStart to:xEnd do:[:xRun :pixel |
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 11116
            aBlock value:xRun value:yRun value:pixel
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 11117
        ]
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11118
    ]
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 11119
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 11120
    "Modified: / 07-06-1996 / 19:09:29 / cg"
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 11121
    "Modified: / 31-01-2017 / 14:46:26 / stefan"
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11122
    "Modified (comment): / 29-08-2017 / 14:45:06 / cg"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
 11123
! !
48194c26a46c Initial revision
claus
parents:
diff changeset
 11124
3613
75f91a51b919 Allow #registerForFinalization for classes defining their own Lobby.
Stefan Vogel <sv@exept.de>
parents: 3611
diff changeset
 11125
!Image methodsFor:'finalization'!
75f91a51b919 Allow #registerForFinalization for classes defining their own Lobby.
Stefan Vogel <sv@exept.de>
parents: 3611
diff changeset
 11126
75f91a51b919 Allow #registerForFinalization for classes defining their own Lobby.
Stefan Vogel <sv@exept.de>
parents: 3611
diff changeset
 11127
finalizationLobby
75f91a51b919 Allow #registerForFinalization for classes defining their own Lobby.
Stefan Vogel <sv@exept.de>
parents: 3611
diff changeset
 11128
    "answer the registry used for finalization.
75f91a51b919 Allow #registerForFinalization for classes defining their own Lobby.
Stefan Vogel <sv@exept.de>
parents: 3611
diff changeset
 11129
     Images have their own Registry"
75f91a51b919 Allow #registerForFinalization for classes defining their own Lobby.
Stefan Vogel <sv@exept.de>
parents: 3611
diff changeset
 11130
75f91a51b919 Allow #registerForFinalization for classes defining their own Lobby.
Stefan Vogel <sv@exept.de>
parents: 3611
diff changeset
 11131
    ^ Lobby
75f91a51b919 Allow #registerForFinalization for classes defining their own Lobby.
Stefan Vogel <sv@exept.de>
parents: 3611
diff changeset
 11132
!
75f91a51b919 Allow #registerForFinalization for classes defining their own Lobby.
Stefan Vogel <sv@exept.de>
parents: 3611
diff changeset
 11133
75f91a51b919 Allow #registerForFinalization for classes defining their own Lobby.
Stefan Vogel <sv@exept.de>
parents: 3611
diff changeset
 11134
finalize
7483
0690072b1c56 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 7482
diff changeset
 11135
    "some Image has been collected - nothing to do.
0690072b1c56 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 7482
diff changeset
 11136
0690072b1c56 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 7482
diff changeset
 11137
     The only reason we register Images is, that we can release
0690072b1c56 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 7482
diff changeset
 11138
     their device resources when a GraphicsDevice is closed.
0690072b1c56 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 7482
diff changeset
 11139
0690072b1c56 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 7482
diff changeset
 11140
     (#releaseResourcesOnDevice: at class side)."
3613
75f91a51b919 Allow #registerForFinalization for classes defining their own Lobby.
Stefan Vogel <sv@exept.de>
parents: 3611
diff changeset
 11141
! !
75f91a51b919 Allow #registerForFinalization for classes defining their own Lobby.
Stefan Vogel <sv@exept.de>
parents: 3611
diff changeset
 11142
0
48194c26a46c Initial revision
claus
parents:
diff changeset
 11143
!Image methodsFor:'image manipulations'!
48194c26a46c Initial revision
claus
parents:
diff changeset
 11144
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 11145
applyPixelValuesTo:pixelFunctionBlock in:aRectangle into:newImage
1570
1aeaa96fa6fb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1510
diff changeset
 11146
    "helper for withPixelFunctionAppliedToValues:
1aeaa96fa6fb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1510
diff changeset
 11147
     enumerate pixelValues and evaluate the block for each.
3911
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 11148
     Could be redefined by subclasses for better performance."
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 11149
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 11150
    |w   "{Class: SmallInteger }"
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 11151
     h   "{Class: SmallInteger }"
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 11152
     x0  "{Class: SmallInteger }"
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 11153
     y0  "{Class: SmallInteger }"
3911
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 11154
     y   "{Class: SmallInteger }"
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 11155
     newPixel newPixelRow pixelRow|
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 11156
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 11157
    x0 := aRectangle left.
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 11158
    y0 := aRectangle top.
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 11159
    w := aRectangle width.
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 11160
    h := aRectangle height.
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 11161
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 11162
    newPixelRow := Array new:w.
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 11163
    pixelRow := self pixelArraySpecies new:width.
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 11164
3911
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 11165
    (x0 = 0 and:[w = self width]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11166
        "/ slightly faster
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11167
        y := y0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11168
        h timesRepeat:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11169
            self rowAt:y into:pixelRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11170
            1 to:w do:[:runCol |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11171
                newPixel := pixelFunctionBlock
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11172
                                value:self
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11173
                                value:(pixelRow at:runCol)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11174
                                value:(runCol-1)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11175
                                value:y.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11176
                newPixelRow at:runCol put:newPixel.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11177
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11178
            newImage rowAt:y putAll:newPixelRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11179
            y := y + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11180
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11181
        ^ self.
3911
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 11182
    ].
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 11183
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 11184
    y := y0.
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 11185
    h timesRepeat:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11186
        self rowAt:y into:pixelRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11187
        1 to:w do:[:runCol |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11188
            newPixel := pixelFunctionBlock
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11189
                            value:self
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11190
                            value:(pixelRow at:runCol+x0)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11191
                            value:(runCol+x0-1)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11192
                            value:y.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11193
            newPixelRow at:runCol put:newPixel.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11194
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11195
        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
 11196
        newImage rowAt:y putAll:pixelRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11197
        y := y + 1.
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 11198
    ].
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 11199
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 11200
    "Modified: 24.4.1997 / 16:18:31 / cg"
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 11201
!
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 11202
3911
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 11203
applyPixelValuesTo:pixelFunctionBlock into:newImage
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 11204
    "helper for withPixelFunctionAppliedToValues:
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 11205
     enumerate pixelValues and evaluate the block for each."
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 11206
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 11207
    ^ self
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11208
        applyPixelValuesTo:pixelFunctionBlock
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11209
        in:(0@0 corner:width@height)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11210
        into:newImage
3911
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 11211
!
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 11212
3256
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 11213
blendWith:aColor
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 11214
    "return a new image which is blended with some color.
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 11215
     The receiver must be a palette image (currently).
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 11216
     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
 11217
     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
 11218
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 11219
     ^ self
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11220
        copyWithColorMapProcessing:[:clr | clr blendWith:aColor]
3256
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 11221
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 11222
    "
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 11223
     (Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') inspect
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 11224
     ((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
 11225
     ((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
 11226
     ((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
 11227
    "
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 11228
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 11229
    "Modified: 24.4.1997 / 18:31:23 / cg"
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 11230
!
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 11231
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11232
colorMapProcessing:aBlock
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11233
    "a helper for all kinds of colormap manipulations.
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 11234
     The argument, aBlock is called for every colormap entry,
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
 11235
     and the returned value will replace the original entry in the map.
8282
e67d591cbebb #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8279
diff changeset
 11236
     For non-palette images, aBlock is called for every pixel value
e67d591cbebb #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8279
diff changeset
 11237
     (instead of colormap values), and the returned color is stored back
e67d591cbebb #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8279
diff changeset
 11238
     into the image).
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
 11239
     See examples in Image>>copyWithColorMapProcessing:"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11240
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11241
    |nColors "{ Class: SmallInteger }"|
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11242
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11243
    colorMap isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11244
        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
 11245
            self colorAtX:x y:y put:(aBlock value:clr)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11246
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11247
        ^ self
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11248
    ].
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11249
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11250
    nColors := colorMap size.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11251
    1 to:nColors do:[:index |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11252
        |clr|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11253
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11254
        clr := colorMap at:index.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11255
        clr notNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11256
            colorMap at:index put:(aBlock value:clr)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11257
        ]
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11258
    ]
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
 11259
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
 11260
    "Modified: 23.4.1996 / 11:13:55 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11261
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11262
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
 11263
copyWithColorMapProcessing:aBlock
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11264
    "a helper to create & return new images based on the receiver with
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
 11265
     some colorMap processing. The receiver is copied, and the copied images
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
 11266
     colormap is modified by replacing entries with the result of the processing block,
8282
e67d591cbebb #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8279
diff changeset
 11267
     which is called with the original color values. 
e67d591cbebb #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8279
diff changeset
 11268
     The block is supposed to return a color.
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11269
     CAVEAT: this only works with palette images (i.e. not for rgb or greyScale)"
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11270
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11271
    |newImage|
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11272
4414
2c0f2ca53156 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4390
diff changeset
 11273
    self colorMap isNil ifTrue:[
8282
e67d591cbebb #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8279
diff changeset
 11274
        ^ self withPixelFunctionApplied:[:orig :clr :x :y | aBlock value:clr]
e67d591cbebb #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8279
diff changeset
 11275
        "/ self error:'no colormap in image'.
e67d591cbebb #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8279
diff changeset
 11276
        "/ ^ nil
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11277
    ].
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11278
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11279
    "
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11280
     the code below manipulates the colormap.
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11281
     For non-palette images, special code is required
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11282
    "
4414
2c0f2ca53156 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4390
diff changeset
 11283
    newImage := self copy.
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
 11284
    newImage colorMapProcessing:aBlock.
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11285
    ^ newImage
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11286
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11287
    "
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11288
     leave red component only:
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11289
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 11290
     (Image fromFile:'goodies/bitmaps/gifImages/claus.gif')
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11291
        copyWithColorMapProcessing:[:clr | Color red:(clr red) green:0 blue:0]
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11292
    "
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
 11293
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11294
    "
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11295
     make it reddish:
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11296
6653
aa954269f3ce class: Image
Claus Gittinger <cg@exept.de>
parents: 6648
diff changeset
 11297
     |img imgYellow imgGreen imgBlue|
aa954269f3ce class: Image
Claus Gittinger <cg@exept.de>
parents: 6648
diff changeset
 11298
     img := (Image fromFile:'../../../expeccoNET/server/data/images/styles/eXept/defects.gif').
aa954269f3ce class: Image
Claus Gittinger <cg@exept.de>
parents: 6648
diff changeset
 11299
     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
 11300
     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
 11301
     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
 11302
     imgBlue
aa954269f3ce class: Image
Claus Gittinger <cg@exept.de>
parents: 6648
diff changeset
 11303
    "
aa954269f3ce class: Image
Claus Gittinger <cg@exept.de>
parents: 6648
diff changeset
 11304
aa954269f3ce class: Image
Claus Gittinger <cg@exept.de>
parents: 6648
diff changeset
 11305
    "
aa954269f3ce class: Image
Claus Gittinger <cg@exept.de>
parents: 6648
diff changeset
 11306
     make it reddish:
aa954269f3ce class: Image
Claus Gittinger <cg@exept.de>
parents: 6648
diff changeset
 11307
aa954269f3ce class: Image
Claus Gittinger <cg@exept.de>
parents: 6648
diff changeset
 11308
     (Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif')
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11309
        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
 11310
    "
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
 11311
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11312
    "
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11313
     invert:
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11314
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 11315
     (Image fromFile:'bitmaps/gifImages/claus.gif')
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11316
        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
 11317
    "
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
 11318
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11319
    "
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11320
     lighter:
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11321
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 11322
     (Image fromFile:'bitmaps/gifImages/claus.gif')
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11323
        copyWithColorMapProcessing:[:clr | |r g b|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11324
                                                r := clr red.  g := clr green.  b := clr blue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11325
                                                Color red:(r + (100-r//2))
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11326
                                                      green:(g + (100-g//2))
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11327
                                                      blue:(b + (100-b//2))]
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11328
    "
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
 11329
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11330
    "
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11331
     darker:
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11332
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 11333
     (Image fromFile:'bitmaps/gifImages/claus.gif')
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11334
        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
 11335
    "
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11336
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11337
    "Modified: 24.4.1997 / 18:28:05 / cg"
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11338
!
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11339
3457
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 11340
createMask
7995
2538002b8ba4 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7990
diff changeset
 11341
    "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
 11342
    
3457
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 11343
    |maskArray bytesPerMaskRow|
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 11344
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 11345
    bytesPerMaskRow := (width+7) // 8.
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 11346
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 11347
    maskArray := ByteArray new:(bytesPerMaskRow * height) withAll:2r11111111.
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 11348
    mask := ImageMask width:width height:height fromArray:maskArray.
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 11349
    ^ mask
7907
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11350
7995
2538002b8ba4 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7990
diff changeset
 11351
    "Modified (comment): / 06-04-2017 / 13:05:42 / cg"
7907
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11352
!
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11353
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11354
createMaskForPixelValue:pixelValue
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11355
    "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
 11356
     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
 11357
     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
 11358
     instead of a separate mask plane.
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11359
     
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11360
     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
 11361
     redefine in concrete image classes (especially Depth8Image)"
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11362
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11363
    |mr|
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11364
    
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11365
    mask isNil ifTrue:[
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11366
        mask := self createMask.
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11367
    ].
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11368
    0 to:height-1 do:[:y |
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11369
        mr := mask rowAt:y.
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11370
        0 to:width-1 do:[:x |
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11371
            (self pixelAtX:x y:y) == pixelValue ifTrue:[
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11372
                mr at:x+1 put:0
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11373
            ].
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11374
        ].
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11375
        mask rowAt:y putAll:mr
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11376
    ].
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11377
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11378
    "Created: / 17-02-2017 / 11:19:09 / cg"
3457
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 11379
!
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 11380
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11381
darkened
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11382
    "return a new image which is slightly darker than the receiver.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11383
     The receiver must be a palette image (currently).
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11384
     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
 11385
     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
 11386
5655
37bd5c7eb765 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 5643
diff changeset
 11387
     ^ self copyWithColorMapProcessing:[:clr | clr darkened]
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11388
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11389
    "
3256
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 11390
     (Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') inspect
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 11391
     (Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') darkened inspect
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11392
    "
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11393
5655
37bd5c7eb765 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 5643
diff changeset
 11394
    "Modified: / 24-11-2010 / 11:06:58 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11395
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11396
7534
0b7e23635791 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7529
diff changeset
 11397
easyRotateBitsInto:destinationImage angle:degrees
7523
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11398
    "helper for rotation - does the actual pixel shuffling.
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11399
     by degrees clockwise. Here, only 90, 180 and 270 degrees
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11400
     are implemented. Hard angles are done in #hardRotate:.
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11401
     The code here is depth-independent (but not too fast);
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11402
     can be redefined in subclasses for more performance"
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11403
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11404
    |w  "{Class: SmallInteger }"
7529
5f77a718b7bd #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7523
diff changeset
 11405
     h  "{Class: SmallInteger }" 
5f77a718b7bd #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7523
diff changeset
 11406
     pixelMover|
7523
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11407
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11408
    w := width - 1.
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11409
    h := height - 1.
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11410
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11411
    degrees = 90 ifTrue:[
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11412
        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
 11413
    ] ifFalse:[
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11414
        degrees = 180 ifTrue:[
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11415
            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
 11416
        ] ifFalse:[
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11417
            degrees = 270 ifTrue:[
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11418
                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
 11419
            ] ifFalse:[
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11420
                ^ self
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11421
            ].
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11422
        ].
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11423
    ].    
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11424
    self valuesFromX:0 y:0 toX:w y:h do:pixelMover.
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11425
    ^ self.
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11426
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11427
    "
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11428
     |i|
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11429
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11430
     i := Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif'.
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11431
     i inspect.
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11432
     (i rotated:45) inspect.
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11433
     (i rotated:90) inspect.
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11434
     (i rotated:180) inspect.
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11435
     (i rotated:270) inspect.
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11436
    "
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11437
    "
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11438
     |i|
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11439
     i := Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif'.
7529
5f77a718b7bd #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7523
diff changeset
 11440
     i := Depth24Image fromImage:i.
7523
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11441
     Time millisecondsToRun:[ 100 timesRepeat:[ i rotated:90 ] ]
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11442
    "
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11443
    "
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11444
     |i|
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11445
     i := Image fromScreen.
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11446
     Time millisecondsToRun:[ 20 timesRepeat:[ i rotated:90 ] ]
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11447
    "
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11448
    
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11449
    "Created: 23.4.1997 / 14:36:45 / cg"
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11450
    "Modified: 24.4.1997 / 17:26:26 / cg"
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11451
!
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11452
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11453
flipHorizontal
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 11454
    "destructively inplace horizontal flip"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 11455
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 11456
    |h  "{Class: SmallInteger }"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 11457
     pixelArray|
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 11458
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11459
    h := height - 1.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11460
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 11461
    pixelArray := self pixelArraySpecies new:width.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 11462
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11463
    0 to:h do:[:row |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11464
        self rowAt:row into:pixelArray.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11465
        pixelArray reverse.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11466
        self rowAt:row putAll:pixelArray.
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 11467
    ].
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 11468
1386
51967fde82b7 also flip mask if present
Claus Gittinger <cg@exept.de>
parents: 1385
diff changeset
 11469
    mask notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11470
        mask flipHorizontal
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 11471
    ].
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 11472
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 11473
    "/ flush device info
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
 11474
    self release
1386
51967fde82b7 also flip mask if present
Claus Gittinger <cg@exept.de>
parents: 1385
diff changeset
 11475
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11476
    "
8303
a8f01dbe8e70 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8301
diff changeset
 11477
     (Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif') flipHorizontal inspect
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11478
    "
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11479
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11480
    "Modified: 24.4.1997 / 18:29:13 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11481
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11482
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11483
flipVertical
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11484
    "inplace vertical flip"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11485
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11486
    |h           "{Class: SmallInteger }"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11487
     bytesPerRow "{Class: SmallInteger }"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 11488
     buffer
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11489
     indexLow    "{Class: SmallInteger }"
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
 11490
     indexHi     "{Class: SmallInteger }"
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
 11491
     bytes|
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
 11492
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
 11493
    bytes := self bits.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11494
    bytesPerRow := self bytesPerRow.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11495
    buffer := ByteArray new:bytesPerRow.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11496
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11497
    h := height - 1.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11498
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11499
    indexLow := 1.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11500
    indexHi := bytesPerRow * h + 1.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11501
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11502
    0 to:(h // 2) do:[:row |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11503
        buffer replaceFrom:1 to:bytesPerRow with:bytes startingAt:indexLow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11504
        bytes replaceFrom:indexLow to:(indexLow + bytesPerRow - 1) with:bytes startingAt:indexHi.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11505
        bytes replaceFrom:indexHi to:(indexHi + bytesPerRow - 1) with:buffer startingAt:1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11506
        indexLow := indexLow + bytesPerRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11507
        indexHi := indexHi - bytesPerRow.
1386
51967fde82b7 also flip mask if present
Claus Gittinger <cg@exept.de>
parents: 1385
diff changeset
 11508
    ].
51967fde82b7 also flip mask if present
Claus Gittinger <cg@exept.de>
parents: 1385
diff changeset
 11509
    mask notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11510
        mask flipVertical
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11511
    ].
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11512
    "flush device info"
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
 11513
    self release
1386
51967fde82b7 also flip mask if present
Claus Gittinger <cg@exept.de>
parents: 1385
diff changeset
 11514
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11515
    "
3476
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 11516
     (Image fromFile:'goodies/bitmaps/gifImages/garfield.gif') flipVertical inspect
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11517
    "
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11518
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11519
    "Modified: 24.4.1997 / 18:29:36 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11520
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11521
1739
34165a3bb10b antiAliasing
Claus Gittinger <cg@exept.de>
parents: 1737
diff changeset
 11522
hardAntiAliasedMagnifiedBy:scalePoint
34165a3bb10b antiAliasing
Claus Gittinger <cg@exept.de>
parents: 1737
diff changeset
 11523
    "return a new image magnified and antiAliased by scalePoint, aPoint.
34165a3bb10b antiAliasing
Claus Gittinger <cg@exept.de>
parents: 1737
diff changeset
 11524
     This converts into a depth24Image before doing the antiAlias-magnify.
34165a3bb10b antiAliasing
Claus Gittinger <cg@exept.de>
parents: 1737
diff changeset
 11525
     It is definitely slower than the non antiAliasing/integral magnification methods."
34165a3bb10b antiAliasing
Claus Gittinger <cg@exept.de>
parents: 1737
diff changeset
 11526
8132
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11527
    ^ (Depth24Image fromImage:self) hardAntiAliasedMagnifiedBy:scalePoint
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11528
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11529
    "
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11530
     |i i1 i2|
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11531
     
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11532
     i := Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif'.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11533
     Transcript showCR:(
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11534
        Time millisecondsToRun:[
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11535
            i1 := i hardMagnifiedBy:3
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11536
        ]
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11537
     ).    
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11538
     i1 inspect.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11539
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11540
     Transcript showCR:(
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11541
        Time millisecondsToRun:[
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11542
            i2 := i hardAntiAliasedMagnifiedBy:3
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11543
        ]
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11544
     ).    
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11545
     i2 inspect.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11546
    "
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11547
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11548
    "Modified: / 02-06-1997 / 13:19:57 / cg"
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11549
    "Created: / 02-06-1997 / 15:53:34 / cg"
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11550
    "Modified (comment): / 30-08-2017 / 13:55:10 / cg"
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11551
!
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11552
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11553
hardMagnifiedBy:scaleArg
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11554
    "return a new image magnified by scalePoint, aPoint.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11555
     This is the general magnification method, handling non-integral values.
8132
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11556
     It is slower than the integral magnification method.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11557
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11558
     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
 11559
     at the corresponding original pixel's point, without taking neighbors into
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11560
     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
 11561
     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
 11562
     sharp lines."
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11563
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11564
    |scalePoint mX mY
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11565
     newWidth  "{ Class: SmallInteger }"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11566
     newHeight "{ Class: SmallInteger }"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11567
     w         "{ Class: SmallInteger }"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11568
     h         "{ Class: SmallInteger }"
906
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
 11569
     newImage newBits bitsPerPixel newBytesPerRow newMask
8132
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11570
     value srcRow pixelArray|
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11571
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11572
    scalePoint := scaleArg asPoint. 
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11573
    mX := scalePoint x.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11574
    mY := scalePoint y.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11575
    ((mX < 0) or:[mY < 0]) ifTrue:[^ nil].
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11576
    ((mX = 1) and:[mY = 1]) ifTrue:[^ self].
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11577
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11578
    newWidth := (width * mX) truncated.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11579
    newHeight := (height * mY) truncated.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11580
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11581
    bitsPerPixel := self depth.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11582
    newBytesPerRow := ((newWidth * bitsPerPixel) + 7) // 8.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11583
    newBits := ByteArray uninitializedNew:(newBytesPerRow * newHeight).
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11584
906
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
 11585
    mask notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11586
        newMask := (mask magnifiedBy:scalePoint)
906
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
 11587
    ].
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
 11588
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11589
    newImage := self species new.
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 11590
    newImage
8132
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11591
        width:newWidth height:newHeight photometric:photometric
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11592
        samplesPerPixel:samplesPerPixel bitsPerSample:bitsPerSample
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11593
        colorMap:colorMap copy
8132
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11594
        bits:newBits mask:newMask.
905
228d503775d9 everywhere you go: always magnify the mask with you ...
Claus Gittinger <cg@exept.de>
parents: 904
diff changeset
 11595
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11596
    "walk over destination image fetching pixels from source image"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11597
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11598
    w := newWidth - 1.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11599
    h := newHeight - 1.
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 11600
    pixelArray := newImage pixelArraySpecies new:newWidth.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11601
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11602
    0 to:h do:[:row |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11603
        srcRow := (row // mY).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11604
        0 to:w do:[:col |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11605
            value := self pixelAtX:(col // mX) y:srcRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11606
            pixelArray at:(col+1) put:value.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11607
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11608
        newImage rowAt:row putAll:pixelArray.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11609
    ].
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11610
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11611
    ^ newImage
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11612
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 11613
    "
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 11614
     |i|
8132
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11615
     i := Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif'.
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 11616
     Time millisecondsToRun:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11617
         i := i hardMagnifiedBy:0.5@0.5
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11618
     ].
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11619
     i
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11620
    "
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11621
8132
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11622
    "Modified (comment): / 30-08-2017 / 13:31:20 / cg"
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11623
!
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11624
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11625
hardMagnifiedBy:scaleArg smooth:smoothBoolean
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11626
    "return a new image magnified by scalePoint, aPoint.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11627
     This is the general magnification method, handling non-integral values.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11628
     It is slower than the integral magnification method.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11629
     
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11630
     If smoothBoolean is true, an improved algorithm is used, 
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11631
     which averages the pixels if shrinking or interpolates if expanding 
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11632
     (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
 11633
     images when the original contains sharp lines.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11634
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11635
     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
 11636
     but produces ugly magnifications (and especially: ugly shrunk versions)
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11637
     "
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11638
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11639
    smoothBoolean ifFalse:[
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11640
        ^ self hardMagnifiedBy:scaleArg
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11641
    ].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11642
    ^ self hardSmoothingMagnifiedBy:scaleArg
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11643
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11644
    "Created: / 30-08-2017 / 13:29:22 / cg"
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11645
    "Modified: / 30-08-2017 / 15:04:48 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11646
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11647
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11648
hardRotated:degrees
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11649
    "return a new image from the old one, by rotating the image
4953
b5017336aa26 comment
Claus Gittinger <cg@exept.de>
parents: 4952
diff changeset
 11650
     degrees clockwise (around its center).
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11651
     Warning: the returned image will be larger than the original image."
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11652
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11653
    |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
 11654
     newImage
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11655
     newWidth  "{ Class: SmallInteger }"
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11656
     newHeight "{ Class: SmallInteger }"
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11657
     myDepth   "{ Class: SmallInteger }"
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11658
     newBytesPerRow newBits
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11659
     blackPixel halfW halfH radians t bad
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11660
     bytesPerRow maskBits
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11661
     pX pY srcX srcY pix nX nY newMask|
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 11662
4108
117f170e2122 Use #theta inseat of obsolete #angle.
Stefan Vogel <sv@exept.de>
parents: 4033
diff changeset
 11663
    radians := degrees degreesToRadians.
117f170e2122 Use #theta inseat of obsolete #angle.
Stefan Vogel <sv@exept.de>
parents: 4033
diff changeset
 11664
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11665
    "/ placing the image at the origin,
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11666
    "/ compute the diagonal and angle.
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11667
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11668
    p := ((width - 1) / 2) @ ((height - 1) / 2).
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11669
    r := p r.
4108
117f170e2122 Use #theta inseat of obsolete #angle.
Stefan Vogel <sv@exept.de>
parents: 4033
diff changeset
 11670
    a := p theta.
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11671
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 11672
    "/ add the rotation
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11673
    "/ (sigh - subtract, we defined things clockwise ...
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11674
    "/  ... in contrast to point which thinks counter-clockwise)
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11675
4108
117f170e2122 Use #theta inseat of obsolete #angle.
Stefan Vogel <sv@exept.de>
parents: 4033
diff changeset
 11676
    aN := a - radians.
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11677
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11678
    "/ compute new corner points
4108
117f170e2122 Use #theta inseat of obsolete #angle.
Stefan Vogel <sv@exept.de>
parents: 4033
diff changeset
 11679
    p1 := Point r:r theta:aN.         "/ rotated topRight
117f170e2122 Use #theta inseat of obsolete #angle.
Stefan Vogel <sv@exept.de>
parents: 4033
diff changeset
 11680
    p2 := Point r:r theta:aN-a-a.     "/ rotated bottomRight
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11681
    p3 := p1 negated.                 "/ rotated bottomLeft
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11682
    p4 := p2 negated.                 "/ rotated topLeft
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11683
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11684
    "/ compute the boundary of the new image
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11685
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11686
    maxX := minX := p1 x.
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11687
    (t := p2 x) > maxX ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11688
        maxX := t
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11689
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11690
        t < minX ifTrue:[minX := t].
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11691
    ].
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11692
    (t := p3 x) > maxX ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11693
        maxX := t
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11694
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11695
        t < minX ifTrue:[minX := t].
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11696
    ].
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11697
    (t := p4 x) > maxX ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11698
        maxX := t
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11699
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11700
        t < minX ifTrue:[minX := t].
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11701
    ].
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11702
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11703
    maxY := minY := p1 y.
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11704
    (t := p2 y) > maxY ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11705
        maxY := t
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11706
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11707
        t < minY ifTrue:[minY := t].
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11708
    ].
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11709
    (t := p3 y) > maxY ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11710
        maxY := t
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11711
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11712
        t < minY ifTrue:[minY := t].
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11713
    ].
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11714
    (t := p4 y) > maxY ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11715
        maxY := t
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11716
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11717
        t < minY ifTrue:[minY := t].
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11718
    ].
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11719
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11720
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11721
    newWidth := (maxX - minX) rounded + 1.
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11722
    newHeight := (maxY - minY) rounded + 1.
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11723
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11724
    myDepth := self depth.
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11725
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11726
    mask notNil ifTrue:[
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11727
        newMask := mask rotated:degrees.
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11728
    ] ifFalse:[
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11729
        (myDepth ~~ 1 and:[self isMask not]) ifTrue:[
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11730
            newMask := ImageMask width:width height:height.
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11731
            newMask bits:(maskBits := ByteArray new:(newMask bytesPerRow * height)).
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11732
            maskBits atAllPut:16rFF.
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11733
            newMask := newMask rotated:degrees.
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11734
        ].
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11735
    ].
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11736
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11737
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11738
    newImage := self species new.
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11739
    newImage 
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11740
        width:newWidth
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11741
        height:newHeight
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11742
        photometric:photometric
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11743
        samplesPerPixel:samplesPerPixel
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11744
        bitsPerSample:bitsPerSample
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11745
        colorMap:colorMap copy
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11746
        bits:nil
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11747
        mask:newMask;
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11748
        maskedPixelsAre0:self maskedPixelsAre0;
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11749
        createPixelStore.
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11750
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11751
    newBytesPerRow := newImage bytesPerRow.
3912
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
 11752
    newBits := newImage bits.
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11753
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11754
    (myDepth == 1 or:[self maskedPixelsAre0 or:[self isMask]]) ifTrue:[
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11755
        blackPixel := 0.
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11756
    ] ifFalse:[
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11757
        blackPixel := self valueFromColor:Color black.
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11758
        blackPixel isNil ifTrue:[
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11759
            blackPixel := self valueFromColor:Color white.
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11760
            blackPixel isNil ifTrue:[
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11761
                blackPixel := 0.
7522
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
        ]
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11764
    ].
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11765
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11766
"/ already filled with 0
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11767
"/    newBits atAllPut:0.
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11768
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11769
    "/ now, walk over destination pixels,
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 11770
    "/ fetching from source.
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 11771
    "/ (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
 11772
    "/  in the destination image ...)
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11773
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11774
    halfW := (width - 1) / 2.0.
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11775
    halfH := (height - 1) / 2.0.
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11776
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11777
    bytesPerRow := self bytesPerRow.
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11778
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11779
%{
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 11780
    double sin(), cos();
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11781
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11782
    bad = true;
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11783
    if (1
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 11784
     && __isFloat(minX)
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11785
     && __isFloat(minY)
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11786
     && __isFloat(radians)
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11787
     && __isFloat(halfW)
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11788
     && __isFloat(halfH)
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11789
     && __isByteArray(newBits)
5476
06e08505bc6f __isByteArray() to __isByteArrayLike() in primitive code
Stefan Vogel <sv@exept.de>
parents: 5352
diff changeset
 11790
     && __isByteArrayLike(__INST(bytes))) {
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11791
        int __dstX, __dstY, __dstMask;
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11792
        unsigned char *__dstPtr;
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11793
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11794
        int __newHeight = __intVal(newHeight);
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11795
        int __newWidth = __intVal(newWidth);
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11796
        int __height = __intVal(__INST(height));
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11797
        int __width = __intVal(__INST(width));
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11798
        int __depth = __intVal(myDepth);
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11799
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11800
        unsigned char *__srcBytes = __ByteArrayInstPtr(__INST(bytes))->ba_element;
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11801
        unsigned char *__dstBytes = __ByteArrayInstPtr(newBits)->ba_element;
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11802
        int __nSrcBytes = __byteArraySize(__INST(bytes));
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11803
        int __nDstBytes = __byteArraySize(newBits);
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11804
        int __srcBytesPerRow = __intVal(bytesPerRow);
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11805
        int __dstBytesPerRow = __intVal(newBytesPerRow);
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11806
        int __blackPixel = __intVal(blackPixel);
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11807
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11808
        double __radians = - __floatVal(radians);   /* sigh: clock-wise */
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11809
        double __sin = sin(__radians);
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11810
        double __cos = cos(__radians);
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11811
        double __minX = __floatVal(minX);
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11812
        double __minY = __floatVal(minY);
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11813
        double __halfW = __floatVal(halfW);
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11814
        double __halfH = __floatVal(halfH);
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11815
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11816
        unsigned char *__dstRowPtr = __dstBytes;
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11817
        unsigned char *__dstEndPtr = __dstBytes + __nDstBytes;
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 11818
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 11819
#       define EARLY_OUT
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 11820
#       define FAST_ADVANCE 5
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 11821
#       define FAST_ADVANCE2
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 11822
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11823
        switch (__depth) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11824
            case 8:
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11825
                for (__dstY = 0; __dstY < __newHeight; __dstY++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11826
                    double __pY, __sinPY, __cosPY;
1639
c47081269ada faster rotation - early break from loop
Claus Gittinger <cg@exept.de>
parents: 1638
diff changeset
 11827
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11828
                    int didFetchInRow = 0;
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
                    __pY = (double)(__dstY + __minY);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11831
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11832
                    __sinPY = __sin * __pY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11833
                    __cosPY = __cos * __pY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11834
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11835
                    __dstPtr = __dstRowPtr;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11836
                    __dstRowPtr += __dstBytesPerRow;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11837
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11838
                    for (__dstX = 0; __dstX < __newWidth; __dstX++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11839
                        double __pX, __nX;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11840
                        unsigned __pix;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11841
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11842
                        /* translate X in destination (center to 0/0) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11843
                        __pX = (double)(__dstX + __minX);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11844
                        /* rotate X */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11845
                        __nX = (__cos * __pX) - __sinPY;
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
                        /* translate X in source (origin to 0/0) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11848
                        __nX = __nX + __halfW + 0.5;
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
                        /* inside ? */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11851
                        if (__nX < 0) {
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 11852
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11853
                            if (didFetchInRow) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11854
                                break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11855
                            }
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 11856
#endif
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 11857
#ifdef FAST_ADVANCE
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11858
                            if (__blackPixel == 0) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11859
                                do {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11860
                                    /* try advance by FAST_ADVANCE pixels ... */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11861
                                    __dstX += FAST_ADVANCE; __dstPtr += FAST_ADVANCE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11862
                                    if (__dstX >= __newWidth) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11863
                                        break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11864
                                    }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11865
                                    __pX = (double)(__dstX + __minX);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11866
                                    __nX = (__cos * __pX) - __sinPY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11867
                                    __nX = __nX + __halfW + 0.5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11868
                                } while (__nX < 0);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11869
                                __dstX -= FAST_ADVANCE; __dstPtr -= FAST_ADVANCE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11870
                            }
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 11871
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11872
                            __pix = __blackPixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11873
                        } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11874
                            int __srcX;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11875
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11876
                            __srcX = (int)__nX;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11877
                            /* inside ? */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11878
                            if (__srcX >= __width) {
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 11879
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11880
                                if (didFetchInRow) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11881
                                    break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11882
                                }
1639
c47081269ada faster rotation - early break from loop
Claus Gittinger <cg@exept.de>
parents: 1638
diff changeset
 11883
#endif
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 11884
#ifdef FAST_ADVANCE2
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11885
                                if (__blackPixel == 0) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11886
                                    do {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11887
                                        /* try advance by FAST_ADVANCE pixels ... */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11888
                                        __dstX += FAST_ADVANCE; __dstPtr += FAST_ADVANCE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11889
                                        if (__dstX >= __newWidth) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11890
                                            break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11891
                                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11892
                                        __pX = (double)(__dstX + __minX);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11893
                                        __nX = (__cos * __pX) - __sinPY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11894
                                        __nX = __nX + __halfW + 0.5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11895
                                        __srcX = (int)__nX;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11896
                                    } while (__srcX >= __width);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11897
                                    __dstX -= FAST_ADVANCE; __dstPtr -= FAST_ADVANCE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11898
                                }
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 11899
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11900
                                __pix = __blackPixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11901
                            } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11902
                                double __nY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11903
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11904
                                /* rotate Y */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11905
                                __nY = (__sin * __pX) + __cosPY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11906
                                /* translate Y in source (origin to 0/0) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11907
                                __nY = __nY + __halfH + 0.5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11908
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11909
                                /* inside ? */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11910
                                if (__nY < 0) {
1639
c47081269ada faster rotation - early break from loop
Claus Gittinger <cg@exept.de>
parents: 1638
diff changeset
 11911
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11912
                                    if (didFetchInRow) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11913
                                        break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11914
                                    }
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 11915
#endif
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 11916
#ifdef FAST_ADVANCE2
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11917
                                    if (__blackPixel == 0) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11918
                                        do {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11919
                                            /* try advance by FAST_ADVANCE pixels ... */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11920
                                            __dstX += FAST_ADVANCE; __dstPtr += FAST_ADVANCE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11921
                                            if (__dstX >= __newWidth) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11922
                                                break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11923
                                            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11924
                                            __pX = (double)(__dstX + __minX);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11925
                                            __nY = (__sin * __pX) + __cosPY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11926
                                            __nY = __nY + __halfH + 0.5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11927
                                        } while (__nY < 0);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11928
                                        __dstX -= FAST_ADVANCE; __dstPtr -= FAST_ADVANCE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11929
                                    }
1639
c47081269ada faster rotation - early break from loop
Claus Gittinger <cg@exept.de>
parents: 1638
diff changeset
 11930
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11931
                                    __pix = __blackPixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11932
                                } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11933
                                    int __srcY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11934
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11935
                                    __srcY = (int)__nY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11936
                                    /* inside ? */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11937
                                    if (__srcY >= __height) {
1639
c47081269ada faster rotation - early break from loop
Claus Gittinger <cg@exept.de>
parents: 1638
diff changeset
 11938
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11939
                                        if (didFetchInRow) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11940
                                            break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11941
                                        }
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11942
#endif
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 11943
#ifdef FAST_ADVANCE
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11944
                                        if (__blackPixel == 0) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11945
                                            do {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11946
                                                /* try advance by FAST_ADVANCE pixels ... */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11947
                                                __dstX += FAST_ADVANCE; __dstPtr += FAST_ADVANCE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11948
                                                if (__dstX >= __newWidth) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11949
                                                    break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11950
                                                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11951
                                                __pX = (double)(__dstX + __minX);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11952
                                                __nY = (__sin * __pX) + __cosPY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11953
                                                __nY = __nY + __halfH + 0.5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11954
                                                __srcY = (int)__nY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11955
                                            } while (__srcY >= __height);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11956
                                            __dstX -= FAST_ADVANCE; __dstPtr -= FAST_ADVANCE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11957
                                        }
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 11958
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11959
                                        __pix = __blackPixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11960
                                    } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11961
                                        /* fetch source pixel */
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
                                        int idx;
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 11964
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11965
                                        didFetchInRow = 1;
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 11966
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11967
                                        idx = __srcY * __srcBytesPerRow + __srcX;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11968
                                        if ((unsigned)idx < __nSrcBytes) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11969
                                            __pix = __srcBytes[idx];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11970
                                        } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11971
                                            __pix = __blackPixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11972
                                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11973
                                    }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11974
                                }
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
                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11977
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11978
                        if (__pix != 0) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11979
                            *__dstPtr = __pix;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11980
                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11981
                        __dstPtr++;
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
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11984
                break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11985
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11986
            case 1:
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11987
                for (__dstY = 0; __dstY < __newHeight; __dstY++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11988
                    double __pY, __sinPY, __cosPY;
1639
c47081269ada faster rotation - early break from loop
Claus Gittinger <cg@exept.de>
parents: 1638
diff changeset
 11989
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11990
                    int didFetchInRow = 0;
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 11991
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11992
                    __pY = (double)(__dstY + __minY);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11993
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11994
                    __sinPY = __sin * __pY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11995
                    __cosPY = __cos * __pY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11996
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11997
                    __dstPtr = __dstRowPtr;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11998
                    __dstMask = 0x80;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11999
                    __dstRowPtr += __dstBytesPerRow;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12000
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12001
                    for (__dstX = 0; __dstX < __newWidth; __dstX++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12002
                        double __pX, __nX;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12003
                        int __pix;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12004
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12005
                        /* translate X in destination (center to 0/0) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12006
                        __pX = (double)(__dstX + __minX);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12007
                        /* rotate X */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12008
                        __nX = (__cos * __pX) - __sinPY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12009
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12010
                        /* translate X in source (origin to 0/0) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12011
                        __nX = __nX + __halfW + 0.5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12012
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12013
                        /* inside ? */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12014
                        if (__nX < 0) {
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 12015
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12016
                            if (didFetchInRow) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12017
                                break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12018
                            }
1653
7ab13998d4cd d24 rotation fixed
Claus Gittinger <cg@exept.de>
parents: 1650
diff changeset
 12019
#endif
7ab13998d4cd d24 rotation fixed
Claus Gittinger <cg@exept.de>
parents: 1650
diff changeset
 12020
#ifdef FAST_ADVANCE
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12021
                            if (__blackPixel == 0) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12022
                                do {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12023
                                    /* try advance by 8 pixels ... */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12024
                                    __dstX += 8; __dstPtr ++;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12025
                                    if (__dstX >= __newWidth) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12026
                                        break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12027
                                    }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12028
                                    __pX = (double)(__dstX + __minX);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12029
                                    __nX = (__cos * __pX) - __sinPY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12030
                                    __nX = __nX + __halfW + 0.5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12031
                                } while (__nX < 0);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12032
                                __dstX -= 8; __dstPtr--;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12033
                            }
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12034
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12035
                            __pix = __blackPixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12036
                        } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12037
                            int __srcX;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12038
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12039
                            __srcX = (int)__nX;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12040
                            /* inside ? */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12041
                            if (__srcX >= __width) {
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12042
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12043
                                if (didFetchInRow) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12044
                                    break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12045
                                }
1653
7ab13998d4cd d24 rotation fixed
Claus Gittinger <cg@exept.de>
parents: 1650
diff changeset
 12046
#endif
7ab13998d4cd d24 rotation fixed
Claus Gittinger <cg@exept.de>
parents: 1650
diff changeset
 12047
#ifdef FAST_ADVANCE2
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12048
                                if (__blackPixel == 0) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12049
                                    do {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12050
                                        /* try advance by 8 pixels ... */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12051
                                        __dstX += 8; __dstPtr++;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12052
                                        if (__dstX >= __newWidth) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12053
                                            break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12054
                                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12055
                                        __pX = (double)(__dstX + __minX);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12056
                                        __nX = (__cos * __pX) - __sinPY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12057
                                        __nX = __nX + __halfW + 0.5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12058
                                        __srcX = (int)__nX;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12059
                                    } while (__srcX >= __width);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12060
                                    __dstX -= 8; __dstPtr--;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12061
                                }
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12062
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12063
                                __pix = __blackPixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12064
                            } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12065
                                double __nY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12066
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12067
                                /* rotate Y */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12068
                                __nY = (__sin * __pX) + __cosPY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12069
                                /* translate Y in source (origin to 0/0) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12070
                                __nY = __nY + __halfH + 0.5;
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
                                /* inside ? */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12073
                                if (__nY < 0) {
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12074
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12075
                                    if (didFetchInRow) {
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
                                    }
1653
7ab13998d4cd d24 rotation fixed
Claus Gittinger <cg@exept.de>
parents: 1650
diff changeset
 12078
#endif
7ab13998d4cd d24 rotation fixed
Claus Gittinger <cg@exept.de>
parents: 1650
diff changeset
 12079
#ifdef FAST_ADVANCE2
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12080
                                    if (__blackPixel == 0) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12081
                                        do {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12082
                                            /* try advance by 8 pixels ... */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12083
                                            __dstX += 8; __dstPtr++;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12084
                                            if (__dstX >= __newWidth) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12085
                                                break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12086
                                            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12087
                                            __pX = (double)(__dstX + __minX);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12088
                                            __nY = (__sin * __pX) + __cosPY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12089
                                            __nY = __nY + __halfH + 0.5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12090
                                        } while (__nY < 0);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12091
                                        __dstX -= 8; __dstPtr--;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12092
                                    }
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12093
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12094
                                    __pix = __blackPixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12095
                                } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12096
                                    int __srcY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12097
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12098
                                    __srcY = (int)__nY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12099
                                    /* inside ? */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12100
                                    if (__srcY >= __height) {
1639
c47081269ada faster rotation - early break from loop
Claus Gittinger <cg@exept.de>
parents: 1638
diff changeset
 12101
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12102
                                        if (didFetchInRow) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12103
                                            break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12104
                                        }
1653
7ab13998d4cd d24 rotation fixed
Claus Gittinger <cg@exept.de>
parents: 1650
diff changeset
 12105
#endif
7ab13998d4cd d24 rotation fixed
Claus Gittinger <cg@exept.de>
parents: 1650
diff changeset
 12106
#ifdef FAST_ADVANCE
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12107
                                        if (__blackPixel == 0) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12108
                                            do {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12109
                                                /* try advance by 8 pixels ... */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12110
                                                __dstX += 8; __dstPtr++;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12111
                                                if (__dstX >= __newWidth) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12112
                                                    break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12113
                                                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12114
                                                __pX = (double)(__dstX + __minX);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12115
                                                __nY = (__sin * __pX) + __cosPY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12116
                                                __nY = __nY + __halfH + 0.5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12117
                                                __srcY = (int)__nY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12118
                                            } while (__srcY >= __height);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12119
                                            __dstX -= 8; __dstPtr--;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12120
                                        }
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 12121
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12122
                                        __pix = __blackPixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12123
                                    } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12124
                                        /* fetch source pixel */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12125
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12126
                                        int idx, pV;
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 12127
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12128
                                        didFetchInRow = 1;
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 12129
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12130
                                        idx = __srcY * __srcBytesPerRow + (__srcX >> 3);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12131
                                        if ((unsigned)idx < __nSrcBytes) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12132
                                            pV = __srcBytes[idx];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12133
                                            __pix = (pV & (0x80 >> (__srcX & 7))) ? 1 : 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12134
                                        } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12135
                                            __pix = __blackPixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12136
                                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12137
                                    }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12138
                                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12139
                            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12140
                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12141
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12142
                        /* store pixel */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12143
                        if (__pix != 0) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12144
                            *__dstPtr |= __dstMask;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12145
                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12146
                        __dstMask >>= 1;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12147
                        if (__dstMask == 0) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12148
                            __dstMask = 0x80;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12149
                            __dstPtr++;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12150
                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12151
                    }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12152
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12153
                break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12154
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12155
            case 24:
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12156
                for (__dstY = 0; __dstY < __newHeight; __dstY++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12157
                    double __pY, __sinPY, __cosPY;
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 12158
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12159
                    int didFetchInRow = 0;
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 12160
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12161
                    __pY = (double)(__dstY + __minY);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12162
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12163
                    __sinPY = __sin * __pY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12164
                    __cosPY = __cos * __pY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12165
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12166
                    __dstPtr = __dstRowPtr;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12167
                    __dstRowPtr += __dstBytesPerRow;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12168
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12169
                    for (__dstX = 0; __dstX < __newWidth; __dstX++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12170
                        double __pX, __nX;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12171
                        unsigned __pix;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12172
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12173
                        /* translate X in destination (center to 0/0) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12174
                        __pX = (double)(__dstX + __minX);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12175
                        /* rotate X */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12176
                        __nX = (__cos * __pX) - __sinPY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12177
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12178
                        /* translate X in source (origin to 0/0) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12179
                        __nX = __nX + __halfW + 0.5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12180
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12181
                        /* inside ? */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12182
                        if (__nX < 0) {
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 12183
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12184
                            if (didFetchInRow) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12185
                                break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12186
                            }
1639
c47081269ada faster rotation - early break from loop
Claus Gittinger <cg@exept.de>
parents: 1638
diff changeset
 12187
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12188
                            __pix = __blackPixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12189
                        } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12190
                            int __srcX;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12191
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12192
                            __srcX = (int)__nX;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12193
                            /* inside ? */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12194
                            if (__srcX >= __width) {
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12195
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12196
                                if (didFetchInRow) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12197
                                    break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12198
                                }
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12199
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12200
                                __pix = __blackPixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12201
                            } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12202
                                double __nY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12203
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12204
                                /* rotate Y */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12205
                                __nY = (__sin * __pX) + __cosPY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12206
                                /* translate Y in source (origin to 0/0) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12207
                                __nY = __nY + __halfH + 0.5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12208
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12209
                                /* inside ? */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12210
                                if (__nY < 0) {
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 12211
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12212
                                    if (didFetchInRow) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12213
                                        break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12214
                                    }
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12215
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12216
                                    __pix = __blackPixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12217
                                } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12218
                                    int __srcY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12219
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12220
                                    __srcY = (int)__nY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12221
                                    /* inside ? */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12222
                                    if (__srcY >= __height) {
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12223
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12224
                                        if (didFetchInRow) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12225
                                            break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12226
                                        }
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12227
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12228
                                        __pix = __blackPixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12229
                                    } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12230
                                        /* fetch source pixel */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12231
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12232
                                        int idx;
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12233
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12234
                                        didFetchInRow = 1;
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 12235
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12236
                                        idx = __srcY * __srcBytesPerRow + __srcX + __srcX + __srcX;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12237
                                        if ((unsigned)idx < __nSrcBytes) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12238
                                            __pix = __srcBytes[idx];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12239
                                            __pix = (__pix<<8) | __srcBytes[idx+1];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12240
                                            __pix = (__pix<<8) | __srcBytes[idx+2];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12241
                                        } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12242
                                            __pix = __blackPixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12243
                                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12244
                                    }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12245
                                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12246
                            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12247
                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12248
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12249
                        /* store pixel */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12250
                        if (__pix != 0) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12251
                            __dstPtr[0] = (__pix >> 16 & 0xFF);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12252
                            __dstPtr[1] = (__pix >> 8) & 0xFF;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12253
                            __dstPtr[2] = __pix & 0xFF;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12254
                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12255
                        __dstPtr += 3;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12256
                    }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12257
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12258
                break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12259
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12260
            default:
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12261
                for (__dstY = 0; __dstY < __newHeight; __dstY++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12262
                    double __pY, __sinPY, __cosPY;
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 12263
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12264
                    int didFetchInRow = 0;
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 12265
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12266
                    __pY = (double)(__dstY + __minY);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12267
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12268
                    __sinPY = __sin * __pY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12269
                    __cosPY = __cos * __pY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12270
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12271
                    __dstPtr = __dstRowPtr;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12272
                    __dstMask = 0x80;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12273
                    __dstRowPtr += __dstBytesPerRow;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12274
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12275
                    for (__dstX = 0; __dstX < __newWidth; __dstX++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12276
                        double __pX, __nX;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12277
                        OBJ __pix;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12278
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12279
                        /* translate X in destination (center to 0/0) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12280
                        __pX = (double)(__dstX + __minX);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12281
                        /* rotate X */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12282
                        __nX = (__cos * __pX) - __sinPY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12283
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12284
                        /* translate X in source (origin to 0/0) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12285
                        __nX = __nX + __halfW + 0.5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12286
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12287
                        /* inside ? */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12288
                        if (__nX < 0) {
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 12289
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12290
                            if (didFetchInRow) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12291
                                break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12292
                            }
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 12293
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12294
                            __pix = blackPixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12295
                        } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12296
                            int __srcX;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12297
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12298
                            __srcX = (int)__nX;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12299
                            /* inside ? */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12300
                            if (__srcX >= __width) {
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 12301
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12302
                                if (didFetchInRow) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12303
                                    break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12304
                                }
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 12305
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12306
                                __pix = blackPixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12307
                            } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12308
                                double __nY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12309
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12310
                                /* rotate Y */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12311
                                __nY = (__sin * __pX) + __cosPY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12312
                                /* translate Y in source (origin to 0/0) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12313
                                __nY = __nY + __halfH + 0.5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12314
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12315
                                /* inside ? */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12316
                                if (__nY < 0) {
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 12317
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12318
                                    if (didFetchInRow) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12319
                                        break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12320
                                    }
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 12321
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12322
                                    __pix = blackPixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12323
                                } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12324
                                    int __srcY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12325
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12326
                                    __srcY = (int)__nY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12327
                                    /* inside ? */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12328
                                    if (__srcY >= __height) {
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 12329
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12330
                                        if (didFetchInRow) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12331
                                            break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12332
                                        }
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 12333
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12334
                                        __pix = blackPixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12335
                                    } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12336
                                        /* fetch source pixel */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12337
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12338
                                        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
 12339
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12340
                                        didFetchInRow = 1;
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12341
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12342
                                        __pix = (*valAt.ilc_func)(self,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12343
                                                              @symbol(pixelAtX:y:),
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12344
                                                              nil, &valAt,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12345
                                                              __MKSMALLINT(__srcX),
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12346
                                                              __MKSMALLINT(__srcY));
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12347
                                    }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12348
                                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12349
                            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12350
                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12351
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12352
                        /* store pixel */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12353
                        {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12354
                            static struct inlineCache atPutVal = _ILC3;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12355
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12356
                            if (__pix != __MKSMALLINT(0)) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12357
                                (*atPutVal.ilc_func)(newImage,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12358
                                                      @symbol(pixelAtX:y:put:),
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12359
                                                      nil, &atPutVal,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12360
                                                      __MKSMALLINT(__dstX),
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12361
                                                      __MKSMALLINT(__dstY),
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12362
                                                      __pix
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12363
                                                     );
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12364
                            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12365
                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12366
                    }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12367
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12368
                break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12369
        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12370
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12371
        bad = false;
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12372
    }
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12373
%}.
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12374
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12375
    bad ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12376
        "/ should not happen
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12377
        self primitiveFailed
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12378
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12379
"/        sinRot := radians negated sin.
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12380
"/        cosRot := radians negated cos.
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12381
"/
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12382
"/        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
 12383
"/            pY := (dstY + minY).
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12384
"/            sinPY := (sinRot * pY).
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12385
"/            cosPY := (cosRot * pY).
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12386
"/
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12387
"/            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
 12388
"/
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12389
"/                "/ translate center to origin
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12390
"/                pX := (dstX + minX).
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12391
"/
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12392
"/                nX := (cosRot * pX) - sinPY.
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12393
"/
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12394
"/                "/ translate in source
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12395
"/                srcX := nX + halfW.
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12396
"/                srcX := srcX rounded.
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12397
"/                "/ inside ?
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12398
"/
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12399
"/                (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
 12400
"/                    nY := (sinRot * pX) + cosPY.
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12401
"/                    srcY := nY + halfH.
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12402
"/                    srcY := srcY rounded.
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12403
"/
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12404
"/                    "/ inside ?
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12405
"/                    (srcY >= 0 and:[srcY < height]) ifTrue:[
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 12406
"/                        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
 12407
"/                    ] ifFalse:[
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 12408
"/                        pix := blackPixel.
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12409
"/                    ].
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12410
"/                ] ifFalse:[
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 12411
"/                    pix := blackPixel.
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12412
"/                ].
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12413
"/                pix ~~ blackPixel ifTrue:[
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 12414
"/                    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
 12415
"/                ]
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12416
"/            ].
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12417
"/        ].
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12418
    ].
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12419
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12420
    ^ newImage
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12421
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12422
    "
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12423
     |i|
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12424
7906
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 12425
     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
 12426
     i inspect.
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12427
     (i rotated:45) inspect.
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12428
     (i rotated:90) inspect.
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12429
     (i rotated:91) inspect.
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12430
     (i rotated:95) inspect.
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12431
    "
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12432
    "
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12433
     |i|
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12434
7906
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 12435
     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
 12436
     i := Depth24Image fromImage:i.
7ab13998d4cd d24 rotation fixed
Claus Gittinger <cg@exept.de>
parents: 1650
diff changeset
 12437
     (i rotated:200) inspect
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12438
    "
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12439
    "
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12440
     |i|
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12441
7906
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 12442
     i := Smalltalk imageFromFileNamed:'../../goodies/bitmaps/gifImages/garfield.gif' inPackage:'stx:goodies'.
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12443
     Transcript showCR:(
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12444
        Time millisecondsToRun:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12445
           i rotated:45.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12446
        ]
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12447
     ).
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12448
    "
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12449
    "
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12450
     |v i rI rot|
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12451
7906
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 12452
     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
 12453
     v := View new extent:(i width max:100)@(i height max:100).
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12454
     v openAndWait.
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12455
     rot := 0.
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12456
     [true] whileTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12457
        rI := i rotated:rot.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12458
        rI := rI onDevice:v device.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12459
        v clear.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12460
        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
 12461
        rot := rot + 5.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12462
        rI close.
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12463
     ]
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12464
    "
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12465
    "
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12466
     |v i rI rot|
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12467
7906
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 12468
     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
 12469
     v := View new extent:400@400.
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12470
     v openAndWait.
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12471
     rot := 0.
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12472
     [true] whileTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12473
        rI := i rotated:rot.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12474
        rI := rI onDevice:v device.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12475
        v clear.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12476
        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
 12477
        rot := rot + 5.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12478
        rI close.
4952
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12479
     ]
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12480
    "
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12481
    "
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12482
     |v i rI rot|
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12483
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12484
     i := Form width:200 height:100 onDevice:Screen current.
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12485
     i clear.
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12486
     i displayLineFrom:(0@0) to:(199@0).
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12487
     i displayLineFrom:(199@0) to:(199@99).
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12488
     i displayLineFrom:(199@99) to:(0@99).
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12489
     i displayLineFrom:(0@99) to:(0@0).
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12490
     i displayLineFrom:(0@0) to:(199@100).
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12491
     i displayLineFrom:(199@0) to:(0@100).
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12492
     i := Image fromForm:i.
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12493
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12494
     v := View new extent:400@400.
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12495
     v openAndWait.
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12496
     rot := 0.
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12497
     [true] whileTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12498
        rI := i rotated:rot.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12499
        rI := rI onDevice:v device.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12500
        v clear.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12501
        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
 12502
        rot := rot + 5.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12503
        rI close.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12504
        Delay waitForSeconds:0.1.
4952
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12505
     ]
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12506
    "
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12507
    "
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12508
     |v i rI rot|
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12509
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12510
     i := Form width:200 height:100 onDevice:Screen current.
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12511
     i clear.
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12512
     i displayLineFrom:(0@0) to:(199@0).
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12513
     i displayLineFrom:(199@0) to:(199@99).
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12514
     i displayLineFrom:(199@99) to:(0@99).
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12515
     i displayLineFrom:(0@99) to:(0@0).
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12516
     i displayLineFrom:(0@0) to:(199@100).
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12517
     i displayLineFrom:(199@0) to:(0@100).
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12518
     i := Image fromForm:i.
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12519
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12520
     v := View new extent:400@400.
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12521
     v openAndWait.
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12522
     rot := 0.
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12523
     [true] whileTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12524
        rI := i rotated:rot.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12525
        rI := rI onDevice:v device.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12526
        v clear.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12527
        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
 12528
        rot := rot + 30.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12529
        rI close.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12530
        Delay waitForSeconds:0.3.
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12531
     ]
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12532
    "
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12533
7906
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 12534
    "Modified (comment): / 16-02-2017 / 20:40:52 / cg"
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 12535
    "Modified: / 19-07-2017 / 12:30:39 / stefan"
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 12536
!
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 12537
8132
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12538
hardSmoothingMagnifiedBy:scaleArg
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12539
    "return a new image magnified by scalePoint, aPoint.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12540
     This is the general magnification method, handling non-integral values.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12541
     It is slower than the integral magnification method,
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12542
     and slower than the old hardMagnifiedBy: method.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12543
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12544
     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
 12545
     or interpolates if expanding.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12546
     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
 12547
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12548
    |scalePoint mX mY
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12549
     newWidth  "{ Class: SmallInteger }"
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12550
     newHeight "{ Class: SmallInteger }"
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12551
     w         "{ Class: SmallInteger }"
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12552
     h         "{ Class: SmallInteger }"
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12553
     newImage newBits bitsPerPixel newBytesPerRow newMask
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12554
     value srcRow pixelArray shrink|
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12555
8263
46c6448fdf2c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8245
diff changeset
 12556
    (photometric == #rgb or:[photometric == #rgba]) ifFalse:[
8326
ff1b239ffe17 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
 12557
        "/ have only implemented this for RGB images;
ff1b239ffe17 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
 12558
        "/ palette and other images are converted first to this,
8523
81d5dfb99b62 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8504
diff changeset
 12559
        "/ then magnified. We'll see if we need more work for grayscale images.
8326
ff1b239ffe17 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
 12560
8136
e18855468edd #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8132
diff changeset
 12561
        "/ self assert:false message:'only works with rgb images'.
8847
c0efce1b8903 #BUGFIX by exept
Claus Gittinger <cg@exept.de>
parents: 8845
diff changeset
 12562
        ^ (Depth24Image fromImage:self photometric:#rgb)
8136
e18855468edd #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8132
diff changeset
 12563
            hardSmoothingMagnifiedBy:scaleArg
e18855468edd #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8132
diff changeset
 12564
    ].
8132
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12565
    
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12566
    scalePoint := scaleArg asPoint. 
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12567
    mX := scalePoint x.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12568
    mY := scalePoint y.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12569
    ((mX < 0) or:[mY < 0]) ifTrue:[^ nil].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12570
    ((mX = 1) and:[mY = 1]) ifTrue:[^ self].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12571
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12572
    ((mX <= 1) and:[mY <= 1]) ifTrue:[
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12573
        "/ shrinking in both directions 
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12574
        shrink := true.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12575
    ] ifFalse:[
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12576
        ((mX >= 1) and:[mY >= 1]) ifTrue:[
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12577
            "/ shrinking in both directions    
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12578
            shrink := false.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12579
        ] ifFalse:[
8326
ff1b239ffe17 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
 12580
            "/ mixed shrink in one, grow in another direction.
ff1b239ffe17 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
 12581
            "/ - do it in two steps
8132
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12582
            mX > 0 ifTrue:[
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12583
                ^ (self hardSmoothingMagnifiedBy:(mX @ 1) )
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12584
                        hardSmoothingMagnifiedBy:(1 @ mY) 
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12585
            ].    
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12586
            ^ (self hardSmoothingMagnifiedBy:(1 @ mY) )
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12587
                    hardSmoothingMagnifiedBy:(mY @ 1) 
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12588
        ]
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12589
    ].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12590
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12591
    newWidth := (width * mX) truncated.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12592
    newHeight := (height * mY) truncated.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12593
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12594
    bitsPerPixel := self depth.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12595
    newBytesPerRow := ((newWidth * bitsPerPixel) + 7) // 8.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12596
    newBits := ByteArray uninitializedNew:(newBytesPerRow * newHeight).
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12597
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12598
    mask notNil ifTrue:[
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12599
        newMask := (mask magnifiedBy:scalePoint)
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12600
    ].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12601
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12602
    newImage := self species new.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12603
    newImage
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12604
        width:newWidth height:newHeight photometric:photometric
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12605
        samplesPerPixel:samplesPerPixel bitsPerSample:bitsPerSample
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12606
        colorMap:colorMap copy
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12607
        bits:newBits mask:newMask.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12608
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12609
    w := newWidth - 1.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12610
    h := newHeight - 1.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12611
    pixelArray := newImage pixelArraySpecies new:newWidth.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12612
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12613
    shrink ifTrue:[
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12614
        |rX rY|
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12615
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12616
        "/ rI is radius (nr. of pixels) to consider when averaging
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12617
        rX := 1.0 / mX.  "/ mI are <= 1 -> rI are >= 1
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12618
        rY := 1.0 / mY.
8523
81d5dfb99b62 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8504
diff changeset
 12619
        rX := rX / 2.0.
81d5dfb99b62 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8504
diff changeset
 12620
        rY := rY / 2.0.
8132
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12621
        0 to:h do:[:row |
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12622
            srcRow := (row / mY).
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12623
            0 to:w do:[:col |
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12624
                |srcCol rgb sumRed sumGreen sumBlue sumWeight
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12625
                 red green blue|
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12626
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12627
                sumRed := sumGreen := sumBlue := sumWeight := 0.0.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12628
                
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12629
                srcCol := col / mX.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12630
                srcCol-rX to:srcCol+rX do:[:srcX |
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12631
                    srcRow-rY to:srcRow+rY do:[:srcY |
8524
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
 12632
                        |pX pY weight rgb "{ Class: SmallInteger }"|
8132
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12633
                        pX := (srcX rounded max:0) min:width-1.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12634
                        pY := (srcY rounded max:0) min:height-1.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12635
                        rgb := self rgbValueAtX:pX y:pY.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12636
                        "/ d := (srcX @ srcY) dist:(pX @ pY).
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12637
                        "/ scale according to distance.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12638
                        "/ weight := 1 / (1+d).
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12639
                        weight := 1.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12640
                        sumRed := sumRed + (weight * ((rgb rightShift:16) bitAnd:16rFF)).
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12641
                        sumGreen := sumGreen + (weight * ((rgb rightShift:8) bitAnd:16rFF)).
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12642
                        sumBlue := sumBlue + (weight * (rgb bitAnd:16rFF)).
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12643
                        sumWeight := sumWeight + weight.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12644
                    ].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12645
                ].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12646
                red := (sumRed / sumWeight) rounded.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12647
                green := (sumGreen / sumWeight) rounded.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12648
                blue := (sumBlue / sumWeight) rounded. 
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12649
                rgb := (((red bitShift:8) bitOr:green) bitShift:8) bitOr:blue.
8326
ff1b239ffe17 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
 12650
                pixelArray at:col+1 put:(self valueFromRGB:rgb).
8132
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12651
            ].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12652
            newImage rowAt:row putAll:pixelArray.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12653
        ].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12654
    ] ifFalse:[    
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12655
        0 to:h do:[:row |
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12656
            srcRow := (row // mY).
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12657
            0 to:w do:[:col |
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12658
                value := self pixelAtX:(col // mX) y:srcRow.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12659
                pixelArray at:(col+1) put:value.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12660
            ].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12661
            newImage rowAt:row putAll:pixelArray.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12662
        ].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12663
    ].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12664
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12665
    ^ newImage 
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12666
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12667
    "compare the two:
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12668
     |i i1 i2|
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12669
     i := Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif'.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12670
     i := Depth24Image fromImage:i.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12671
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12672
     Time millisecondsToRun:[
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12673
         i1 := i hardSmoothingMagnifiedBy:0.1
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12674
     ].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12675
     i1 inspect.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12676
     Time millisecondsToRun:[
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12677
         i2 := i magnifiedBy:0.1 
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12678
     ].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12679
     i2 inspect.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12680
    "
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12681
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12682
    "compare the two:
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12683
     |i i1 i2|
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12684
     i := Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif'.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12685
     i := Depth24Image fromImage:i.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12686
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12687
     Time millisecondsToRun:[
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12688
         i1 := i hardSmoothingMagnifiedBy:0.999
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12689
     ].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12690
     i1 inspect.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12691
     Time millisecondsToRun:[
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12692
         i2 := i magnifiedBy:0.999 
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12693
     ].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12694
     i2 inspect.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12695
    "
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12696
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12697
    "compare the two:
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12698
     |i i1 i2|
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12699
     i := Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif'.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12700
     i := Depth24Image fromImage:i.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12701
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12702
     Time millisecondsToRun:[
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12703
         i1 := i hardSmoothingMagnifiedBy:0.3
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12704
     ].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12705
     i1 inspect.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12706
     Time millisecondsToRun:[
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12707
         i2 := i magnifiedBy:0.3 
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12708
     ].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12709
     i2 inspect.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12710
    "
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12711
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12712
    "
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12713
     |i|
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12714
     i := Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif'.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12715
     i := i asGrayImageDepth:8.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12716
     i := Depth24Image fromImage:i.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12717
     
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12718
     Time millisecondsToRun:[
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12719
         i := i hardSmoothingMagnifiedBy:0.2 
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12720
     ].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12721
     i inspect
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12722
    "
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12723
    
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12724
    "
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12725
     |i|
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12726
     i := Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif'.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12727
     i := Depth24Image fromImage:i.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12728
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12729
     Time millisecondsToRun:[
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12730
         i := i hardSmoothingMagnifiedBy:0.3 
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12731
     ].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12732
     i inspect
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12733
    "
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12734
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12735
    "Created: / 30-08-2017 / 15:01:53 / cg"
8524
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
 12736
    "Modified (format): / 19-10-2018 / 16:25:17 / Stefan Vogel"
8132
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12737
!
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12738
54
29a6b2f8e042 *** empty log message ***
claus
parents: 46
diff changeset
 12739
lightened
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
 12740
    "return a new image which is slightly brighter than the receiver.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
 12741
     The receiver must be a palette image (currently).
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 12742
     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
 12743
     CAVEAT: Need an argument, which specifies by how much it should be lighter."
54
29a6b2f8e042 *** empty log message ***
claus
parents: 46
diff changeset
 12744
5655
37bd5c7eb765 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 5643
diff changeset
 12745
    ^ self copyWithColorMapProcessing:[:clr | clr lightened]
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 12746
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 12747
    "
3256
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 12748
     (Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') inspect
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 12749
     (Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') lightened inspect
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 12750
     (Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') darkened inspect
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 12751
     (Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') darkened darkened inspect
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 12752
    "
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 12753
8282
e67d591cbebb #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8279
diff changeset
 12754
    "
e67d591cbebb #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8279
diff changeset
 12755
     |i|
e67d591cbebb #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8279
diff changeset
 12756
     i := Image fromFile:'~/Documents/eads/airbus/logos/Airbus_logo_2017_512px.png'.
e67d591cbebb #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8279
diff changeset
 12757
     i lightened
e67d591cbebb #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8279
diff changeset
 12758
    "
e67d591cbebb #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8279
diff changeset
 12759
5655
37bd5c7eb765 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 5643
diff changeset
 12760
    "Modified: / 24-11-2010 / 11:17:55 / cg"
54
29a6b2f8e042 *** empty log message ***
claus
parents: 46
diff changeset
 12761
!
29a6b2f8e042 *** empty log message ***
claus
parents: 46
diff changeset
 12762
134
claus
parents: 132
diff changeset
 12763
magnifiedBy:scale
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 12764
    "return a new image magnified by scalePoint, aPoint.
72
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
 12765
     If non-integral magnify is asked for, pass the work on to 'hardMagnifyBy:'
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
 12766
     while simple (integral) magnifications are handled here."
0
48194c26a46c Initial revision
claus
parents:
diff changeset
 12767
8169
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12768
    ^ self magnifiedBy:scale smooth:false
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12769
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12770
    "
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12771
     (Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif') inspect.
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12772
     ((Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif') magnifiedBy:1@2) inspect.
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12773
    "
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12774
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12775
    "Modified (comment): / 11-09-2017 / 09:10:13 / cg"
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12776
!
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12777
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12778
magnifiedBy:scale smooth:smooth
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12779
    "return a new image magnified by scalePoint, aPoint.
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12780
     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
 12781
     while simple (integral) magnifications are handled here."
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12782
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 12783
    |scalePoint mX mY
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
 12784
     magX      "{ Class: SmallInteger }"   "new version of stc can find this out itself..."
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
 12785
     magY      "{ Class: SmallInteger }"
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
 12786
     srcOffset "{ Class: SmallInteger }"
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
 12787
     dstOffset "{ Class: SmallInteger }"
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
 12788
     w         "{ Class: SmallInteger }"
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
 12789
     h         "{ Class: SmallInteger }"
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
 12790
     first
906
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
 12791
     newWidth newHeight newImage newBits newMask
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
 12792
     bitsPerPixel newBytesPerRow oldBytesPerRow
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
 12793
     bytes|
0
48194c26a46c Initial revision
claus
parents:
diff changeset
 12794
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 12795
    scalePoint := scale asPoint.
2772
e8ceedf9aeab code cleanup & a few more SmallInteger type hints
Claus Gittinger <cg@exept.de>
parents: 2760
diff changeset
 12796
    mX := scalePoint x.
e8ceedf9aeab code cleanup & a few more SmallInteger type hints
Claus Gittinger <cg@exept.de>
parents: 2760
diff changeset
 12797
    mY := scalePoint y.
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
 12798
    ((mX <= 0) or:[mY <= 0]) ifTrue:[^ nil].
0
48194c26a46c Initial revision
claus
parents:
diff changeset
 12799
    ((mX = 1) and:[mY = 1]) ifTrue:[^ self].
48194c26a46c Initial revision
claus
parents:
diff changeset
 12800
8169
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12801
    smooth ifTrue:[
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12802
        ^ self hardSmoothingMagnifiedBy:scalePoint
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12803
    ].
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
 12804
    ((mX isMemberOf:SmallInteger) and:[mY isMemberOf:SmallInteger]) ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12805
        ^ self hardMagnifiedBy:scalePoint
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
 12806
    ].
8169
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12807
    
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
 12808
    bytes := self bits.
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
 12809
    bitsPerPixel := self depth.
0
48194c26a46c Initial revision
claus
parents:
diff changeset
 12810
    oldBytesPerRow := ((width * bitsPerPixel) + 7) // 8.
48194c26a46c Initial revision
claus
parents:
diff changeset
 12811
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
 12812
    w := width.
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
 12813
    h := height.
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
 12814
    magX := mX.
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
 12815
    magY := mY.
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
 12816
2772
e8ceedf9aeab code cleanup & a few more SmallInteger type hints
Claus Gittinger <cg@exept.de>
parents: 2760
diff changeset
 12817
    newWidth := w * magX.
e8ceedf9aeab code cleanup & a few more SmallInteger type hints
Claus Gittinger <cg@exept.de>
parents: 2760
diff changeset
 12818
    newHeight := h * magY.
0
48194c26a46c Initial revision
claus
parents:
diff changeset
 12819
    newBytesPerRow := ((newWidth * bitsPerPixel) + 7) // 8.
48194c26a46c Initial revision
claus
parents:
diff changeset
 12820
    newBits := ByteArray uninitializedNew:(newBytesPerRow * newHeight).
48194c26a46c Initial revision
claus
parents:
diff changeset
 12821
906
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
 12822
    mask notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12823
        newMask := (mask magnifiedBy:scalePoint)
906
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
 12824
    ].
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
 12825
0
48194c26a46c Initial revision
claus
parents:
diff changeset
 12826
    newImage := self species new.
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 12827
    newImage
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12828
        width:newWidth
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12829
        height:newHeight
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12830
        photometric:photometric
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12831
        samplesPerPixel:samplesPerPixel
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12832
        bitsPerSample:bitsPerSample
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12833
        colorMap:colorMap copy
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12834
        bits:newBits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12835
        mask:newMask.
0
48194c26a46c Initial revision
claus
parents:
diff changeset
 12836
48194c26a46c Initial revision
claus
parents:
diff changeset
 12837
    mX = 1 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12838
        "expand rows only"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12839
        srcOffset := 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12840
        dstOffset := 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12841
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12842
        1 to:h do:[:row |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12843
            1 to:magY do:[:i |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12844
                newBits replaceFrom:dstOffset
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12845
                        to:(dstOffset + oldBytesPerRow - 1)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12846
                        with:bytes
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12847
                        startingAt:srcOffset.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12848
                dstOffset := dstOffset + newBytesPerRow
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12849
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12850
            srcOffset := srcOffset + oldBytesPerRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12851
        ].
0
48194c26a46c Initial revision
claus
parents:
diff changeset
 12852
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12853
        "expand cols"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12854
        (mX > 1) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12855
            dstOffset := 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12856
            srcOffset := 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12857
            1 to:h do:[:row |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12858
                self magnifyRowFrom:bytes
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12859
                     offset:srcOffset
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12860
                     into:newBits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12861
                     offset:dstOffset
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12862
                     factor:mX.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12863
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12864
                first := dstOffset.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12865
                dstOffset := dstOffset + newBytesPerRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12866
                " and copy for row expansion "
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12867
                2 to:magY do:[:i |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12868
                    newBits replaceFrom:dstOffset
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12869
                            to:(dstOffset + newBytesPerRow - 1)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12870
                            with:newBits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12871
                            startingAt:first.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12872
                    dstOffset := dstOffset + newBytesPerRow
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12873
                ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12874
                srcOffset := srcOffset + oldBytesPerRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12875
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12876
        ]
0
48194c26a46c Initial revision
claus
parents:
diff changeset
 12877
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
 12878
    ^ newImage
48194c26a46c Initial revision
claus
parents:
diff changeset
 12879
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 12880
    "
3476
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 12881
     ((Image fromFile:'goodies/bitmaps/gifImages/claus.gif') magnifiedBy:1@2)
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 12882
    "
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 12883
8169
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12884
    "Created: / 10-09-2017 / 17:10:34 / cg"
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
 12885
!
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
 12886
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 12887
magnifiedPreservingRatioTo:anExtent
154
claus
parents: 153
diff changeset
 12888
    "return a new image magnified to fit into anExtent,
7242
bf3a75233d55 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 7230
diff changeset
 12889
     preserving the receiver's width/height ratio.
154
claus
parents: 153
diff changeset
 12890
     (i.e. not distorting the image).
claus
parents: 153
diff changeset
 12891
     See also #magnifiedTo: and #magnifiedBy:"
claus
parents: 153
diff changeset
 12892
8329
2151954cfb87 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8326
diff changeset
 12893
    ^ self magnifiedPreservingRatioTo:anExtent smooth:false
154
claus
parents: 153
diff changeset
 12894
claus
parents: 153
diff changeset
 12895
    "
7990
0850e1d5bc13 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7989
diff changeset
 12896
     ((Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif') magnifiedPreservingRatioTo:100@100)
154
claus
parents: 153
diff changeset
 12897
claus
parents: 153
diff changeset
 12898
    in contrast to:
claus
parents: 153
diff changeset
 12899
7990
0850e1d5bc13 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7989
diff changeset
 12900
     ((Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif') magnifiedTo:100@100)
0850e1d5bc13 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7989
diff changeset
 12901
    "
0850e1d5bc13 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7989
diff changeset
 12902
0850e1d5bc13 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7989
diff changeset
 12903
    "Modified: / 22-04-1997 / 12:33:46 / cg"
0850e1d5bc13 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7989
diff changeset
 12904
    "Modified (comment): / 26-03-2017 / 21:47:36 / cg"
154
claus
parents: 153
diff changeset
 12905
!
claus
parents: 153
diff changeset
 12906
8169
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12907
magnifiedPreservingRatioTo:anExtent smooth:smoothBoolean
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12908
    "return a new image magnified to fit into anExtent,
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12909
     preserving the receiver's width/height ratio.
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12910
     (i.e. not distorting the image).
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12911
     See also #magnifiedTo: and #magnifiedBy:"
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12912
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12913
    |rX rY|
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12914
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12915
    rX := anExtent x / self width.
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12916
    rY := anExtent y / self height.
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12917
    ^ self magnifiedBy:(rX min:rY) smooth:smoothBoolean
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12918
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12919
    "
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12920
     ((Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif') magnifiedPreservingRatioTo:100@100)
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12921
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12922
    in contrast to:
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12923
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12924
     ((Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif') magnifiedTo:100@100)
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12925
    "
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12926
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12927
    "Created: / 10-09-2017 / 17:08:57 / cg"
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12928
!
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12929
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 12930
magnifiedTo:anExtent
154
claus
parents: 153
diff changeset
 12931
    "return a new image magnified to have the size specified by extent.
claus
parents: 153
diff changeset
 12932
     This may distort the image if the arguments ratio is not the images ratio.
claus
parents: 153
diff changeset
 12933
     See also #magnifiedPreservingRatioTo: and #magnifiedBy:"
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
 12934
134
claus
parents: 132
diff changeset
 12935
    ^ self magnifiedBy:(anExtent / self extent)
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
 12936
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
 12937
    "
4168
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
 12938
     ((Image fromFile:'goodies/bitmaps/gifImages/garfield.gif') magnifiedTo:100@100)
154
claus
parents: 153
diff changeset
 12939
claus
parents: 153
diff changeset
 12940
    in contrast to:
claus
parents: 153
diff changeset
 12941
4168
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
 12942
     ((Image fromFile:'goodies/bitmaps/gifImages/garfield.gif') magnifiedPreservingRatioTo:100@100)
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
 12943
    "
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
 12944
!
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
 12945
8176
33f71b59070d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
 12946
magnifiedTo:anExtent smooth:aBoolean
33f71b59070d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
 12947
    "return a new image magnified to have the size specified by extent.
33f71b59070d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
 12948
     This may distort the image if the arguments ratio is not the images ratio.
33f71b59070d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
 12949
     See also #magnifiedPreservingRatioTo: and #magnifiedBy:"
33f71b59070d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
 12950
33f71b59070d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
 12951
    |mag|
33f71b59070d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
 12952
33f71b59070d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
 12953
    mag := (anExtent / self extent).
33f71b59070d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
 12954
    aBoolean ifTrue:[
8326
ff1b239ffe17 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
 12955
        ^ self hardSmoothingMagnifiedBy:mag
8176
33f71b59070d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
 12956
    ].    
33f71b59070d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
 12957
    ^ self magnifiedBy:mag
33f71b59070d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
 12958
33f71b59070d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
 12959
    "
33f71b59070d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
 12960
     (Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif') magnifiedTo:100@100 smooth:true
33f71b59070d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
 12961
33f71b59070d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
 12962
    in contrast to:
33f71b59070d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
 12963
33f71b59070d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
 12964
     (Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif') magnifiedTo:100@100 smooth:false
33f71b59070d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
 12965
33f71b59070d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
 12966
    and:
33f71b59070d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
 12967
     ((Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif') magnifiedPreservingRatioTo:100@100)
33f71b59070d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
 12968
    and:
33f71b59070d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
 12969
     ((Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif') magnifiedPreservingRatioTo:100@100 smooth:true)
33f71b59070d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
 12970
    "
33f71b59070d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
 12971
33f71b59070d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
 12972
    "Created: / 13-09-2017 / 13:32:09 / cg"
33f71b59070d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
 12973
!
33f71b59070d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
 12974
3256
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 12975
mixed:amount with:aColor
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 12976
    "return a new image which is blended with some color;
3256
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 12977
     amount determines how much of the blending color is applied (0..)
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 12978
     where 0 means: blending color pure.
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 12979
     The receiver must be a palette image (currently).
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 12980
     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
 12981
     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
 12982
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 12983
     ^ self
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12984
        copyWithColorMapProcessing:[:clr | clr mixed:amount with:aColor]
3256
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 12985
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 12986
    "
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 12987
     (Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') inspect
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 12988
     ((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
 12989
     ((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
 12990
     ((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
 12991
     ((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
 12992
     ((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
 12993
     ((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
 12994
     ((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
 12995
     ((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
 12996
    "
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 12997
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 12998
    "Modified: / 24-04-1997 / 18:31:23 / cg"
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 12999
    "Modified (comment): / 05-09-2017 / 14:36:39 / cg"
3256
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 13000
!
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 13001
1762
061f5a57000a added #negative
Claus Gittinger <cg@exept.de>
parents: 1746
diff changeset
 13002
negative
061f5a57000a added #negative
Claus Gittinger <cg@exept.de>
parents: 1746
diff changeset
 13003
    "return a new image which is a negative of the receiver.
061f5a57000a added #negative
Claus Gittinger <cg@exept.de>
parents: 1746
diff changeset
 13004
     The receiver must be a palette image (currently)."
061f5a57000a added #negative
Claus Gittinger <cg@exept.de>
parents: 1746
diff changeset
 13005
1763
761b4d05ac99 more #negative
Claus Gittinger <cg@exept.de>
parents: 1762
diff changeset
 13006
    |newImage|
761b4d05ac99 more #negative
Claus Gittinger <cg@exept.de>
parents: 1762
diff changeset
 13007
761b4d05ac99 more #negative
Claus Gittinger <cg@exept.de>
parents: 1762
diff changeset
 13008
    colorMap isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13009
        photometric == #blackIs0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13010
            newImage := self copy.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13011
            newImage photometric:#whiteIs0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13012
            ^ newImage
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13013
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13014
        photometric == #whiteIs0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13015
            newImage := self copy.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13016
            newImage photometric:#blackIs0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13017
            ^ newImage
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13018
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13019
        ^ nil
1763
761b4d05ac99 more #negative
Claus Gittinger <cg@exept.de>
parents: 1762
diff changeset
 13020
    ].
761b4d05ac99 more #negative
Claus Gittinger <cg@exept.de>
parents: 1762
diff changeset
 13021
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 13022
     ^ self
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13023
        copyWithColorMapProcessing:[:clr |
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 13024
                Color
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 13025
                    redByte:(255 - clr redByte)
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 13026
                    greenByte:(255 - clr greenByte)
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 13027
                    blueByte:(255 - clr blueByte)
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 13028
            ]
3476
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 13029
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 13030
    "
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 13031
     (Image fromFile:'goodies/bitmaps/gifImages/claus.gif') inspect
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 13032
     (Image fromFile:'goodies/bitmaps/gifImages/claus.gif') negative inspect
1762
061f5a57000a added #negative
Claus Gittinger <cg@exept.de>
parents: 1746
diff changeset
 13033
    "
061f5a57000a added #negative
Claus Gittinger <cg@exept.de>
parents: 1746
diff changeset
 13034
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 13035
    "Created: / 20-06-1997 / 13:13:41 / cg"
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 13036
    "Modified: / 31-01-2017 / 14:43:19 / stefan"
1762
061f5a57000a added #negative
Claus Gittinger <cg@exept.de>
parents: 1746
diff changeset
 13037
!
061f5a57000a added #negative
Claus Gittinger <cg@exept.de>
parents: 1746
diff changeset
 13038
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
 13039
rotated:degrees
8190
8d870345e0cd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8185
diff changeset
 13040
    "return a new image from the old one, by rotating the image degrees clockwise.
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 13041
     Notice that the resulting image has a different extent.
1646
48ab44c4664f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1644
diff changeset
 13042
     If rotation is heavily used, the workHorse methods
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 13043
     (#easyRotateBitsInto:angle: and #hardRotated:) may
1646
48ab44c4664f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1644
diff changeset
 13044
     be redefined in concrete image subclasses."
48ab44c4664f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1644
diff changeset
 13045
3912
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
 13046
    |nW nH newImage d|
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
 13047
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 13048
    d := degrees truncated.
8190
8d870345e0cd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8185
diff changeset
 13049
    "/ -45 \\ 360
8d870345e0cd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8185
diff changeset
 13050
    d := d \\ 360.
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 13051
    d = 0 ifTrue:[
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 13052
        ^ self
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 13053
    ].
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 13054
    d = 180 ifTrue:[
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 13055
        nW := width.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 13056
        nH := height.
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 13057
    ] ifFalse:[(d = 90 or:[d = 270]) ifTrue:[
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 13058
        nW := height.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 13059
        nH := width.
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 13060
    ] ifFalse:[
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 13061
        ^ self hardRotated:d
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 13062
    ]].
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
 13063
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
 13064
    newImage := self species new.
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 13065
    newImage 
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 13066
        width:nW
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 13067
        height:nH
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 13068
        photometric:photometric
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 13069
        samplesPerPixel:samplesPerPixel
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 13070
        bitsPerSample:bitsPerSample
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 13071
        colorMap:colorMap copy
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 13072
        bits:nil
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 13073
        mask:(mask ifNotNil:[mask rotated:degrees]);
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 13074
        createPixelStore.
1646
48ab44c4664f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1644
diff changeset
 13075
7534
0b7e23635791 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7529
diff changeset
 13076
    self easyRotateBitsInto:newImage angle:d.
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 13077
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
 13078
    ^ newImage
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
 13079
692
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13080
    "
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13081
     |i|
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13082
7529
5f77a718b7bd #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7523
diff changeset
 13083
     i := Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif'.
7534
0b7e23635791 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7529
diff changeset
 13084
     i inspect.
0b7e23635791 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7529
diff changeset
 13085
     (i rotated:45) inspect.
0b7e23635791 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7529
diff changeset
 13086
     (i rotated:90) inspect.
0b7e23635791 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7529
diff changeset
 13087
     (i rotated:180) inspect.
0b7e23635791 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7529
diff changeset
 13088
     (i rotated:270) inspect.
0b7e23635791 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7529
diff changeset
 13089
    "
0b7e23635791 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7529
diff changeset
 13090
    "
0b7e23635791 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7529
diff changeset
 13091
     |i|
0b7e23635791 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7529
diff changeset
 13092
0b7e23635791 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7529
diff changeset
 13093
     i := Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif'.
7529
5f77a718b7bd #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7523
diff changeset
 13094
     i := Depth24Image fromImage:i.
692
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13095
     i inspect.
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 13096
     (i rotated:45) inspect.
692
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13097
     (i rotated:90) inspect.
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13098
     (i rotated:180) inspect.
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13099
     (i rotated:270) inspect.
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13100
    "
1646
48ab44c4664f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1644
diff changeset
 13101
    "
48ab44c4664f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1644
diff changeset
 13102
     |i|
48ab44c4664f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1644
diff changeset
 13103
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 13104
     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
 13105
     i inspect.
48ab44c4664f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1644
diff changeset
 13106
     (i rotated:90) inspect.
48ab44c4664f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1644
diff changeset
 13107
     (i rotated:180) inspect.
48ab44c4664f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1644
diff changeset
 13108
     (i rotated:270) inspect.
48ab44c4664f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1644
diff changeset
 13109
    "
48ab44c4664f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1644
diff changeset
 13110
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 13111
    "Modified (comment): / 19-07-2017 / 12:50:55 / stefan"
8190
8d870345e0cd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8185
diff changeset
 13112
    "Modified (comment): / 09-10-2017 / 14:55:12 / cg"
692
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13113
!
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13114
6624
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13115
slightlyDarkened
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13116
    "return a new image which is slightly darker than the receiver.
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13117
     The receiver must be a palette image (currently).
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13118
     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
 13119
     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
 13120
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13121
    ^ self copyWithColorMapProcessing:[:clr | clr slightlyDarkened]
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13122
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13123
    "
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13124
     (Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') inspect
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13125
     (Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') lightened inspect
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13126
     (Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') darkened inspect
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13127
     (Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') darkened darkened inspect
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13128
    "
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13129
!
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13130
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13131
slightlyLightened
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13132
    "return a new image which is slightly brighter than the receiver.
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13133
     The receiver must be a palette image (currently).
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13134
     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
 13135
     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
 13136
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13137
    ^ self copyWithColorMapProcessing:[:clr | clr slightlyLightened]
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13138
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13139
    "
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13140
     (Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') inspect
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13141
     (Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') lightened inspect
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13142
     (Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') darkened inspect
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13143
     (Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') darkened darkened inspect
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13144
    "
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13145
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13146
    "Modified: / 24-11-2010 / 11:17:55 / cg"
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13147
!
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13148
8169
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13149
smoothingMagnifiedBy:scale
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13150
    "return a new image magnified by scalePoint, aPoint.
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13151
     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
 13152
     while simple (integral) magnifications are handled here."
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13153
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13154
    ^ self hardSmoothingMagnifiedBy:scale
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13155
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13156
    "Created: / 10-09-2017 / 11:47:22 / cg"
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13157
!
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13158
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13159
smoothingMagnifiedPreservingRatioTo:anExtent
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13160
    "return a new image magnified to fit into anExtent,
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13161
     preserving the receiver's width/height ratio.
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13162
     (i.e. not distorting the image).
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13163
     See also #magnifiedTo: and #magnifiedBy:"
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13164
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13165
    |rX rY|
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13166
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13167
    rX := anExtent x / self width.
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13168
    rY := anExtent y / self height.
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13169
    ^ self hardSmoothingMagnifiedBy:(rX min:rY)
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13170
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13171
    "
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13172
     ((Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif') magnifiedPreservingRatioTo:100@100)
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13173
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13174
    in contrast to:
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13175
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13176
     ((Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif') magnifiedTo:100@100)
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13177
    "
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13178
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13179
    "Created: / 10-09-2017 / 11:45:58 / cg"
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13180
!
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13181
4972
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13182
threeDProjected:fraction1 and:fraction2
7906
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 13183
    "return a 3D-projected version.
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 13184
     Not really 3D, but good enough to create screenshots for webpages...
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 13185
     TODO: kick out this q&d hack, and write something real..."
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 13186
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 13187
    |dx1 dx2 newImage newBits 
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 13188
     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
 13189
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13190
    newImage := self species new.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13191
    newImage width:width.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13192
    newImage height:height.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13193
    newImage createPixelStore.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13194
    newBits := newImage bits.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13195
    newImage photometric:photometric.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13196
    newImage samplesPerPixel:samplesPerPixel.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13197
    newImage bitsPerSample:bitsPerSample.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13198
    newImage colorMap:colorMap copy.
7906
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 13199
    newImage maskedPixelsAre0:self maskedPixelsAre0.
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 13200
    
4972
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13201
    mask notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13202
        newImage mask:(mask threeDProjected:fraction1 and:fraction2)
4972
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13203
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13204
        self isMask ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13205
            self depth ~~ 1 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13206
                m := ImageMask width:width height:height.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13207
                m bits:(maskBits := ByteArray new:(m bytesPerRow * height)).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13208
                maskBits atAllPut:16rFF.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13209
                newImage mask:(m threeDProjected:fraction1 and:fraction2)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13210
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13211
        ]
4972
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13212
    ].
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13213
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13214
    myDepth := self depth.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13215
    myDepth == 1 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13216
        blackPixel := 0.
4972
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13217
    ] ifFalse:[
7906
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 13218
        self maskedPixelsAre0 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13219
            blackPixel := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13220
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13221
            blackPixel := self valueFromColor:Color black.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13222
            blackPixel isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13223
                blackPixel := self valueFromColor:Color white.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13224
                blackPixel isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13225
                    blackPixel := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13226
                ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13227
            ]
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
        self isMask ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13230
            blackPixel := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13231
        ].
4972
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13232
    ].
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13233
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13234
    newBits atAllPut:0.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13235
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13236
    "/ now, walk over destination pixels,
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13237
    "/ fetching from source.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13238
    halfH := (height - 1) / 2.0.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13239
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13240
    "/  --------------------------------------------------------------
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13241
    "/  |**************                                              |
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13242
    "/  |              ************                                  | dx1
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13243
    "/  |                          *************                     |
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13244
    "/  |                                       **********           |
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 6037
diff changeset
 13245
    "/  |fl                          fy                   ***********|
4972
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13246
    "/  |                                                            | fr
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13247
    "/  |                                                            | Mr  (!!= Ml)      |
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13248
    "/  |Ml                          my                              | fr               | dm (=Mr-Ml)
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13249
    "/  |                                                     *******|                  |
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13250
    "/  |                            fy              *********       |
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 6037
diff changeset
 13251
    "/  |fl                                 *********                |
4972
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13252
    "/  |                          *********                         | dx2
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 6037
diff changeset
 13253
    "/  |                 *********                                  |
4972
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13254
    "/  |        *********                                           |
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13255
    "/  |********                                                    |
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13256
    "/  --------------------------------------------------------------
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13257
    dx1 := height * fraction1.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13258
    dx2 := height * fraction2.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13259
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13260
    fr := (height - dx1 - dx2) / 2.0.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13261
    fl := (height) / 2.0.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13262
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13263
    ml := height / 2.0.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13264
    mr := dx1+fr.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13265
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13266
    dm := mr-ml.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13267
    df := fr-fl.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13268
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13269
    0 to:width-1 do:[:srcX |
7906
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 13270
        dstX := srcX * 0.75.
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 13271
        
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13272
        fractX := srcX / width.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13273
        my := ml + (dm * fractX).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13274
        fy := fl + (df * fractX).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13275
        o1 := dx1 * fractX.
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
        0 to:height-1 do:[:srcY |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13278
            srcY < halfH ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13279
                dstY := o1 + (fy * (srcY / halfH)).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13280
            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13281
                dstY := my + (fy * ((srcY-halfH) / halfH)).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13282
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13283
            pix := self pixelAtX:srcX y:srcY.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13284
            dstY < 0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13285
                ifTrue:[dstY := 0]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13286
                ifFalse:[ dstY >= height ifTrue:[dstY := height-1]].
7906
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 13287
            newImage pixelAtX:dstX truncated y:dstY truncated put:pix.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13288
        ].
4972
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13289
    ].
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13290
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13291
    ^ newImage
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13292
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13293
    "
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13294
     |i|
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13295
7906
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 13296
     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
 13297
     i := Depth24Image fromImage:i.
7906
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 13298
     (i threeDProjected:0.1 and:0.3) inspect.
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 13299
     (i threeDProjected:0.1 and:0.1) inspect.
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 13300
    "
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 13301
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 13302
    "
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 13303
     |i|
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 13304
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 13305
     Transcript topView raiseDeiconified.
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 13306
     i := Image fromView:Transcript topView.
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 13307
     i := Depth24Image fromImage:i.
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 13308
     (i threeDProjected:0.1 and:0.2) inspect.
4972
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13309
    "
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 13310
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 13311
    "Modified: / 31-01-2017 / 15:04:22 / stefan"
7906
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 13312
    "Modified: / 16-02-2017 / 20:38:53 / cg"
4972
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13313
!
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13314
3905
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13315
withColorResolutionReducedBy:numBits
8441
845edd2603bc #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8374
diff changeset
 13316
    "return a new image with the same picture as the receiver, 
845edd2603bc #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8374
diff changeset
 13317
     but reduced colorResolution.
845edd2603bc #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8374
diff changeset
 13318
     That is, the lower numBits are cleared in the r/g/b color components.
3905
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13319
     If anything fails, return nil."
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13320
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13321
    |xMax yMax r g b nR nG nB clr pix map revMap n_clr n_pix mask anyChange
8524
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
 13322
     newColors newColorArray newImage newPixelValue|
3905
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13323
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13324
    numBits > 7 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13325
        ^ nil
3905
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13326
    ].
8441
845edd2603bc #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8374
diff changeset
 13327
    mask := (16rFF bitShift:numBits) bitAnd:16rFF. "/ has 0 in numBits low bits
8524
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
 13328
"/    extMask := (1 bitShift:numBits)-1.             "/ has 1 in numBits low bits
3905
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13329
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13330
    anyChange := false.
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13331
4317
a24172a52a76 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4296
diff changeset
 13332
    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
 13333
    newImage photometric:photometric.
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13334
    newImage colorMap:(self colorMap copy).
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13335
    newImage bits:(self bits copy).
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13336
    newImage mask:(self mask copy).
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13337
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13338
    xMax := width - 1.
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13339
    yMax := height - 1.
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13340
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 13341
    newPixelValue :=
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13342
        [:image :pixelValue |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13343
            |r g b nR nG nB|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13344
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13345
            r := image redBitsOf:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13346
            g := image greenBitsOf:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13347
            b := image blueBitsOf:pixelValue.
8441
845edd2603bc #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8374
diff changeset
 13348
            nR := (r bitAnd:mask). "/ (nR bitAnd:extMask)~~0 ifTrue:[nR := nR bitOr:extBits].
845edd2603bc #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8374
diff changeset
 13349
            nG := (g bitAnd:mask). "/ (nG bitAnd:extMask)~~0 ifTrue:[nG := nG bitOr:extBits].
845edd2603bc #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8374
diff changeset
 13350
            nB := (b bitAnd:mask). "/ (nB bitAnd:extMask)~~0 ifTrue:[nB := nB bitOr:extBits].
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13351
            image valueFromRedBits:nR greenBits:nG blueBits:nB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13352
        ].
3905
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13353
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13354
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 13355
    photometric ~~ #palette ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13356
        "/ direct manipulation of the pixels
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13357
        0 to:yMax do:[:y |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13358
            0 to:xMax do:[:x |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13359
                pix := self pixelAtX:x y:y.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13360
                n_pix := newPixelValue value:self value:pix.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13361
                n_pix ~= pix ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13362
                    newImage pixelAtX:x y:y put:n_pix.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13363
                    anyChange := true.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13364
                ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13365
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13366
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13367
        anyChange ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13368
            ^ nil
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13369
        ].
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 13370
    ] ifFalse:[
8441
845edd2603bc #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8374
diff changeset
 13371
        newColors := Set new.
845edd2603bc #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8374
diff changeset
 13372
        newColorArray := OrderedCollection new.
845edd2603bc #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8374
diff changeset
 13373
        map := Array new:256.
845edd2603bc #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8374
diff changeset
 13374
        revMap := OrderedCollection new.
845edd2603bc #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8374
diff changeset
 13375
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13376
        "/ manipulate the colormap
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13377
        0 to:yMax do:[:y |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13378
            0 to:xMax do:[:x |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13379
                pix := self pixelAtX:x y:y.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13380
                (n_pix := map at:pix+1) isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13381
                    clr := self colorAtX:x y:y.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13382
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13383
                    r := clr redByte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13384
                    g := clr greenByte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13385
                    b := clr blueByte.
8524
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
 13386
                    nR := r bitAnd:mask. "/(nR bitAnd:extMask)~~0 ifTrue:[nR := nR bitOr:extBits].
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
 13387
                    nG := g bitAnd:mask. "/(nR bitAnd:extMask)~~0 ifTrue:[nR := nR bitOr:extBits].
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
 13388
                    nB := b bitAnd:mask. "/(nR bitAnd:extMask)~~0 ifTrue:[nR := nR bitOr:extBits].
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13389
                    n_clr := Color redByte:nR greenByte:nG blueByte:nB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13390
                    (newColors includes:n_clr) ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13391
                        newColors add:n_clr.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13392
                        newColorArray add:n_clr.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13393
                        revMap add:pix.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13394
                        map at:pix+1 put:(n_pix := revMap size - 1).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13395
                    ] ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13396
                        "/ mhmh - multiple pixels mapped to the same color
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13397
                        n_pix := (newColorArray indexOf:n_clr) - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13398
                        map at:pix+1 put:n_pix.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13399
                    ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13400
                ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13401
                newImage pixelAtX:x y:y put:n_pix.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13402
            ]
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
        revMap size == self colorMap size ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13405
            revMap = (0 to:revMap size-1) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13406
                ^ nil
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13407
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13408
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13409
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13410
        newImage colorMap:(MappedPalette withColors:newColorArray).
3905
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13411
    ].
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13412
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13413
    ^ newImage
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 13414
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 13415
    "Modified: / 30-01-2017 / 20:15:02 / stefan"
8441
845edd2603bc #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8374
diff changeset
 13416
    "Modified: / 06-08-2018 / 00:59:27 / Claus Gittinger"
8524
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
 13417
    "Modified: / 19-10-2018 / 16:29:09 / Stefan Vogel"
3905
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13418
!
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13419
692
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13420
withPixelFunctionApplied:pixelFunctionBlock
8282
e67d591cbebb #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8279
diff changeset
 13421
    "return a new image from the old one, 
e67d591cbebb #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8279
diff changeset
 13422
     by applying a pixel processor on the pixel colors.
e67d591cbebb #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8279
diff changeset
 13423
e67d591cbebb #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8279
diff changeset
 13424
     Notice: this method is relatively slow - either apply pixel values
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 13425
     (#withPixelFunctionAppliedToPixels:) or redefine this method in
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 13426
     a concrete subclass.
3860
571f1cd259f5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3855
diff changeset
 13427
     (read `Beyond photography, by Gerard J. Holzmann;
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13428
           ISBM 0-13-074410-7)
8497
2562e07421bb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8482
diff changeset
 13429
     See blurred / oilPainted as examples ...)"
692
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13430
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13431
    |w  "{Class: SmallInteger }"
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13432
     h  "{Class: SmallInteger }"
4160
6d31e4e6a432 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4159
diff changeset
 13433
     newImage "newBits newBytesPerRow"|
692
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13434
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13435
    newImage := self species new.
3912
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
 13436
    newImage depth:self depth.
692
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13437
    newImage width:width.
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13438
    newImage height:height.
3912
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
 13439
"/    newBytesPerRow := ((width * self depth) + 7) // 8.
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
 13440
"/    newBits := ByteArray uninitializedNew:(newBytesPerRow * height).
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
 13441
    newImage createPixelStore. "/ bits:newBits.
692
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13442
    newImage photometric:photometric.
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13443
    newImage samplesPerPixel:samplesPerPixel.
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13444
    newImage bitsPerSample:bitsPerSample.
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13445
    newImage colorMap:colorMap copy.
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13446
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13447
    w := width - 1.
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13448
    h := height - 1.
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13449
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13450
    0 to:h do:[:y |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13451
        0 to:w do:[:x |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13452
            newImage colorAtX:x y:y put:(pixelFunctionBlock
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13453
                                                value:self
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13454
                                                value:(self colorAtX:x y:y)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13455
                                                value:x
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13456
                                                value:y)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13457
        ]
692
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13458
    ].
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13459
    ^ newImage
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13460
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 13461
    "black out everything except for some rectangle:
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 13462
1570
1aeaa96fa6fb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1510
diff changeset
 13463
     |i black|
692
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13464
8497
2562e07421bb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8482
diff changeset
 13465
     i := Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif'.
692
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13466
     i inspect.
1570
1aeaa96fa6fb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1510
diff changeset
 13467
1aeaa96fa6fb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1510
diff changeset
 13468
     black := Color black.
1aeaa96fa6fb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1510
diff changeset
 13469
     (i withPixelFunctionApplied:[:oldImage :oldColor :x :y |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13470
                        ((x between:100 and:200)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13471
                        and:[y between:100 and:200]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13472
                            oldColor
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13473
                        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13474
                            black.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13475
                        ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13476
                     ]) inspect.
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 13477
    "
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 13478
    "brighten a frame:
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 13479
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 13480
     |i black w h|
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 13481
8497
2562e07421bb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8482
diff changeset
 13482
     i := Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif'.
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 13483
     i inspect.
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 13484
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 13485
     w := i width.
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 13486
     h := i height.
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 13487
     (i withPixelFunctionApplied:[:oldImage :oldColor :x :y |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13488
                        ((x between:0 and:10)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13489
                        or:[(y between:0 and:10)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13490
                        or:[(x between:w-10 and:w)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13491
                        or:[y between:h-10 and:h]]]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13492
                            oldColor lightened nearestIn:i colorMap
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13493
                        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13494
                            oldColor.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13495
                        ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13496
                     ]) inspect.
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 13497
    "
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 13498
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 13499
    "Modified: 24.4.1997 / 18:36:59 / cg"
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 13500
!
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 13501
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 13502
withPixelFunctionAppliedToPixels:pixelFunctionBlock
1509
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13503
    "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
 13504
     on the pixel values.
4296
240f73781089 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4226
diff changeset
 13505
     (read `Beyond photography, by Gerard J. Holzmann;
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13506
           ISBM 0-13-074410-7)
8497
2562e07421bb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8482
diff changeset
 13507
     See blurred / oilPainted as examples ...)"
3911
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13508
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 13509
    ^ self
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13510
        withPixelFunctionAppliedToPixels:pixelFunctionBlock
8497
2562e07421bb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8482
diff changeset
 13511
        in:(0@0 extent:width@height)
3911
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13512
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13513
    "oil painting effect:
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13514
8497
2562e07421bb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8482
diff changeset
 13515
     |i w h brushSize|
2562e07421bb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8482
diff changeset
 13516
2562e07421bb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8482
diff changeset
 13517
     i := Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif'.
3911
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13518
     i inspect.
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13519
     w := i width - 1.
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13520
     h := i height - 1.
8497
2562e07421bb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8482
diff changeset
 13521
     brushSize := 4.
3911
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13522
     (i withPixelFunctionAppliedToPixels:[:oldImage :oldPixel :x :y |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13523
                        |b p max xMin xMax yMin yMax|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13524
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13525
                        b := Bag identityNew:10.
8497
2562e07421bb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8482
diff changeset
 13526
                        xMin := x-brushSize max:0.
2562e07421bb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8482
diff changeset
 13527
                        xMax := x+brushSize min:w.
2562e07421bb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8482
diff changeset
 13528
                        yMin := y-brushSize max:0.
2562e07421bb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8482
diff changeset
 13529
                        yMax := y+brushSize min:h.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13530
                        xMin to:xMax do:[:tx|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13531
                          yMin to:yMax do:[:ty|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13532
                            b add:(oldImage pixelAtX:tx y:ty)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13533
                          ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13534
                        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13535
                        max := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13536
                        b contents keysAndValuesDo:[:pixel :n |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13537
                            n > max ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13538
                                p := pixel.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13539
                                max := n
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13540
                            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13541
                        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13542
                        p
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13543
                     ]) inspect.
3911
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13544
    "
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13545
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13546
    "fisheye effect:
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13547
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13548
     |i w h w2 h2 R white|
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13549
8497
2562e07421bb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8482
diff changeset
 13550
     i := Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif'.
3911
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13551
     i inspect.
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13552
     w := i width - 1.
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13553
     h := i height - 1.
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13554
     w2 := w // 2.
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13555
     h2 := h // 2.
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13556
     R := w2.
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13557
     white := i valueFromColor:Color white.
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13558
     (i withPixelFunctionAppliedToPixels:[:oldImage :oldPixel :x :y |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13559
                        |p r a nR nP nX nY|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13560
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13561
                        p := (x-w2)@(y-h2).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13562
                        r := p r.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13563
                        a := p theta.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13564
                        nR := r * r / R.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13565
                        nP := Point r:nR theta:a.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13566
                        nX := ((nP x+w2) rounded max:0) min:w.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13567
                        nY := ((nP y+h2) rounded max:0) min:h.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13568
                        (nX > w or:[nX < 0]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13569
                            white
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13570
                        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13571
                            (nY > h or:[nY < 0]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13572
                                white
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13573
                            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13574
                                oldImage pixelAtX:nX y:nY
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13575
                            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13576
                        ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13577
                     ]) inspect.
3911
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13578
    "
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13579
    "fisheye effect:
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13580
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13581
     |i w h w2 h2 R white|
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13582
8497
2562e07421bb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8482
diff changeset
 13583
     i := Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif'.
3911
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13584
     i inspect.
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13585
     w := i width - 1.
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13586
     h := i height - 1.
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13587
     w2 := w // 2.
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13588
     h2 := h // 2.
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13589
     R := w2.
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13590
     white := i valueFromColor:Color white.
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13591
     (i withPixelFunctionAppliedToPixels:[:oldImage :oldPixel :x :y |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13592
                        |p r a nR nP nX nY|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13593
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13594
                        p := (x-w2)@(y-h2).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13595
                        r := p r.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13596
                        a := p theta.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13597
                        nR := r * r / R.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13598
                        nP := Point r:nR theta:a.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13599
                        nX := (nP x+w2) rounded.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13600
                        nY := (nP y+h2) rounded.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13601
                        (nX > w or:[nX < 0]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13602
                            white
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13603
                        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13604
                            (nY > h or:[nY < 0]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13605
                                white
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13606
                            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13607
                                oldImage pixelAtX:nX y:nY
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13608
                            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13609
                        ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13610
                     ]) inspect.
3911
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13611
    "
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13612
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13613
    "Created: 24.4.1997 / 18:37:17 / cg"
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13614
    "Modified: 24.4.1997 / 18:40:02 / cg"
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13615
!
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13616
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13617
withPixelFunctionAppliedToPixels:pixelFunctionBlock in:aRectangle
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13618
    "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
 13619
     on the pixel values.
4160
6d31e4e6a432 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4159
diff changeset
 13620
     (read `Beyond photography, by Gerard J. Holzmann;
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13621
           ISBM 0-13-074410-7)
8497
2562e07421bb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8482
diff changeset
 13622
     See blurred / oilPainted as examples ...)"
1509
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13623
4160
6d31e4e6a432 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4159
diff changeset
 13624
    |newImage "newBits newBytesPerRow"|
1509
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13625
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13626
    newImage := self species new.
3912
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
 13627
    newImage depth:self depth.
1509
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13628
    newImage width:width.
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13629
    newImage height:height.
3912
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
 13630
"/    newBytesPerRow := ((width * self depth) + 7) // 8.
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
 13631
"/    newBits := ByteArray uninitializedNew:(newBytesPerRow * height).
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
 13632
    newImage createPixelStore. "/ bits:newBits
1509
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13633
    newImage photometric:photometric.
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13634
    newImage samplesPerPixel:samplesPerPixel.
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13635
    newImage bitsPerSample:bitsPerSample.
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13636
    newImage colorMap:colorMap copy.
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13637
3911
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13638
    self applyPixelValuesTo:pixelFunctionBlock in:aRectangle into:newImage.
1509
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13639
    ^ newImage
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13640
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13641
    "oil painting effect:
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13642
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13643
     |i w h|
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13644
8497
2562e07421bb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8482
diff changeset
 13645
     i := Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif'.
1509
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13646
     i inspect.
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13647
     w := i width - 1.
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13648
     h := i height - 1.
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 13649
     (i withPixelFunctionAppliedToPixels:[:oldImage :oldPixel :x :y |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13650
                        |b p max xMin xMax yMin yMax|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13651
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13652
                        b := Bag identityNew:10.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13653
                        xMin := x-3 max:0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13654
                        xMax := x+3 min:w.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13655
                        yMin := y-3 max:0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13656
                        yMax := y+3 min:h.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13657
                        xMin to:xMax do:[:tx|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13658
                          yMin to:yMax do:[:ty|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13659
                            b add:(oldImage pixelAtX:tx y:ty)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13660
                          ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13661
                        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13662
                        max := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13663
                        b contents keysAndValuesDo:[:pixel :n |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13664
                            n > max ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13665
                                p := pixel.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13666
                                max := n
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13667
                            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13668
                        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13669
                        p
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13670
                     ]) inspect.
1509
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13671
    "
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13672
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13673
    "fisheye effect:
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13674
1570
1aeaa96fa6fb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1510
diff changeset
 13675
     |i w h w2 h2 R white|
1509
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13676
8497
2562e07421bb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8482
diff changeset
 13677
     i := Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif'.
1509
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13678
     i inspect.
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13679
     w := i width - 1.
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13680
     h := i height - 1.
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13681
     w2 := w // 2.
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13682
     h2 := h // 2.
1510
8b56c96a9e9d pixel processing
Claus Gittinger <cg@exept.de>
parents: 1509
diff changeset
 13683
     R := w2.
1570
1aeaa96fa6fb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1510
diff changeset
 13684
     white := i valueFromColor:Color white.
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 13685
     (i withPixelFunctionAppliedToPixels:[:oldImage :oldPixel :x :y |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13686
                        |p r a nR nP nX nY|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13687
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13688
                        p := (x-w2)@(y-h2).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13689
                        r := p r.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13690
                        a := p theta.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13691
                        nR := r * r / R.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13692
                        nP := Point r:nR theta:a.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13693
                        nX := ((nP x+w2) rounded max:0) min:w.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13694
                        nY := ((nP y+h2) rounded max:0) min:h.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13695
                        (nX > w or:[nX < 0]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13696
                            white
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13697
                        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13698
                            (nY > h or:[nY < 0]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13699
                                white
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13700
                            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13701
                                oldImage pixelAtX:nX y:nY
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13702
                            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13703
                        ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13704
                     ]) inspect.
1509
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13705
    "
1510
8b56c96a9e9d pixel processing
Claus Gittinger <cg@exept.de>
parents: 1509
diff changeset
 13706
    "fisheye effect:
8b56c96a9e9d pixel processing
Claus Gittinger <cg@exept.de>
parents: 1509
diff changeset
 13707
8b56c96a9e9d pixel processing
Claus Gittinger <cg@exept.de>
parents: 1509
diff changeset
 13708
     |i w h w2 h2 R white|
8b56c96a9e9d pixel processing
Claus Gittinger <cg@exept.de>
parents: 1509
diff changeset
 13709
8497
2562e07421bb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8482
diff changeset
 13710
     i := Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif'.
1510
8b56c96a9e9d pixel processing
Claus Gittinger <cg@exept.de>
parents: 1509
diff changeset
 13711
     i inspect.
8b56c96a9e9d pixel processing
Claus Gittinger <cg@exept.de>
parents: 1509
diff changeset
 13712
     w := i width - 1.
8b56c96a9e9d pixel processing
Claus Gittinger <cg@exept.de>
parents: 1509
diff changeset
 13713
     h := i height - 1.
8b56c96a9e9d pixel processing
Claus Gittinger <cg@exept.de>
parents: 1509
diff changeset
 13714
     w2 := w // 2.
8b56c96a9e9d pixel processing
Claus Gittinger <cg@exept.de>
parents: 1509
diff changeset
 13715
     h2 := h // 2.
8b56c96a9e9d pixel processing
Claus Gittinger <cg@exept.de>
parents: 1509
diff changeset
 13716
     R := w2.
8b56c96a9e9d pixel processing
Claus Gittinger <cg@exept.de>
parents: 1509
diff changeset
 13717
     white := i valueFromColor:Color white.
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 13718
     (i withPixelFunctionAppliedToPixels:[:oldImage :oldPixel :x :y |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13719
                        |p r a nR nP nX nY|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13720
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13721
                        p := (x-w2)@(y-h2).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13722
                        r := p r.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13723
                        a := p theta.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13724
                        nR := r * r / R.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13725
                        nP := Point r:nR theta:a.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13726
                        nX := (nP x+w2) rounded.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13727
                        nY := (nP y+h2) rounded.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13728
                        (nX > w or:[nX < 0]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13729
                            white
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13730
                        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13731
                            (nY > h or:[nY < 0]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13732
                                white
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13733
                            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13734
                                oldImage pixelAtX:nX y:nY
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13735
                            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13736
                        ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13737
                     ]) inspect.
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 13738
    "
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 13739
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 13740
    "Created: 24.4.1997 / 18:37:17 / cg"
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 13741
    "Modified: 24.4.1997 / 18:40:02 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13742
! !
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13743
3870
8245e3f37feb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3868
diff changeset
 13744
!Image methodsFor:'initialization'!
8245e3f37feb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3868
diff changeset
 13745
3912
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
 13746
createPixelStore
8194
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 13747
    "instantiate the underlying pixel storage (a byteArray)"
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 13748
3912
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
 13749
    |bytesPerRow|
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
 13750
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
 13751
    bytesPerRow := self bytesPerRow.
5643
bf38d077884a changed:
Claus Gittinger <cg@exept.de>
parents: 5533
diff changeset
 13752
    self bits:(ByteArray new:(bytesPerRow * self height)).
bf38d077884a changed:
Claus Gittinger <cg@exept.de>
parents: 5533
diff changeset
 13753
bf38d077884a changed:
Claus Gittinger <cg@exept.de>
parents: 5533
diff changeset
 13754
    "Modified: / 02-11-2010 / 20:57:11 / cg"
3912
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
 13755
!
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
 13756
3871
a7867fb8d880 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3870
diff changeset
 13757
initialize
3870
8245e3f37feb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3868
diff changeset
 13758
    self photometric:(self class defaultPhotometric)
8245e3f37feb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3868
diff changeset
 13759
! !
8245e3f37feb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3868
diff changeset
 13760
5037
2e515c9ee849 changed #valueFromColor:
Claus Gittinger <cg@exept.de>
parents: 4998
diff changeset
 13761
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13762
!Image methodsFor:'instance release'!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13763
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 13764
close
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 13765
    "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
 13766
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 13767
    deviceForm notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13768
        deviceForm destroy.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13769
        deviceForm := nil.
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 13770
    ].
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 13771
    monoDeviceForm notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13772
        monoDeviceForm destroy.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13773
        monoDeviceForm := nil.
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 13774
    ].
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 13775
    fullColorDeviceForm notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13776
        fullColorDeviceForm destroy.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13777
        fullColorDeviceForm := nil.
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 13778
    ].
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 13779
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 13780
    device := nil.
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 13781
    mask notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13782
        mask close.
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 13783
    ].
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 13784
    Lobby unregister:self.
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 13785
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 13786
    "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
 13787
    "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
 13788
!
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 13789
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13790
release
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13791
    "release device resources"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13792
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13793
    device := nil.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13794
    deviceForm := nil.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13795
    monoDeviceForm := nil.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13796
    fullColorDeviceForm := nil.
901
6cacd0f4eef0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 896
diff changeset
 13797
    mask notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13798
        mask release.
901
6cacd0f4eef0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 896
diff changeset
 13799
    ].
6cacd0f4eef0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 896
diff changeset
 13800
    Lobby unregister:self.
1746
72a583dd30bd must not forget super release
Claus Gittinger <cg@exept.de>
parents: 1739
diff changeset
 13801
    super release.
72a583dd30bd must not forget super release
Claus Gittinger <cg@exept.de>
parents: 1739
diff changeset
 13802
72a583dd30bd must not forget super release
Claus Gittinger <cg@exept.de>
parents: 1739
diff changeset
 13803
    "Modified: 11.6.1997 / 13:20:04 / cg"
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
 13804
!
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
 13805
4226
dcd06fa84d2c *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4187
diff changeset
 13806
releaseFromDevice
dcd06fa84d2c *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4187
diff changeset
 13807
    "release device resources"
dcd06fa84d2c *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4187
diff changeset
 13808
dcd06fa84d2c *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4187
diff changeset
 13809
    device := nil.
dcd06fa84d2c *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4187
diff changeset
 13810
    deviceForm := nil.
dcd06fa84d2c *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4187
diff changeset
 13811
    monoDeviceForm := nil.
dcd06fa84d2c *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4187
diff changeset
 13812
    fullColorDeviceForm := nil.
dcd06fa84d2c *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4187
diff changeset
 13813
7573
656c59bc93ad #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7565
diff changeset
 13814
4226
dcd06fa84d2c *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4187
diff changeset
 13815
    "Modified: 16.1.1997 / 19:33:01 / cg"
dcd06fa84d2c *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4187
diff changeset
 13816
!
dcd06fa84d2c *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4187
diff changeset
 13817
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13818
restored
7895
cd3eef1d2398 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7887
diff changeset
 13819
    "flush device specifics after a snapin or binary restore.
cd3eef1d2398 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7887
diff changeset
 13820
     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
 13821
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13822
    self release
7895
cd3eef1d2398 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7887
diff changeset
 13823
cd3eef1d2398 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7887
diff changeset
 13824
    "Modified (comment): / 16-02-2017 / 12:36:26 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13825
! !
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13826
2227
7aa9e2a8d321 added #edit - to open an image editor.
Claus Gittinger <cg@exept.de>
parents: 2212
diff changeset
 13827
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
 13828
!Image methodsFor:'obsolete'!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
 13829
3911
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13830
applyPixelValuesTo:pixelFunctionBlock into:newImage in:aRectangle
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13831
    "helper for withPixelFunctionAppliedToValues:
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13832
     enumerate pixelValues and evaluate the block for each.
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13833
     To be redefined by subclasses for better performance."
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13834
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 13835
    ^ self applyPixelValuesTo:pixelFunctionBlock in:aRectangle into:newImage
3911
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13836
!
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13837
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
 13838
magnifyBy:scale
5216
f7ec910cfce1 Mark obsolete methods
Stefan Vogel <sv@exept.de>
parents: 5200
diff changeset
 13839
    <resource: #obsolete>
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
 13840
    "obsolete: has been renamed to magnifiedBy: for ST-80 compatibility
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
 13841
     and name consistency ..."
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
 13842
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
 13843
    self obsoleteMethodWarning.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
 13844
    ^ self magnifiedBy:scale
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
 13845
! !
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
 13846
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13847
!Image methodsFor:'pixel copying'!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13848
8301
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13849
bitBltFrom:anImage function:function x:srcX y:srcY toX:dstX y:dstY width:w height:h
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13850
    "operates on pixel values.
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13851
     Any mask is left unchanged.
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13852
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13853
     WARNING:
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13854
       This is a q@d hack to support the minimum needed for the QRCode generator.
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13855
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13856
       This implementation is a very slow fallback general algorithm
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13857
       (the loop over the source pixels is very slow).
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13858
       If this method is used heavily, you may want to redefine it in
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13859
       concrete subclasses for the common case of of copying from an Image
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13860
       with the same depth & palette.
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13861
       If you do heavy image processing, specialized versions are even req'd
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13862
       for other cases, rewriting the inner loops as inline C-code."
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13863
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13864
    |dX dY op|
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13865
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13866
    dX := srcX-dstX.
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13867
    dY := srcY-dstY.
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13868
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13869
    function == #copy ifTrue:[
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13870
        anImage 
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13871
            valuesFromX:srcX  y:srcY
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13872
            toX:srcX+w-1 y:srcY+h-1
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13873
            do:[:x :y :pixelValue |
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13874
                self pixelAtX:x-dX y:y-dY put:pixelValue.
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13875
            ].
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13876
        ^ self.
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13877
    ].
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13878
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13879
    function == #xor ifTrue:[
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13880
        op := [:a :b | a bitXor:b]
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13881
    ] ifFalse:[
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13882
        function == #and ifTrue:[
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13883
            op := [:a :b | a bitAnd:b]
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13884
        ] ifFalse:[
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13885
            function == #or ifTrue:[
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13886
                op := [:a :b | a bitOr:b]
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13887
            ] ifFalse:[
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13888
                self halt
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13889
            ].
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13890
        ].
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13891
    ].
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13892
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13893
    anImage 
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13894
        valuesFromX:srcX  y:srcY
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13895
        toX:srcX+w-1 y:srcY+h-1
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13896
        do:[:x :y :pixelValue1 |
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13897
            |pixelValue2|
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13898
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13899
            pixelValue2 := self pixelAtX:x-dX y:y-dY.
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13900
            self pixelAtX:x-dX y:y-dY put:(op value:pixelValue1 value:pixelValue2).
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13901
        ]
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13902
!
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13903
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13904
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
 13905
    "replace a rectangular area by pixels from another image.
7552
6d862b1829d9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7551
diff changeset
 13906
     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
 13907
     colorMap - otherwise, an error will be reported.
4955
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13908
     Any mask is copied from the source.
1764
01101be8bd5c obsolete warning messages
Claus Gittinger <cg@exept.de>
parents: 1763
diff changeset
 13909
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13910
     WARNING:
1764
01101be8bd5c obsolete warning messages
Claus Gittinger <cg@exept.de>
parents: 1763
diff changeset
 13911
       This implementation is a very slow fallback general algorithm
01101be8bd5c obsolete warning messages
Claus Gittinger <cg@exept.de>
parents: 1763
diff changeset
 13912
       (the loop over the source pixels is very slow).
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 13913
       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
 13914
       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
 13915
       with the same depth & palette.
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 13916
       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
 13917
       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
 13918
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13919
    |dX dY|
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13920
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13921
    dX := srcX-dstX.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13922
    dY := srcY-dstY.
1248
6afcdec18986 commentary
Claus Gittinger <cg@exept.de>
parents: 1230
diff changeset
 13923
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13924
    ((photometric == anImage photometric)
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13925
     and:[self bitsPerPixel == anImage bitsPerPixel
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13926
     and:[colorMap = anImage colorMap]]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13927
        "/ can loop over values
8301
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13928
        anImage 
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13929
            valuesFromX:srcX  y:srcY
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13930
            toX:srcX+w-1 y:srcY+h-1
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13931
            do:[:x :y :pixelValue |
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13932
                |dstX dstY|
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13933
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13934
                dstX := x-dX.
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13935
                (dstX >= 0 and:[dstX < width]) ifTrue:[
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13936
                    dstY := y-dY.
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13937
                    (dstY >= 0 and:[dstY < height]) ifTrue:[
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13938
                        self pixelAtX:dstX y:dstY put:pixelValue.
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13939
                    ]
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13940
                ]
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13941
            ]
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13942
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13943
        "/ must loop over colors - horribly slow
8301
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13944
        anImage 
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13945
            colorsFromX:srcX  y:srcY
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13946
            toX:srcX+w-1 y:srcY+h-1
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13947
            do:[:x :y :clr |
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13948
                |dstX dstY|
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13949
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13950
                dstX := x-dX.
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13951
                (dstX >= 0 and:[dstX < width]) ifTrue:[
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13952
                    dstY := y-dY.
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13953
                    (dstY >= 0 and:[dstY < height]) ifTrue:[
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13954
                        self colorAtX:x-dX y:y-dY put:clr.
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13955
                    ]
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13956
                ]
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13957
            ]
3457
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 13958
    ].
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 13959
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 13960
    (mask isNil and:[anImage mask notNil]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13961
        "/ I have no mask; copied image has
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13962
        self createMask.
3457
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 13963
    ].
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 13964
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 13965
    mask notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13966
        anImage mask notNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13967
            "/ both have a mask
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13968
            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
 13969
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13970
            "/ I have a mask - copied image has not
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13971
            mask fillRectangleX:dstX y:dstY width:w height:h withValue:1
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13972
        ]
3457
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 13973
"/    ] ifFalse:[
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 13974
"/        anImage mask notNil ifTrue:[
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 13975
"/            "/ I have no mask; copied image has (already handled)
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 13976
"/        ] ifFalse:[
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 13977
"/            "/ none has a mask - nothing to do.
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 13978
"/        ]
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 13979
    ].
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 13980
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13981
    "
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13982
     |i1 i8 i4|
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13983
7552
6d862b1829d9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7551
diff changeset
 13984
     i8 := Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif'.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13985
     i8 inspect.
7552
6d862b1829d9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7551
diff changeset
 13986
     i1 := Image fromFile:'../../libtool/bitmaps/SBrowser.xbm'.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13987
     i1 inspect.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13988
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13989
     i4 := Depth4Image fromImage:i8.
1764
01101be8bd5c obsolete warning messages
Claus Gittinger <cg@exept.de>
parents: 1763
diff changeset
 13990
     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
 13991
     i4 inspect.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13992
    "
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13993
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13994
    "Created: 20.9.1995 / 10:14:01 / claus"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13995
    "Modified: 20.9.1995 / 10:25:31 / claus"
1764
01101be8bd5c obsolete warning messages
Claus Gittinger <cg@exept.de>
parents: 1763
diff changeset
 13996
    "Modified: 21.6.1997 / 13:15:31 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13997
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13998
4955
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13999
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
 14000
    "replace a rectangular area by pixels from another image.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14001
     The sources colors must be present in the destinations
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14002
     colorMap - otherwise, an error will be reported.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14003
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14004
     WARNING:
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14005
       This implementation is a very slow fallback general algorithm
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14006
       (the loop over the source pixels is very slow).
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14007
       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
 14008
       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
 14009
       with the same depth & palette.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14010
       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
 14011
       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
 14012
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14013
    maskedCopy ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14014
        self
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14015
            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
 14016
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14017
        self
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14018
            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
 14019
    ].
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14020
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14021
    "
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14022
     |i1 i8 i4|
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14023
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14024
     i8 := Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif'.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14025
     i8 inspect.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14026
     i1 := Image fromFile:'../../goodies/bitmaps/xbmBitmaps/TicTacToe.xbm'.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14027
     i1 inspect.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14028
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14029
     i4 := Depth4Image fromImage:i8.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14030
     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
 14031
     i4 inspect.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14032
    "
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14033
!
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14034
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14035
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
 14036
    "replace a rectangular area by pixels from another image.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14037
     The sources colors must be present in the destinations
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14038
     colorMap - otherwise, an error will be reported.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14039
     Only unmasked pixels are copied from the source.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14040
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14041
     WARNING:
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14042
       This implementation is a very slow fallback general algorithm
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14043
       (the loop over the source pixels is very slow).
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14044
       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
 14045
       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
 14046
       with the same depth & palette.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14047
       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
 14048
       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
 14049
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14050
    |dX dY|
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14051
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14052
    dX := srcX-dstX.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14053
    dY := srcY-dstY.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14054
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14055
    ((photometric == anImage photometric)
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14056
     and:[self bitsPerPixel == anImage bitsPerPixel
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14057
     and:[colorMap = anImage colorMap]]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14058
        "/ can loop over values
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14059
        anImage valuesFromX:srcX  y:srcY
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14060
                        toX:srcX+w-1 y:srcY+h-1
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14061
                         do:[:x :y :pixelValue |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14062
            (anImage maskAtX:x y:y) ~~ 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14063
                self pixelAtX:x-dX y:y-dY put:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14064
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14065
        ]
4955
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14066
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14067
        "/ must loop over colors - horribly slow
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14068
        anImage colorsFromX:srcX  y:srcY
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14069
                        toX:srcX+w-1 y:srcY+h-1
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14070
                         do:[:x :y :clr |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14071
            (anImage maskAtX:x y:y) ~~ 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14072
                self colorAtX:x-dX y:y-dY put:clr.
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
        ]
4955
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14075
    ].
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14076
!
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14077
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14078
subImageIn:aRectangle
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14079
    "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
 14080
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14081
    ^ self class fromSubImage:self in:aRectangle
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14082
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14083
    "
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14084
     |i|
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14085
4168
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
 14086
     i := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14087
     i inspect.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14088
     (i subImageIn:(300@160 corner:340@200)) inspect
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14089
    "
7551
a58984867d2f #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7537
diff changeset
 14090
    "
a58984867d2f #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7537
diff changeset
 14091
     |i|
a58984867d2f #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7537
diff changeset
 14092
a58984867d2f #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7537
diff changeset
 14093
     i := Image fromFile:'/Volumes/tmp/fillimage.ok.png'.
a58984867d2f #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7537
diff changeset
 14094
     i inspect.
a58984867d2f #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7537
diff changeset
 14095
     (i subImageIn:(0@0 corner:i width@i height)) inspect
a58984867d2f #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7537
diff changeset
 14096
    "
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14097
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14098
    "Created: 20.9.1995 / 01:24:20 / claus"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14099
! !
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14100
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14101
!Image methodsFor:'pixel functions'!
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14102
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14103
computeBitsFromPixelFunction
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14104
    "compute the bits from the pixelfunction"
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14105
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 14106
    |bpr|
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14107
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14108
    bpr := self bytesPerRow.
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14109
    bytes := ByteArray new:(bpr * height).
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14110
    0 to:height-1 do:[:y |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14111
        0 to:width-1 do:[:x |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14112
            self pixelAtX:x y:y put:(pixelFunction value:x value:y).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14113
        ]
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14114
    ].
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 14115
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 14116
    "Modified: / 31-01-2017 / 14:39:26 / stefan"
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14117
!
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14118
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14119
pixelFunction
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14120
    ^ pixelFunction
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14121
!
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14122
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14123
pixelFunction:aTwoArgFunction
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14124
    "set the pixel function. This is used to define a functional image,
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14125
     where pixel values are computed via a function instead of coming
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14126
     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
 14127
     a pixel function).
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14128
     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
 14129
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14130
    pixelFunction := aTwoArgFunction.
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14131
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14132
    "
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14133
     |i|
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14134
     i := Depth1Image extent:256@256.
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14135
     i pixelFunction:[:x :y | ((x // 16) bitXor:(y // 16)) odd asInteger].
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14136
     i inspect.
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14137
    "
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14138
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14139
    "
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14140
     |i|
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14141
     i := Depth8Image extent:256@256.
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14142
     i photometric:#blackIs0.
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14143
     i pixelFunction:[:x :y | x  ].
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14144
     i inspect.
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14145
    "
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14146
!
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14147
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14148
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
 14149
    "set the pixel function and a viewport.
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14150
     This is used to define a functional image,
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14151
     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
 14152
     from a bits array.
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14153
     The pixelFunction will map (x E xInterval) x (y E yInterval) -> pixel"
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14154
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14155
    |sX sY tX tY|
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14156
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14157
    "/ intervals are typically 0..1
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14158
    sX := (xInterval stop - xInterval start) asFloat / width.
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14159
    sY := (yInterval stop - yInterval start) asFloat / height.
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14160
    tX := xInterval start.
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14161
    tY := yInterval start.
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14162
7373
61933c223183 added metaData instVar (for free use by image reader)
Claus Gittinger <cg@exept.de>
parents: 7363
diff changeset
 14163
    pixelFunction :=
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14164
        [:x :y |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14165
            aTwoArgFunction value:(x * sX + tX) value:(y * sY + tY)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14166
        ]
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14167
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14168
    "
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14169
     |i|
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14170
     i := Depth8Image extent:256@256.
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14171
     i photometric:#blackIs0.
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14172
     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
 14173
     i inspect.
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14174
    "
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14175
! !
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14176
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14177
!Image methodsFor:'printing & storing'!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14178
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14179
storeOn:aStream
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
 14180
    "append a printed representation of the receiver to aStream,
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
 14181
     from which a copy of it can be reconstructed."
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
 14182
6900
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
 14183
    |colors usedValues colorMapArray needBPS needSemi|
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
 14184
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
 14185
    needSemi := false.
7373
61933c223183 added metaData instVar (for free use by image reader)
Claus Gittinger <cg@exept.de>
parents: 7363
diff changeset
 14186
    aStream nextPutAll:('(%1 width:%2 height:%3'
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14187
                            bindWith:self class name
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14188
                            with:width
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14189
                            with:height).
6311
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
 14190
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
 14191
    "/ 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
 14192
    "/ no need for the photometric, if it's the default anyway
6311
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
 14193
    photometric ~= self class defaultPhotometric ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14194
        (colorMap isNil or:[photometric ~~ #palette]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14195
            aStream nextPutAll:' photometric:('. photometric storeOn:aStream. aStream nextPut:$).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14196
        ].
6311
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
 14197
    ].
7349
361f96216120 #OTHER by stefan
Stefan Vogel <sv@exept.de>
parents: 7292
diff changeset
 14198
    aStream nextPut:$).
6311
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
 14199
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
 14200
    "/ no need to store bitPerSample/samplesPerPixel in all situations
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
 14201
    needBPS := true.
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
 14202
7373
61933c223183 added metaData instVar (for free use by image reader)
Claus Gittinger <cg@exept.de>
parents: 7363
diff changeset
 14203
    self depth == 1
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14204
        ifTrue:[ needBPS := false ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14205
        ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14206
            ((photometric == #palette)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14207
                and:[ (bitsPerSample size == 1)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14208
                and:[ ((bitsPerSample at:1) == self depth)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14209
                and:[ samplesPerPixel == 1 ]]])
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14210
            ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14211
                needBPS := false.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14212
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14213
        ].
6311
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
 14214
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
 14215
    needBPS ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14216
        needSemi ifTrue:[aStream nextPutAll:';'].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14217
        aStream nextPutAll:' bitsPerSample:('. bitsPerSample storeOn:aStream. aStream nextPutAll:')'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14218
        samplesPerPixel ~= bitsPerSample size ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14219
            aStream nextPutAll:'; samplesPerPixel:('. samplesPerPixel storeOn:aStream. aStream nextPutAll:')'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14220
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14221
        needSemi := true.
6311
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
 14222
    ].
5533
2e7c216c76cf comment/format in: #storeOn:
Claus Gittinger <cg@exept.de>
parents: 5508
diff changeset
 14223
2e7c216c76cf comment/format in: #storeOn:
Claus Gittinger <cg@exept.de>
parents: 5508
diff changeset
 14224
    "/ assert that all bits are there...
2e7c216c76cf comment/format in: #storeOn:
Claus Gittinger <cg@exept.de>
parents: 5508
diff changeset
 14225
    "/ self assert:(self bits size) >= (self bytesPerRow * height).
2e7c216c76cf comment/format in: #storeOn:
Claus Gittinger <cg@exept.de>
parents: 5508
diff changeset
 14226
    "/ 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
 14227
6900
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
 14228
    needSemi ifTrue:[aStream nextPutAll:';'].
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
 14229
    aStream nextPutAll:' bits:(ByteArray fromPackedString:'. self bits asPackedString storeOn:aStream.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
 14230
    aStream nextPutAll:')'.
2068
3bc8754883ae store on the color map in an array of rgb-byte values
tz
parents: 2059
diff changeset
 14231
4187
411b7b76a8bb fixedPalette has more functionality
Claus Gittinger <cg@exept.de>
parents: 4175
diff changeset
 14232
    colorMap notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14233
        self depth <= 8 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14234
            "/ cut off unused colors ...
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14235
            usedValues := self usedValues.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14236
            colors := colorMap copyFrom:1 to:((usedValues max+1) min:colorMap size).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14237
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14238
            colorMapArray := OrderedCollection new.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14239
            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
 14240
            aStream cr; spaces:12; nextPutAll:'colorMapFromArray:'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14241
            colorMapArray asByteArray storeOn:aStream.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14242
        ] ifFalse:[
7834
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
 14243
            false ifTrue:[
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
 14244
                aStream cr; spaces:12; nextPutAll:'colorMap:('.
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
 14245
                colorMap storeOn:aStream.
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
 14246
                aStream nextPutAll:')'
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
 14247
            ]
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14248
        ]
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 14249
    ].
4187
411b7b76a8bb fixedPalette has more functionality
Claus Gittinger <cg@exept.de>
parents: 4175
diff changeset
 14250
    mask notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14251
        aStream cr; spaces:12; nextPutAll:'mask:('.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14252
        mask storeOn:aStream.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14253
        aStream nextPutAll:')'.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14254
    ].
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14255
    aStream nextPutAll:'; yourself'
2266
72460683cc97 fixed maskedPixelsAre0 flag setting when copying images.
Claus Gittinger <cg@exept.de>
parents: 2249
diff changeset
 14256
7834
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
 14257
    "Modified: / 03-02-2017 / 16:56:29 / cg"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
 14258
! !
48194c26a46c Initial revision
claus
parents:
diff changeset
 14259
48194c26a46c Initial revision
claus
parents:
diff changeset
 14260
!Image methodsFor:'private'!
48194c26a46c Initial revision
claus
parents:
diff changeset
 14261
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
 14262
bestSupportedImageFormatFor:aDevice
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
 14263
    "scan through the image formats as supported by aDevice,
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
 14264
     and return the best to use when the receiver is to be represented
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
 14265
     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
 14266
     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
 14267
2530
81b8ffe7662f use new supportedImageFormat query from Device
Claus Gittinger <cg@exept.de>
parents: 2527
diff changeset
 14268
    |bestDeviceDepth
81b8ffe7662f use new supportedImageFormat query from Device
Claus Gittinger <cg@exept.de>
parents: 2527
diff changeset
 14269
     bestDeviceBitsPerPixel "{ Class: SmallInteger }"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 14270
     "maxDepth"
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 14271
     bestInfo maxInfo
2530
81b8ffe7662f use new supportedImageFormat query from Device
Claus Gittinger <cg@exept.de>
parents: 2527
diff changeset
 14272
     myDepth                "{ Class: SmallInteger }"
81b8ffe7662f use new supportedImageFormat query from Device
Claus Gittinger <cg@exept.de>
parents: 2527
diff changeset
 14273
     maxBitsPerPixel        "{ Class: SmallInteger }"|
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
 14274
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
 14275
    myDepth := self bitsPerPixel.
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
 14276
    maxBitsPerPixel := 0.
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
 14277
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
 14278
    aDevice supportedImageFormats do:[:entry |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14279
        |deviceImageDepth        "{ Class: SmallInteger }"
8758
c8ffbed1d428 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 8745
diff changeset
 14280
         deviceImageBitsPerPixel "{ Class: SmallInteger }" 
c8ffbed1d428 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 8745
diff changeset
 14281
         ignore|
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14282
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14283
        deviceImageDepth := entry at:#depth.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14284
        deviceImageBitsPerPixel := entry at:#bitsPerPixel.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14285
8141
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
 14286
        "/ 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
 14287
        "/ (actually, many devices can handle other pixMap formats,
8141
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
 14288
        "/  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
 14289
8758
c8ffbed1d428 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 8745
diff changeset
 14290
        ignore := (deviceImageDepth ~~ 1) and:[deviceImageDepth ~~ aDevice depth].
c8ffbed1d428 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 8745
diff changeset
 14291
        ignore ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14292
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14293
            deviceImageBitsPerPixel > maxBitsPerPixel ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14294
                maxInfo := entry.
8141
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
 14295
                "/ maxBitsPerPixel := deviceImageBitsPerPixel.
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
 14296
                "/ maxDepth := deviceImageDepth.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14297
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14298
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14299
            deviceImageDepth >= myDepth ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14300
                deviceImageDepth == myDepth ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14301
                    "/ take the better one ...
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14302
                    (bestDeviceDepth isNil
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14303
                     or:[(bestDeviceBitsPerPixel ~~ bestDeviceDepth)
8141
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
 14304
                        and:[deviceImageDepth == deviceImageBitsPerPixel]]
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
 14305
                    ) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14306
                        bestInfo := entry.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14307
                        bestDeviceDepth := deviceImageDepth.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14308
                        bestDeviceBitsPerPixel := deviceImageBitsPerPixel.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14309
                    ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14310
                ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14311
                    "/ take the next-larger depth
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14312
                    (bestDeviceDepth isNil
8141
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
 14313
                     or:[deviceImageBitsPerPixel < bestDeviceBitsPerPixel]
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
 14314
                    ) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14315
                        bestInfo := entry.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14316
                        bestDeviceDepth := deviceImageDepth.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14317
                        bestDeviceBitsPerPixel := deviceImageBitsPerPixel.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14318
                    ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14319
                ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14320
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14321
        ].
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
 14322
    ].
851
c9511f8945ce fixed bug in bestSupportedImageFormat (with 15-bit trueColor servers)
Claus Gittinger <cg@exept.de>
parents: 841
diff changeset
 14323
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
 14324
    bestDeviceDepth isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14325
        maxBitsPerPixel == 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14326
            "/
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14327
            "/ oops - nothing appropriate
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14328
            "/
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14329
            maxInfo notNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14330
                ^ maxInfo
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14331
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14332
            bestDeviceDepth := bestDeviceBitsPerPixel := aDevice depth.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14333
            bestInfo := IdentityDictionary new.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14334
            bestInfo at:#depth put:bestDeviceDepth.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14335
            bestInfo at:#bitsPerPixel put:bestDeviceBitsPerPixel.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14336
            bestInfo at:#padding put:32.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14337
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14338
            bestInfo := maxInfo.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14339
        ]
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
 14340
    ].
235
579f3f804a46 padding info in supportedFormats
Claus Gittinger <cg@exept.de>
parents: 230
diff changeset
 14341
    ^ bestInfo
579f3f804a46 padding info in supportedFormats
Claus Gittinger <cg@exept.de>
parents: 230
diff changeset
 14342
2050
d1f21c75b5eb when asking a device for its supported pixmap formats,
Claus Gittinger <cg@exept.de>
parents: 2043
diff changeset
 14343
    "Modified: / 7.2.1998 / 11:23:24 / cg"
283
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
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14346
colormapFromImage:anImage
7242
bf3a75233d55 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 7230
diff changeset
 14347
    "setup the receiver's colormap from another image.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14348
     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
 14349
     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
 14350
     for fromImage:/fromSubImake:"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14351
3259
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
 14352
    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
 14353
!
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
 14354
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
 14355
colormapFromImage:anImage photometric:photometricOrNil
7242
bf3a75233d55 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 7230
diff changeset
 14356
    "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
 14357
     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
 14358
     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
 14359
     for fromImage:/fromSubImake:"
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
 14360
2447
5b3d802d602b allow Image fromImage with rgb source-image and palette receiver
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
 14361
    |usedColors|
5b3d802d602b allow Image fromImage with rgb source-image and palette receiver
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
 14362
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14363
    samplesPerPixel == 3 ifTrue:[
7916
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14364
        photometric := photometricOrNil ? #rgb.
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14365
        ^ self.
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14366
    ].
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14367
    samplesPerPixel == 4 ifTrue:[
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14368
        photometric := photometricOrNil ? #rgba.
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14369
        ^ self.
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14370
    ].
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14371
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14372
    photometricOrNil isNil ifTrue:[
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14373
        photometric := anImage photometric.
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14374
    ] ifFalse:[
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14375
        photometric := photometricOrNil.
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14376
    ].
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14377
    
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14378
    photometric == #palette ifTrue:[
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14379
        self setColorMap:(anImage colorMap copy).
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14380
        "
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14381
         must generate/compress the colormap, if source image has higher depth
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14382
         than myself.
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14383
        "
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14384
        (colorMap isNil
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14385
        or:[anImage bitsPerPixel > self bitsPerPixel]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14386
            "
7916
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14387
             get used colors are extracted into our colorMap
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14388
             (the at-put below will set the pixelValue according the
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14389
             new colorIndex
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14390
            "
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14391
            self setColorMap:(anImage usedColors asArray).
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14392
            colorMap size > (1 bitShift:self bitsPerPixel) ifTrue:[
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14393
                'Image [warning]: possibly too many colors in image' errorPrintCR
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14394
            ]
7916
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14395
        ].
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14396
        ^ self.
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14397
    ].
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14398
    
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14399
    (photometric == #blackIs0 or:[ photometric == #whiteIs0 ]) ifTrue:[
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14400
        ^ self. "/ nothing to do
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14401
    ].
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14402
    
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14403
    usedColors := anImage usedColors asArray.
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14404
    usedColors size > (1 bitShift:self bitsPerPixel) ifTrue:[
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14405
        'Image [warning]: possibly too many colors in image' errorPrintCR.
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14406
        usedColors := usedColors copyTo:(1 bitShift:self bitsPerPixel).
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14407
    ].
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14408
    self setColorMap:usedColors.
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14409
    photometric := #palette
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14410
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14411
    "Created: / 20-09-1995 / 00:58:42 / claus"
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14412
    "Modified: / 20-02-2017 / 18:16:26 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14413
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14414
7637
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 14415
fromDeviceForm:aForm maskForm:aMaskFormOrNil
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 14416
    device := aForm device.
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 14417
    self assert:device notNil.
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 14418
    photometric := aForm photometric.
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 14419
    deviceForm := aForm.
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 14420
    width := aForm width.
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 14421
    height := aForm height.
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 14422
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 14423
    aMaskFormOrNil notNil ifTrue:[
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 14424
        mask := Image fromDeviceForm:aMaskFormOrNil maskForm:nil.
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 14425
    ].
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 14426
!
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 14427
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14428
greyByteMapForRange:range
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 14429
    "return a collection to map from pixelValues to greyLevels
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 14430
     in the range 0..range.
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14431
     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
 14432
     The values are rounded towards the nearest pixel."
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 14433
1403
4b132381579e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1386
diff changeset
 14434
    |d clr val greyMap r
4b132381579e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1386
diff changeset
 14435
     n "{ Class: SmallInteger }"|
808
f548a3c6ca8c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 804
diff changeset
 14436
f548a3c6ca8c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 804
diff changeset
 14437
    r := range.
f548a3c6ca8c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 804
diff changeset
 14438
    r == 256 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14439
        r := 255
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 14440
    ].
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 14441
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 14442
    photometric == #palette ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14443
        n := colorMap size.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14444
        greyMap := ByteArray new:n.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14445
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14446
        1 to:n do:[:i |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14447
            (clr := colorMap at:i) isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14448
                "/ an unused color
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14449
                val := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14450
            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14451
                val := (r * clr brightness) rounded
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14452
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14453
            greyMap at:i put:val
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14454
        ].
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 14455
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14456
        d := self bitsPerPixel.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14457
        n := 1 bitShift:d.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14458
        n >= 4096 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14459
            self error:'size not supported - too large'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14460
            ^ nil
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14461
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14462
        greyMap := ByteArray new:n.
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
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14465
        photometric == #rgb ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14466
            1 to:n do:[:i |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14467
                greyMap at:i put:(r * (self colorFromValue:i-1) brightness) rounded
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
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14470
            1 to:n do:[:i |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14471
                greyMap at:i put:(r / (n-1) * (i-1)) rounded
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14472
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14473
            photometric == #blackIs0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14474
                "/ we are done
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14475
            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14476
                photometric == #whiteIs0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14477
                    greyMap reverse
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14478
                ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14479
                    self error:'invalid format'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14480
                    ^ nil
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14481
                ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14482
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14483
        ].
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14484
    ].
808
f548a3c6ca8c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 804
diff changeset
 14485
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14486
    ^ greyMap
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14487
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14488
    "
808
f548a3c6ca8c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 804
diff changeset
 14489
     Depth8Image new greyByteMapForRange:256
f548a3c6ca8c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 804
diff changeset
 14490
f548a3c6ca8c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 804
diff changeset
 14491
     Depth8Image new greyByteMapForRange:64
f548a3c6ca8c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 804
diff changeset
 14492
     Depth4Image new greyByteMapForRange:64
f548a3c6ca8c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 804
diff changeset
 14493
f548a3c6ca8c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 804
diff changeset
 14494
     Depth4Image new greyByteMapForRange:1
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14495
    "
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14496
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14497
    "Created: 8.6.1996 / 08:34:14 / cg"
1403
4b132381579e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1386
diff changeset
 14498
    "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
 14499
!
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14500
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14501
greyMapForRange:range
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14502
    "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
 14503
     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
 14504
1403
4b132381579e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1386
diff changeset
 14505
    |d r clr val
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
 14506
     n "{Class: SmallInteger }"
1927
d1bbdf03e5a1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1919
diff changeset
 14507
     n2 "{Class: SmallInteger }"
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
 14508
     greyArray|
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14509
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14510
    d := self bitsPerPixel.
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14511
    n := 1 bitShift:d.
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14512
    n >= 4096 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14513
        self error:'size not supported - too large'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14514
        ^ nil
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14515
    ].
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14516
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
 14517
    greyArray := Array new:n.
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14518
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14519
    photometric == #palette ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14520
        n2 := colorMap size.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14521
        1 to:n2 do:[:i |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14522
            (clr := colorMap at:i) isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14523
                "/ an unused color
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14524
                val := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14525
            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14526
                val := range * clr brightness
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14527
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14528
            greyArray at:i put:val
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14529
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14530
        n2 < n ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14531
            greyArray from:n2+1 to:n put:0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14532
        ]
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14533
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14534
        photometric == #rgb ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14535
            1 to:n do:[:i |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14536
                greyArray at:i put:(range * (self colorFromValue:(i-1)) brightness)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14537
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14538
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14539
            r := range asFloat.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14540
            1 to:n do:[:i |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14541
                greyArray at:i put:(r / (n-1) * (i-1))
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14542
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14543
            photometric == #blackIs0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14544
                "/ we are done
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14545
            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14546
                photometric == #whiteIs0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14547
                    greyArray reverse
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14548
                ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14549
                    self error:'invalid format'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14550
                    ^ nil
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14551
                ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14552
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14553
        ]
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 14554
    ].
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
 14555
    ^ greyArray
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 14556
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 14557
    "
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 14558
     Depth8Image new greyMapForRange:64
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 14559
     Depth4Image new greyMapForRange:64
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 14560
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
 14561
     Depth16Image new greyMapForRange:1
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 14562
     Depth4Image new greyMapForRange:1
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
 14563
     Depth2Image new greyMapForRange:1
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
 14564
    "
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
 14565
1403
4b132381579e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1386
diff changeset
 14566
    "Modified: 1.3.1997 / 15:48:49 / cg"
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 14567
!
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 14568
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 14569
magnifyRowFrom:srcBytes offset:srcStart
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14570
          into:dstBytes offset:dstStart factor:mX
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14571
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14572
    "magnify a single pixel row - can only magnify by integer factors,
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14573
     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
 14574
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14575
    ^ self subclassResponsibility
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
 14576
!
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
 14577
816
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14578
makeDeviceGrayPixmapOn:aDevice depth:depth fromArray:bits
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14579
    "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
 14580
     pixels interpreted as greyValues, 0 is black,
816
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14581
     create a device form for it"
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14582
7755
75f5eba88e77 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 7689
diff changeset
 14583
    |f gcId|
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
 14584
4780
03c3e810a584 Change senders of obsolete messages Form>>...on: to ...onDevice:
Stefan Vogel <sv@exept.de>
parents: 4769
diff changeset
 14585
    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
 14586
    f isNil ifTrue:[^ nil].
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
 14587
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
 14588
    f bits:bits.
7755
75f5eba88e77 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 7689
diff changeset
 14589
    gcId := f initGC.
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
 14590
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
 14591
    (aDevice blackpixel ~~ 0) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14592
        "/ have to invert bits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14593
        f function:#copyInverted
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
 14594
    ].
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 14595
    aDevice
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14596
        drawBits:bits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14597
        depth:depth
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14598
        padding:8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14599
        width:width height:height
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14600
        x:0 y:0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14601
        into:(f id)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14602
        x:0 y:0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14603
        width:width height:height
7755
75f5eba88e77 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 7689
diff changeset
 14604
        with:gcId.
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
 14605
    ^ f
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
 14606
816
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14607
    "Created: 10.6.1996 / 20:10:31 / cg"
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14608
!
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14609
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14610
makeDeviceMonochromeBitmapOn:aDevice fromArray:monoBits
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14611
    "given the bits of a monochrome bitmap, 8-bit padded and
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14612
     0-bits as black, create a device form for it"
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14613
1608
edf60801e6c0 comments
Claus Gittinger <cg@exept.de>
parents: 1605
diff changeset
 14614
"/    monoBits invert.
4769
0cabcf1481a0 Use Form class>>#width:height:fromArray:onDevice: instead of obsolete
Stefan Vogel <sv@exept.de>
parents: 4762
diff changeset
 14615
    ^ (Form width:width height:height fromArray:monoBits onDevice:aDevice)
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14616
        colorMap:(Array with:Color black with:Color white).
816
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14617
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14618
    "Created: 10.6.1996 / 20:18:09 / cg"
1608
edf60801e6c0 comments
Claus Gittinger <cg@exept.de>
parents: 1605
diff changeset
 14619
    "Modified: 17.4.1997 / 01:07:38 / cg"
816
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14620
!
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14621
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14622
makeDevicePixmapOn:aDevice depth:depth fromArray:bits
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14623
    "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
 14624
     pixels interpreted as in the devices colormap,
816
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14625
     create a device form for it"
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14626
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14627
    |f|
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14628
4780
03c3e810a584 Change senders of obsolete messages Form>>...on: to ...onDevice:
Stefan Vogel <sv@exept.de>
parents: 4769
diff changeset
 14629
    f := Form width:width height:height depth:depth onDevice:aDevice.
816
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14630
    f isNil ifTrue:[^ nil].
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14631
    f bits:bits.
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14632
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 14633
    aDevice
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14634
        drawBits:bits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14635
        depth:depth
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14636
        padding:8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14637
        width:width height:height
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14638
        x:0 y:0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14639
        into:(f id)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14640
        x:0 y:0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14641
        width:width height:height
7755
75f5eba88e77 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 7689
diff changeset
 14642
        with:(f initGC).
816
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14643
    ^ f
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14644
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
 14645
    "Created: 10.6.1996 / 17:56:08 / cg"
816
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14646
    "Modified: 10.6.1996 / 20:11:27 / cg"
5237
e28aca881988 repairPhotometric
Claus Gittinger <cg@exept.de>
parents: 5235
diff changeset
 14647
!
e28aca881988 repairPhotometric
Claus Gittinger <cg@exept.de>
parents: 5235
diff changeset
 14648
e28aca881988 repairPhotometric
Claus Gittinger <cg@exept.de>
parents: 5235
diff changeset
 14649
repairPhotometric
e28aca881988 repairPhotometric
Claus Gittinger <cg@exept.de>
parents: 5235
diff changeset
 14650
    "/ kludge: repair a 'should not happen' situation...
e28aca881988 repairPhotometric
Claus Gittinger <cg@exept.de>
parents: 5235
diff changeset
 14651
    photometric isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14652
        (self depth == 24 and:[ bitsPerSample size == 3 ]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14653
            photometric := #rgb
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14654
        ].
5237
e28aca881988 repairPhotometric
Claus Gittinger <cg@exept.de>
parents: 5235
diff changeset
 14655
    ].
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
 14656
! !
0
48194c26a46c Initial revision
claus
parents:
diff changeset
 14657
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14658
!Image methodsFor:'queries'!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14659
3490
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14660
alphaBitsOf:pixel
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14661
    "if the receiver is an rgb-image:
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14662
     return the alpha component of a pixelValue as integer 0..maxAlphaValue.
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14663
     MaxAlphaValue is of course the largest integer representable by the number
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14664
     of alpha bits i.e. (1 bitShift:bitsAlpha)-1.
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14665
     This has to be redefined by subclasses."
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14666
8106
479e731381bd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8103
diff changeset
 14667
    |redBits greenBits blueBits alphaBits alphaMask|
3490
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14668
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14669
    samplesPerPixel >= 4 ifTrue:[
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14670
        photometric == #rgba ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14671
            "/ alpha in low bits
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14672
            alphaBits := bitsPerSample at:4.
8113
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
 14673
            alphaMask := (1 bitShift:alphaBits)-1.
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14674
8106
479e731381bd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8103
diff changeset
 14675
            ^ pixel bitAnd:alphaMask
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14676
        ].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14677
        photometric == #argb ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14678
            "/ alpha in high bits
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14679
            redBits := bitsPerSample at:1.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14680
            greenBits := bitsPerSample at:2.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14681
            blueBits := bitsPerSample at:3.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14682
            alphaBits := bitsPerSample at:4.
8113
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
 14683
            alphaMask := (1 bitShift:alphaBits)-1.
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14684
8106
479e731381bd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8103
diff changeset
 14685
            ^ (pixel rightShift:(redBits + greenBits + blueBits))
479e731381bd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8103
diff changeset
 14686
                    bitAnd:alphaMask
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14687
        ].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14688
        ^ 0
3490
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14689
    ].
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14690
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14691
    self subclassResponsibility
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14692
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14693
    "Created: / 08-06-1996 / 09:44:51 / cg"
8113
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
 14694
    "Modified: / 27-08-2017 / 21:29:46 / cg"
3490
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14695
!
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14696
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14697
alphaMaskForPixelValue
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14698
    "return the mask used with translation from pixelValues to alphaBits"
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14699
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14700
    |alphaBits|
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14701
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14702
    samplesPerPixel >= 4 ifTrue:[
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14703
        photometric == #argb ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14704
            alphaBits := bitsPerSample at:1.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14705
            ^ (1 bitShift:alphaBits)-1
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14706
        ].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14707
        photometric == #rgba ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14708
            alphaBits := bitsPerSample at:4.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14709
            ^ (1 bitShift:alphaBits)-1
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14710
        ].
3490
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14711
    ].
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14712
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14713
    self subclassResponsibility
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14714
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14715
    "Modified: / 22-08-2017 / 17:29:22 / cg"
3490
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14716
!
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14717
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14718
alphaShiftForPixelValue
7921
4989d91f99ac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7918
diff changeset
 14719
    "return the shift amount used with translation from pixelValues to alphaBits.
4989d91f99ac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7918
diff changeset
 14720
     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
 14721
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14722
    |redBits greenBits blueBits|
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14723
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14724
    samplesPerPixel >= 3 ifTrue:[
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14725
        photometric == #argb ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14726
            redBits := bitsPerSample at:2.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14727
            greenBits := bitsPerSample at:3.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14728
            blueBits := bitsPerSample at:4.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14729
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14730
            ^ (greenBits + blueBits + redBits)
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14731
        ].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14732
        "/ rgba or rgb
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14733
        ^ 0
3490
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14734
    ].
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14735
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14736
    self subclassResponsibility
7921
4989d91f99ac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7918
diff changeset
 14737
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14738
    "Modified (comment): / 22-08-2017 / 17:26:16 / cg"
3490
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14739
!
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14740
3813
662c6386828e ascentOn:
Claus Gittinger <cg@exept.de>
parents: 3811
diff changeset
 14741
ascentOn:aGC
662c6386828e ascentOn:
Claus Gittinger <cg@exept.de>
parents: 3811
diff changeset
 14742
    "I will not draw myself above the baseline"
662c6386828e ascentOn:
Claus Gittinger <cg@exept.de>
parents: 3811
diff changeset
 14743
662c6386828e ascentOn:
Claus Gittinger <cg@exept.de>
parents: 3811
diff changeset
 14744
    ^ 0
662c6386828e ascentOn:
Claus Gittinger <cg@exept.de>
parents: 3811
diff changeset
 14745
!
662c6386828e ascentOn:
Claus Gittinger <cg@exept.de>
parents: 3811
diff changeset
 14746
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14747
averageColor
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14748
    "return the average color of the image.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14749
     This usually only makes sense for textures and patterns
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14750
     (i.e. to compute shadow & light colors for viewBackgrounds).
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 14751
     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
 14752
     a subImage - i.e. use Image>>averageColorIn: on a smaller rectangle"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14753
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14754
    ^ self averageColorIn:(0@0 corner:(width-1)@(height-1))
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14755
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14756
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14757
averageColorIn:aRectangle
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14758
    "return the images average color in an area.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14759
     The implementation below is slow - so you may want to
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14760
     create tuned versions for DepthXImage if you plan to do
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 14761
     heavy image processing ...
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14762
     (also, creating tuned versions of the enumeration messages helps a lot)"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14763
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14764
    |x0 "{ Class:SmallInteger }"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14765
     y0 "{ Class:SmallInteger }"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14766
     x1 "{ Class:SmallInteger }"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14767
     y1 "{ Class:SmallInteger }"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14768
     sumRed sumGreen sumBlue n|
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14769
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 14770
    sumRed := sumGreen := sumBlue := 0.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14771
    y0 := aRectangle top.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14772
    y1 := aRectangle bottom.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14773
    x0 := aRectangle left.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14774
    x1 := aRectangle right.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14775
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 14776
    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
 14777
    mask isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14778
        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
 14779
            sumRed := sumRed + colorAtXY red.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14780
            sumGreen := sumGreen + colorAtXY green.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14781
            sumBlue := sumBlue + colorAtXY blue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14782
        ].
3761
44b96cd84bb8 ignore masked pixels when computing the average
Claus Gittinger <cg@exept.de>
parents: 3760
diff changeset
 14783
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14784
        "/ masked pixels are not counted.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14785
        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
 14786
            (mask pixelAtX:x y:y) == 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14787
                n := n - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14788
            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14789
                sumRed := sumRed + colorAtXY red.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14790
                sumGreen := sumGreen + colorAtXY green.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14791
                sumBlue := sumBlue + colorAtXY blue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14792
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14793
        ].
3761
44b96cd84bb8 ignore masked pixels when computing the average
Claus Gittinger <cg@exept.de>
parents: 3760
diff changeset
 14794
    ].
44b96cd84bb8 ignore masked pixels when computing the average
Claus Gittinger <cg@exept.de>
parents: 3760
diff changeset
 14795
    n == 0 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14796
        "/ all masked
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14797
        ^ Color black
3761
44b96cd84bb8 ignore masked pixels when computing the average
Claus Gittinger <cg@exept.de>
parents: 3760
diff changeset
 14798
    ].
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14799
    ^ Color red:(sumRed / n) green:(sumGreen / n) blue:(sumBlue / n)
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14800
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14801
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14802
bitsPerPixel
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14803
    "return the number of bits per pixel"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14804
5926
95dab34aeea2 changed: #bitsPerPixel
Stefan Vogel <sv@exept.de>
parents: 5919
diff changeset
 14805
    ^ bitsPerSample sum
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14806
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14807
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14808
bitsPerRow
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14809
    "return the number of bits in one scanline of the image"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14810
3868
e47cf114c824 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3867
diff changeset
 14811
    ^ width * (self bitsPerPixel).
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14812
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14813
2890
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14814
blackComponentOfCMYK:pixel
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14815
    "if the receiver is a cmyk-image:
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 14816
     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
 14817
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14818
    samplesPerPixel == 4 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14819
        "/ assume that the cyan bits are the leftMost bits (cmyk)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14820
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 14821
        (#[8 8 8 8] isSameSequenceAs:bitsPerSample) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14822
            ^ 100.0 / 255 * (pixel bitAnd:16rFF)
8130
3f89522ad9fb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8116
diff changeset
 14823
        ].
3f89522ad9fb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8116
diff changeset
 14824
        (#[16 16 16 16] isSameSequenceAs:bitsPerSample)ifTrue:[
3f89522ad9fb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8116
diff changeset
 14825
            ^ 100.0 / 16rFFFF * (pixel bitAnd:16rFFFF)
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14826
        ]
2890
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14827
    ].
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14828
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14829
    self subclassResponsibility
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14830
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 14831
    "Modified (format): / 31-01-2017 / 13:15:23 / stefan"
8130
3f89522ad9fb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8116
diff changeset
 14832
    "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
 14833
!
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14834
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14835
blueBitsOf:pixel
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14836
    "if the receiver is an rgb-image:
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 14837
     return the blue bits of a pixelValue as integer 0..maxBlueValue.
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 14838
     MaxGreenValue is of course the largest integer representable by the number
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 14839
     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
 14840
     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
 14841
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14842
    |alphaBits blueBits blueMask|
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14843
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14844
    blueBits := self numBlueBits.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14845
    blueMask := (1 bitShift:blueBits)-1.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14846
    
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14847
    samplesPerPixel >= 3 ifTrue:[
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14848
        photometric == #rgba ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14849
            "/ alpha in low bits
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14850
            alphaBits := self numAlphaBits.
8106
479e731381bd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8103
diff changeset
 14851
            ^ (pixel rightShift:alphaBits) bitAnd:blueMask
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14852
        ].
8091
e3a77cae0843 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8088
diff changeset
 14853
        ^ pixel bitAnd:blueMask
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14854
    ].
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14855
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14856
    self subclassResponsibility
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14857
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14858
    "Created: / 08-06-1996 / 09:44:21 / cg"
8106
479e731381bd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8103
diff changeset
 14859
    "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
 14860
!
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14861
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14862
blueComponentOf:pixel
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14863
    "if the receiver is an rgb-image:
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 14864
     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
 14865
     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
 14866
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
 14867
    |blueBits  "{ Class: SmallInteger }"
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
 14868
     s         "{ Class: SmallInteger }"|
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14869
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14870
    samplesPerPixel >= 3 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14871
        "/ assume that the red bits are the leftMost bits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14872
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14873
        blueBits := bitsPerSample at:3.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14874
        blueBits == 0 ifTrue:[^ 0].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14875
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14876
        s := (1 bitShift:blueBits) - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14877
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14878
        ^ 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
 14879
    ].
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14880
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14881
    self subclassResponsibility
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14882
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14883
    "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
 14884
    "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
 14885
!
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14886
3490
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14887
blueMaskForPixelValue
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14888
    "return the mask used with translation from pixelValues to blueBits"
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14889
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14890
    |blueBits|
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14891
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14892
    samplesPerPixel >= 3 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14893
        blueBits := bitsPerSample at:3.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14894
        ^ (1 bitShift:blueBits)-1
3490
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14895
    ].
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14896
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14897
    self subclassResponsibility
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14898
!
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14899
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14900
blueShiftForPixelValue
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14901
    "return the shift amount used with translation from pixelValues to blueBits"
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14902
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14903
    samplesPerPixel >= 3 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14904
        ^ 0
3490
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14905
    ].
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14906
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14907
    self subclassResponsibility
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14908
!
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14909
680
a905d02dcb82 added #bounds (for VisualComponent protocol compatibility)
Claus Gittinger <cg@exept.de>
parents: 674
diff changeset
 14910
bounds
a905d02dcb82 added #bounds (for VisualComponent protocol compatibility)
Claus Gittinger <cg@exept.de>
parents: 674
diff changeset
 14911
    "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
 14912
a905d02dcb82 added #bounds (for VisualComponent protocol compatibility)
Claus Gittinger <cg@exept.de>
parents: 674
diff changeset
 14913
    ^ 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
 14914
a905d02dcb82 added #bounds (for VisualComponent protocol compatibility)
Claus Gittinger <cg@exept.de>
parents: 674
diff changeset
 14915
    "Created: 13.5.1996 / 10:27:06 / cg"
a905d02dcb82 added #bounds (for VisualComponent protocol compatibility)
Claus Gittinger <cg@exept.de>
parents: 674
diff changeset
 14916
!
a905d02dcb82 added #bounds (for VisualComponent protocol compatibility)
Claus Gittinger <cg@exept.de>
parents: 674
diff changeset
 14917
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14918
brightness
6755
cee1206f74db class: Image
Claus Gittinger <cg@exept.de>
parents: 6653
diff changeset
 14919
    "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
 14920
     This usually only makes sense for textures and patterns
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14921
     (i.e. to compute shadow & light colors for viewBackgrounds).
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 14922
     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
 14923
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14924
    ^ (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
 14925
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14926
    "Modified: 8.6.1996 / 08:46:46 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14927
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14928
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14929
bytesPerRow
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14930
    "return the number of bytes in one scanline of the image"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14931
7898
05e286976596 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7895
diff changeset
 14932
    ^ self class bytesPerRowForWidth:width bitsPerPixel:(self bitsPerPixel)
05e286976596 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7895
diff changeset
 14933
05e286976596 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7895
diff changeset
 14934
    "Modified: / 16-02-2017 / 16:17:59 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14935
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14936
1993
b3cf63f64e15 added query for padded bytesPerLine
Claus Gittinger <cg@exept.de>
parents: 1975
diff changeset
 14937
bytesPerRowPaddedTo:padding
b3cf63f64e15 added query for padded bytesPerLine
Claus Gittinger <cg@exept.de>
parents: 1975
diff changeset
 14938
    "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
 14939
     if scanlines are to be padded to padding-bits."
b3cf63f64e15 added query for padded bytesPerLine
Claus Gittinger <cg@exept.de>
parents: 1975
diff changeset
 14940
2005
525f712084b3 oops - padding stuff was wrong (16-bit display)
tz
parents: 2001
diff changeset
 14941
    ^ self class
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14942
        bytesPerRowForWidth:width depth:(self bitsPerPixel) padding:padding
1993
b3cf63f64e15 added query for padded bytesPerLine
Claus Gittinger <cg@exept.de>
parents: 1975
diff changeset
 14943
!
b3cf63f64e15 added query for padded bytesPerLine
Claus Gittinger <cg@exept.de>
parents: 1975
diff changeset
 14944
1935
b71d2b3766b3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1932
diff changeset
 14945
center
b71d2b3766b3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1932
diff changeset
 14946
    "for compatibility with GC protocol - return the centerPoint"
b71d2b3766b3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1932
diff changeset
 14947
b71d2b3766b3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1932
diff changeset
 14948
    ^ (width // 2) @ (height // 2)
b71d2b3766b3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1932
diff changeset
 14949
b71d2b3766b3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1932
diff changeset
 14950
    "Created: 22.10.1997 / 23:52:40 / cg"
b71d2b3766b3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1932
diff changeset
 14951
!
b71d2b3766b3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1932
diff changeset
 14952
8111
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14953
chromaBlueOfYCbCr:pixel
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14954
    "if the receiver is an YCbCr-image:
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14955
     return the blue-chroma (Cb) component, scaled to (0 .. 1)"
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14956
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14957
    |cbBits "{ Class: SmallInteger }"
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14958
     crBits "{ Class: SmallInteger }"
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14959
     s      "{ Class: SmallInteger }"|
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14960
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14961
    photometric == #YCbCr ifTrue:[ 
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14962
        samplesPerPixel == 3 ifTrue:[
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14963
            "/ assume that the Y bits are the leftMost bits 
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14964
            cbBits := bitsPerSample at:2.
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14965
            cbBits == 0 ifTrue:[^ 0].
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14966
            crBits := bitsPerSample at:3.
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14967
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14968
            s := (1 bitShift:cbBits) - 1.
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14969
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14970
            ^ 1.0 / s * ((pixel rightShift:crBits) bitAnd:(1 bitShift:cbBits)-1)
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14971
        ].
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14972
    ].
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14973
    self subclassResponsibility
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14974
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14975
    "Created: / 26-08-2017 / 22:09:31 / cg"
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14976
!
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14977
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14978
chromaRedOfYCbCr:pixel
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14979
    "if the receiver is an YCbCr-image:
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14980
     return the red-chroma (Cr) component, scaled to (0 .. 1)"
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14981
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14982
    |crBits    "{ Class: SmallInteger }"
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14983
     s         "{ Class: SmallInteger }"|
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14984
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14985
    samplesPerPixel >= 3 ifTrue:[
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14986
        "/ assume that the red bits are the leftMost bits
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14987
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14988
        crBits := bitsPerSample at:3.
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14989
        crBits == 0 ifTrue:[^ 0].
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14990
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14991
        s := (1 bitShift:crBits) - 1.
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14992
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14993
        ^ 1.0 / s * (pixel bitAnd:(1 bitShift:crBits)-1)
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14994
    ].
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14995
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14996
    self subclassResponsibility
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14997
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14998
    "
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14999
     (self basicNew
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15000
        bitsPerSample:#(8 8 8);
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15001
        photometric:#YCbCr;
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15002
        samplesPerPixel:3;
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15003
        yourself
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15004
     ) chromaRedOfYCbCr: 16r10107F
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15005
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15006
     (self basicNew
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15007
        bitsPerSample:#(8 8 8);
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15008
        photometric:#YCbCr;
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15009
        samplesPerPixel:3;
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15010
        yourself
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15011
     ) chromaRedOfYCbCr: 16r1010FF
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15012
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15013
     (self basicNew
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15014
        bitsPerSample:#(8 8 8);
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15015
        photometric:#YCbCr;
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15016
        samplesPerPixel:3;
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15017
        yourself
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15018
     ) chromaBlueOfYCbCr: 16r107F10
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15019
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15020
     (self basicNew
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15021
        bitsPerSample:#(8 8 8);
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15022
        photometric:#YCbCr;
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15023
        samplesPerPixel:3;
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15024
        yourself
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15025
     ) chromaBlueOfYCbCr: 16r10FF10
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15026
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15027
     (self basicNew
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15028
        bitsPerSample:#(8 8 8);
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15029
        photometric:#YCbCr;
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15030
        samplesPerPixel:3;
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15031
        yourself
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15032
     ) lumaOfYCbCr: 16r7F1010
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15033
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15034
     (self basicNew
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15035
        bitsPerSample:#(8 8 8);
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15036
        photometric:#YCbCr;
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15037
        samplesPerPixel:3;
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15038
        yourself
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15039
     ) lumaOfYCbCr: 16rFF1010
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15040
    "
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15041
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15042
    "Created: / 26-08-2017 / 22:11:31 / cg"
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15043
!
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15044
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15045
colorFromValue:pixelValue
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15046
    "given a pixel value, return the corresponding color.
4117
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15047
     Pixel values start with 0.
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15048
     The implementation below is generic and slow
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15049
     - 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
 15050
8230
3eeacf3dcff3 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8222
diff changeset
 15051
    |p maxPixel clr r g b c m y k a numRedBits numGreenBits numBlueBits numAlphaBits|
1289
bcce666a0f35 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1288
diff changeset
 15052
bcce666a0f35 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1288
diff changeset
 15053
    p := photometric.
bcce666a0f35 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1288
diff changeset
 15054
    p isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15055
        colorMap notNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15056
            p := #palette
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15057
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15058
            "/ 'Image [warning]: no photometric - assume greyscale' infoPrintCR
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15059
            p := #blackIs0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15060
        ]
1289
bcce666a0f35 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1288
diff changeset
 15061
    ].
bcce666a0f35 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1288
diff changeset
 15062
bcce666a0f35 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1288
diff changeset
 15063
    p == #blackIs0 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15064
        maxPixel := (1 bitShift:self bitsPerPixel) - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15065
        ^ Color gray:(pixelValue * (100 / maxPixel)).
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15066
    ].
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15067
1289
bcce666a0f35 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1288
diff changeset
 15068
    p == #whiteIs0 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15069
        maxPixel := (1 bitShift:self bitsPerPixel) - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15070
        ^ 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
 15071
    ].
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15072
1289
bcce666a0f35 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1288
diff changeset
 15073
    p == #palette ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15074
        pixelValue >= colorMap size ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15075
            ^ Color black
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15076
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15077
        clr := colorMap at:(pixelValue + 1).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15078
        clr isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15079
            ^ Color black.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15080
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15081
        ^ clr.
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15082
    ].
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15083
1289
bcce666a0f35 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1288
diff changeset
 15084
    p == #rgb ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15085
        r := self redBitsOf:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15086
        g := self greenBitsOf:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15087
        b := self blueBitsOf:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15088
        "/ scale...
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15089
        numRedBits := bitsPerSample at:1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15090
        numGreenBits := bitsPerSample at:2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15091
        numBlueBits := bitsPerSample at:3.
7595
c77d718d3d94 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7573
diff changeset
 15092
        (r ~~ 0) ifTrue:[ r := 100 / ((1 bitShift:numRedBits) - 1) * r].
c77d718d3d94 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7573
diff changeset
 15093
        (g ~~ 0) ifTrue:[ g := 100 / ((1 bitShift:numGreenBits) - 1) * g].
c77d718d3d94 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7573
diff changeset
 15094
        (b ~~ 0) ifTrue:[ b := 100 / ((1 bitShift:numBlueBits) - 1) * b].
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15095
        ^ Color redPercent:r greenPercent:g bluePercent:b
4788
0d07247aee8b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4780
diff changeset
 15096
    ].
0d07247aee8b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4780
diff changeset
 15097
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15098
    (p == #rgba) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15099
        r := self redBitsOf:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15100
        g := self greenBitsOf:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15101
        b := self blueBitsOf:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15102
        a := self alphaBitsOf:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15103
        "/ scale...
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15104
        numRedBits := bitsPerSample at:1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15105
        numGreenBits := bitsPerSample at:2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15106
        numBlueBits := bitsPerSample at:3.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15107
        numAlphaBits := bitsPerSample at:4.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15108
        (r == 0) ifFalse:[ r := (100 / ((1 bitShift:numRedBits)-1) * r)].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15109
        (g == 0) ifFalse:[ g := (100 / ((1 bitShift:numGreenBits)-1) * g)].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15110
        (b == 0) ifFalse:[ b := (100 / ((1 bitShift:numBlueBits)-1) * b)].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15111
        (a == 0) ifFalse:[ a := (100 / ((1 bitShift:numAlphaBits)-1) * a)].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15112
        ^ 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
 15113
    ].
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15114
    (p == #argb) ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15115
        r := self redBitsOf:pixelValue.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15116
        g := self greenBitsOf:pixelValue.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15117
        b := self blueBitsOf:pixelValue.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15118
        a := self alphaBitsOf:pixelValue.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15119
        "/ scale...
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15120
        numAlphaBits := bitsPerSample at:1.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15121
        numRedBits := bitsPerSample at:2.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15122
        numGreenBits := bitsPerSample at:3.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15123
        numBlueBits := bitsPerSample at:4.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15124
        (r == 0) ifFalse:[ r := (100 / ((1 bitShift:numRedBits)-1) * r)].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15125
        (g == 0) ifFalse:[ g := (100 / ((1 bitShift:numGreenBits)-1) * g)].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15126
        (b == 0) ifFalse:[ b := (100 / ((1 bitShift:numBlueBits)-1) * b)].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15127
        (a == 0) ifFalse:[ a := (100 / ((1 bitShift:numAlphaBits)-1) * a)].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15128
        ^ Color redPercent:r greenPercent:g bluePercent:b alphaPercent:a
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15129
    ].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15130
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15131
2890
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15132
    p == #cmyk ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15133
        c := self cyanComponentOfCMYK:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15134
        m := self magentaComponentOfCMYK:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15135
        y := self yellowComponentOfCMYK:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15136
        k := self blackComponentOfCMYK:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15137
        ^ 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
 15138
    ].
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15139
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15140
    p == #cmy ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15141
        c := self cyanComponentOfCMY:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15142
        m := self magentaComponentOfCMY:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15143
        y := self yellowComponentOfCMY:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15144
        ^ Color cyan:c magenta:m yellow:y.
2890
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15145
    ].
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15146
8230
3eeacf3dcff3 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8222
diff changeset
 15147
"/    p == #YCbCr ifTrue:[
3eeacf3dcff3 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8222
diff changeset
 15148
"/        samplesPerPixel == 3 ifTrue:[
3eeacf3dcff3 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8222
diff changeset
 15149
"/            depth == 24 ifTrue:[
3eeacf3dcff3 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8222
diff changeset
 15150
"/                (#[8 8 8] isSameSequenceAs:bitsPerSample)ifTrue:[
3eeacf3dcff3 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8222
diff changeset
 15151
"/                    ^ Color yByte:((pixelValue rightShift:16) bitAnd:16rFF) 
3eeacf3dcff3 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8222
diff changeset
 15152
"/                            cbByte:((pixelValue rightShift:8) bitAnd:16rFF) 
3eeacf3dcff3 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8222
diff changeset
 15153
"/                            crByte:(pixelValue bitAnd:16rFF).
3eeacf3dcff3 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8222
diff changeset
 15154
"/                ].
3eeacf3dcff3 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8222
diff changeset
 15155
"/            ].
3eeacf3dcff3 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8222
diff changeset
 15156
"/        ].
3eeacf3dcff3 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8222
diff changeset
 15157
"/    ].
3eeacf3dcff3 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8222
diff changeset
 15158
2890
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15159
    self error:'invalid (unsupported) photometric'
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15160
4788
0d07247aee8b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4780
diff changeset
 15161
    "Created: / 08-06-1996 / 08:46:18 / cg"
8230
3eeacf3dcff3 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8222
diff changeset
 15162
    "Modified: / 07-12-2017 / 10:06:20 / cg"
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15163
!
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15164
2890
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15165
cyanComponentOfCMY:pixel
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15166
    "if the receiver is a cmy-image:
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 15167
     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
 15168
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15169
    samplesPerPixel == 3 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15170
        "/ assume that the cyan bits are the leftMost bits (cmy)
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 15171
        (#[8 8 8] isSameSequenceAs:bitsPerSample)ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15172
            ^ 100.0 / 255 * ((pixel bitShift:-16) bitAnd:16rFF)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15173
        ]
2890
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15174
    ].
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15175
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15176
    self subclassResponsibility
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15177
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 15178
    "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
 15179
!
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15180
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15181
cyanComponentOfCMYK:pixel
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15182
    "if the receiver is a cmyk-image:
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 15183
     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
 15184
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15185
    samplesPerPixel == 4 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15186
        "/ assume that the cyan bits are the leftMost bits (cmyk)
8115
6b4a08f7e951 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8113
diff changeset
 15187
        pixel == 0 ifTrue:[^ 0].
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 15188
        (#[8 8 8 8] isSameSequenceAs:bitsPerSample)ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15189
            ^ 100.0 / 255 * ((pixel bitShift:-24) bitAnd:16rFF)
8130
3f89522ad9fb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8116
diff changeset
 15190
        ].
3f89522ad9fb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8116
diff changeset
 15191
        (#[16 16 16 16] isSameSequenceAs:bitsPerSample)ifTrue:[
3f89522ad9fb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8116
diff changeset
 15192
            ^ 100.0 / 16rFFFF * ((pixel bitShift:-48) bitAnd:16rFFFF)
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15193
        ]
2890
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15194
    ].
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15195
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15196
    self subclassResponsibility
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15197
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 15198
    "Modified: / 31-01-2017 / 13:16:14 / stefan"
8130
3f89522ad9fb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8116
diff changeset
 15199
    "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
 15200
!
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15201
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15202
greenBitsOf:pixel
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15203
    "if the receiver is an rgb-image:
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 15204
     return the green bits of a pixelValue as integer 0..maxGreenValue.
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 15205
     MaxGreenValue is of course the largest integer representable by the number
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 15206
     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
 15207
     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
 15208
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15209
    |blueBits greenBits greenMask alphaBits|
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15210
8087
24c87d7fdfdf #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8086
diff changeset
 15211
    blueBits := self numBlueBits.
24c87d7fdfdf #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8086
diff changeset
 15212
    greenBits := self numGreenBits.
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15213
    greenMask := (1 bitShift:greenBits)-1.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15214
    
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15215
    samplesPerPixel >= 3 ifTrue:[
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15216
        photometric == #rgba ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15217
            alphaBits := self numAlphaBits.
8106
479e731381bd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8103
diff changeset
 15218
            (pixel rightShift:(blueBits + alphaBits)) bitAnd:greenMask.   
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15219
        ].
8524
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
 15220
        ^ (pixel rightShift:blueBits) bitAnd:greenMask
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15221
    ].
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15222
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15223
    self subclassResponsibility
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15224
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15225
    "Created: / 08-06-1996 / 09:44:37 / cg"
8106
479e731381bd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8103
diff changeset
 15226
    "Modified: / 25-08-2017 / 12:23:29 / cg"
8524
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
 15227
    "Modified: / 19-10-2018 / 16:34:02 / Stefan Vogel"
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15228
!
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15229
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15230
greenComponentOf:pixel
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15231
    "if the receiver is an rgb-image:
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 15232
     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
 15233
     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
 15234
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
 15235
    |greenBits "{ Class: SmallInteger }"
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
 15236
     blueBits  "{ Class: SmallInteger }"
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
 15237
     s         "{ Class: SmallInteger }"|
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15238
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15239
    samplesPerPixel >= 3 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15240
        "/ assume that the red bits are the leftMost bits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15241
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15242
        greenBits := bitsPerSample at:2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15243
        greenBits == 0 ifTrue:[^ 0].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15244
        blueBits := bitsPerSample at:3.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15245
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15246
        s := (1 bitShift:greenBits) - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15247
8106
479e731381bd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8103
diff changeset
 15248
        ^ 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
 15249
    ].
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15250
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15251
    self subclassResponsibility
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15252
8106
479e731381bd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8103
diff changeset
 15253
    "Created: / 08-06-1996 / 08:45:34 / cg"
479e731381bd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8103
diff changeset
 15254
    "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
 15255
!
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15256
3490
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15257
greenMaskForPixelValue
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15258
    "return the mask used with translation from pixelValues to greenBits"
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15259
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15260
    |greenBits|
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15261
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15262
    samplesPerPixel >= 3 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15263
        greenBits := bitsPerSample at:2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15264
        ^ (1 bitShift:greenBits)-1
3490
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15265
    ].
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15266
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15267
    self subclassResponsibility
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15268
!
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15269
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15270
greenShiftForPixelValue
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15271
    "return the shift amount used with translation from pixelValues to greenBits"
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15272
4160
6d31e4e6a432 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4159
diff changeset
 15273
    |greenBits|
3490
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15274
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15275
    samplesPerPixel >= 3 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15276
        greenBits := bitsPerSample at:3.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15277
        ^ greenBits negated
3490
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15278
    ].
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15279
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15280
    self subclassResponsibility
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15281
!
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15282
674
e0f6bd36a99d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 672
diff changeset
 15283
heightOn:aGC
e0f6bd36a99d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 672
diff changeset
 15284
    "return my height, if displayed on aGC;
e0f6bd36a99d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 672
diff changeset
 15285
     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
 15286
     return the pixel-height"
e0f6bd36a99d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 672
diff changeset
 15287
680
a905d02dcb82 added #bounds (for VisualComponent protocol compatibility)
Claus Gittinger <cg@exept.de>
parents: 674
diff changeset
 15288
    ^ height
674
e0f6bd36a99d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 672
diff changeset
 15289
e0f6bd36a99d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 672
diff changeset
 15290
    "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
 15291
    "Modified: 13.5.1996 / 10:26:36 / cg"
674
e0f6bd36a99d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 672
diff changeset
 15292
!
e0f6bd36a99d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 672
diff changeset
 15293
3700
9b40f1e55270 dummy isDithered - for color compatibility
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
 15294
isDithered
9b40f1e55270 dummy isDithered - for color compatibility
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
 15295
    "for compatibility with color protocol"
9b40f1e55270 dummy isDithered - for color compatibility
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
 15296
9b40f1e55270 dummy isDithered - for color compatibility
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
 15297
    ^ false
9b40f1e55270 dummy isDithered - for color compatibility
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
 15298
!
9b40f1e55270 dummy isDithered - for color compatibility
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
 15299
3507
2edb2b607331 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3490
diff changeset
 15300
isGrayscaleImage
2edb2b607331 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3490
diff changeset
 15301
    ^ (photometric ~= #palette)
2edb2b607331 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3490
diff changeset
 15302
      and:[photometric ~= #rgb]
2edb2b607331 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3490
diff changeset
 15303
2edb2b607331 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3490
diff changeset
 15304
2edb2b607331 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3490
diff changeset
 15305
    "Created: 22.4.1997 / 14:12:02 / cg"
2edb2b607331 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3490
diff changeset
 15306
!
2edb2b607331 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3490
diff changeset
 15307
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15308
isImage
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15309
    "return true, if the receiver is some kind of image;
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15310
     true is returned here - the method is redefined from Object."
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15311
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15312
    ^ true
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15313
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15314
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15315
isImageOrForm
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15316
    "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
 15317
     true is returned here - the method is redefined from Object."
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15318
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15319
    ^ true
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15320
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15321
1630
e75c600b1c2a added #isMask query;
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
 15322
isMask
e75c600b1c2a added #isMask query;
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
 15323
    ^ false
e75c600b1c2a added #isMask query;
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
 15324
e75c600b1c2a added #isMask query;
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
 15325
    "Created: 22.4.1997 / 14:12:02 / cg"
e75c600b1c2a added #isMask query;
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
 15326
!
e75c600b1c2a added #isMask query;
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
 15327
8111
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15328
lumaOfYCbCr:pixel
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15329
    "if the receiver is an YCbCr-image:
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15330
     return the luma (Y) component, scaled to (0 .. 1)"
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15331
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15332
    photometric == #YCbCr ifTrue:[ 
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15333
        samplesPerPixel == 3 ifTrue:[
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15334
            "/ assume that the Y bits are the leftMost bits 
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15335
            (#[8 8 8] isSameSequenceAs:bitsPerSample)ifTrue:[
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15336
                ^ 1.0 / 255 * ((pixel bitShift:-16) bitAnd:16rFF)
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15337
            ]
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15338
        ].
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15339
    ].
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15340
    self subclassResponsibility
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15341
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15342
    "Created: / 26-08-2017 / 22:06:36 / cg"
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15343
!
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15344
2890
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15345
magentaComponentOfCMY:pixel
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15346
    "if the receiver is a cmy-image:
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 15347
     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
 15348
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15349
    samplesPerPixel == 3 ifTrue:[
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 15350
        (#[8 8 8] isSameSequenceAs:bitsPerSample)ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15351
            ^ 100.0 / 255 * ((pixel bitShift:-8) bitAnd:16rFF)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15352
        ]
2890
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15353
    ].
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15354
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15355
    self subclassResponsibility
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15356
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 15357
    "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
 15358
!
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15359
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15360
magentaComponentOfCMYK:pixel
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15361
    "if the receiver is a cmyk-image:
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 15362
     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
 15363
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15364
    samplesPerPixel == 4 ifTrue:[
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 15365
        (#[8 8 8 8] isSameSequenceAs:bitsPerSample)ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15366
            ^ 100.0 / 255 * ((pixel bitShift:-16) bitAnd:16rFF)
8130
3f89522ad9fb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8116
diff changeset
 15367
        ].
3f89522ad9fb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8116
diff changeset
 15368
        (#[16 16 16 16] isSameSequenceAs:bitsPerSample)ifTrue:[
3f89522ad9fb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8116
diff changeset
 15369
            ^ 100.0 / 16rFFFF * ((pixel bitShift:-32) bitAnd:16rFFFF)
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15370
        ]
2890
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15371
    ].
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15372
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15373
    self subclassResponsibility
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15374
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 15375
    "Modified (format): / 31-01-2017 / 13:19:11 / stefan"
8130
3f89522ad9fb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8116
diff changeset
 15376
    "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
 15377
!
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15378
7596
9e63984bd73f #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7595
diff changeset
 15379
nColorsUsed
9e63984bd73f #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7595
diff changeset
 15380
    ^ self realUsedValues size
9e63984bd73f #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7595
diff changeset
 15381
!
9e63984bd73f #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7595
diff changeset
 15382
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15383
numAlphaBits
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15384
    photometric == #rgba ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15385
        "/ alpha in low bits
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15386
        ^ bitsPerSample at:4.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15387
    ].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15388
    photometric == #argb ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15389
        "/ alpha in high bits
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15390
        ^ bitsPerSample at:1.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15391
    ].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15392
    ^ 0.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15393
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15394
    "Created: / 22-08-2017 / 17:34:38 / cg"
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15395
!
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15396
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15397
numBlueBits
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15398
    photometric == #rgba ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15399
        "/ alpha in low bits
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15400
        ^ bitsPerSample at:3.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15401
    ].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15402
    photometric == #argb ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15403
        "/ alpha in high bits
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15404
        ^ bitsPerSample at:4.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15405
    ].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15406
    photometric == #rgb ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15407
        "/ no alpha
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15408
        ^ bitsPerSample at:3.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15409
    ].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15410
    self subclassResponsibility
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15411
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15412
    "Created: / 22-08-2017 / 17:35:24 / cg"
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15413
!
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15414
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15415
numGreenBits
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15416
    photometric == #rgba ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15417
        "/ alpha in low bits
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15418
        ^ bitsPerSample at:2.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15419
    ].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15420
    photometric == #argb ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15421
        "/ alpha in high bits
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15422
        ^ bitsPerSample at:3.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15423
    ].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15424
    photometric == #rgb ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15425
        "/ no alpha
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15426
        ^ bitsPerSample at:2.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15427
    ].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15428
    self subclassResponsibility
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15429
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15430
    "Created: / 22-08-2017 / 17:35:52 / cg"
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15431
!
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15432
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15433
numRedBits
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15434
    photometric == #rgba ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15435
        "/ alpha in low bits
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15436
        ^ bitsPerSample at:1.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15437
    ].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15438
    photometric == #argb ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15439
        "/ alpha in high bits
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15440
        ^ bitsPerSample at:2.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15441
    ].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15442
    photometric == #rgb ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15443
        "/ no alpha
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15444
        ^ bitsPerSample at:1.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15445
    ].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15446
    self subclassResponsibility
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15447
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15448
    "Created: / 22-08-2017 / 17:36:15 / cg"
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15449
!
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15450
1433
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
 15451
pixelArraySpecies
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
 15452
    "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
 15453
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 15454
    self depth <= 8 ifTrue:[^ ByteArray].
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 15455
    "/ (d := self depth) <= 8 ifTrue:[^ ByteArray].
6648
dc88bb5f9231 class: Image
Claus Gittinger <cg@exept.de>
parents: 6624
diff changeset
 15456
    "/ d <= 16 ifTrue:[^ WordArray].
dc88bb5f9231 class: Image
Claus Gittinger <cg@exept.de>
parents: 6624
diff changeset
 15457
    "/ ^ IntegerArray
dc88bb5f9231 class: Image
Claus Gittinger <cg@exept.de>
parents: 6624
diff changeset
 15458
    ^ Array
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 15459
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 15460
    "Modified: / 31-01-2017 / 14:52:42 / stefan"
1433
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
 15461
!
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
 15462
940
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15463
realColorMap
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15464
    "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
 15465
     For palette images, this is the internal colormap;
940
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15466
     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
 15467
     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
 15468
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15469
    |d nEntries "{ Class: SmallInteger }"
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15470
     colorArray|
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15471
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15472
    photometric == #palette ifTrue:[
8099
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
 15473
        "/ should not happen
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
 15474
        colorMap isNil ifTrue:[
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
 15475
            ^ Color vgaColors.
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
 15476
        ].    
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15477
        ^ colorMap asArray
940
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15478
    ].
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15479
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15480
    d := self depth.
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15481
    d > 12 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15482
        self error:'deep palette images not supported'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15483
        ^ nil.
940
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15484
    ].
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15485
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15486
    nEntries := 1 bitShift:d.
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15487
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15488
    colorArray := Array new:nEntries.
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15489
    1 to:nEntries do:[:idx |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15490
        colorArray at:idx put:(self colorFromValue:(idx-1)).
940
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15491
    ].
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15492
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15493
    ^ colorArray
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15494
8099
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
 15495
    "Created: / 11-07-1996 / 20:20:35 / cg"
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
 15496
    "Modified: / 24-08-2017 / 17:27:31 / cg"
940
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15497
!
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15498
3273
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15499
realUsedColors
3964
31e7b1921e24 comments
Claus Gittinger <cg@exept.de>
parents: 3940
diff changeset
 15500
    "return a collection of colors which are really used in the receiver.
31e7b1921e24 comments
Claus Gittinger <cg@exept.de>
parents: 3940
diff changeset
 15501
     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
 15502
     (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
 15503
6379
a8d53c1947f2 class: Image
Stefan Vogel <sv@exept.de>
parents: 6375
diff changeset
 15504
    ^ self realUsedValues collect:[:pixel | self colorFromValue:pixel] as:Set
3273
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15505
!
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15506
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15507
realUsedValues
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15508
    "return a collection of color values used in the receiver.
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 15509
     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
 15510
     of the image.
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15511
     This is a general and therefore slow implementation; subclasses
3964
31e7b1921e24 comments
Claus Gittinger <cg@exept.de>
parents: 3940
diff changeset
 15512
     may want to redefine this method for more performance.
31e7b1921e24 comments
Claus Gittinger <cg@exept.de>
parents: 3940
diff changeset
 15513
     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
 15514
     (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
 15515
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15516
    |set last|
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15517
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15518
    set := IdentitySet new.
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15519
    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
 15520
        pixel ~~ last ifTrue:[
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 15521
            set add:pixel.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 15522
            last := pixel.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 15523
        ]
3273
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15524
    ].
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15525
    ^ set
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15526
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15527
    "
4168
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
 15528
     (Image fromFile:'goodies/bitmaps/gifImages/garfield.gif') usedValues
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
 15529
     (Image fromFile:'libtool/bitmaps/SBrowser.xbm') usedValues
3273
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15530
    "
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15531
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15532
    "Modified: / 29.7.1998 / 21:29:44 / cg"
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15533
!
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15534
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15535
redBitsOf:pixel
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15536
    "if the receiver is an rgb-image:
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 15537
     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
 15538
     MaxRedValue is the largest integer representable by the number
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 15539
     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
 15540
     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
 15541
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15542
    |redBits greenBits blueBits alphaBits redMask|
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15543
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15544
    redBits := self numRedBits.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15545
    greenBits := self numGreenBits.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15546
    blueBits := self numBlueBits.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15547
    redMask := (1 bitShift:redBits)-1.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15548
    
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15549
    samplesPerPixel >= 3 ifTrue:[
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15550
        photometric == #rgba ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15551
            alphaBits := self numAlphaBits.
8106
479e731381bd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8103
diff changeset
 15552
            ^ (pixel rightShift:(greenBits+blueBits+alphaBits)) bitAnd:redMask.
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15553
        ].
8524
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
 15554
        ^ (pixel rightShift:(greenBits+blueBits)) bitAnd:redMask.
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15555
    ].
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15556
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15557
    self subclassResponsibility
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15558
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15559
    "Created: / 08-06-1996 / 09:44:51 / cg"
8106
479e731381bd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8103
diff changeset
 15560
    "Modified: / 25-08-2017 / 12:24:40 / cg"
8524
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
 15561
    "Modified: / 19-10-2018 / 16:34:26 / Stefan Vogel"
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15562
!
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15563
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15564
redComponentOf:pixel
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15565
    "if the receiver is an rgb-image:
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 15566
     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
 15567
     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
 15568
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
 15569
    |redBits   "{ Class: SmallInteger }"
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
 15570
     greenBits "{ Class: SmallInteger }"
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
 15571
     blueBits  "{ Class: SmallInteger }"
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
 15572
     s         "{ Class: SmallInteger }"|
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15573
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15574
    samplesPerPixel >= 3 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15575
        "/ assume that the red bits are the leftMost bits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15576
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15577
        redBits := bitsPerSample at:1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15578
        redBits == 0 ifTrue:[^ 0].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15579
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15580
        greenBits := bitsPerSample at:2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15581
        blueBits := bitsPerSample at:3.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15582
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15583
        s := (1 bitShift:redBits) - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15584
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15585
        ^ 100.0 / s *
8106
479e731381bd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8103
diff changeset
 15586
          ((pixel rightShift:(greenBits + blueBits))
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15587
           bitAnd:(1 bitShift:redBits)-1)
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15588
    ].
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15589
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15590
    self subclassResponsibility
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15591
8106
479e731381bd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8103
diff changeset
 15592
    "Created: / 08-06-1996 / 08:45:30 / cg"
479e731381bd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8103
diff changeset
 15593
    "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
 15594
!
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15595
3490
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15596
redMaskForPixelValue
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15597
    "return the mask used with translation from pixelValues to redBits"
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15598
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15599
    |redBits|
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15600
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15601
    samplesPerPixel >= 3 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15602
        redBits := bitsPerSample at:1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15603
        ^ (1 bitShift:redBits)-1
3490
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15604
    ].
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15605
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15606
    self subclassResponsibility
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15607
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15608
    "Created: 8.6.1996 / 09:44:51 / cg"
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15609
    "Modified: 10.6.1996 / 14:59:05 / cg"
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15610
!
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15611
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15612
redShiftForPixelValue
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15613
    "return the shift amount used with translation from pixelValues to redBits"
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15614
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15615
    |greenBits blueBits|
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15616
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15617
    samplesPerPixel >= 3 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15618
        greenBits := bitsPerSample at:2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15619
        blueBits := bitsPerSample at:3.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15620
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15621
        ^ (greenBits + blueBits) negated
3490
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15622
    ].
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15623
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15624
    self subclassResponsibility
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15625
!
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15626
4117
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15627
rgbFromValue:pixelValue
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15628
    "given a pixel value, return the corresponding 24bit rgbValue (rrggbb, red is MSB).
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15629
     Pixel value is in 0..2^depth - 1.
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15630
     The implementation below is generic and slow
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15631
     - this method is typically redefined in subclasses."
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15632
8111
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15633
    |p maxPixel clr r g b c m y k cb cr|
4117
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15634
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15635
    p := photometric.
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15636
    p isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15637
        colorMap notNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15638
            p := #palette
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15639
        ] ifFalse:[
4117
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15640
"/            'Image [warning]: no photometric - assume greyscale' infoPrintCR
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15641
            p := #blackIs0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15642
        ]
4117
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15643
    ].
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15644
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15645
    p == #blackIs0 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15646
        maxPixel := (1 bitShift:self bitsPerPixel) - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15647
        b := pixelValue * 255 // maxPixel.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15648
        ^ (((b bitShift:8) bitOr:b) bitShift:8) bitOr:b
4117
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15649
    ].
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15650
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15651
    p == #whiteIs0 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15652
        maxPixel := (1 bitShift:self bitsPerPixel) - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15653
        b := 255 - (pixelValue * 255 // maxPixel).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15654
        ^ (((b bitShift:8) bitOr:b) bitShift:8) bitOr:b
4117
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15655
    ].
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15656
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15657
    p == #palette ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15658
        pixelValue >= colorMap size ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15659
            ^ 0 "/ black
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15660
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15661
        clr := colorMap at:(pixelValue + 1).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15662
        clr isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15663
            ^ 0 "/ black
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15664
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15665
        ^ clr rgbValue.
4117
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15666
    ].
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15667
8091
e3a77cae0843 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8088
diff changeset
 15668
    ((p == #rgb) or:[p == #rgba or:[p == #argb]]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15669
        r := self redBitsOf:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15670
        g := self greenBitsOf:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15671
        b := self blueBitsOf:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15672
        "/ must scale to byte value...
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15673
        r := r bitShift:(8 - (bitsPerSample at:1)).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15674
        g := g bitShift:(8 - (bitsPerSample at:2)).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15675
        b := b bitShift:(8 - (bitsPerSample at:3)).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15676
        ^ (((r bitShift:8) bitOr:g) bitShift:8) bitOr:b
4117
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15677
    ].
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15678
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15679
    p == #cmyk ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15680
        c := self cyanComponentOfCMYK:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15681
        m := self magentaComponentOfCMYK:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15682
        y := self yellowComponentOfCMYK:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15683
        k := self blackComponentOfCMYK:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15684
        ^ (Color cyan:c magenta:m yellow:y black:k) rgbValue.
4117
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15685
    ].
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15686
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15687
    p == #cmy ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15688
        c := self cyanComponentOfCMY:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15689
        m := self magentaComponentOfCMY:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15690
        y := self yellowComponentOfCMY:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15691
        ^ (Color cyan:c magenta:m yellow:y) rgbValue.
4117
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15692
    ].
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15693
8111
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15694
    p == #YCbCr ifTrue:[
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15695
        y := self lumaOfYCbCr:pixelValue.
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15696
        cb := self chromaBlueOfYCbCr:pixelValue.
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15697
        cr := self chromaRedOfYCbCr:pixelValue.
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15698
        ^ (Color luma:y chromaBlue:cb chromaRed:cr) rgbValue. 
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15699
    ].
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15700
    
4117
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15701
    self error:'invalid (unsupported) photometric'
8091
e3a77cae0843 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8088
diff changeset
 15702
8111
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15703
    "
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15704
     (self basicNew
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15705
        bitsPerSample:#(8 8 8);
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15706
        photometric:#YCbCr;
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15707
        samplesPerPixel:3;
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15708
        yourself
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15709
     ) rgbFromValue: 16r7F1010
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15710
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15711
     (self basicNew
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15712
        bitsPerSample:#(8 8 8);
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15713
        photometric:#YCbCr;
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15714
        samplesPerPixel:3;
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15715
        yourself
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15716
     ) rgbFromValue: 16rFF1010
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15717
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15718
     (self basicNew
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15719
        bitsPerSample:#(8 8 8);
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15720
        photometric:#YCbCr;
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15721
        samplesPerPixel:3;
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15722
        yourself
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15723
     ) rgbFromValue: 16rFF0000
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15724
    "
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15725
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15726
    "Modified: / 26-08-2017 / 20:56:49 / cg"
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15727
    "Modified (comment): / 26-08-2017 / 22:18:14 / cg"
4117
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15728
!
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15729
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15730
usedColors
3964
31e7b1921e24 comments
Claus Gittinger <cg@exept.de>
parents: 3940
diff changeset
 15731
    "return a collection of colors used in the receiver.
31e7b1921e24 comments
Claus Gittinger <cg@exept.de>
parents: 3940
diff changeset
 15732
     This looks at the colorMap only if present.
6896
6dde273a9c0b class: Image
Claus Gittinger <cg@exept.de>
parents: 6894
diff changeset
 15733
     (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
 15734
2311
1c7e68532808 better #usedColors for rgb images.
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
 15735
    |colors|
1c7e68532808 better #usedColors for rgb images.
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
 15736
1c7e68532808 better #usedColors for rgb images.
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
 15737
    colors := self usedColorsMax:4096.
1c7e68532808 better #usedColors for rgb images.
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
 15738
    colors isNil ifTrue:[
8159
e24c82c679a0 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8152
diff changeset
 15739
        self error:'too many colors (> 4096) in image'.
2311
1c7e68532808 better #usedColors for rgb images.
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
 15740
    ].
1c7e68532808 better #usedColors for rgb images.
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
 15741
    ^ colors
1c7e68532808 better #usedColors for rgb images.
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
 15742
1c7e68532808 better #usedColors for rgb images.
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
 15743
    "
4168
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
 15744
     (Image fromFile:'goodies/bitmaps/gifImages/garfield.gif') usedColors
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
 15745
     (Image fromFile:'libtool/bitmaps/SBrowser.xbm') usedColors
2311
1c7e68532808 better #usedColors for rgb images.
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
 15746
    "
1c7e68532808 better #usedColors for rgb images.
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
 15747
8159
e24c82c679a0 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8152
diff changeset
 15748
    "Modified: / 31-08-2017 / 14:37:37 / cg"
2311
1c7e68532808 better #usedColors for rgb images.
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
 15749
!
1c7e68532808 better #usedColors for rgb images.
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
 15750
1c7e68532808 better #usedColors for rgb images.
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
 15751
usedColorsMax:nMax
1c7e68532808 better #usedColors for rgb images.
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
 15752
    "return a collection of colors used in the receiver;
3964
31e7b1921e24 comments
Claus Gittinger <cg@exept.de>
parents: 3940
diff changeset
 15753
     This looks at the colorMap only if present
6896
6dde273a9c0b class: Image
Claus Gittinger <cg@exept.de>
parents: 6894
diff changeset
 15754
     (as opposed to #realUsedColors, which goes through the pixels of the bitmap).
3964
31e7b1921e24 comments
Claus Gittinger <cg@exept.de>
parents: 3940
diff changeset
 15755
     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
 15756
     (useful when searching rgb images)."
1c7e68532808 better #usedColors for rgb images.
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
 15757
2199
ac56b54c59a5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2185
diff changeset
 15758
    |usedValues max colors|
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15759
7915
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15760
    (photometric == #rgb or:[photometric == #rgba]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15761
        usedValues := IdentitySet new.
7915
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15762
        (photometric == #rgb) ifTrue:[
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15763
            self valuesFromX:0 y:0 toX:(width-1) y:(height-1)
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15764
              do:[:x :y :pixel |
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15765
                usedValues add:pixel.
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15766
                usedValues size > nMax ifTrue:[
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15767
                    "/ too many to be returned here (think of the mass of
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15768
                    "/ data to be returned by a 24bit image ... ;-)
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15769
                    ^ nil
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15770
                ]
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15771
            ].
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15772
        ] ifFalse:[
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15773
            self valuesFromX:0 y:0 toX:(width-1) y:(height-1)
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15774
              do:[:x :y :pixel |
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15775
                usedValues add:(pixel bitShift:-8).
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15776
                usedValues size > nMax ifTrue:[
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15777
                    "/ too many to be returned here (think of the mass of
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15778
                    "/ data to be returned by a 24bit image ... ;-)
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15779
                    ^ nil
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15780
                ]
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15781
            ].
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15782
        ].    
7595
c77d718d3d94 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7573
diff changeset
 15783
"/        colors := usedValues collect:[:pixel | self colorFromValue:pixel].
c77d718d3d94 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7573
diff changeset
 15784
        "/ this code is slightly faster (but wrong for 16-bit images)...
c77d718d3d94 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7573
diff changeset
 15785
        colors := usedValues collect:[:pixel | 
c77d718d3d94 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7573
diff changeset
 15786
                    |r g b|
c77d718d3d94 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7573
diff changeset
 15787
                    r := self redBitsOf:pixel.
c77d718d3d94 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7573
diff changeset
 15788
                    g := self greenBitsOf:pixel.
c77d718d3d94 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7573
diff changeset
 15789
                    b := self blueBitsOf:pixel.
c77d718d3d94 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7573
diff changeset
 15790
                    "/ must scale to byte value...
c77d718d3d94 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7573
diff changeset
 15791
                    r := r bitShift:(8 - (bitsPerSample at:1)).
c77d718d3d94 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7573
diff changeset
 15792
                    g := g bitShift:(8 - (bitsPerSample at:2)).
c77d718d3d94 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7573
diff changeset
 15793
                    b := b bitShift:(8 - (bitsPerSample at:3)).
c77d718d3d94 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7573
diff changeset
 15794
                    Color redByte:r greenByte:g blueByte:b
c77d718d3d94 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7573
diff changeset
 15795
                 ].
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15796
        ^ colors.
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15797
    ].
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15798
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15799
    usedValues := self usedValues asArray.
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15800
    photometric == #palette ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15801
        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
 15802
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15803
        "/ (photometric == #blackIs0 or:[photometric == #whiteIs0])
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15804
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15805
        max := (1 bitShift:self depth) - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15806
        colors :=  usedValues collect:[:val | (Color gray:(100 * val / max ))] as:Set.
6037
eea2343b0b1e Refactoring:
Stefan Vogel <sv@exept.de>
parents: 5956
diff changeset
 15807
    ].
eea2343b0b1e Refactoring:
Stefan Vogel <sv@exept.de>
parents: 5956
diff changeset
 15808
    ^ colors
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15809
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15810
    "
4168
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
 15811
     (Image fromFile:'goodies/bitmaps/gifImages/garfield.gif') usedColors
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
 15812
     (Image fromFile:'libtool/bitmaps/SBrowser.xbm') usedColors
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15813
    "
746
f5479d603f64 gray vs. grey
Claus Gittinger <cg@exept.de>
parents: 744
diff changeset
 15814
7915
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15815
    "Created: / 07-09-1998 / 17:54:17 / cg"
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15816
    "Modified: / 20-02-2017 / 10:57:17 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15817
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15818
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15819
usedValues
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15820
    "return a collection of color values used in the receiver.
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 15821
     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
 15822
     of the image.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15823
     This is a general and therefore slow implementation; subclasses
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15824
     may want to redefine this method for more performance."
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15825
3273
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15826
    ^ self realUsedValues
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15827
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15828
    "
4168
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
 15829
     (Image fromFile:'goodies/bitmaps/gifImages/garfield.gif') usedValues
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
 15830
     (Image fromFile:'lib tool/bitmaps/SBrowser.xbm') usedValues
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15831
    "
2206
8bf0549762b8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2205
diff changeset
 15832
8bf0549762b8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2205
diff changeset
 15833
    "Modified: / 29.7.1998 / 21:29:44 / cg"
674
e0f6bd36a99d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 672
diff changeset
 15834
!
e0f6bd36a99d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 672
diff changeset
 15835
861
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 15836
valueFromColor:color
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 15837
    "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
 15838
     Non-representable colors return nil."
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 15839
4788
0d07247aee8b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4780
diff changeset
 15840
    |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
 15841
8301
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 15842
    color isInteger ifTrue:[
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 15843
        self halt.
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 15844
        ^ color
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 15845
    ].
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 15846
5051
492727d3e5f3 oops valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 5037
diff changeset
 15847
    color colorId notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15848
        color == Color noColor ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15849
            ^ nil "/ mask
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15850
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15851
        color device isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15852
            ^ color colorId
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15853
        ]
5051
492727d3e5f3 oops valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 5037
diff changeset
 15854
    ].
5037
2e515c9ee849 changed #valueFromColor:
Claus Gittinger <cg@exept.de>
parents: 4998
diff changeset
 15855
861
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 15856
    photometric == #whiteIs0 ifTrue:[
7958
31380068cced #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 7930
diff changeset
 15857
        samplesPerPixel isNil ifTrue:[self breakPoint:#cg. samplesPerPixel := 1].
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15858
        maxPixel := (1 bitShift:self bitsPerPixel) - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15859
        ^ maxPixel - (color brightness * maxPixel) rounded.
861
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 15860
    ].
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 15861
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 15862
    photometric == #blackIs0 ifTrue:[
7958
31380068cced #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 7930
diff changeset
 15863
        samplesPerPixel isNil ifTrue:[self breakPoint:#cg. samplesPerPixel := 1].
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15864
        maxPixel := (1 bitShift:self bitsPerPixel) - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15865
        ^ (color brightness * maxPixel) rounded.
861
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 15866
    ].
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 15867
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 15868
    photometric == #palette ifTrue:[
7958
31380068cced #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 7930
diff changeset
 15869
        samplesPerPixel isNil ifTrue:[self breakPoint:#cg. samplesPerPixel := 1].
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15870
        colorMap isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15871
            "/ same as blackIs0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15872
            maxPixel := (1 bitShift:self bitsPerPixel) - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15873
            ^ (color brightness * maxPixel) rounded.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15874
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15875
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15876
        pixel := colorMap indexOf:color.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15877
        pixel == 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15878
            "
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15879
             the color is not in the image's colormap
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15880
            "
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15881
            ^ nil
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15882
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15883
        ^ pixel - 1
861
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 15884
    ].
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 15885
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 15886
    photometric == #rgb ifTrue:[
7958
31380068cced #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 7930
diff changeset
 15887
        samplesPerPixel isNil ifTrue:[self breakPoint:#cg. samplesPerPixel := 3].
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15888
        samplesPerPixel >= 3 ifTrue:[
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15889
            redBits := self numRedBits.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15890
            greenBits := self numGreenBits.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15891
            blueBits := self numBlueBits.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15892
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15893
            "/ map r/g/b to 0..255
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15894
            r := (color red / 100.0 * ((1 bitShift:redBits)-1)) rounded.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15895
            g := (color green / 100.0 * ((1 bitShift:greenBits)-1)) rounded.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15896
            b := (color blue / 100.0 * ((1 bitShift:blueBits)-1)) rounded.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15897
            pixel := (((r bitShift:greenBits) + g) bitShift:blueBits) + b.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15898
            ^ pixel
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15899
        ]
861
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 15900
    ].
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 15901
4788
0d07247aee8b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4780
diff changeset
 15902
    photometric == #rgba ifTrue:[
7958
31380068cced #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 7930
diff changeset
 15903
        samplesPerPixel isNil ifTrue:[self breakPoint:#cg. samplesPerPixel := 4].
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15904
        samplesPerPixel >= 4 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15905
            redBits := bitsPerSample at:1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15906
            greenBits := bitsPerSample at:2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15907
            blueBits := bitsPerSample at:3.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15908
            alphaBits := bitsPerSample at:4.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15909
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15910
            "/ map r/g/b/a to 0..255
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15911
            r := (color red / 100.0 * ((1 bitShift:redBits)-1)) rounded.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15912
            g := (color green / 100.0 * ((1 bitShift:greenBits)-1)) rounded.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15913
            b := (color blue / 100.0 * ((1 bitShift:blueBits)-1)) rounded.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15914
            a := (color alpha * ((1 bitShift:alphaBits)-1)) rounded.
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15915
            pixel := (((((r bitShift:greenBits) + g) bitShift:blueBits) + b) bitShift:alphaBits) + a.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15916
            ^ pixel
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15917
        ]
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15918
    ].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15919
    photometric == #argb ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15920
        samplesPerPixel isNil ifTrue:[self breakPoint:#cg. samplesPerPixel := 4].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15921
        samplesPerPixel >= 4 ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15922
            alphaBits := bitsPerSample at:1.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15923
            redBits := bitsPerSample at:2.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15924
            greenBits := bitsPerSample at:3.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15925
            blueBits := bitsPerSample at:4.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15926
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15927
            "/ map r/g/b/a to 0..255
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15928
            r := (color red / 100.0 * ((1 bitShift:redBits)-1)) rounded.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15929
            g := (color green / 100.0 * ((1 bitShift:greenBits)-1)) rounded.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15930
            b := (color blue / 100.0 * ((1 bitShift:blueBits)-1)) rounded.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15931
            a := (color alpha * ((1 bitShift:alphaBits)-1)) rounded.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15932
            pixel := (((((a bitShift:redBits) + r) bitShift:greenBits) + g) bitShift:blueBits) + b.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15933
            ^ pixel
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15934
        ]
4788
0d07247aee8b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4780
diff changeset
 15935
    ].
2380
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
 15936
    ImageErrorSignal raiseErrorString:'format not supported'.
861
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 15937
    ^ nil
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 15938
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15939
    "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
 15940
!
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 15941
4858
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
 15942
valueFromRGB:rgb
8108
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15943
    "given a color as rgb-value, with 8 bits per component, 
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15944
     return the corresponding pixel value.
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15945
     The red component is in the high 8 bits.
4858
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
 15946
     Non-representable colors return nil."
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
 15947
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15948
    |pixel redBits greenBits blueBits alphaBits r g b a|
4858
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
 15949
8108
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15950
    b := rgb bitAnd:16rFF.
4858
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
 15951
    g := (rgb bitShift:-8) bitAnd:16rFF.
8108
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15952
    r := (rgb bitShift:-16) bitAnd:16rFF.
7123
320a7ec771f3 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7101
diff changeset
 15953
    a := 255.
4858
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
 15954
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
 15955
    photometric == #rgb ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15956
        samplesPerPixel >= 3 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15957
            "/ r,g,b  b at low end
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15958
            redBits := bitsPerSample at:1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15959
            greenBits := bitsPerSample at:2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15960
            blueBits := bitsPerSample at:3.
8108
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15961
            ((redBits == 8) and:[(greenBits == 8) and:[(blueBits == 8) ]]) ifTrue:[
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15962
                pixel := (((r bitShift:greenBits) + g) bitShift:blueBits) + b.
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15963
                ^ pixel
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15964
            ]
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15965
        ]
4858
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
 15966
    ].
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
 15967
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15968
    photometric == #argb ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15969
        samplesPerPixel >= 4 ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15970
            "/ a,r,g,b  b at low end
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15971
            "/ alphaBits := bitsPerSample at:1.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15972
            redBits := bitsPerSample at:2.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15973
            greenBits := bitsPerSample at:3.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15974
            blueBits := bitsPerSample at:4.
8108
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15975
            ((redBits == 8) and:[(greenBits == 8) and:[(blueBits == 8) ]]) ifTrue:[
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15976
                pixel := (((((a bitShift:redBits) + r) bitShift:greenBits) + g) bitShift:blueBits) + b.
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15977
                ^ pixel
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15978
            ]
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15979
        ]
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15980
    ].
4858
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
 15981
    photometric == #rgba ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15982
        samplesPerPixel >= 4 ifTrue:[
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15983
            "/ r,g,b,a  a at low end
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15984
            redBits := bitsPerSample at:1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15985
            greenBits := bitsPerSample at:2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15986
            blueBits := bitsPerSample at:3.
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15987
            alphaBits := bitsPerSample at:4.
8108
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15988
            ((redBits == 8) and:[(greenBits == 8) and:[(blueBits == 8) ]]) ifTrue:[
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15989
                pixel := (((((r bitShift:greenBits) + g) bitShift:blueBits) + b) bitShift:alphaBits) + a.
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15990
            ].
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15991
            ^ pixel
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15992
        ]
4858
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
 15993
    ].
8108
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15994
    
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15995
    photometric == #palette ifTrue:[
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15996
        colorMap notNil ifTrue:[
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15997
            pixel := colorMap indexOf:(Color rgbValue:rgb).
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15998
            pixel == 0 ifTrue:[
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15999
                "/ the color is not in the image's colormap
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 16000
                ^ nil
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 16001
            ].    
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 16002
            ^ pixel - 1
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 16003
        ].
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 16004
    ].
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 16005
4858
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
 16006
    ImageErrorSignal raiseErrorString:'format not supported'.
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
 16007
    ^ nil
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
 16008
8108
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 16009
    "
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 16010
     |img|
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 16011
     img := Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif'.
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 16012
     img valueFromRGB:16r55AAFF.
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 16013
    "
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 16014
4858
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
 16015
    "Created: / 15-01-2008 / 15:55:08 / cg"
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 16016
    "Modified: / 31-01-2017 / 14:45:00 / stefan"
8108
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 16017
    "Modified (comment): / 26-08-2017 / 13:07:56 / cg"
4858
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
 16018
!
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
 16019
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 16020
valueFromRedBits:redBits greenBits:greenBits blueBits:blueBits
8745
2ebd0e6febc9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8729
diff changeset
 16021
    "given the rgb bits, each in 0..maxXXXValue (i.e. according to
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 16022
     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
 16023
     For now, only useful with RGB images"
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 16024
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 16025
    |pixel numGreenBits numBlueBits|
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 16026
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 16027
    photometric == #rgb ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16028
        samplesPerPixel >= 3 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16029
            numGreenBits := bitsPerSample at:2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16030
            numBlueBits := bitsPerSample at:3.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16031
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16032
            pixel := (((redBits bitShift:numGreenBits) + greenBits) bitShift:numBlueBits) + blueBits.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16033
            ^ pixel
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16034
        ]
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 16035
    ].
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 16036
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 16037
    ImageErrorSignal raiseErrorString:'format not supported'.
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 16038
    ^ nil
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 16039
8745
2ebd0e6febc9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8729
diff changeset
 16040
    "Modified: / 30-09-1998 / 22:03:50 / cg"
2ebd0e6febc9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8729
diff changeset
 16041
    "Modified (comment): / 22-07-2019 / 13:51:09 / Claus Gittinger"
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 16042
!
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 16043
674
e0f6bd36a99d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 672
diff changeset
 16044
widthOn:aGC
e0f6bd36a99d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 672
diff changeset
 16045
    "return my width, if displayed on aGC;
e0f6bd36a99d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 672
diff changeset
 16046
     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
 16047
     return the pixel-width"
e0f6bd36a99d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 672
diff changeset
 16048
680
a905d02dcb82 added #bounds (for VisualComponent protocol compatibility)
Claus Gittinger <cg@exept.de>
parents: 674
diff changeset
 16049
    ^ width
674
e0f6bd36a99d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 672
diff changeset
 16050
e0f6bd36a99d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 672
diff changeset
 16051
    "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
 16052
    "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
 16053
!
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 16054
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 16055
yellowComponentOfCMY:pixel
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 16056
    "if the receiver is a cmy-image:
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 16057
     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
 16058
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 16059
    samplesPerPixel == 3 ifTrue:[
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 16060
        (#[8 8 8] isSameSequenceAs:bitsPerSample)ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16061
            ^ 100.0 / 255 * (pixel bitAnd:16rFF)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16062
        ]
2890
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 16063
    ].
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 16064
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 16065
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 16066
    self subclassResponsibility
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 16067
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 16068
    "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
 16069
!
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 16070
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 16071
yellowComponentOfCMYK:pixel
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 16072
    "if the receiver is a cmyk-image:
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 16073
     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
 16074
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 16075
    samplesPerPixel == 4 ifTrue:[
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 16076
        (#[8 8 8 8] isSameSequenceAs:bitsPerSample)ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16077
            ^ 100.0 / 255 * ((pixel bitShift:-8) bitAnd:16rFF)
8130
3f89522ad9fb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8116
diff changeset
 16078
        ].
3f89522ad9fb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8116
diff changeset
 16079
        (#[16 16 16 16] isSameSequenceAs:bitsPerSample)ifTrue:[
3f89522ad9fb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8116
diff changeset
 16080
            ^ 100.0 / 16rFFFF * ((pixel bitShift:-16) bitAnd:16rFFFF)
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16081
        ]
2890
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 16082
    ].
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 16083
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 16084
    self subclassResponsibility
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 16085
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 16086
    "Modified: / 31-01-2017 / 13:19:00 / stefan"
8130
3f89522ad9fb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8116
diff changeset
 16087
    "Modified: / 29-08-2017 / 22:56:17 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16088
! !
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16089
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16090
!Image methodsFor:'saving on file'!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16091
8482
cf5849dd8be7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8441
diff changeset
 16092
bytesForFileUsing:readerClass
cf5849dd8be7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8441
diff changeset
 16093
    "return the contents of a file if saved by readerClass.
cf5849dd8be7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8441
diff changeset
 16094
     That is: an imageWriter is created to generate the bytes
cf5849dd8be7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8441
diff changeset
 16095
     as if written to a file.
cf5849dd8be7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8441
diff changeset
 16096
     No actual file is created, but the bytes are returned"
cf5849dd8be7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8441
diff changeset
 16097
cf5849dd8be7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8441
diff changeset
 16098
    ^ ByteArray streamContents:[:s |
cf5849dd8be7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8441
diff changeset
 16099
        readerClass save:self onStream:s quality:nil
cf5849dd8be7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8441
diff changeset
 16100
    ].
cf5849dd8be7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8441
diff changeset
 16101
    
cf5849dd8be7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8441
diff changeset
 16102
    "
cf5849dd8be7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8441
diff changeset
 16103
     |anImage|
cf5849dd8be7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8441
diff changeset
 16104
cf5849dd8be7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8441
diff changeset
 16105
     anImage := Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif'.
cf5849dd8be7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8441
diff changeset
 16106
     anImage bytesForFileUsing:TIFFReader.
cf5849dd8be7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8441
diff changeset
 16107
     anImage bytesForFileUsing:PNGReader.
cf5849dd8be7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8441
diff changeset
 16108
    "
cf5849dd8be7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8441
diff changeset
 16109
cf5849dd8be7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8441
diff changeset
 16110
    "Created: / 24-09-2018 / 10:27:20 / Claus Gittinger"
cf5849dd8be7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8441
diff changeset
 16111
!
cf5849dd8be7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8441
diff changeset
 16112
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16113
saveOn:aFileName
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 16114
    "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
 16115
     Currently, not all formats may be supported
1573
61046386f41f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1572
diff changeset
 16116
     (see ImageReader subclasses implementing save:onFile:).
3913
25e103c84773 comments
Claus Gittinger <cg@exept.de>
parents: 3912
diff changeset
 16117
     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
 16118
7173
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16119
    ^ self saveOn:aFileName quality:nil
1175
5595569cfbd3 newStyle info & error messages
Claus Gittinger <cg@exept.de>
parents: 1170
diff changeset
 16120
1385
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
 16121
    "
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
 16122
     |image|
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
 16123
3476
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 16124
     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
 16125
     image saveOn:'myImage.tiff'.
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
 16126
     image saveOn:'myImage.xbm'.
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
 16127
     image saveOn:'myImage.xpm'.
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
 16128
     image saveOn:'myImage.xwd'.
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
 16129
    "
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
 16130
1799
054302440308 moved all mime-knowledge to MIMETypes
Claus Gittinger <cg@exept.de>
parents: 1786
diff changeset
 16131
    "Modified: 30.6.1997 / 22:06:34 / cg"
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
 16132
!
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
 16133
7173
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16134
saveOn:aFileName quality:qualityPercentOrNil
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16135
    "save the image in aFileName. The suffix of the filename controls the format.
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16136
     Currently, not all formats may be supported
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16137
     (see ImageReader subclasses implementing save:onFile:).
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16138
     May raise a signal, if the image cannot be written by the reader."
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16139
8504
2d8f21131bb3 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8497
diff changeset
 16140
    |readerClass|
7173
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16141
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16142
    "/
8504
2d8f21131bb3 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8497
diff changeset
 16143
    "/ from the filename extension, get the imageReader class
7173
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16144
    "/ (which should know how to write images as well)
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16145
    "/
8504
2d8f21131bb3 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8497
diff changeset
 16146
    readerClass := [
2d8f21131bb3 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8497
diff changeset
 16147
        ImageReader readerClassForFilename:aFileName.
2d8f21131bb3 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8497
diff changeset
 16148
    ] on:ConversionError do:[ 
2d8f21131bb3 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8497
diff changeset
 16149
        |default|
2d8f21131bb3 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8497
diff changeset
 16150
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16151
        "/
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16152
        "/ no known extension - could ask user for the format here.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16153
        "/ currently default to tiff format.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16154
        "/
8504
2d8f21131bb3 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8497
diff changeset
 16155
        default := self class defaultImageFileWriter.
2d8f21131bb3 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8497
diff changeset
 16156
        Logger warning:'Image [warning]: unknown extension - cannot figure out format - using default (%1)' with:default name.
2d8f21131bb3 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8497
diff changeset
 16157
        default.
7173
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16158
    ].
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16159
    ^ self saveOn:aFileName quality:qualityPercentOrNil using:readerClass
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16160
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16161
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16162
    "
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16163
     |image|
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16164
8504
2d8f21131bb3 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8497
diff changeset
 16165
     image := Image fromFile:'banner1.xpm'.
7173
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16166
     image saveOn:'myImage.tiff'.
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16167
     image saveOn:'myImage.xpm'.
8504
2d8f21131bb3 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8497
diff changeset
 16168
     (image asImageWithDepth:1) saveOn:'myImage.xbm'.
7173
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16169
     image saveOn:'myImage.xwd'.
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16170
    "
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16171
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16172
    "Modified: 30.6.1997 / 22:06:34 / cg"
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16173
!
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16174
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16175
saveOn:aFileName quality:qualityPercentOrNil using:readerClass
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 16176
    "save the receiver using the representation class
3476
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 16177
     (which is usually a concrete subclasses of ImageReader).
3913
25e103c84773 comments
Claus Gittinger <cg@exept.de>
parents: 3912
diff changeset
 16178
     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
 16179
7173
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16180
    ^ readerClass save:self onFile:aFileName quality:qualityPercentOrNil
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16181
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16182
    "
1573
61046386f41f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1572
diff changeset
 16183
     |anImage|
61046386f41f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1572
diff changeset
 16184
3476
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 16185
     anImage := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
1573
61046386f41f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1572
diff changeset
 16186
     anImage saveOn:'myImage.tiff' using:TIFFReader.
1575
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 16187
    "
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 16188
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 16189
    "
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 16190
     |anImage|
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 16191
3476
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 16192
     anImage := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
1573
61046386f41f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1572
diff changeset
 16193
     anImage saveOn:'myImage.xbm' using:XBMReader.
1575
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 16194
    "
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 16195
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 16196
    "
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 16197
     |anImage|
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 16198
3476
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 16199
     anImage := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
1575
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 16200
     Image cannotRepresentImageSignal handle:[:ex |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16201
        self warn:'cannot save the image in this format'
1575
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 16202
     ] do:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16203
        anImage saveOn:'myImage.xbm' using:XBMReader.
7173
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16204
     ]
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16205
    "
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16206
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16207
    "
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16208
     |anImage|
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16209
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16210
     anImage := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16211
     anImage saveOn:'myImage.xpm' using:XPMReader.
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16212
    "
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16213
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16214
    "
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16215
     |anImage|
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16216
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16217
     anImage := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16218
     anImage saveOn:'myImage.gif' using:GIFReader.
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16219
    "
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16220
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16221
    "Modified: 10.4.1997 / 17:49:26 / cg"
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16222
!
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16223
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16224
saveOn:aFileName using:readerClass
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16225
    "save the receiver using the representation class
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16226
     (which is usually a concrete subclasses of ImageReader).
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16227
     May raise a signal, if the image cannot be written by the reader."
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16228
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16229
    ^ readerClass save:self onFile:aFileName quality:nil
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16230
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16231
    "
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16232
     |anImage|
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16233
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16234
     anImage := Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif'.
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16235
     anImage saveOn:'myImage.tiff' using:TIFFReader.
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16236
     (Depth24Image fromImage:anImage) saveOn:'myImage.jpg' using:JPEGReader.
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16237
     anImage saveOn:'myImage50.tiff' quality:50 using:TIFFReader.
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16238
     (Depth24Image fromImage:anImage) saveOn:'myImage50.jpg' quality:50 using:JPEGReader.
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16239
    "
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16240
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16241
    "
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16242
     |anImage|
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16243
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16244
     anImage := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16245
     anImage saveOn:'myImage.xbm' using:XBMReader.
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16246
    "
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16247
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16248
    "
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16249
     |anImage|
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16250
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16251
     anImage := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16252
     Image cannotRepresentImageSignal handle:[:ex |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16253
        self warn:'cannot save the image in this format'
7173
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16254
     ] do:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16255
        anImage saveOn:'myImage.xbm' using:XBMReader.
1575
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 16256
     ]
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 16257
    "
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 16258
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 16259
    "
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 16260
     |anImage|
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 16261
3476
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 16262
     anImage := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
1573
61046386f41f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1572
diff changeset
 16263
     anImage saveOn:'myImage.xpm' using:XPMReader.
1575
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 16264
    "
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 16265
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 16266
    "
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 16267
     |anImage|
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 16268
3476
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 16269
     anImage := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
1573
61046386f41f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1572
diff changeset
 16270
     anImage saveOn:'myImage.gif' using:GIFReader.
61046386f41f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1572
diff changeset
 16271
    "
61046386f41f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1572
diff changeset
 16272
1575
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 16273
    "Modified: 10.4.1997 / 17:49:26 / cg"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
 16274
! !
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16275
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16276
!Image methodsFor:'screen capture'!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16277
924
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 16278
from:aDrawable in:aRectangle
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 16279
    "read an image from aDrawable.
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 16280
     This may be a device Form, a view or the rootView.
7227
3aaeb922a454 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 7224
diff changeset
 16281
     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
 16282
     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
 16283
     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
 16284
     and to read hardcopy images from the screen."
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16285
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 16286
    | visType
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16287
     x        "{ Class: SmallInteger }"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16288
     y        "{ Class: SmallInteger }"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16289
     w        "{ Class: SmallInteger }"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16290
     h        "{ Class: SmallInteger }"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 16291
     dstIndex "{ Class: SmallInteger }"
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 16292
     srcIndex "{ Class: SmallInteger }"
399
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
 16293
     srcRow   "{ Class: SmallInteger }"
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
 16294
     dstRow   "{ Class: SmallInteger }"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 16295
     inData tmpData usedPixels mapSize
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 16296
     map bytesPerLine
2534
35d91dcc4604 removed unused local
Claus Gittinger <cg@exept.de>
parents: 2533
diff changeset
 16297
     bitOrder spaceBitsPerPixel
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 16298
     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
 16299
     bitsR "{ Class: SmallInteger }"
e2c3f84ff31f fixed pixmap readout for win32, where red and green are exchanged
Claus Gittinger <cg@exept.de>
parents: 3518
diff changeset
 16300
     bitsG "{ Class: SmallInteger }"
e2c3f84ff31f fixed pixmap readout for win32, where red and green are exchanged
Claus Gittinger <cg@exept.de>
parents: 3518
diff changeset
 16301
     bitsB "{ Class: SmallInteger }"
399
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
 16302
     maskR "{ Class: SmallInteger }"
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
 16303
     maskG "{ Class: SmallInteger }"
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
 16304
     maskB "{ Class: SmallInteger }"
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
 16305
     shR "{ Class: SmallInteger }"
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
 16306
     shG "{ Class: SmallInteger }"
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
 16307
     shB "{ Class: SmallInteger }"
401
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
 16308
     shR2 "{ Class: SmallInteger }"
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
 16309
     shG2 "{ Class: SmallInteger }"
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
 16310
     shB2 "{ Class: SmallInteger }"
399
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
 16311
     r "{ Class: SmallInteger }"
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
 16312
     g "{ Class: SmallInteger }"
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
 16313
     b "{ Class: SmallInteger }"
2019
0de58c8e3262 fixed screen-capture (for 16bit)
Claus Gittinger <cg@exept.de>
parents: 2008
diff changeset
 16314
     word "{ Class: SmallInteger }"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 16315
     lword
7180
40dcb4638d93 #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 7176
diff changeset
 16316
     device ddepth isMSB bpp|
2019
0de58c8e3262 fixed screen-capture (for 16bit)
Claus Gittinger <cg@exept.de>
parents: 2008
diff changeset
 16317
0de58c8e3262 fixed screen-capture (for 16bit)
Claus Gittinger <cg@exept.de>
parents: 2008
diff changeset
 16318
    depth := self depth.
7180
40dcb4638d93 #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 7176
diff changeset
 16319
    bpp := "bitsPerPixel :=" self bitsPerPixel.
924
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 16320
927
c4bc2a7ff733 use #graphicsDevice instead of #device.
Claus Gittinger <cg@exept.de>
parents: 924
diff changeset
 16321
    device := aDrawable graphicsDevice.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16322
7637
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 16323
    aDrawable isForm ifTrue:[
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 16324
        aDrawable depth == 1 ifTrue:[
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 16325
            "/ a monochrome bitmap ?
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 16326
            visType := #StaticGray.
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 16327
            ddepth := 1.
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 16328
        ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16329
            visType := aDrawable photometric.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16330
            ddepth := aDrawable depth.
7637
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 16331
        ]. 
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16332
        photometric := aDrawable photometric.
8795
0bec4735e8e7 #BUGFIX by exept
Claus Gittinger <cg@exept.de>
parents: 8758
diff changeset
 16333
        photometric == #rgb ifTrue:[
0bec4735e8e7 #BUGFIX by exept
Claus Gittinger <cg@exept.de>
parents: 8758
diff changeset
 16334
            samplesPerPixel := 3.
0bec4735e8e7 #BUGFIX by exept
Claus Gittinger <cg@exept.de>
parents: 8758
diff changeset
 16335
            bitsPerSample := #(
0bec4735e8e7 #BUGFIX by exept
Claus Gittinger <cg@exept.de>
parents: 8758
diff changeset
 16336
                                "/ 32  #[8 8 8 8]
0bec4735e8e7 #BUGFIX by exept
Claus Gittinger <cg@exept.de>
parents: 8758
diff changeset
 16337
                                24  #[8 8 8]
0bec4735e8e7 #BUGFIX by exept
Claus Gittinger <cg@exept.de>
parents: 8758
diff changeset
 16338
                                16  #[5 6 5]
0bec4735e8e7 #BUGFIX by exept
Claus Gittinger <cg@exept.de>
parents: 8758
diff changeset
 16339
                                15  #[5 5 5]
0bec4735e8e7 #BUGFIX by exept
Claus Gittinger <cg@exept.de>
parents: 8758
diff changeset
 16340
                                12  #[4 4 4]
0bec4735e8e7 #BUGFIX by exept
Claus Gittinger <cg@exept.de>
parents: 8758
diff changeset
 16341
                             ) asMapAt:ddepth ifAbsent:[ self error. ByteArray new:3 withAll:(ddepth//3)]
0bec4735e8e7 #BUGFIX by exept
Claus Gittinger <cg@exept.de>
parents: 8758
diff changeset
 16342
        ] ifFalse:[
0bec4735e8e7 #BUGFIX by exept
Claus Gittinger <cg@exept.de>
parents: 8758
diff changeset
 16343
            photometric == #rgba ifTrue:[
0bec4735e8e7 #BUGFIX by exept
Claus Gittinger <cg@exept.de>
parents: 8758
diff changeset
 16344
                samplesPerPixel := 4.
0bec4735e8e7 #BUGFIX by exept
Claus Gittinger <cg@exept.de>
parents: 8758
diff changeset
 16345
                bitsPerSample := #(
0bec4735e8e7 #BUGFIX by exept
Claus Gittinger <cg@exept.de>
parents: 8758
diff changeset
 16346
                                    32  #[8 8 8 8]
0bec4735e8e7 #BUGFIX by exept
Claus Gittinger <cg@exept.de>
parents: 8758
diff changeset
 16347
                                    "/ 24  #[8 8 8]
0bec4735e8e7 #BUGFIX by exept
Claus Gittinger <cg@exept.de>
parents: 8758
diff changeset
 16348
                                    "/ 16  #[4 4 4 4]
0bec4735e8e7 #BUGFIX by exept
Claus Gittinger <cg@exept.de>
parents: 8758
diff changeset
 16349
                                    "/ 15  #[5 5 5]
0bec4735e8e7 #BUGFIX by exept
Claus Gittinger <cg@exept.de>
parents: 8758
diff changeset
 16350
                                    "/ 12  #[4 4 4]
0bec4735e8e7 #BUGFIX by exept
Claus Gittinger <cg@exept.de>
parents: 8758
diff changeset
 16351
                                 ) asMapAt:ddepth ifAbsent:[ self error. ByteArray new:4 withAll:(ddepth//4)]
0bec4735e8e7 #BUGFIX by exept
Claus Gittinger <cg@exept.de>
parents: 8758
diff changeset
 16352
            ] ifFalse:[
0bec4735e8e7 #BUGFIX by exept
Claus Gittinger <cg@exept.de>
parents: 8758
diff changeset
 16353
                samplesPerPixel := 1.
0bec4735e8e7 #BUGFIX by exept
Claus Gittinger <cg@exept.de>
parents: 8758
diff changeset
 16354
                bitsPerSample := ByteArray with:bpp.
0bec4735e8e7 #BUGFIX by exept
Claus Gittinger <cg@exept.de>
parents: 8758
diff changeset
 16355
            ]
0bec4735e8e7 #BUGFIX by exept
Claus Gittinger <cg@exept.de>
parents: 8758
diff changeset
 16356
        ].
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16357
    ] ifFalse:[
7637
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 16358
        "get some attributes of the display device"
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 16359
        visType := device visualType.
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 16360
        ddepth := device depth.
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 16361
        "/ kludge for 15bit XFree server
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 16362
        ddepth == 15 ifTrue:[
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 16363
            ddepth := 16
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 16364
        ].
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16365
        (visType == #StaticGray) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16366
            (device blackpixel == 0) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16367
                photometric := #blackIs0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16368
            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16369
                photometric := #whiteIs0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16370
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16371
            samplesPerPixel := 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16372
            bpp := "bitsPerPixel :=" ddepth.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16373
            bitsPerSample := ByteArray with:bpp.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16374
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16375
            ((visType == #PseudoColor) or:[(visType == #StaticColor) or:[visType == #GrayScale]]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16376
                photometric := #palette.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16377
                samplesPerPixel := 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16378
                bpp := "bitsPerPixel :=" ddepth.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16379
                bitsPerSample := ByteArray with:bpp.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16380
            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16381
                ((visType == #TrueColor) or:[visType == #DirectColor]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16382
                    photometric := #rgb.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16383
                    samplesPerPixel := 3.
7180
40dcb4638d93 #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 7176
diff changeset
 16384
    "/                bpp := "bitsPerPixel :=" depth.
4421
bcc5886c989c form -> image conversion fixes
james
parents: 4420
diff changeset
 16385
    "/                bitsPerSample := ByteArray with:device bitsRed
bcc5886c989c form -> image conversion fixes
james
parents: 4420
diff changeset
 16386
    "/                                       with:device bitsGreen
bcc5886c989c form -> image conversion fixes
james
parents: 4420
diff changeset
 16387
    "/                                       with:device bitsBlue
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16388
                    bpp := "bitsPerPixel :=" 24.
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 16389
                    bitsPerSample := #[8 8 8].
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16390
                ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16391
                    self error:'screen visual not supported'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16392
                    ^ nil
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16393
                ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16394
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16395
        ].
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 16396
    ].
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 16397
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 16398
    "
7227
3aaeb922a454 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 7224
diff changeset
 16399
     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
 16400
     offering enough space for 32 bit padding
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16401
    "
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16402
    w := width := aRectangle width.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16403
    h := height := aRectangle height.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16404
    x := aRectangle left.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16405
    y := aRectangle top.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16406
399
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
 16407
    "
7180
40dcb4638d93 #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 7176
diff changeset
 16408
     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
 16409
     (its too late when info is present ...)
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
 16410
    "
7180
40dcb4638d93 #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 7176
diff changeset
 16411
    spaceBitsPerPixel := bpp.
40dcb4638d93 #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 7176
diff changeset
 16412
    (bpp > 8) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16413
        spaceBitsPerPixel := 16.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16414
        (bpp > 16) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16415
            spaceBitsPerPixel := 32.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16416
            (bpp > 32) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16417
                spaceBitsPerPixel := bpp.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16418
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16419
        ]
399
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
 16420
    ].
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
 16421
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
 16422
    bytesPerLine := (w * spaceBitsPerPixel + 31) // 32 * 4.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16423
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16424
    "
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16425
     get the pixels
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16426
    "
1459
84e80b355553 splitted getBitsFrom into getBitsFromPixmap
Claus Gittinger <cg@exept.de>
parents: 1446
diff changeset
 16427
    aDrawable isForm ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16428
        (aDrawable id isNil and:[aDrawable bits notNil]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16429
            info := Dictionary new
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16430
                        at:#bitsPerPixel put:(aDrawable depth);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16431
                        at:#byteOrder put:#msbFirst;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16432
                        at:#bitOrder put:#msbFirst;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16433
                        at:#bytesPerLine put:(aDrawable width * aDrawable depth + 7)//8;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16434
                        yourself.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16435
            inData := aDrawable bits.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16436
        ] ifFalse:[
7637
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 16437
            inData := ByteArray new:(bytesPerLine * height).
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16438
            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
 16439
        ]
1459
84e80b355553 splitted getBitsFrom into getBitsFromPixmap
Claus Gittinger <cg@exept.de>
parents: 1446
diff changeset
 16440
    ] ifFalse:[
7637
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 16441
        inData := ByteArray new:(bytesPerLine * height).
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16442
        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
 16443
    ].
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16444
399
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
 16445
    bitsPerPixelIn := info at:#bitsPerPixel.
2533
3af95252b1b3 oops - ISMSB was not assigned
Claus Gittinger <cg@exept.de>
parents: 2532
diff changeset
 16446
7637
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 16447
    isMSB := (info at:#byteOrder) == #msbFirst.
2533
3af95252b1b3 oops - ISMSB was not assigned
Claus Gittinger <cg@exept.de>
parents: 2532
diff changeset
 16448
2029
99961ce13c2a oops - must care for bitOrder, if depth is <= 8
ca
parents: 2023
diff changeset
 16449
    "/
99961ce13c2a oops - must care for bitOrder, if depth is <= 8
ca
parents: 2023
diff changeset
 16450
    "/ check if bitorder is what I like (msbFirst)
99961ce13c2a oops - must care for bitOrder, if depth is <= 8
ca
parents: 2023
diff changeset
 16451
    "/
7206
Claus Gittinger <cg@exept.de>
parents: 7191
diff changeset
 16452
    "/ mhmh - that's not needed
2029
99961ce13c2a oops - must care for bitOrder, if depth is <= 8
ca
parents: 2023
diff changeset
 16453
99961ce13c2a oops - must care for bitOrder, if depth is <= 8
ca
parents: 2023
diff changeset
 16454
    bitsPerPixelIn < 8 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16455
        bitOrder := info at:#bitOrder.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16456
        bitOrder ~~ #msbFirst ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16457
            inData
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16458
                expandPixels:8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16459
                width:(inData size)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16460
                height:1
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16461
                into:inData
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16462
                mapping:(ImageReader reverseBits "TODO: reverseBitsForDepth:bitsPerPixelIn").
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16463
        ].
2029
99961ce13c2a oops - must care for bitOrder, if depth is <= 8
ca
parents: 2023
diff changeset
 16464
    ].
99961ce13c2a oops - must care for bitOrder, if depth is <= 8
ca
parents: 2023
diff changeset
 16465
396
d088e672be8a handle screen image grabbing with depth 16/24 and different byteOrder
Claus Gittinger <cg@exept.de>
parents: 394
diff changeset
 16466
    "
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16467
     check, if the devices padding is different ..
399
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
 16468
     or if the bitsPerPixels are different
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16469
    "
7180
40dcb4638d93 #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 7176
diff changeset
 16470
    bytesPerLineIn := (info at:#bytesPerLine).           "what I got"
40dcb4638d93 #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 7176
diff changeset
 16471
    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
 16472
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 16473
    maskR := info at:#redMask ifAbsent:[0].
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 16474
    maskG := info at:#greenMask ifAbsent:[0].
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 16475
    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
 16476
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 16477
    ((bytesPerLine ~~ bytesPerLineIn)
7637
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 16478
     or:[bitsPerPixelIn ~~ bpp]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16479
        tmpData := inData.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16480
        inData := ByteArray uninitializedNew:(bytesPerLine * height).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16481
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16482
        srcRow := 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16483
        dstRow := 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16484
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16485
        bitsPerPixelIn ~~ bpp ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16486
            "/ for now, only 32 -> 24 is supported
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16487
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16488
            maskR == 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16489
                bitsR := device bitsRed.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16490
                bitsG := device bitsGreen.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16491
                bitsB := device bitsBlue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16492
                maskR := (1 bitShift:bitsR) - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16493
                maskG := (1 bitShift:bitsG) - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16494
                maskB := (1 bitShift:bitsB) - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16495
                shR := device shiftRed negated.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16496
                shG := device shiftGreen negated.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16497
                shB := device shiftBlue negated.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16498
            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16499
                shR := (maskR lowBit - 1) negated.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16500
                bitsR := maskR highBit - maskR lowBit + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16501
                maskR := maskR bitShift:shR.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16502
                shG := (maskG lowBit - 1) negated.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16503
                bitsG := maskG highBit - maskG lowBit + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16504
                maskG := maskG bitShift:shG.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16505
                shB := (maskB lowBit - 1) negated.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16506
                bitsB := maskB highBit - maskB lowBit + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16507
                maskB := maskB bitShift:shB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16508
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16509
            shR2 := (8 - bitsR).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16510
            shG2 := (8 - bitsG).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16511
            shB2 := (8 - bitsB).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16512
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16513
            ((bitsPerPixelIn == 32) and:[bpp == 24]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16514
                "/ 'reformatting 32->24...' printNL.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16515
                1 to:h do:[:hi |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16516
                    srcIndex := srcRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16517
                    dstIndex := dstRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16518
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16519
                    1 to:w do:[:wi |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16520
                        lword := tmpData unsignedInt32At:srcIndex MSB:isMSB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16521
                        r := (lword bitShift:shR) bitAnd:maskR.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16522
                        g := (lword bitShift:shG) bitAnd:maskG.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16523
                        b := (lword bitShift:shB) bitAnd:maskB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16524
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16525
                        inData at:dstIndex   put:r.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16526
                        inData at:dstIndex+1 put:g.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16527
                        inData at:dstIndex+2 put:b.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16528
                        srcIndex := srcIndex + 4.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16529
                        dstIndex := dstIndex + 3.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16530
                    ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16531
                    dstRow := dstRow + bytesPerLine.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16532
                    srcRow := srcRow + bytesPerLineIn
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16533
                ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16534
            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16535
                ((bitsPerPixelIn == 16) and:[bpp == 24]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16536
                    "/ 'reformatting 16->24...' printNL.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16537
                    1 to:h do:[:hi |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16538
                        srcIndex := srcRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16539
                        dstIndex := dstRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16540
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16541
                        1 to:w do:[:wi |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16542
                            word := tmpData unsignedInt16At:srcIndex MSB:isMSB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16543
                            r := (word bitShift:shR) bitAnd:maskR.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16544
                            g := (word bitShift:shG) bitAnd:maskG.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16545
                            b := (word bitShift:shB) bitAnd:maskB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16546
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16547
                            inData at:dstIndex   put:(r bitShift:shR2).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16548
                            inData at:dstIndex+1 put:(g bitShift:shG2).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16549
                            inData at:dstIndex+2 put:(b bitShift:shB2).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16550
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16551
                            srcIndex := srcIndex + 2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16552
                            dstIndex := dstIndex + 3.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16553
                        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16554
                        dstRow := dstRow + bytesPerLine.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16555
                        srcRow := srcRow + bytesPerLineIn
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16556
                    ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16557
                ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16558
                    ('Image [warning]: unsupported depth combination: ' , bitsPerPixelIn printString , ' -> ' ,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16559
                                                        bpp printString) errorPrintCR.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16560
                    self shouldImplement.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16561
                    ^ nil
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16562
                ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16563
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16564
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16565
            "/
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16566
            "/ repad in the buffer
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16567
            "/
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16568
            1 to:h do:[:hi |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16569
                inData replaceFrom:dstRow to:(dstRow + bytesPerLine - 1)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16570
                              with:tmpData startingAt:srcRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16571
                dstRow := dstRow + bytesPerLine.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16572
                srcRow := srcRow + bytesPerLineIn
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16573
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16574
        ]
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16575
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16576
        (bytesPerLine * height) ~~ inData size ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16577
            tmpData := inData.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16578
            inData := ByteArray uninitializedNew:(bytesPerLine * height).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16579
            inData replaceFrom:1 to:bytesPerLine * height with:tmpData startingAt:1
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16580
        ]
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16581
    ].
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
 16582
    self bits:inData.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16583
3864
b04f2f0c5eae *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3863
diff changeset
 16584
    "/
b04f2f0c5eae *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3863
diff changeset
 16585
    "/  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
 16586
    "/
1975
5b1a7d5e0b6a Fix #from:in: (screen capture) for palette (8 bit) displays.
Stefan Vogel <sv@exept.de>
parents: 1972
diff changeset
 16587
    photometric == #palette ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16588
        "/
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16589
        "/ 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
 16590
        "/ find out, which colors are in the picture
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16591
        "/
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16592
        usedPixels := inData usedValues.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16593
        mapSize := usedPixels max + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16594
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16595
        "get the palette"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16596
        map := Array new:mapSize.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16597
        usedPixels do:[:colorIndex |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16598
            |i|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16599
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16600
            i := colorIndex + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16601
            device
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16602
                getRGBFrom:colorIndex
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16603
                into:[:r :g :b |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16604
                    map at:i put:(Color red:r green:g blue:b)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16605
                ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16606
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16607
        self setColorMap:map.
1644
e06e1c7869fc care for bitOrder, when reading out device bits.
Claus Gittinger <cg@exept.de>
parents: 1642
diff changeset
 16608
    ].
e06e1c7869fc care for bitOrder, when reading out device bits.
Claus Gittinger <cg@exept.de>
parents: 1642
diff changeset
 16609
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 16610
    "Modified: / 07-02-1998 / 18:23:07 / cg"
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 16611
    "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
 16612
!
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 16613
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 16614
fromScreen:aRectangle
1488
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
 16615
    "read an image from the display screen.
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
 16616
     WARNING: this temporarily grabs the display
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16617
              it may not work from within a buttonMotion
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16618
              (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
 16619
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 16620
    ^ self
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16621
        fromScreen:aRectangle
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16622
        on:Screen current
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16623
        grab:true
1487
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
 16624
1488
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
 16625
    "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
 16626
!
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 16627
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 16628
fromScreen:aRectangle on:aDevice
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 16629
    "read an image from aDevices display screen.
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 16630
     Since I have no other displays, only the MonoChrome, StaticGrey
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 16631
     and PseudoColor cases have been tested ...
924
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 16632
     (especially True- and DirectColor may be wrong).
1488
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
 16633
     Late note: 24bit rgb now also works.
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
 16634
     WARNING: this temporarily grabs the display
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16635
              it may not work from within a buttonMotion
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16636
              (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
 16637
1487
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
 16638
    ^ self
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16639
        fromScreen:aRectangle
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16640
        on:aDevice
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16641
        grab:true
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 16642
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 16643
    "
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 16644
     Image fromScreen:((0 @ 0) corner:(100 @ 100)) on:Display
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 16645
     Image fromScreen:((0 @ 0) corner:(500 @ 500)) on:Display
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 16646
    "
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 16647
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 16648
    "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
 16649
!
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
 16650
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
 16651
fromScreen:aRectangle on:aDevice grab:doGrab
7227
3aaeb922a454 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 7224
diff changeset
 16652
    "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
 16653
     If the doGrab argument is true, the display
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
 16654
     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
 16655
     shown while the readout is done.
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 16656
     Since I have no other displays, only the MonoChrome, StaticGrey
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 16657
     and PseudoColor cases have been tested ...
1487
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
 16658
     (especially True- and DirectColor may be wrong).
1488
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
 16659
     Late note: 24bit rgb now also works.
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
 16660
     WARNING: with doGrab true, this temporarily grabs the display
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16661
              and it may not work from within a buttonMotion
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16662
              (use with a false grabArg then)."
4160
6d31e4e6a432 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4159
diff changeset
 16663
6d31e4e6a432 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4159
diff changeset
 16664
    |curs rootView prevGrab|
6d31e4e6a432 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4159
diff changeset
 16665
6613
3b0f0fb40c2c class: Image
Claus Gittinger <cg@exept.de>
parents: 6592
diff changeset
 16666
    curs := nil.
4160
6d31e4e6a432 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4159
diff changeset
 16667
"/    doGrab ifTrue:[ |cid|
3476
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 16668
"/        curs := Cursor sourceForm:(Image fromFile:'bitmaps/Camera.xbm')
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 16669
"/                         maskForm:(Image fromFile:'bitmaps/Camera_m.xbm')
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 16670
"/                          hotSpot:16@16.
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 16671
"/        curs notNil ifTrue:[
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 16672
"/            cid := (curs onDevice:aDevice) id
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 16673
"/        ].
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 16674
"/    ].
924
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 16675
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 16676
    "
7227
3aaeb922a454 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 7224
diff changeset
 16677
     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
 16678
    "
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 16679
    rootView := aDevice rootView.
1487
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
 16680
    doGrab ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16681
        prevGrab := aDevice activePointerGrab.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16682
        aDevice grabPointerInView:rootView withCursor:curs.
1487
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
 16683
    ].
924
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 16684
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 16685
    "
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 16686
     get the pixels
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 16687
    "
1487
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
 16688
    [
8879
002477324b37 #FEATURE by Stefan Reise
sr
parents: 8869
diff changeset
 16689
        self 
002477324b37 #FEATURE by Stefan Reise
sr
parents: 8869
diff changeset
 16690
            from:rootView 
9013
60f67817f21c #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8954
diff changeset
 16691
            in:(Screen current
8879
002477324b37 #FEATURE by Stefan Reise
sr
parents: 8869
diff changeset
 16692
                convertVirtualResolutionRectangleToCurrentResolutionRectangle:aRectangle).
3605
b5c70808fc8c #valueNowOrOnUnwindDo: -> #ensure:
Claus Gittinger <cg@exept.de>
parents: 3563
diff changeset
 16693
    ] ensure:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16694
        doGrab ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16695
            aDevice ungrabPointer.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16696
            prevGrab notNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16697
                 aDevice grabPointerInView:prevGrab.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16698
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16699
        ]
1487
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
 16700
    ]
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
 16701
3092
0f1a9ec64574 restore grab after #imageFromUser
ca
parents: 3059
diff changeset
 16702
    "
0f1a9ec64574 restore grab after #imageFromUser
ca
parents: 3059
diff changeset
 16703
     Image fromScreen:((100@100) corner:(200@200)) on:Display grab:false
0f1a9ec64574 restore grab after #imageFromUser
ca
parents: 3059
diff changeset
 16704
     Image fromScreen:((100@100) corner:(200@200)) on:Display grab:true
0f1a9ec64574 restore grab after #imageFromUser
ca
parents: 3059
diff changeset
 16705
    "
8869
11b97ffd3d3b #BUGFIX by Stefan Reise
sr
parents: 8868
diff changeset
 16706
8879
002477324b37 #FEATURE by Stefan Reise
sr
parents: 8869
diff changeset
 16707
    "Modified (format): / 22-11-2019 / 10:10:57 / Stefan Reise"
936
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16708
!
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16709
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16710
photometricFromScreen:aDevice
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16711
    "read aDevices display photometric and set my colormap for it.
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16712
     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
 16713
     or from an offScreen bitmap, for correct pixel interpretation."
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16714
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16715
    |depth visType bitsPerPixel|
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16716
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16717
    "
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16718
     get some attributes of the display device
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16719
    "
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16720
    visType := aDevice visualType.
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16721
    depth := aDevice depth.
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16722
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16723
    "/ kludge for 15bit XFree server
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16724
    depth == 15 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16725
        depth := 16
936
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16726
    ].
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16727
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16728
    (visType == #StaticGray) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16729
        (aDevice blackpixel == 0) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16730
            photometric := #blackIs0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16731
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16732
            photometric := #whiteIs0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16733
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16734
        samplesPerPixel := 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16735
        bitsPerPixel := depth.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16736
        bitsPerSample := ByteArray with:bitsPerPixel.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16737
        "
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16738
         were done, the pixel values are the grey values
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16739
        "
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16740
        ^ self
936
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16741
    ].
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16742
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16743
    ((visType == #TrueColor) or:[visType == #DirectColor]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16744
        photometric := #rgb.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16745
        samplesPerPixel := 3.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16746
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16747
        "/ for now - only support 24bit TrueColor
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16748
        depth ~~ 24 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16749
            'IMAGE: unsupported display depth' errorPrintCR.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16750
        ].
936
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16751
"/                bitsPerPixel := depth.
4115
0e783379a6b0 Use ByteArray for bitsPerSample (255 should be enough ;-)
Stefan Vogel <sv@exept.de>
parents: 4109
diff changeset
 16752
"/                bitsPerSample := ByteArray with:aDevice bitsRed
936
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16753
"/                                       with:aDevice bitsGreen
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16754
"/                                       with:aDevice bitsBlue
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16755
        bitsPerPixel := 24.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16756
        bitsPerSample := #[8 8 8].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16757
        "
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16758
         were done, the pixel values are the rgb values
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16759
        "
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16760
        ^ self
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 16761
    ].
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 16762
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 16763
    ((visType ~~ #PseudoColor)
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 16764
    and:[(visType ~~ #StaticColor)
936
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16765
    and:[visType ~~ #GrayScale]]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16766
        self error:'screen visual not supported'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16767
        ^ nil
936
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16768
    ].
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16769
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16770
    photometric := #palette.
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16771
    samplesPerPixel := 1.
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16772
    bitsPerPixel := depth.
4115
0e783379a6b0 Use ByteArray for bitsPerSample (255 should be enough ;-)
Stefan Vogel <sv@exept.de>
parents: 4109
diff changeset
 16773
    bitsPerSample := ByteArray with:bitsPerPixel.
936
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16774
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16775
    "
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16776
     still need the pixels r/g/b values ...
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16777
    "
3863
b7ba8a04be25 always ensure colorMap is a real colorMap
Claus Gittinger <cg@exept.de>
parents: 3861
diff changeset
 16778
    self setColorMap:aDevice colorMap
936
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16779
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16780
    "Modified: 11.7.1996 / 11:11:34 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16781
! !
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16782
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16783
!Image methodsFor:'virtual anti-aliased'!
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16784
7905
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 16785
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
 16786
    |isBottom isLeft additionalY workPoint startX endX pixels pixelPos percent distance nearestKey tmp|
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16787
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16788
    isBottom := bottomOrTop sameAs:#bottom.
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16789
    isBottom ifTrue:[
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16790
        additionalY := -1.
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16791
    ] ifFalse:[
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16792
        additionalY := 1.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16793
    ].
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16794
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16795
    isLeft := leftOrRight sameAs:#left.
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16796
    isLeft ifTrue:[
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16797
        workPoint := (xRun - 1)@yRun.
7640
25640118d11f #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7637
diff changeset
 16798
        [
25640118d11f #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7637
diff changeset
 16799
            ((tempForm pixelAtX:workPoint x y:workPoint y) == 0)
25640118d11f #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7637
diff changeset
 16800
            and:[ ((tempForm pixelAtX:workPoint x y:workPoint y + additionalY) == 1) 
25640118d11f #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7637
diff changeset
 16801
            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
 16802
        ] whileTrue:[
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16803
            startX := workPoint x.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16804
            endX isNil ifTrue:[endX := workPoint x].
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16805
            workPoint := (workPoint x - 1)@yRun.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16806
        ].
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16807
    ] ifFalse:[
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16808
        workPoint := (xRun + 1)@yRun.
7640
25640118d11f #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7637
diff changeset
 16809
        [
25640118d11f #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7637
diff changeset
 16810
            ((tempForm pixelAtX:workPoint x y:workPoint y) == 0)
25640118d11f #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7637
diff changeset
 16811
            and:[ ((tempForm pixelAtX:workPoint x y:workPoint y + additionalY) == 1) 
25640118d11f #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7637
diff changeset
 16812
            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
 16813
        ] whileTrue:[
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16814
            endX := workPoint x.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16815
            startX isNil ifTrue:[startX := workPoint x].
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16816
            workPoint := (workPoint x + 1)@yRun.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16817
        ].
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16818
    ].
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16819
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16820
    (startX notNil and:[endX notNil]) ifTrue:[
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16821
        startX = endX ifTrue:[
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16822
            self atImageAndMask:startX@yRun putValue:((colorDictionary at:aColor) at:blendStart).
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16823
        ] ifFalse:[
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16824
            pixels := (endX - startX) + 1.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16825
            startX to:endX do:[:x |
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16826
                isLeft ifTrue:[
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16827
                    pixelPos := (x - startX) + 1.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16828
                ] ifFalse:[
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16829
                    pixelPos := (endX - x) + 1.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16830
                ].
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16831
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16832
                percent := (100 / (pixels / pixelPos)) asFloat / 100.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16833
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16834
                (colorDictionary at:aColor) keys do:[:aKey |
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16835
                    nearestKey isNil ifTrue:[
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16836
                        distance := percent dist:aKey.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16837
                        nearestKey := aKey.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16838
                    ] ifFalse:[
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16839
                        tmp := percent dist:aKey.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16840
                        distance > tmp ifTrue:[
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16841
                            distance := tmp.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16842
                            nearestKey := aKey.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16843
                        ].
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16844
                    ].
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16845
                ].
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16846
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16847
                self atImageAndMask:x@yRun putValue:((colorDictionary at:aColor) at:nearestKey).
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16848
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16849
                distance := nil.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16850
                nearestKey := nil.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16851
            ].
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16852
        ].
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16853
    ].
7905
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 16854
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 16855
    "Created: / 16-02-2017 / 20:02:54 / cg"
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 16856
!
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 16857
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 16858
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
 16859
    |isLeft isBottom additionalX workPoint startY endY pixels pixelPos percent distance nearestKey tmp|
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16860
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16861
    isLeft := leftOrRight sameAs:#left.
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16862
    isLeft ifTrue:[
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16863
        additionalX := 1.
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16864
    ] ifFalse:[
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16865
        additionalX := -1.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16866
    ].
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16867
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16868
    isBottom := bottomOrTop sameAs:#bottom.
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16869
    isBottom ifTrue:[
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16870
        workPoint := xRun@(yRun + 1).
7640
25640118d11f #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7637
diff changeset
 16871
        [
25640118d11f #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7637
diff changeset
 16872
            ((tempForm pixelAtX:workPoint x y:workPoint y) == 0) 
25640118d11f #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7637
diff changeset
 16873
            and:[ ((tempForm pixelAtX:workPoint x + additionalX y:workPoint y) == 1) 
25640118d11f #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7637
diff changeset
 16874
            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
 16875
        ] whileTrue:[
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16876
            endY := workPoint y.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16877
            startY isNil ifTrue:[startY := workPoint y].
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16878
            workPoint := xRun@(workPoint y + 1).
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16879
        ].
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16880
    ] ifFalse:[
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16881
        workPoint := xRun@(yRun - 1).
7640
25640118d11f #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7637
diff changeset
 16882
        [
25640118d11f #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7637
diff changeset
 16883
            ((tempForm pixelAtX:workPoint x y:workPoint y) == 0) 
25640118d11f #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7637
diff changeset
 16884
            and:[ ((tempForm pixelAtX:workPoint x + additionalX y:workPoint y) == 1) 
25640118d11f #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7637
diff changeset
 16885
            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
 16886
        ] whileTrue:[
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16887
            startY := workPoint y.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16888
            endY isNil ifTrue:[endY := workPoint y].
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16889
            workPoint := xRun@(workPoint y - 1).
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16890
        ].
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16891
    ].
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16892
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16893
    (startY notNil and:[endY notNil]) ifTrue:[
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16894
        startY = endY ifTrue:[
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16895
            self atImageAndMask:xRun@startY putValue:((colorDictionary at:aColor) at:blendStart).
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16896
        ] ifFalse:[
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16897
            pixels := (endY - startY) + 1.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16898
            startY to:endY do:[:y |
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16899
                isBottom ifTrue:[
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16900
                    pixelPos := (endY - y) + 1.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16901
                ] ifFalse:[
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16902
                    pixelPos := (y - startY) + 1.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16903
                ].
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16904
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16905
                percent := (100 / (pixels / pixelPos)) asFloat / 100.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16906
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16907
                (colorDictionary at:aColor) keys do:[:aKey |
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16908
                    nearestKey isNil ifTrue:[
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16909
                        distance := percent dist:aKey.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16910
                        nearestKey := aKey.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16911
                    ] ifFalse:[
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16912
                        tmp := percent dist:aKey.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16913
                        distance > tmp ifTrue:[
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16914
                            distance := tmp.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16915
                            nearestKey := aKey.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16916
                        ].
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16917
                    ].
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16918
                ].
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16919
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16920
                self atImageAndMask:xRun@y putValue:((colorDictionary at:aColor) at:nearestKey).
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16921
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16922
                distance := nil.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16923
                nearestKey := nil.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16924
            ].
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16925
        ].
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16926
    ].
7905
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 16927
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 16928
    "Created: / 16-02-2017 / 20:02:41 / cg"
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16929
! !
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16930
1086
269243c32f69 added displayOpaque, for protocol completeness
Claus Gittinger <cg@exept.de>
parents: 1070
diff changeset
 16931
!Image class methodsFor:'documentation'!
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16932
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16933
version
6894
0fc111a48edf class: Image
Claus Gittinger <cg@exept.de>
parents: 6862
diff changeset
 16934
    ^ '$Header$'
5476
06e08505bc6f __isByteArray() to __isByteArrayLike() in primitive code
Stefan Vogel <sv@exept.de>
parents: 5352
diff changeset
 16935
!
06e08505bc6f __isByteArray() to __isByteArrayLike() in primitive code
Stefan Vogel <sv@exept.de>
parents: 5352
diff changeset
 16936
06e08505bc6f __isByteArray() to __isByteArrayLike() in primitive code
Stefan Vogel <sv@exept.de>
parents: 5352
diff changeset
 16937
version_CVS
6894
0fc111a48edf class: Image
Claus Gittinger <cg@exept.de>
parents: 6862
diff changeset
 16938
    ^ '$Header$'
650
14fc51fc3a4e comments
Claus Gittinger <cg@exept.de>
parents: 649
diff changeset
 16939
! !
3759
5b083b0ad909 fixed stupid flood-fill algorithm
Claus Gittinger <cg@exept.de>
parents: 3729
diff changeset
 16940
6037
eea2343b0b1e Refactoring:
Stefan Vogel <sv@exept.de>
parents: 5956
diff changeset
 16941
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16942
Image initialize!