Image.st
author sr
Fri, 12 Jul 2019 16:42:24 +0200
changeset 8730 d1b103ebec20
parent 8729 ac6b7e021151
child 8745 2ebd0e6febc9
permissions -rw-r--r--
#FEATURE by Stefan Reise force file name collection return when using native file dialog with allow multi select class: WinWorkstation changed: #nativeFileDialogWithTitle:defaultFilename:owningTopView:filter:filterIndex:trueForSave:trueForMultiSelect:trueForPromptOverwrite:
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
48194c26a46c Initial revision
claus
parents:
diff changeset
     1
"
6
7ee0cfde237d *** empty log message ***
claus
parents: 5
diff changeset
     2
 COPYRIGHT (c) 1991 by Claus Gittinger
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
     3
              All Rights Reserved
0
48194c26a46c Initial revision
claus
parents:
diff changeset
     4
48194c26a46c Initial revision
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
48194c26a46c Initial revision
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
48194c26a46c Initial revision
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
48194c26a46c Initial revision
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
48194c26a46c Initial revision
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
48194c26a46c Initial revision
claus
parents:
diff changeset
    10
 hereby transferred.
48194c26a46c Initial revision
claus
parents:
diff changeset
    11
"
3256
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
    12
"{ Package: 'stx:libview' }"
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
    13
6755
cee1206f74db class: Image
Claus Gittinger <cg@exept.de>
parents: 6653
diff changeset
    14
"{ NameSpace: Smalltalk }"
cee1206f74db class: Image
Claus Gittinger <cg@exept.de>
parents: 6653
diff changeset
    15
0
48194c26a46c Initial revision
claus
parents:
diff changeset
    16
Object subclass:#Image
7529
5f77a718b7bd #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7523
diff changeset
    17
	instanceVariableNames:'pixelFunction bytes width height bitsPerPixel depth colorMap
5f77a718b7bd #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7523
diff changeset
    18
		maxPixelValue rowByteSize bitsPerSample samplesPerPixel
5f77a718b7bd #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7523
diff changeset
    19
		photometric device deviceForm monoDeviceForm fullColorDeviceForm
5f77a718b7bd #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7523
diff changeset
    20
		mask maskedPixelsAre0 fileName imageSequence metaData'
7834
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
    21
	classVariableNames:'BadImageFormatQuerySignal CannotRepresentImageSignal
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
    22
		CollectGarbageWhenRunningOutOfColors DitherAlgorithm
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
    23
		FileCreationErrorSignal ImageErrorSignal ImageLoadErrorSignal
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
    24
		ImageNotFoundQuerySignal ImageSaveErrorSignal
8303
a8f01dbe8e70 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8301
diff changeset
    25
		InformationLostQuerySignal Lobby
a8f01dbe8e70 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8301
diff changeset
    26
		NoMaskButAlphaSupportedQuerySignal NoMaskSupportedQuerySignal
a8f01dbe8e70 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8301
diff changeset
    27
		NumberOfDitherColors UnrepresentableColorSignal'
7529
5f77a718b7bd #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7523
diff changeset
    28
	poolDictionaries:''
5f77a718b7bd #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7523
diff changeset
    29
	category:'Graphics-Images'
0
48194c26a46c Initial revision
claus
parents:
diff changeset
    30
!
48194c26a46c Initial revision
claus
parents:
diff changeset
    31
1086
269243c32f69 added displayOpaque, for protocol completeness
Claus Gittinger <cg@exept.de>
parents: 1070
diff changeset
    32
!Image class methodsFor:'documentation'!
0
48194c26a46c Initial revision
claus
parents:
diff changeset
    33
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    34
copyright
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    35
"
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    36
 COPYRIGHT (c) 1991 by Claus Gittinger
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
    37
              All Rights Reserved
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    38
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    39
 This software is furnished under a license and may be used
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    40
 only in accordance with the terms of that license and with the
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    41
 inclusion of the above copyright notice.   This software may not
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    42
 be provided or otherwise made available to, or used by, any
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    43
 other person.  No title to or ownership of the software is
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    44
 hereby transferred.
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    45
"
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    46
!
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    47
0
48194c26a46c Initial revision
claus
parents:
diff changeset
    48
documentation
48194c26a46c Initial revision
claus
parents:
diff changeset
    49
"
6284
ebd0dfb1322c cleanup - removed unused instvars
Claus Gittinger <cg@exept.de>
parents: 6256
diff changeset
    50
    this class provides representation for all kinds of images
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
    51
    (monochrome, greyscale and color) and may finally replace Form.
6166
87e576aea243 class: Image
Claus Gittinger <cg@exept.de>
parents: 6066
diff changeset
    52
    Depths of 1, 2, 4, 8, 16, 24 and 32 are supported.
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
    53
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
    54
    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
    55
    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
    56
    The data held keeps all information which was originally present,
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
    57
    even if the display-device has lower resolution.
8100
b5b682da20c5 #DOCUMENTATION by mawalch
mawalch
parents: 8099
diff changeset
    58
    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
    59
    color information.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
    60
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
    61
    Images may be created manually (by providing a pixel array),
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
    62
    by screen capture, by reading a file (using an ImageReader) or
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
    63
    dynamically computed by a pixelFunction (functional image).
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
    64
6166
87e576aea243 class: Image
Claus Gittinger <cg@exept.de>
parents: 6066
diff changeset
    65
    This gives you a device independent image.
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
    66
    For display, a device representation is required, which can be
7404
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
    67
    acquired by sending the 'onDevice:aDevice' message to the image.
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
    68
    This creates a (possibly dithered) device-form,
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
    69
    representing the image using the currently available colors.
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    70
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
    71
    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
    72
    (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
    73
    it the message
7404
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
    74
        'monochromeOn:aDevice'.
6284
ebd0dfb1322c cleanup - removed unused instvars
Claus Gittinger <cg@exept.de>
parents: 6256
diff changeset
    75
ebd0dfb1322c cleanup - removed unused instvars
Claus Gittinger <cg@exept.de>
parents: 6256
diff changeset
    76
    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
    77
    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
    78
    (NeXTCube or 4-plane NeXTStation).
8100
b5b682da20c5 #DOCUMENTATION by mawalch
mawalch
parents: 8099
diff changeset
    79
    You will find a lot of code which deals with color allocation optimizations and dithering.
b5b682da20c5 #DOCUMENTATION by mawalch
mawalch
parents: 8099
diff changeset
    80
    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
    81
    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
    82
    (see examples_dithering for this old code in action)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
    83
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
    84
    An image's pixel interpretation is controlled by the photometric instance variable
286
39ca471bfaf9 commentary
Claus Gittinger <cg@exept.de>
parents: 284
diff changeset
    85
    and (if that is #palette) a colorMap.
39ca471bfaf9 commentary
Claus Gittinger <cg@exept.de>
parents: 284
diff changeset
    86
    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
    87
    (and using specialized colorMaps for b&w / greyScale images).
39ca471bfaf9 commentary
Claus Gittinger <cg@exept.de>
parents: 284
diff changeset
    88
    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
    89
8100
b5b682da20c5 #DOCUMENTATION by mawalch
mawalch
parents: 8099
diff changeset
    90
    To convert pictures from/to external file formats, image readers are used
b5b682da20c5 #DOCUMENTATION by mawalch
mawalch
parents: 8099
diff changeset
    91
    which have the file format knowledge built in.
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
    92
    There are readers for most common formats available
286
39ca471bfaf9 commentary
Claus Gittinger <cg@exept.de>
parents: 284
diff changeset
    93
    (see ImageReader and especially subclasses such as TIFFReader, GIFReader etc.).
39ca471bfaf9 commentary
Claus Gittinger <cg@exept.de>
parents: 284
diff changeset
    94
39ca471bfaf9 commentary
Claus Gittinger <cg@exept.de>
parents: 284
diff changeset
    95
    File formats are handled by subclasses of ImageReader, which understand
39ca471bfaf9 commentary
Claus Gittinger <cg@exept.de>
parents: 284
diff changeset
    96
    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
    97
    to the mapping maintained in the MIMETypes class.
87e576aea243 class: Image
Claus Gittinger <cg@exept.de>
parents: 6066
diff changeset
    98
    (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
    99
39ca471bfaf9 commentary
Claus Gittinger <cg@exept.de>
parents: 284
diff changeset
   100
    Some algorithms used here (especially dithering & color allocation) are
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
   101
    experimental and far from being perfect (some are very slow).
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
   102
    For now, the most common cases have been optimized and perform reasonably
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
   103
    fast - however, with uncommon depth/visualType combinations, you may
6166
87e576aea243 class: Image
Claus Gittinger <cg@exept.de>
parents: 6066
diff changeset
   104
    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
   105
    write a specially tuned (inline-C) version for that case.
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
   106
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
   107
    The pixelFunction enables dynamically computed functional images: instead of
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
   108
    providing a byteArray containing pixel data, a function is used which maps
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
   109
    x/y coordinates to a pixel value (see examples).
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
   110
    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
   111
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
   112
    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
   113
    (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
   114
8100
b5b682da20c5 #DOCUMENTATION by mawalch
mawalch
parents: 8099
diff changeset
   115
    Dithering (read section above) can be controlled by the DitherAlgorithm classVariable:
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
   116
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
   117
       DitherAlgorithm:
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   118
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
   119
       nil                  a simple threshold algorithm
7404
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   120
                            (i.e. for mono, p<0.5 -> black, p>=0.5 -> white)
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   121
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
   122
       #pattern             patterned dither
7404
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   123
                            (for p, take dithered color to fill pixel;
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   124
                             uses dithering in color-class)
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   125
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
   126
       #error               error diffusion dither (Floyd-Steinberg)
7404
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   127
                            planned - not yet implemented.
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
   128
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
   129
6862
e9bd4dc536a4 class: Image
Claus Gittinger <cg@exept.de>
parents: 6840
diff changeset
   130
    Notice:
7404
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   131
        the set of attributes and the way they are stored originated initially
8100
b5b682da20c5 #DOCUMENTATION by mawalch
mawalch
parents: 8099
diff changeset
   132
        from the need to represent tiff images.
b5b682da20c5 #DOCUMENTATION by mawalch
mawalch
parents: 8099
diff changeset
   133
        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
   134
        of which many are unused in other image formats. (so it was sufficient).
7404
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   135
        Later, some VisualWorks compatibility protocol was added (mapped palettes, for
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   136
        example), and some stuff could well be redefined in simpler ways.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   137
        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
   138
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
   139
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
   140
    [instance variables:]
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
   141
7404
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   142
        width               <Integer>       the width in pixels
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   143
        height              <Integer>       the height in pixels
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   144
        bytes               <ByteArray>     the full image information
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   145
        photometric         <Symbol>        #rgb, #palette, #blackIs0 or #whiteIs0
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   146
        samplesPerPixel     <Integer>       the number of planes
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   147
        bitsPerSample       <Array>         the number of bits per plane
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   148
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   149
        colorMap            <Array>         only if photometric is #palette;
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   150
                                            maps pixel values to r/g/b values.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   151
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   152
        device              <Workstation>   the device on which deviceForm,
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   153
                                            monoDeviceForm and lowResDeviceForm are
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   154
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   155
        deviceForm          <Form>          the device form which gives the best
7621
e6755d298330 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7596
diff changeset
   156
                                            possible approximation of the image on
7404
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   157
                                            device using standard colors.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   158
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   159
        monoDeviceForm      <Form>          the device form which gives a monochrome
8100
b5b682da20c5 #DOCUMENTATION by mawalch
mawalch
parents: 8099
diff changeset
   160
                                            approximation of the image on device.
7404
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   161
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   162
        fullColorDeviceForm <Form>          the device form which gives the best
8100
b5b682da20c5 #DOCUMENTATION by mawalch
mawalch
parents: 8099
diff changeset
   163
                                            possible approximation of the image on
7404
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   164
                                            device using private colors.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   165
                                            (not yet implemented)
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   166
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   167
        mask                <ImageMask>     an optional mask;
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   168
                                            if non-nil, only pixels for which the
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   169
                                            corresponding mask bit is non-zero
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   170
                                            are drawn.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   171
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   172
        maskedPixelsAre0    <Boolean>       a hint for image processors and drawers
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   173
                                            if true, masked pixels are known to be
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   174
                                            zero in the pixel bytes.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   175
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   176
        fileName            <String>        the name of the file from which the
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   177
                                            image was loaded - nil otherwise.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   178
                                            Useful for image save functions
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   179
                                            and for the UIPainter utility.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   180
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   181
        imageSequence                       the imageSequence, of which the
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   182
                                            instance is a frame or nil,
7887
3d7974ef8414 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7878
diff changeset
   183
                                            if it's not part of a sequence.
7404
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   184
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   185
        bitsPerPixel                        obsolete - not used in ST/X (kept for a while for subclasses)
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   186
        depth                               - these have been added in instVar-slots
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   187
        maxPixelValue                       - according to the ST-80's image class.
8100
b5b682da20c5 #DOCUMENTATION by mawalch
mawalch
parents: 8099
diff changeset
   188
        rowByteSize                         - to allow loading of ST-80 images
7404
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   189
                                            - (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
   190
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
   191
    [class variables:]
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
   192
7404
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   193
        Lobby               <Registry>      keeps track of known images
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   194
                                            (for resource freeing with garbage collector)
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   195
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   196
        DitherAlgorithm     <Symbol>        defines how to dither
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   197
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   198
        NumberOfDitherColors <Integer>      defines, how many dither colors to use
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   199
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   200
        FileFormats         <Dictionary>    associates filename extensions to
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   201
                                            image reader classes (now set-up in startup-file)
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   202
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   203
        CollectGarbageWhenRunningOutOfColors
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   204
                            <Boolean>       if true, and we run out of available
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   205
                                            device colors during creation of a
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   206
                                            device image, collect garbage for
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   207
                                            possible image reclamation.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   208
                                            If false, proceed immediately.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   209
                                            Default is true.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   210
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   211
        ImageNotFoundQuerySignal
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   212
                            <QuerySignal>   raised, if an image could not be loaded
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   213
                                            from a file. The parameter is the images
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   214
                                            fileName.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   215
                                            A handler may return a replacement
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   216
                                            image or proceed with nil.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   217
                                            If unhandled, a nil is returned from the
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   218
                                            image creation.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   219
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   220
        BadImageFormatQuerySignal
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   221
                            <QuerySignal>   raised, if an image could not be loaded
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   222
                                            from a file due to a file error or
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   223
                                            unsupported format.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   224
                                            A handler may return a replacement
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   225
                                            image or proceed with nil.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   226
                                            If unhandled, a nil is returned from the
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   227
                                            image creation.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   228
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   229
        ImageSaveErrorSignal
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   230
                            <Signal>        parent of errors below.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   231
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   232
        FileCreationErrorSignal
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   233
                            <Signal>        file could not be created when saving an
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   234
                                            image.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   235
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   236
        CannotRepresentImageSignal
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   237
                            <Signal>        the specified ImageReader cannot represent
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   238
                                            the given image.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   239
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   240
        InformationLostQuerySignal
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   241
                            <Signal>        the specified ImageReader can represent
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   242
                                            the given image, but some information
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   243
                                            (typically color resolution) is lost.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   244
                                            If unhandled, the save proceeds as usual.
3872
390fabbc3036 comments and slight cleanup
Claus Gittinger <cg@exept.de>
parents: 3871
diff changeset
   245
390fabbc3036 comments and slight cleanup
Claus Gittinger <cg@exept.de>
parents: 3871
diff changeset
   246
390fabbc3036 comments and slight cleanup
Claus Gittinger <cg@exept.de>
parents: 3871
diff changeset
   247
    caveat:
7404
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   248
        the information in
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   249
            photometric, bitsPerPixel, bitsPerSample, samplesPerPixel, depth , colorMap and maxPixelValue
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   250
        is partially redundant and its handling stupid (not to say: braindamaged ;-).
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   251
        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
   252
        compatibility reasons (mostly coming from tiff format, which was the very first supported format).
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   253
        All of the above belongs into the single colorMap which must migrate from
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   254
        a stupid seqColl to a color-aware real colorMap.
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   255
        (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
   256
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
   257
    todo:
7404
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   258
        support alpha masks
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   259
        cleanup the dithering & conversion code
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   260
        cleanup the color/photometric mess
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
   261
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
   262
    [See also:]
7404
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   263
        Form Icon ImageReader
611
e0442439a3c6 documentation
Claus Gittinger <cg@exept.de>
parents: 592
diff changeset
   264
e0442439a3c6 documentation
Claus Gittinger <cg@exept.de>
parents: 592
diff changeset
   265
    [author:]
7404
e14e8afef2e4 #OTHER by mawalch
mawalch
parents: 7374
diff changeset
   266
        Claus Gittinger
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   267
"
649
38e6d0015137 examples
Claus Gittinger <cg@exept.de>
parents: 622
diff changeset
   268
!
38e6d0015137 examples
Claus Gittinger <cg@exept.de>
parents: 622
diff changeset
   269
38e6d0015137 examples
Claus Gittinger <cg@exept.de>
parents: 622
diff changeset
   270
examples
38e6d0015137 examples
Claus Gittinger <cg@exept.de>
parents: 622
diff changeset
   271
"
38e6d0015137 examples
Claus Gittinger <cg@exept.de>
parents: 622
diff changeset
   272
    reading from a file (many formats are supported):
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   273
    (notice that the bitmaps directory is searched for along
2645
a82f50c19af1 comment
Claus Gittinger <cg@exept.de>
parents: 2534
diff changeset
   274
     the system path - therefore, you may add your own bitmap
a82f50c19af1 comment
Claus Gittinger <cg@exept.de>
parents: 2534
diff changeset
   275
     directory to the beginning of the path and thus override
a82f50c19af1 comment
Claus Gittinger <cg@exept.de>
parents: 2534
diff changeset
   276
     any default bitmaps, or make certain that your application
a82f50c19af1 comment
Claus Gittinger <cg@exept.de>
parents: 2534
diff changeset
   277
     finds its bitmaps - even if they are in a separate directory)
a82f50c19af1 comment
Claus Gittinger <cg@exept.de>
parents: 2534
diff changeset
   278
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   279
                                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   280
        (Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif') inspect
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   281
                                                                                        [exEnd]
7523
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
   282
    Boy, was I young, when writing ST/X... ;-)                                                                                                 
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
   283
                                                                                        [exBegin]
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
   284
        (Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif') inspect
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
   285
        ((Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif') rotated:90) inspect
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
   286
        ((Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif') rotated:45) inspect
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
   287
        ((Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif') rotated:25) inspect
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
   288
                                                                                        [exEnd]
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
   289
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
   290
                                                                                        
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
   291
    better use package relative file names:
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   292
                                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   293
        (Image fromFile:'bitmaps/gifImages/garfield.gif' inPackage:'stx:goodies') inspect
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   294
                                                                                        [exEnd]
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
   295
    various file formats are supported:
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   296
                                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   297
        (Image fromFile:'bitmaps/xpmBitmaps/misc_icons/SmalltalkX_clr.xpm' inPackage:'stx:goodies') inspect
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   298
                                                                                        [exEnd]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   299
                                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   300
        (Image fromFile:'bitmaps/winBitmaps/okSmily_up.bmp' inPackage:'stx:goodies') inspect
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   301
                                                                                        [exEnd]
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
   302
7222
matilk
parents: 7210
diff changeset
   303
    drawing
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   304
                                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   305
        |imageClass image|
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   306
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   307
        imageClass := Image implementorForDepth:24.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   308
        image      := imageClass width: 100 height: 50.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   309
        image bits:(ByteArray new:(image bytesPerRow*50)).
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   310
        image fillRectangle:(0@0 extent:100@50) withColor:Color yellow.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   311
        image drawRectangle:(10@10 extent:20@20) withColor:Color red.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   312
        image fillRectangle:(40@20 extent:20@20) withColor:Color green.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   313
                                                                                        [exEnd]
7222
matilk
parents: 7210
diff changeset
   314
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
   315
    The following examples demonstrate various depth and colorMap variations ...
1774
4241f730e0a6 fixed gunzipped image reading;
Claus Gittinger <cg@exept.de>
parents: 1771
diff changeset
   316
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   317
    inline image:
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   318
      default: depth=1 & #blackIs0
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   319
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   320
        (Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   321
            width:8 height:8
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   322
            fromArray:#( 2r11111111
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   323
                         2r10000001
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   324
                         2r10000001
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   325
                         2r10000001
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   326
                         2r10000001
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   327
                         2r10000001
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   328
                         2r10000001
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   329
                         2r11111111 )
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   330
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   331
                                                                        [exEnd]
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   332
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   333
      with #whiteIs0 photometric
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   334
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   335
        ((Image width:8 height:8
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   336
               fromArray:#( 2r11111111
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   337
                            2r10000001
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   338
                            2r10000001
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   339
                            2r10000001
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   340
                            2r10000001
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   341
                            2r10000001
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   342
                            2r10000001
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   343
                            2r11111111 ))
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   344
            photometric:#whiteIs0
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   345
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   346
                                                                        [exEnd]
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   347
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   348
      with a colorMap
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   349
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   350
        ((Image width:8 height:8
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   351
               fromArray:#( 2r11111111
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   352
                            2r10000001
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   353
                            2r10000001
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   354
                            2r10000001
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   355
                            2r10000001
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   356
                            2r10000001
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   357
                            2r10000001
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   358
                            2r11111111 ))
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   359
            colorMap:(Array with:(Color red)
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   360
                            with:(Color yellow))
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   361
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   362
                                                                        [exEnd]
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   363
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   364
      a depth4 greyScale image:
1774
4241f730e0a6 fixed gunzipped image reading;
Claus Gittinger <cg@exept.de>
parents: 1771
diff changeset
   365
      (default photometric is #blackIs0)
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   366
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   367
        (Depth4Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   368
             width:8
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   369
             height:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   370
             fromArray:#[
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   371
                            16r00 16r11 16r22 16r33
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   372
                            16r44 16r55 16r66 16r77
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   373
                            16r88 16r99 16raa 16rbb
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   374
                            16rcc 16rdd 16ree 16rff
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   375
                        ]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   376
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   377
                                                                        [exEnd]
2645
a82f50c19af1 comment
Claus Gittinger <cg@exept.de>
parents: 2534
diff changeset
   378
      the same, magnified:
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   379
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   380
        ((Depth4Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   381
             width:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   382
             height:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   383
             fromArray:#[
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   384
                            16r01 16r23
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   385
                            16r45 16r67
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   386
                            16r89 16rab
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   387
                            16rcd 16ref
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   388
                        ])
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   389
            magnifiedBy:30
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   390
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   391
                                                                        [exEnd]
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   392
      the following has the same effect:
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   393
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   394
        ((Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   395
             width:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   396
             height:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   397
             depth:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   398
             fromArray:#[
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   399
                            16r01 16r23
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   400
                            16r45 16r67
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   401
                            16r89 16rab
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   402
                            16rcd 16ref
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   403
                        ])
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   404
            magnifiedBy:30
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   405
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   406
                                                                        [exEnd]
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   407
      with reverse grey-interpretation:
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   408
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   409
        ((Depth4Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   410
             width:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   411
             height:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   412
             fromArray:#[
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   413
                            16r01 16r23
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   414
                            16r45 16r67
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   415
                            16r89 16rab
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   416
                            16rcd 16ref
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   417
                        ])
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   418
            photometric:#whiteIs0;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   419
            magnifiedBy:30
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   420
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   421
                                                                        [exEnd]
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   422
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   423
      with 1-bit-per-pixel rgb interpretation:
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   424
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   425
        ((Depth4Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   426
             width:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   427
             height:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   428
             fromArray:#[
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   429
                            16r01 16r23
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   430
                            16r45 16r67
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   431
                            16r89 16rab
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   432
                            16rcd 16ref
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   433
                        ])
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   434
            photometric:#rgb;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   435
            samplesPerPixel:3;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   436
            bitsPerSample:#(1 1 1);
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   437
            magnifiedBy:30
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   438
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   439
                                                                        [exEnd]
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   440
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   441
      with 1/2/1 rgb interpretation:
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   442
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   443
        ((Depth4Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   444
             width:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   445
             height:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   446
             fromArray:#[
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   447
                            16r01 16r23
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   448
                            16r45 16r67
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   449
                            16r89 16rab
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   450
                            16rcd 16ref
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   451
                        ])
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   452
            photometric:#rgb;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   453
            samplesPerPixel:3;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   454
            bitsPerSample:#(1 2 1);
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   455
            magnifiedBy:30
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   456
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   457
                                                                        [exEnd]
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   458
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
   459
      a 2/2/0 rgb image (i.e. no blue):
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   460
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   461
         |i|
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   462
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   463
         i := Depth4Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   464
                    width:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   465
                    height:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   466
                    fromArray:#[ 16r01 16r23
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   467
                                 16r45 16r67
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   468
                                 16r89 16rab
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   469
                                 16rcd 16ref ].
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   470
         i photometric:#rgb.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   471
         i samplesPerPixel:3.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   472
         i bitsPerSample:#(2 2 0).
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   473
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   474
         i := i magnifiedBy:30.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   475
         i edit.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   476
                                                                        [exEnd]
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
   477
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
   478
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
   479
      a 0/0/4 rgb image (i.e. no red or green):
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   480
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   481
         |i|
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   482
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   483
         i := Depth4Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   484
                    width:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   485
                    height:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   486
                    fromArray:#[ 16r01 16r23
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   487
                                 16r45 16r67
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   488
                                 16r89 16rab
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   489
                                 16rcd 16ref ].
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   490
         i photometric:#rgb.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   491
         i samplesPerPixel:3.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   492
         i bitsPerSample:#(0 0 4).
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   493
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   494
         i := i magnifiedBy:30.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   495
         i edit.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   496
                                                                        [exEnd]
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
   497
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
   498
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   499
      a 2plane greyscale image:
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   500
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   501
        ((Depth2Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   502
             width:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   503
             height:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   504
             fromArray:#[
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   505
                            4r0123
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   506
                            4r1230
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   507
                            4r2301
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   508
                            4r3012
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   509
                        ])
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   510
            magnifiedBy:30
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   511
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   512
                                                                        [exEnd]
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   513
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   514
      with colors:
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   515
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   516
        ((Depth2Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   517
             width:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   518
             height:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   519
             fromArray:#[
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   520
                            4r0123
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   521
                            4r1230
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   522
                            4r2301
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   523
                            4r3012
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   524
                        ])
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   525
            colorMap:(Array with:(Color black)
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   526
                            with:(Color red)
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   527
                            with:(Color green)
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   528
                            with:(Color blue));
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   529
            magnifiedBy:30
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   530
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   531
                                                                        [exEnd]
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   532
8088
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   533
      depth4 image with 1/1/1 rgb interpretation:
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   534
                                                                        [exBegin]
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   535
        ((Depth4Image
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   536
             width:4
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   537
             height:4
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   538
             fromArray:#[
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   539
                            16r44 16r44
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   540
                            16r22 16r22
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   541
                            16r11 16r11
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   542
                            16r00 16r00
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   543
                        ])
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   544
            photometric:#rgb;
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   545
            samplesPerPixel:3;
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   546
            bitsPerSample:#(1 1 1);
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   547
            magnifiedBy:30
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   548
        ) edit
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   549
                                                                        [exEnd]
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   550
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   551
      depth4 image with 1/2/1 rgb interpretation:
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   552
                                                                        [exBegin]
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   553
        ((Depth4Image
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   554
             width:4
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   555
             height:4
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   556
             fromArray:#[
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   557
                            16rCC 16r44
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   558
                            16rAA 16r22
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   559
                            16r99 16r11
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   560
                            16r88 16r00
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   561
                        ])
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   562
            photometric:#rgb;
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   563
            samplesPerPixel:3;
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   564
            bitsPerSample:#(1 2 1);
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   565
            magnifiedBy:30
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   566
        ) edit
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   567
                                                                        [exEnd]
4bcfce655248 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8087
diff changeset
   568
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   569
      depth8 image with 3/3/2 rgb interpretation:
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   570
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   571
        ((Depth8Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   572
             width:16
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   573
             height:16
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   574
             fromArray:(ByteArray withAll:(0 to:16rFF)))
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   575
            photometric:#rgb;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   576
            samplesPerPixel:3;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   577
            bitsPerSample:#(3 3 2);
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   578
            magnifiedBy:10
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   579
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   580
                                                                        [exEnd]
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   581
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
   582
      depth8 image with 2/2/2 rgb interpretation:
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   583
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   584
        ((Depth8Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   585
             width:8
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   586
             height:8
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   587
             fromArray:(ByteArray withAll:(0 to:16r3F)))
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   588
            photometric:#rgb;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   589
            samplesPerPixel:3;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   590
            bitsPerSample:#(2 2 2);
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   591
            magnifiedBy:10
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   592
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   593
                                                                        [exEnd]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   594
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   595
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   596
        ((Depth8Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   597
             width:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   598
             height:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   599
             fromArray:#[
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   600
                    16r30 16r0C  16r03 16r3F
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   601
                    16r20 16r08  16r02 16r2A
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   602
                    16r10 16r04  16r01 16r15
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   603
                    16r00 16r00  16r00 16r00
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   604
                        ])
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   605
            photometric:#rgb;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   606
            samplesPerPixel:3;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   607
            bitsPerSample:#(2 2 2);
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   608
            magnifiedBy:30
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   609
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   610
                                                                        [exEnd]
5126
d3f2baf80581 color conversions fixed (16bit images)
Claus Gittinger <cg@exept.de>
parents: 5074
diff changeset
   611
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
   612
      trueColor image: remember: bytes are MSB
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   613
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   614
        ((Depth16Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   615
             width:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   616
             height:5
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   617
             fromArray:#[
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   618
                    2r01111100 2r00000000  2r00000011 2r11100000  2r00000000 2r00011111  2r01111111 2r11111111
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   619
                    2r00111100 2r00000000  2r00000001 2r11100000  2r00000000 2r00001111  2r00111101 2r11101111
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   620
                    2r00011100 2r00000000  2r00000000 2r11100000  2r00000000 2r00000111  2r00011100 2r11100111
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   621
                    2r00001100 2r00000000  2r00000000 2r01100000  2r00000000 2r00000001  2r00001100 2r01100011
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   622
                    2r00000100 2r00000000  2r00000000 2r00100000  2r00000000 2r00000001  2r00000100 2r00100001
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   623
                        ])
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   624
            photometric:#rgb;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   625
            samplesPerPixel:3;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   626
            bitsPerSample:#(5 5 5);
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   627
            magnifiedBy:30
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   628
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   629
                                                                        [exEnd]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   630
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   631
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   632
        ((Depth24Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   633
             width:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   634
             height:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   635
             fromArray:#[
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   636
                    16rFF 16r00 16r00  16rFF 16r00 16r00  16rFF 16r00 16r00  16rFF 16r00 16r00
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   637
                    16r00 16rFF 16r00  16r00 16rFF 16r00  16r00 16rFF 16r00  16r00 16rFF 16r00
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   638
                    16r00 16r00 16rFF  16r00 16r00 16rFF  16r00 16r00 16rFF  16r00 16r00 16rFF
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   639
                    16rFF 16rFF 16rFF  16rFF 16rFF 16rFF  16rFF 16rFF 16rFF  16rFF 16rFF 16rFF
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   640
                        ])
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   641
            photometric:#rgb;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   642
            samplesPerPixel:3;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   643
            bitsPerSample:#(8 8 8);
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   644
            magnifiedBy:30
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   645
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   646
                                                                        [exEnd]
4762
f70af9e4a5f1 comment
Claus Gittinger <cg@exept.de>
parents: 4757
diff changeset
   647
f70af9e4a5f1 comment
Claus Gittinger <cg@exept.de>
parents: 4757
diff changeset
   648
      32bit trueColor image:
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   649
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   650
        ((Depth32Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   651
             width:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   652
             height:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   653
             fromArray:#[
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   654
                    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
   655
                    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
   656
                    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
   657
                    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
   658
                        ])
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   659
            photometric:#rgb;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   660
            samplesPerPixel:4;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   661
            bitsPerSample:#(8 8 8 8);
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   662
            magnifiedBy:30
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   663
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   664
                                                                        [exEnd]
2760
94d2d524081b example added (24-bit image)
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   665
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
   666
    storing - only a subset of formats (TIFF, XBM, XPM) currently support storing:
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   667
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   668
        |img|
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   669
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   670
        img := Image fromFile:'bitmaps/winBitmaps/okSmily_up.bmp' inPackage:'stx:goodies'.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   671
        img saveOn:'myImage.tiff'.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   672
        (Image fromFile:'myImage.tiff') inspect.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   673
        img saveOn:'myImage.gif'.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   674
        (Image fromFile:'myImage.gif') inspect.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   675
                                                                        [exEnd]
1774
4241f730e0a6 fixed gunzipped image reading;
Claus Gittinger <cg@exept.de>
parents: 1771
diff changeset
   676
649
38e6d0015137 examples
Claus Gittinger <cg@exept.de>
parents: 622
diff changeset
   677
    magnifying (any factor):
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   678
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   679
        ((Image fromFile:'bitmaps/gifImages/claus.gif' inPackage:'stx:goodies')
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   680
            magnifiedTo:(48@48))
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   681
                inspect
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   682
                                                                        [exEnd]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   683
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   684
        ((Image fromFile:'bitmaps/gifImages/claus.gif' inPackage:'stx:goodies')
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   685
            magnifiedBy:0.7)
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   686
                inspect
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   687
                                                                        [exEnd]
1774
4241f730e0a6 fixed gunzipped image reading;
Claus Gittinger <cg@exept.de>
parents: 1771
diff changeset
   688
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
   689
    rotating (any angle in degrees clockwise):
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   690
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   691
        ((Image fromFile:'bitmaps/gifImages/claus.gif' inPackage:'stx:goodies')
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   692
            rotated:90)
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   693
                inspect
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   694
                                                                        [exEnd]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   695
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   696
        (((Image fromFile:'bitmaps/gifImages/claus.gif' inPackage:'stx:goodies')
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   697
            magnifiedBy:0.3@0.7) rotated:270)
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   698
                inspect
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   699
                                                                        [exEnd]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   700
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   701
        (((Image fromFile:'bitmaps/gifImages/claus.gif' inPackage:'stx:goodies')
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   702
            ) rotated:30)
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   703
                inspect
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   704
                                                                        [exEnd]
1774
4241f730e0a6 fixed gunzipped image reading;
Claus Gittinger <cg@exept.de>
parents: 1771
diff changeset
   705
    negative:
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   706
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   707
        ((Image fromFile:'bitmaps/gifImages/claus.gif' inPackage:'stx:goodies')
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   708
            negative)
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   709
                inspect
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   710
                                                                        [exEnd]
7123
320a7ec771f3 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7101
diff changeset
   711
320a7ec771f3 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7101
diff changeset
   712
      depth32 image with 8+8+8+8 argb interpretation:
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   713
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   714
        ((Depth32Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   715
             width:4 height:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   716
             fromArray:#[
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   717
                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
   718
                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
   719
                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
   720
                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
   721
            photometric:#argb;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   722
            samplesPerPixel:4;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   723
            bitsPerSample:#(8 8 8 8);
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   724
            magnifiedBy:10
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   725
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   726
                                                                        [exEnd]
7123
320a7ec771f3 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7101
diff changeset
   727
7126
a81b992fd069 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 7123
diff changeset
   728
      depth32 image with 8+8+8+8 rgba interpretation:
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   729
                                                                        [exBegin]
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   730
        ((Depth32Image
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   731
             width:4 height:4
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   732
             fromArray:#[
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   733
                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
   734
                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
   735
                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
   736
                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
   737
            photometric:#rgba;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   738
            samplesPerPixel:4;
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   739
            bitsPerSample:#(8 8 8 8);
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   740
            magnifiedBy:10
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   741
        ) edit
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
   742
                                                                        [exEnd]
8664
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
   743
      conversion:
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
   744
                                                                        [exBegin]
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
   745
        |d32Image d24Image|
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
   746
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
   747
        d32Image := (Depth32Image
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
   748
             width:4 height:4
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
   749
             fromArray:#[
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
   750
                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
   751
                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
   752
                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
   753
                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
   754
            photometric:#rgba;
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
   755
            samplesPerPixel:4;
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
   756
            bitsPerSample:#(8 8 8 8);
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
   757
            magnifiedBy:10.
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
   758
        d32Image inspect.
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
   759
        d24Image := Depth24Image fromImage:d32Image.
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
   760
        d24Image inspect.
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
   761
                                                                        [exEnd]
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
   762
"
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
   763
!
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
   764
7904
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   765
examples_dithering
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   766
"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   767
    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
   768
                                                                                                        [exBegin]
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   769
    |image top panel image2 wrapIt|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   770
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   771
    top := StandardSystemView new.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   772
    top label:'Dithering Examples'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   773
    top width:1000.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   774
    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
   775
    panel horizontalLayout:#left.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   776
    panel verticalLayout:#top.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   777
    top openAndWait.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   778
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   779
    wrapIt := 
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   780
        [:image :text |
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   781
            |imageView label view|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   782
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   783
            view := View in:panel.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   784
            imageView := ImageView origin:0@0 extent:image extent in:view.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   785
            imageView image:image.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   786
            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
   787
            label logo:text.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   788
            view extent:(image extent + (0@30)).
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   789
            view realize.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   790
            view realizeAllSubViews.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   791
        ].    
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   792
    'original image:'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   793
    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
   794
    wrapIt value:image value:'Original'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   795
    
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   796
    'dithered image:'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   797
    image2 := image asOrderedDitheredMonochromeImage.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   798
    wrapIt value:image2 value:'Ordered'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   799
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   800
    'dithered Arce:'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   801
    image2 := image asStevensonArceDitheredMonochromeImage.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   802
    wrapIt value:image2 value:'Stephenson Arce'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   803
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   804
    'dithered Burkes:'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   805
    image2 := image asBurkesDitheredMonochromeImage.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   806
    wrapIt value:image2 value:'Burkes'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   807
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   808
    'dithered Floyd-Steinberg:'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   809
    image2 := image asFloydSteinbergDitheredMonochromeImage.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   810
    wrapIt value:image2 value:'FS b&w'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   811
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   812
    'dithered grey depth2 ordered:'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   813
    image2 := image asOrderedDitheredGrayImageDepth:2.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   814
    wrapIt value:image2 value:'Ordered gray 2bit'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   815
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   816
    'dithered grey depth4 ordered:'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   817
    image2 := image asOrderedDitheredGrayImageDepth:4.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   818
    wrapIt value:image2 value:'Ordered gray 4bit'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   819
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   820
    'dithered grey depth2 ordered:'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   821
    image2 := image asFloydSteinbergDitheredGrayImageDepth:2.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   822
    wrapIt value:image2 value:'FS gray 2bit'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   823
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   824
    'dithered grey depth4 ordered:'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   825
    image2 := image asFloydSteinbergDitheredGrayImageDepth:4.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   826
    wrapIt value:image2 value:'FS gray 4bit'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   827
                                                                                                        [exEnd]
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   828
"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   829
!
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
   830
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
   831
examples_functionalImages
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
   832
"
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
   833
    Functional images (please read 'Functional Images' by Conal Elliot, Microsoft Research).
8025
2e4d3fedcbd3 #DOCUMENTATION by mawalch
mawalch
parents: 7996
diff changeset
   834
    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
   835
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
   836
    Plain x/y mapping:
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   837
                                                                        [exBegin]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   838
        |i|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   839
        i := Depth1Image extent:256@256.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   840
        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
   841
        i inspect.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   842
                                                                        [exEnd]
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
   843
    Transformed x/y mapping:
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   844
                                                                        [exBegin]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   845
        |i f|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   846
        f := [:x :y | (x between:0.4 and:0.6) asInteger].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   847
        i := Depth1Image extent:256@256.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   848
        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
   849
        i inspect.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   850
                                                                        [exEnd]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   851
                                                                        [exBegin]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   852
        |i f|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   853
        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
   854
        i := Depth1Image extent:256@256.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   855
        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
   856
        i inspect.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   857
                                                                        [exEnd]
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
   858
    Image based on polar coordinate:
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   859
                                                                        [exBegin]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   860
        |i f|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   861
        f := [:x :y | ((x@y) r * 10) asInteger bitAnd:1].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   862
        i := Depth1Image extent:256@256.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   863
        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
   864
        i inspect.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   865
                                                                        [exEnd]
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
   866
    Grayscale image based on polar coordinate:
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   867
                                                                        [exBegin]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   868
        |i|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   869
        i := Depth8Image extent:256@256.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   870
        i photometric:#blackIs0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   871
        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
   872
        i inspect.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   873
                                                                        [exEnd]
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
   874
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
   875
    Taking another image as ''input''
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   876
                                                                        [exBegin]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   877
        |garfield f i h|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   878
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   879
        garfield := Image fromFile:'bitmaps/gifImages/garfield.gif' inPackage:'stx:goodies'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   880
        h := garfield height.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   881
        f := [:x :y | (garfield colorAtX:x y:h-y) rgbValue].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   882
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   883
        i := Depth24Image extent:garfield extent.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   884
        i pixelFunction:f.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   885
        i inspect.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   886
                                                                        [exEnd]
649
38e6d0015137 examples
Claus Gittinger <cg@exept.de>
parents: 622
diff changeset
   887
"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   888
! !
48194c26a46c Initial revision
claus
parents:
diff changeset
   889
1086
269243c32f69 added displayOpaque, for protocol completeness
Claus Gittinger <cg@exept.de>
parents: 1070
diff changeset
   890
!Image class methodsFor:'initialization'!
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
   891
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
   892
addReader:aReaderClass suffix:aSuffix
5216
f7ec910cfce1 Mark obsolete methods
Stefan Vogel <sv@exept.de>
parents: 5200
diff changeset
   893
    <resource: #obsolete>
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
   894
    "register an additional image reader.
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
   895
     This is provided for subclasses, to regster themself when
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
   896
     loaded (or from the startup scripts)"
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
   897
1800
1b4d3067bdc0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1799
diff changeset
   898
    self obsoleteMethodWarning.
1780
b20be7704d6f added mimeType
Claus Gittinger <cg@exept.de>
parents: 1779
diff changeset
   899
    self addReader:aReaderClass suffix:aSuffix mimeType:nil
b20be7704d6f added mimeType
Claus Gittinger <cg@exept.de>
parents: 1779
diff changeset
   900
!
b20be7704d6f added mimeType
Claus Gittinger <cg@exept.de>
parents: 1779
diff changeset
   901
b20be7704d6f added mimeType
Claus Gittinger <cg@exept.de>
parents: 1779
diff changeset
   902
addReader:aReaderClass suffix:aSuffix mimeType:mimeType
5216
f7ec910cfce1 Mark obsolete methods
Stefan Vogel <sv@exept.de>
parents: 5200
diff changeset
   903
    <resource: #obsolete>
1780
b20be7704d6f added mimeType
Claus Gittinger <cg@exept.de>
parents: 1779
diff changeset
   904
    "register an additional image reader.
1800
1b4d3067bdc0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1799
diff changeset
   905
     This interface is kept for backward compatibility.
1b4d3067bdc0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1799
diff changeset
   906
     The knowledge has been concentrated in MIMETypes"
1b4d3067bdc0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1799
diff changeset
   907
1b4d3067bdc0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1799
diff changeset
   908
    self obsoleteMethodWarning.
1b4d3067bdc0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1799
diff changeset
   909
    MIMETypes
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   910
        defineImageType:mimeType suffix:aSuffix reader:aReaderClass
1780
b20be7704d6f added mimeType
Claus Gittinger <cg@exept.de>
parents: 1779
diff changeset
   911
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
   912
    "
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
   913
     Image addReader:GIFReader suffix:'gif'
1780
b20be7704d6f added mimeType
Claus Gittinger <cg@exept.de>
parents: 1779
diff changeset
   914
     Image addReader:GIFReader suffix:'gif' mimeType:'image/gif'
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
   915
    "
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
   916
1799
054302440308 moved all mime-knowledge to MIMETypes
Claus Gittinger <cg@exept.de>
parents: 1786
diff changeset
   917
    "Modified: 30.6.1997 / 21:59:59 / cg"
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
   918
!
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
   919
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
   920
fileFormats
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
   921
    "return the collection of supported file formats.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
   922
     The returned dictionary maps file-extensions to image reader classes."
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
   923
1799
054302440308 moved all mime-knowledge to MIMETypes
Claus Gittinger <cg@exept.de>
parents: 1786
diff changeset
   924
    ^ MIMETypes fileSuffixToImageReaderMapping
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
   925
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
   926
    "
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
   927
     Image fileFormats
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
   928
    "
1799
054302440308 moved all mime-knowledge to MIMETypes
Claus Gittinger <cg@exept.de>
parents: 1786
diff changeset
   929
054302440308 moved all mime-knowledge to MIMETypes
Claus Gittinger <cg@exept.de>
parents: 1786
diff changeset
   930
    "Modified: 30.6.1997 / 22:05:58 / cg"
100
1b0b86c77397 co !!:*
claus
parents: 89
diff changeset
   931
!
1b0b86c77397 co !!:*
claus
parents: 89
diff changeset
   932
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
   933
flushDeviceImages
869
464ffa8c0c67 comment
Claus Gittinger <cg@exept.de>
parents: 861
diff changeset
   934
    "simply release all deviceForms"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
   935
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
   936
    Lobby do:[:anImage |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   937
        anImage release
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
   938
    ]
869
464ffa8c0c67 comment
Claus Gittinger <cg@exept.de>
parents: 861
diff changeset
   939
464ffa8c0c67 comment
Claus Gittinger <cg@exept.de>
parents: 861
diff changeset
   940
    "Modified: 15.6.1996 / 15:45:02 / cg"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   941
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   942
48194c26a46c Initial revision
claus
parents:
diff changeset
   943
initialize
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
   944
    "initialize class constants"
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
   945
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   946
    "setup tracker of known pictures"
24
e810b1be068b *** empty log message ***
claus
parents: 17
diff changeset
   947
    Lobby isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   948
        Lobby := Registry new.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   949
        ObjectMemory addDependent:self.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   950
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   951
        "/ define the algorithm to use for dithering -
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   952
        "/ supported values are:
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   953
        "/      #threshold
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   954
        "/      #ordered
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   955
        "/      #floydSteinberg
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   956
        "/      #burkes
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   957
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   958
        DitherAlgorithm := #floydSteinberg.
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
        (Display notNil and:[Display hasGrayscales]) ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   961
            NumberOfDitherColors := 64
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   962
        ] ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   963
            "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
   964
            NumberOfDitherColors := 100
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   965
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   966
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   967
        "define reader classes"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   968
        self initializeFileFormatTable.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   969
        self initializeMIMETable.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   970
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   971
        CollectGarbageWhenRunningOutOfColors := false.
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
        ImageErrorSignal := Error newSignalMayProceed:true.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   974
        ImageErrorSignal nameClass:self message:#imageErrorSignal.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   975
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   976
        ImageSaveErrorSignal := ImageErrorSignal newSignalMayProceed:true.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   977
        ImageSaveErrorSignal nameClass:self message:#imageSaveErrorSignal.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   978
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   979
        FileCreationErrorSignal := ImageSaveErrorSignal newSignalMayProceed:true.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   980
        FileCreationErrorSignal nameClass:self message:#fileCreationErrorSignal.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   981
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   982
        CannotRepresentImageSignal := ImageSaveErrorSignal newSignalMayProceed:true.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   983
        CannotRepresentImageSignal nameClass:self message:#cannotRepresentImageSignal.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   984
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   985
        ImageLoadErrorSignal := QuerySignal new.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   986
        ImageLoadErrorSignal nameClass:self message:#imageLoadErrorSignal.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   987
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   988
        ImageNotFoundQuerySignal := QuerySignal new.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   989
        ImageNotFoundQuerySignal nameClass:self message:#imageNotFoundQuerySignal.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   990
        ImageNotFoundQuerySignal parent:ImageLoadErrorSignal.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   991
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   992
        InformationLostQuerySignal := QuerySignal new.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   993
        InformationLostQuerySignal nameClass:self message:#informationLostQuerySignal.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   994
        InformationLostQuerySignal parent:ImageLoadErrorSignal.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
   995
8175
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
   996
        NoMaskSupportedQuerySignal := QuerySignal new.
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
   997
        NoMaskSupportedQuerySignal nameClass:self message:#noMaskSupportedQuerySignal.
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
   998
        NoMaskSupportedQuerySignal parent:InformationLostQuerySignal.
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
   999
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1000
        NoMaskButAlphaSupportedQuerySignal := QuerySignal new.
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1001
        NoMaskButAlphaSupportedQuerySignal nameClass:self message:#noMaskButAlphaSupportedQuerySignal.
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1002
        NoMaskButAlphaSupportedQuerySignal parent:NoMaskSupportedQuerySignal.
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1003
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1004
        BadImageFormatQuerySignal := QuerySignal new.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1005
        BadImageFormatQuerySignal nameClass:self message:#badImageFormatQuerySignal.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1006
        BadImageFormatQuerySignal parent:ImageLoadErrorSignal.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1007
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1008
        UnrepresentableColorSignal := ImageErrorSignal newSignalMayProceed:true.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1009
        UnrepresentableColorSignal nameClass:self message:#unrepresentableColorSignal.
386
f9a80cac659e only init once
Claus Gittinger <cg@exept.de>
parents: 380
diff changeset
  1010
    ]
748
818c6312acd1 grey vs. gray
Claus Gittinger <cg@exept.de>
parents: 746
diff changeset
  1011
8175
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1012
    "Modified: / 13-09-2017 / 09:29:34 / cg"
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  1013
!
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  1014
24
e810b1be068b *** empty log message ***
claus
parents: 17
diff changeset
  1015
initializeFileFormatTable
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
  1016
    "initialize a default table to map from file extension to reader class.
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
  1017
     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
  1018
     see the 'smalltalk.rc'/'display.rc' startup files for a real (full) map."
24
e810b1be068b *** empty log message ***
claus
parents: 17
diff changeset
  1019
1814
5d413419cf51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1802
diff changeset
  1020
    MIMETypes notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1021
        MIMETypes imageReaderForSuffix:'xbm'  put:XBMReader.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1022
        MIMETypes imageReaderForSuffix:'tiff' put:TIFFReader.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1023
        MIMETypes imageReaderForSuffix:'gif'  put:GIFReader.
1814
5d413419cf51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1802
diff changeset
  1024
    ].
24
e810b1be068b *** empty log message ***
claus
parents: 17
diff changeset
  1025
72
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
  1026
    "
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
  1027
     Image initializeFileFormatTable
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
  1028
    "
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1029
1799
054302440308 moved all mime-knowledge to MIMETypes
Claus Gittinger <cg@exept.de>
parents: 1786
diff changeset
  1030
    "Modified: 30.6.1997 / 22:07:28 / cg"
1785
3196d65f5fa8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1784
diff changeset
  1031
!
3196d65f5fa8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1784
diff changeset
  1032
3196d65f5fa8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1784
diff changeset
  1033
initializeMIMETable
3196d65f5fa8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1784
diff changeset
  1034
    "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
  1035
     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
  1036
     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
  1037
1799
054302440308 moved all mime-knowledge to MIMETypes
Claus Gittinger <cg@exept.de>
parents: 1786
diff changeset
  1038
    MIMETypes notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1039
        MIMETypes mimeTypeForSuffix:'gif'       put:'image/gif'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1040
        MIMETypes mimeTypeForSuffix:'tiff'      put:'image/tiff'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1041
        MIMETypes mimeTypeForSuffix:'tif'       put:'image/tiff'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1042
        MIMETypes mimeTypeForSuffix:'xbm'       put:'image/x-xbitmap'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1043
        MIMETypes mimeTypeForSuffix:'xpm'       put:'image/x-xpixmap'.
1799
054302440308 moved all mime-knowledge to MIMETypes
Claus Gittinger <cg@exept.de>
parents: 1786
diff changeset
  1044
    ].
1785
3196d65f5fa8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1784
diff changeset
  1045
3196d65f5fa8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1784
diff changeset
  1046
    "
3196d65f5fa8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1784
diff changeset
  1047
     Image initializeMIMETable
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
3196d65f5fa8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1784
diff changeset
  1050
    "Created: 27.6.1997 / 16:43:48 / cg"
1815
50212910fc13 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1814
diff changeset
  1051
    "Modified: 21.7.1997 / 17:33:59 / cg"
24
e810b1be068b *** empty log message ***
claus
parents: 17
diff changeset
  1052
!
e810b1be068b *** empty log message ***
claus
parents: 17
diff changeset
  1053
901
6cacd0f4eef0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 896
diff changeset
  1054
update:something with:aParameter from:changedObject
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  1055
    "flush all device specific stuff when restarted from a snapshot"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1056
48194c26a46c Initial revision
claus
parents:
diff changeset
  1057
    (something == #restarted) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1058
        self flushDeviceImages
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  1059
    ]
901
6cacd0f4eef0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 896
diff changeset
  1060
6cacd0f4eef0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 896
diff changeset
  1061
    "Created: 21.6.1996 / 19:47:43 / cg"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  1062
! !
48194c26a46c Initial revision
claus
parents:
diff changeset
  1063
1086
269243c32f69 added displayOpaque, for protocol completeness
Claus Gittinger <cg@exept.de>
parents: 1070
diff changeset
  1064
!Image class methodsFor:'instance creation'!
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1065
2380
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  1066
extent:ext
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  1067
    "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
  1068
     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
  1069
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  1070
    ^ 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
  1071
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  1072
    "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
  1073
    "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
  1074
!
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  1075
3023
cb063801decd more Squeak compatibility
ps
parents: 2980
diff changeset
  1076
extent:ext depth:d
cb063801decd more Squeak compatibility
ps
parents: 2980
diff changeset
  1077
    "ST-80 compatibility"
cb063801decd more Squeak compatibility
ps
parents: 2980
diff changeset
  1078
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  1079
    ^ self width:ext x height:ext y depth:d
3023
cb063801decd more Squeak compatibility
ps
parents: 2980
diff changeset
  1080
!
cb063801decd more Squeak compatibility
ps
parents: 2980
diff changeset
  1081
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1082
extent:ext depth:d antiAliasedPalette:aBasicColorArray bgColor:bgColor
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1083
    ^ 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
  1084
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1085
    "
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1086
        |colorMap aaImgArray|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1087
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1088
        colorMap := Array with:Color white with:Color blue.
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
        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
  1091
        aaImgArray last
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1092
            fillAntiAliasedArc:200@200
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1093
            radius:80
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1094
            from:0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1095
            angle:360
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1096
            withColor:Color blue
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1097
            antiAliasedPalette:aaImgArray first
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1098
            startWith:aaImgArray second.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1099
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1100
        aaImgArray last inspect.
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
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1103
        |colorMap aaImgArray|
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 := 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
  1106
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1107
        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
  1108
        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
  1109
            colorDictionary:aaImgArray first
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1110
            blendStart:aaImgArray second.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1111
        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
  1112
            colorDictionary:aaImgArray first
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1113
            blendStart:aaImgArray second.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1114
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1115
        aaImgArray last inspect.
5135
0a2a850a20cc *** empty log message ***
sr
parents: 5126
diff changeset
  1116
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1117
    "
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1118
!
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1119
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1120
extent:ext depth:d antiAliasedPalette:aBasicColorArray bgColor:bgColor mixedArray:mixedArray
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  1121
    |colorMap colorIndex colorDictionary tmpDic newImage|
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  1122
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1123
    colorMap := OrderedCollection new.
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1124
    colorIndex := 0.
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1125
    colorDictionary := Dictionary new.
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1126
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1127
    aBasicColorArray do:[:aColor |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1128
        colorMap add:aColor.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1129
        colorIndex := colorIndex + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1130
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1131
        tmpDic := Dictionary new.
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
        mixedArray do:[:aFloat |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1134
            tmpDic at:aFloat put:colorIndex.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1135
            colorMap add:(aColor mixed:aFloat with:bgColor).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1136
            colorIndex := colorIndex + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1137
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1138
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1139
        colorDictionary at:aColor put:tmpDic.
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 6037
diff changeset
  1140
    ].
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1141
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1142
    newImage := (self implementorForDepth:d) new.
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1143
    newImage width:ext x height:ext y depth:d palette:colorMap.
5643
bf38d077884a changed:
Claus Gittinger <cg@exept.de>
parents: 5533
diff changeset
  1144
    newImage createPixelStore.
bf38d077884a changed:
Claus Gittinger <cg@exept.de>
parents: 5533
diff changeset
  1145
"/    emptyBits := ByteArray new:(newImage bytesPerRow * ext y).
bf38d077884a changed:
Claus Gittinger <cg@exept.de>
parents: 5533
diff changeset
  1146
"/    newImage bits:emptyBits.
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1147
5135
0a2a850a20cc *** empty log message ***
sr
parents: 5126
diff changeset
  1148
    ^ Array with:colorDictionary with:mixedArray first with:newImage
0a2a850a20cc *** empty log message ***
sr
parents: 5126
diff changeset
  1149
0a2a850a20cc *** empty log message ***
sr
parents: 5126
diff changeset
  1150
    "
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1151
        |colorMap aaImgArray|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1152
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1153
        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
  1154
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1155
        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
  1156
        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
  1157
            colorDictionary:aaImgArray first
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1158
            blendStart:aaImgArray second.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1159
        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
  1160
            colorDictionary:aaImgArray first
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1161
            blendStart:aaImgArray second.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1162
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1163
        aaImgArray last inspect.
5135
0a2a850a20cc *** empty log message ***
sr
parents: 5126
diff changeset
  1164
0a2a850a20cc *** empty log message ***
sr
parents: 5126
diff changeset
  1165
 ###################
0a2a850a20cc *** empty log message ***
sr
parents: 5126
diff changeset
  1166
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1167
        |colorMap aaImgArray|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1168
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1169
        colorMap := Array with:Color white with:Color blue.
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
        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
  1172
        aaImgArray last
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1173
            fillAntiAliasedArc:200@200
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1174
            radius:80
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1175
            from:0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1176
            angle:360
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1177
            withColor:Color blue
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  1178
            colorDictionary:aaImgArray first
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  1179
            blendStart:aaImgArray second.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1180
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1181
        aaImgArray last inspect.
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1182
    "
5643
bf38d077884a changed:
Claus Gittinger <cg@exept.de>
parents: 5533
diff changeset
  1183
bf38d077884a changed:
Claus Gittinger <cg@exept.de>
parents: 5533
diff changeset
  1184
    "Modified: / 02-11-2010 / 20:57:41 / cg"
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  1185
    "Modified: / 31-01-2017 / 14:30:22 / stefan"
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  1186
    "Modified (comment): / 31-01-2017 / 15:47:39 / stefan"
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1187
!
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
  1188
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1189
extent:ext depth:d bits:bits
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1190
    "ST-80 compatibility; assume 32-bit padding"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1191
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1192
    ^ self extent:ext depth:d bits:bits pad:32
24
e810b1be068b *** empty log message ***
claus
parents: 17
diff changeset
  1193
!
e810b1be068b *** empty log message ***
claus
parents: 17
diff changeset
  1194
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1195
extent:ext depth:d bits:bits pad:padding
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1196
    "ST-80 compatibility"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1197
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1198
    ^ self width:ext x height:ext y depth:d fromArray:bits pad:padding
24
e810b1be068b *** empty log message ***
claus
parents: 17
diff changeset
  1199
!
e810b1be068b *** empty log message ***
claus
parents: 17
diff changeset
  1200
1276
ec4112f62da7 ST-80 stuff
Claus Gittinger <cg@exept.de>
parents: 1248
diff changeset
  1201
extent:ext depth:d bitsPerPixel:bpp palette:aColormap usingBits:bits
ec4112f62da7 ST-80 stuff
Claus Gittinger <cg@exept.de>
parents: 1248
diff changeset
  1202
    "ST-80 compatibility"
ec4112f62da7 ST-80 stuff
Claus Gittinger <cg@exept.de>
parents: 1248
diff changeset
  1203
ec4112f62da7 ST-80 stuff
Claus Gittinger <cg@exept.de>
parents: 1248
diff changeset
  1204
    |img|
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 := 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
  1207
    img colorMap:aColormap.
ec4112f62da7 ST-80 stuff
Claus Gittinger <cg@exept.de>
parents: 1248
diff changeset
  1208
    ^ img
ec4112f62da7 ST-80 stuff
Claus Gittinger <cg@exept.de>
parents: 1248
diff changeset
  1209
ec4112f62da7 ST-80 stuff
Claus Gittinger <cg@exept.de>
parents: 1248
diff changeset
  1210
    "Created: 25.1.1997 / 03:50:22 / cg"
ec4112f62da7 ST-80 stuff
Claus Gittinger <cg@exept.de>
parents: 1248
diff changeset
  1211
    "Modified: 25.1.1997 / 12:27:35 / cg"
ec4112f62da7 ST-80 stuff
Claus Gittinger <cg@exept.de>
parents: 1248
diff changeset
  1212
!
ec4112f62da7 ST-80 stuff
Claus Gittinger <cg@exept.de>
parents: 1248
diff changeset
  1213
1433
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  1214
extent:ext depth:d palette:aColormap
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  1215
    "create & return a blank image of the given size.
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  1216
     ST-80 compatibility"
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  1217
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  1218
    |newImage|
1433
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  1219
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  1220
    newImage := (self implementorForDepth:d) new.
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  1221
    newImage width:ext x height:ext y depth:d palette:aColormap.
5643
bf38d077884a changed:
Claus Gittinger <cg@exept.de>
parents: 5533
diff changeset
  1222
    newImage createPixelStore.
bf38d077884a changed:
Claus Gittinger <cg@exept.de>
parents: 5533
diff changeset
  1223
"/    emptyBits := ByteArray new:(newImage bytesPerRow * ext y).
bf38d077884a changed:
Claus Gittinger <cg@exept.de>
parents: 5533
diff changeset
  1224
"/    newImage bits:emptyBits.
1433
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  1225
    ^ newImage
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  1226
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  1227
    "
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  1228
     Image extent:16@16 depth:8 palette:nil
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  1229
     Image extent:16@16 depth:4 palette:nil
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  1230
     Image extent:16@16 depth:2 palette:nil
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  1231
    "
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  1232
5643
bf38d077884a changed:
Claus Gittinger <cg@exept.de>
parents: 5533
diff changeset
  1233
    "Created: / 06-03-1997 / 15:24:01 / cg"
bf38d077884a changed:
Claus Gittinger <cg@exept.de>
parents: 5533
diff changeset
  1234
    "Modified: / 02-11-2010 / 20:56:53 / cg"
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  1235
    "Modified (format): / 31-01-2017 / 14:51:03 / stefan"
1433
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  1236
!
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  1237
1070
6a695c4bb749 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1063
diff changeset
  1238
extent:ext depth:d palette:aColormap bits:bits
6a695c4bb749 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1063
diff changeset
  1239
    "ST-80 compatibility"
6a695c4bb749 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1063
diff changeset
  1240
6a695c4bb749 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1063
diff changeset
  1241
    ^ self extent:ext depth:d palette:aColormap bits:bits pad:16
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
    "Modified: 7.10.1996 / 11:32:16 / cg"
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
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1246
extent:ext depth:d palette:aColormap bits:bits pad:padding
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1247
    "ST-80 compatibility"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1248
1070
6a695c4bb749 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1063
diff changeset
  1249
    |img|
6a695c4bb749 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1063
diff changeset
  1250
6a695c4bb749 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1063
diff changeset
  1251
    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
  1252
    img colorMap:aColormap.
6a695c4bb749 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1063
diff changeset
  1253
    ^ img
6a695c4bb749 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1063
diff changeset
  1254
6a695c4bb749 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1063
diff changeset
  1255
    "Modified: 7.10.1996 / 11:32:00 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1256
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1257
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1258
extent:ext fromArray:bits offset:offset
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1259
    "ST-80 compatibility"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1260
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1261
    ^ self width:ext x height:ext y fromArray:bits
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1262
!
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1263
7913
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  1264
fromAlphaInImage:anImage
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  1265
    "create & return an Image from the alpha channel ofanother image.
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  1266
     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
  1267
     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
  1268
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  1269
    |cls|
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
    self == Image ifTrue:[
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  1272
        cls := Depth8Image.
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  1273
    ] ifFalse:[
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  1274
        cls := self.
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  1275
    ].
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  1276
    ^ cls new fromAlphaInImage:anImage
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
    "Created: / 17-02-2017 / 17:39:30 / cg"
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
7637
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
  1281
fromDeviceForm:aForm maskForm:aMaskFormOrNil
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
  1282
    "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
  1283
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
  1284
    |img|
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 := self newForDepth:aForm depth.
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
  1287
    img fromDeviceForm:aForm maskForm:aMaskFormOrNil.
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
  1288
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
  1289
    ^ img 
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
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1292
fromForm:aForm
924
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  1293
    "create & return an Image given a aForm"
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1294
3026
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1295
    ^ self fromSubForm:(0@0 extent:aForm extent) in:aForm
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1296
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1297
    "
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1298
     |f|
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1299
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1300
     f := Form width:16 height:16.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1301
     f clear.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1302
     f displayLineFromX:0 y:0 toX:15 y:15.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1303
     f inspect.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1304
     (Image fromForm:f) inspect
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1305
    "
924
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  1306
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  1307
    "
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  1308
     |f|
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 := 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
  1311
     f clear.
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  1312
     f paint:(Color red).
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  1313
     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
  1314
     f paint:(Color green).
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  1315
     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
  1316
     f inspect.
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  1317
     (Image fromForm:f) inspect
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  1318
    "
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  1319
936
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
  1320
    "Modified: 11.7.1996 / 11:21:42 / cg"
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1321
!
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1322
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1323
fromImage:anImage
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1324
    "create & return an Image given another image. This can be used to
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1325
     convert an image to another depth."
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1326
3259
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1327
    ^ 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
  1328
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1329
    "
3448
44cbe8a45067 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1330
     |i i2 idx|
44cbe8a45067 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1331
44cbe8a45067 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1332
     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
  1333
     i2 := i deepCopy.
44cbe8a45067 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1334
44cbe8a45067 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1335
     idx := i2 colorMap indexOfPaintNearest:(Color green).
44cbe8a45067 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1336
     i2 colorMap at:idx put:Color red.
44cbe8a45067 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1337
     i2 inspect.
44cbe8a45067 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1338
     i inspect.
3259
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1339
    "
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1340
!
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
fromImage:anImage photometric:photometricOrNil
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1343
    "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
  1344
     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
  1345
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  1346
    (self == Image
8663
b24e56c97483 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8524
diff changeset
  1347
     or:[anImage class == self
b24e56c97483 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8524
diff changeset
  1348
         and:[photometricOrNil isNil 
b24e56c97483 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8524
diff changeset
  1349
              or:[photometricOrNil == anImage photometric]]]
b24e56c97483 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8524
diff changeset
  1350
    ) ifTrue:[^ anImage].
b24e56c97483 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8524
diff changeset
  1351
    
3259
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1352
    ^ self new fromImage:anImage photometric:photometricOrNil.
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1353
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1354
    "
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1355
     |i1 i8|
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1356
8093
363a0cdd8762 #DOCUMENTATION by mawalch
mawalch
parents: 8091
diff changeset
  1357
     i1 := Image fromFile:'libtool/bitmaps/SBrowser.xbm'.
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1358
     i8 := Depth8Image fromImage:i1.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1359
     i8 inspect
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1360
    "
8093
363a0cdd8762 #DOCUMENTATION by mawalch
mawalch
parents: 8091
diff changeset
  1361
363a0cdd8762 #DOCUMENTATION by mawalch
mawalch
parents: 8091
diff changeset
  1362
    "Modified (comment): / 23-08-2017 / 12:02:25 / mawalch"
8663
b24e56c97483 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8524
diff changeset
  1363
    "Modified (format): / 22-03-2019 / 08:57:06 / Claus Gittinger"
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1364
!
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1365
3026
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1366
fromSubForm:aRectangle in:aForm
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1367
    "create & return an subImage given a aForm"
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1368
7271
3d35b4e39ec4 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 7242
diff changeset
  1369
    |depth formsDevice vis img photometric|
3026
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1370
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1371
    depth := aForm depth.
7271
3d35b4e39ec4 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 7242
diff changeset
  1372
    formsDevice := aForm device.
3026
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1373
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  1374
    photometric := (depth > 8) ifTrue:[#rgb] ifFalse:[#palette].
4937
1b0ebaed9336 photometric fix
Claus Gittinger <cg@exept.de>
parents: 4893
diff changeset
  1375
7271
3d35b4e39ec4 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 7242
diff changeset
  1376
    (formsDevice notNil and:[depth == formsDevice depth]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1377
        "/
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1378
        "/ for truecolor displays, return a Depth24Image
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1379
        "/ (must do this for depth15 & depth16 displays, since
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1380
        "/  Depth16Image has no way to specify r/g/b masks ...)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1381
        "/
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1382
        vis := formsDevice visualType.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1383
        (vis == #TrueColor or:[vis == #DirectColor]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1384
            depth > 8 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1385
                depth := 24.
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
        ].
3026
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1388
    ].
3259
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1389
    img := self newForDepth:depth.
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 6037
diff changeset
  1390
    img photometric:photometric.
4937
1b0ebaed9336 photometric fix
Claus Gittinger <cg@exept.de>
parents: 4893
diff changeset
  1391
7271
3d35b4e39ec4 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 7242
diff changeset
  1392
    formsDevice isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1393
        ^ img from:aForm in:aRectangle.
3026
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1394
    ].
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1395
    ^ img from:aForm in:aRectangle
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1396
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1397
    "
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1398
     |f|
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1399
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1400
     f := Form width:16 height:16.
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1401
     f clear.
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1402
     f displayLineFromX:0 y:0 toX:15 y:15.
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1403
     f inspect.
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1404
     (Image fromForm:f) inspect.
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1405
     (Image fromSubForm:(5@5 corner:10@10) in:f) inspect
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
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|
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1410
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1411
     f := Form width:16 height:16 depth:(Display depth) on:Display.
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1412
     f clear.
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1413
     f paint:(Color red).
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1414
     f displayLineFromX:0 y:0 toX:15 y:15.
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1415
     f paint:(Color green).
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1416
     f displayLineFromX:15 y:0 toX:0 y:15.
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1417
     f inspect.
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1418
     (Image fromForm:f) inspect.
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1419
     (Image fromSubForm:(5@5 corner:10@10) in:f) inspect
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1420
    "
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  1421
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  1422
    "Modified: / 31-01-2017 / 15:03:17 / stefan"
3026
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1423
!
7107903826d4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3023
diff changeset
  1424
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  1425
fromSubImage:anImage in:aRectangle
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  1426
    "create & return an Image from a rectangular area in another image.
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1427
     This can also be used to get a subimage in another depth.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1428
     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
  1429
     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
  1430
     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
  1431
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1432
    |cls|
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  1433
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  1434
    self == Image ifTrue:[
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  1435
        cls := self implementorForDepth:anImage depth.
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  1436
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1437
        cls := self.
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1438
    ].
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1439
    ^ cls new fromSubImage:anImage in:aRectangle.
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  1440
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  1441
    "
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  1442
     |i1 i8|
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  1443
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1444
     i1 := Image fromFile:'bitmaps/gifImages/garfield.gif' inPackage:'stx:goodies'.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1445
     i8 := Depth8Image fromSubImage:i1 in:(250@90 extent:50@50).
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  1446
     i8 inspect
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  1447
    "
650
14fc51fc3a4e comments
Claus Gittinger <cg@exept.de>
parents: 649
diff changeset
  1448
    "
14fc51fc3a4e comments
Claus Gittinger <cg@exept.de>
parents: 649
diff changeset
  1449
     |i1 i8|
14fc51fc3a4e comments
Claus Gittinger <cg@exept.de>
parents: 649
diff changeset
  1450
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1451
     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
  1452
     i8 := Image fromSubImage:i1 in:(70@50 extent:50@50).
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  1453
     i8 inspect
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  1454
    "
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1455
    "
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1456
     |i1 i24|
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1457
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1458
     i1 := Image fromFile:'bitmaps/gifImages/claus.gif' inPackage:'stx:goodies'.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1459
     i24 := Depth24Image fromSubImage:i1 in:(70@50 extent:50@50).
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1460
     i24 inspect
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1461
    "
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1462
    "
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1463
     |i1 i24|
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 := Image fromFile:'bitmaps/gifImages/claus.gif' inPackage:'stx:goodies'.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1466
     i1 inspect.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1467
     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
  1468
     i24 inspect
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  1469
    "
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  1470
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  1471
    "Created: / 20-09-1995 / 01:05:43 / claus"
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  1472
    "Modified: / 24-04-1997 / 23:13:02 / cg"
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  1473
    "Modified (format): / 30-01-2017 / 19:45:54 / stefan"
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  1474
!
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  1475
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1476
new
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1477
    "create a new image. Redefined to set the photometric to
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1478
     greyScale with black being 0 as default."
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1479
4416
fb209558d622 proper #initialize
Claus Gittinger <cg@exept.de>
parents: 4415
diff changeset
  1480
    ^ self basicNew initialize
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  1481
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  1482
    "Modified: 10.6.1996 / 18:08:37 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1483
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1484
3259
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1485
newForDepth:depth
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1486
    "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
  1487
     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
  1488
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1489
    |cls|
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1490
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1491
    cls := self implementorForDepth:depth.
4757
60d27f8e65bb some fixes for depth32
Claus Gittinger <cg@exept.de>
parents: 4745
diff changeset
  1492
    ^ cls new
3259
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1493
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1494
    "
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1495
     Image newForDepth:8
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1496
    "
4757
60d27f8e65bb some fixes for depth32
Claus Gittinger <cg@exept.de>
parents: 4745
diff changeset
  1497
60d27f8e65bb some fixes for depth32
Claus Gittinger <cg@exept.de>
parents: 4745
diff changeset
  1498
    "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
  1499
!
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1500
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1501
width:w height:h
2380
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  1502
    "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
  1503
     Assume a depth of 1, unless an explicit imageClass is the receiver."
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1504
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1505
    |cls|
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1506
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1507
    cls := self.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1508
    cls == Image ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1509
        cls := self implementorForDepth:1
4788
0d07247aee8b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4780
diff changeset
  1510
    ].
0d07247aee8b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4780
diff changeset
  1511
    ^ cls new width:w height:h
0d07247aee8b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4780
diff changeset
  1512
0d07247aee8b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4780
diff changeset
  1513
    "Modified: / 06-06-2007 / 11:10:55 / cg"
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1514
!
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1515
82
98a70bce6d51 *** empty log message ***
claus
parents: 81
diff changeset
  1516
width:w height:h depth:d
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1517
    "create a new image, given width, height and depth"
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1518
3259
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1519
    ^ (self newForDepth:d)
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1520
        width:w height:h depth:d
82
98a70bce6d51 *** empty log message ***
claus
parents: 81
diff changeset
  1521
!
98a70bce6d51 *** empty log message ***
claus
parents: 81
diff changeset
  1522
98a70bce6d51 *** empty log message ***
claus
parents: 81
diff changeset
  1523
width:w height:h depth:d fromArray:pixelData
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1524
    "create a new image, given width, height, depth and data.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1525
     Data must be a ByteArray containing correctly aligned bits for the specified
134
claus
parents: 132
diff changeset
  1526
     depth (8-bit padded)."
82
98a70bce6d51 *** empty log message ***
claus
parents: 81
diff changeset
  1527
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
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 fromArray:pixelData
82
98a70bce6d51 *** empty log message ***
claus
parents: 81
diff changeset
  1530
98a70bce6d51 *** empty log message ***
claus
parents: 81
diff changeset
  1531
    "
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  1532
     Image width:8
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1533
           height:8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1534
           depth:1
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1535
           fromArray:#[2r11001100
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1536
                       2r00110011
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1537
                       2r11001100
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1538
                       2r00110011
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1539
                       2r11001100
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1540
                       2r00110011
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1541
                       2r11001100
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1542
                       2r00110011].
82
98a70bce6d51 *** empty log message ***
claus
parents: 81
diff changeset
  1543
    "
98a70bce6d51 *** empty log message ***
claus
parents: 81
diff changeset
  1544
98a70bce6d51 *** empty log message ***
claus
parents: 81
diff changeset
  1545
    "
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  1546
     Image width:8
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1547
           height:8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1548
           depth:2
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1549
           fromArray:#[4r1100 4r1100
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1550
                       4r0011 4r0011
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1551
                       4r1100 4r1100
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1552
                       4r0011 4r0011
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1553
                       4r1100 4r1100
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1554
                       4r0011 4r0011
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1555
                       4r1100 4r1100
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1556
                       4r0011 4r0011].
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1557
    "
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1558
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  1559
    "
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  1560
     Image width:8
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1561
           height:8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1562
           depth:4
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1563
           fromArray:#[16r00 16r01 16rf0 16rf1
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1564
                       16r02 16r03 16rf2 16rf3
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1565
                       16r04 16r05 16rf4 16rf5
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1566
                       16r06 16r07 16rf6 16rf7
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1567
                       16r08 16r09 16rf8 16rf9
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1568
                       16r0a 16r0b 16rfa 16rfb
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1569
                       16r0c 16r0d 16rfc 16rfd
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1570
                       16r0e 16r0f 16rfe 16rff].
7101
8c2377f29588 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 6900
diff changeset
  1571
    "
8c2377f29588 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 6900
diff changeset
  1572
8c2377f29588 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 6900
diff changeset
  1573
    "
8c2377f29588 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 6900
diff changeset
  1574
     Image width:8
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1575
           height:8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1576
           depth:16
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1577
           fromArray:#(1 1 1 1 1 1 1 1
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1578
                       2 2 2 2 2 2 2 2
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1579
                       3 3 3 3 3 3 3 3
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1580
                       4 4 4 4 4 4 4 4
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1581
                       5 5 5 5 5 5 5 5
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1582
                       6 6 6 6 6 6 6 6
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1583
                       7 7 7 7 7 7 7 7
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1584
                       8 8 8 8 8 8 8 8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1585
                      ) asWordArray.
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  1586
    "
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  1587
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  1588
    "Modified: 10.6.1996 / 18:18:10 / cg"
132
claus
parents: 125
diff changeset
  1589
!
claus
parents: 125
diff changeset
  1590
134
claus
parents: 132
diff changeset
  1591
width:w height:h depth:d fromArray:pixelData pad:padding
claus
parents: 132
diff changeset
  1592
    "create a new image, given width, height, depth and data.
claus
parents: 132
diff changeset
  1593
     Data must be a ByteArray containing correctly aligned bits for the specified
claus
parents: 132
diff changeset
  1594
     depth."
claus
parents: 132
diff changeset
  1595
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  1596
    |img newBits
2772
e8ceedf9aeab code cleanup & a few more SmallInteger type hints
Claus Gittinger <cg@exept.de>
parents: 2760
diff changeset
  1597
     srcRowBytes "{ Class: SmallInteger }"
e8ceedf9aeab code cleanup & a few more SmallInteger type hints
Claus Gittinger <cg@exept.de>
parents: 2760
diff changeset
  1598
     dstRowBytes "{ Class: SmallInteger }"
e8ceedf9aeab code cleanup & a few more SmallInteger type hints
Claus Gittinger <cg@exept.de>
parents: 2760
diff changeset
  1599
     nextDstIndex "{ Class: SmallInteger }"
2527
5391e6e2c8a6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2526
diff changeset
  1600
     srcIndex "{ Class: SmallInteger }"
5391e6e2c8a6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2526
diff changeset
  1601
     dstIndex "{ Class: SmallInteger }" |
134
claus
parents: 132
diff changeset
  1602
3259
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  1603
    img := (self newForDepth:d) width:w height:h depth:d .
134
claus
parents: 132
diff changeset
  1604
4757
60d27f8e65bb some fixes for depth32
Claus Gittinger <cg@exept.de>
parents: 4745
diff changeset
  1605
    srcRowBytes := ((w * d + padding - 1) bitShift:-5) bitShift:2.
5341
ede63c3764ca *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5326
diff changeset
  1606
    dstRowBytes := img bytesPerRow.
ede63c3764ca *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5326
diff changeset
  1607
ede63c3764ca *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5326
diff changeset
  1608
    (padding ~~ 8 and:[(srcRowBytes \\ 4 ~~ 0) or:[srcRowBytes ~= dstRowBytes]]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1609
        "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
  1610
         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
  1611
        "
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1612
        dstRowBytes := img bytesPerRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1613
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1614
        newBits := ByteArray uninitializedNew:(dstRowBytes * h).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1615
        srcIndex := 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1616
        dstIndex := 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1617
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1618
        1 to:h do:[:row |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1619
            nextDstIndex := dstIndex + dstRowBytes.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1620
            newBits replaceFrom:dstIndex
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1621
                             to:(nextDstIndex - 1)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1622
                           with:pixelData
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1623
                     startingAt:srcIndex.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1624
            srcIndex := srcIndex + srcRowBytes.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1625
            dstIndex := nextDstIndex.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1626
        ].
134
claus
parents: 132
diff changeset
  1627
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1628
        pixelData class isBytes ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1629
            newBits := ByteArray withAll:pixelData
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1630
        ] ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1631
            newBits := pixelData
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1632
        ]
134
claus
parents: 132
diff changeset
  1633
    ].
claus
parents: 132
diff changeset
  1634
    img bits:newBits.
claus
parents: 132
diff changeset
  1635
    ^ img
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  1636
4757
60d27f8e65bb some fixes for depth32
Claus Gittinger <cg@exept.de>
parents: 4745
diff changeset
  1637
    "Modified: / 27-05-2007 / 14:01:32 / cg"
134
claus
parents: 132
diff changeset
  1638
!
claus
parents: 132
diff changeset
  1639
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1640
width:w height:h fromArray:anArray
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1641
    "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
  1642
     receiving class is Image.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1643
     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
  1644
     (i.e. 8 bits per byte)."
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1645
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  1646
    |cls d pixels|
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1647
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1648
    cls := self.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1649
    cls == Image ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1650
        cls := self implementorForDepth:1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1651
        d := 1.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1652
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1653
        d := cls imageDepth
283
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
    anArray class isBytes ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1656
        pixels := ByteArray withAll:anArray
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  1657
    ] ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1658
        pixels := anArray
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  1659
    ].
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  1660
    ^ cls new width:w height:h depth:d fromArray:pixels
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  1661
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  1662
    "
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  1663
     Image width:8
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1664
           height:8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1665
           fromArray:#[2r11001100
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1666
                       2r00110011
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1667
                       2r11001100
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1668
                       2r00110011
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1669
                       2r11001100
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1670
                       2r00110011
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1671
                       2r11001100
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1672
                       2r00110011].
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  1673
    "
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  1674
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  1675
    "Modified: 8.6.1996 / 10:07:26 / cg"
6899
4530c3bfcef8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6896
diff changeset
  1676
!
4530c3bfcef8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6896
diff changeset
  1677
6900
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  1678
width:w height:h photometric:photometric
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  1679
    "create a new image, given width, height.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  1680
     Assume a depth of 1, unless an explicit imageClass is the receiver."
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  1681
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  1682
    |cls|
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  1683
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  1684
    cls := self.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  1685
    cls == Image ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1686
        cls := self implementorForDepth:1
6900
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  1687
    ].
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  1688
    ^ cls new width:w height:h; photometric:photometric; yourself
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  1689
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  1690
    "Modified: / 06-06-2007 / 11:10:55 / cg"
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  1691
!
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  1692
6899
4530c3bfcef8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6896
diff changeset
  1693
width:w height:h photometric:photometric bitsPerSample:bitsPerSample
4530c3bfcef8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6896
diff changeset
  1694
    "create a new image, given width, height.
4530c3bfcef8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6896
diff changeset
  1695
     Assume a depth of 1, unless an explicit imageClass is the receiver."
4530c3bfcef8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6896
diff changeset
  1696
4530c3bfcef8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6896
diff changeset
  1697
    |cls|
4530c3bfcef8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6896
diff changeset
  1698
4530c3bfcef8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6896
diff changeset
  1699
    cls := self.
4530c3bfcef8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6896
diff changeset
  1700
    cls == Image ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1701
        cls := self implementorForDepth:1
6899
4530c3bfcef8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6896
diff changeset
  1702
    ].
4530c3bfcef8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6896
diff changeset
  1703
    ^ cls new width:w height:h; photometric:photometric; bitsPerSample:bitsPerSample; yourself
4530c3bfcef8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6896
diff changeset
  1704
4530c3bfcef8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6896
diff changeset
  1705
    "Modified: / 06-06-2007 / 11:10:55 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1706
! !
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  1707
1156
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  1708
!Image class methodsFor:'Signal constants'!
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  1709
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1710
badImageFormatQuerySignal
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1711
    "return the (query-) signal, which is raised if some
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1712
     bitmap-image could not be loaded due to an unrecognized format.
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1713
     If unhandled, the image-load returns nil.
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1714
     Otherwise, it returns whatever the handler proceeds with.
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1715
     The exception gets either the images fileName or an input stream
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1716
     as parameter"
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1717
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1718
    ^ BadImageFormatQuerySignal
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1719
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1720
    "Created: 1.2.1997 / 14:40:29 / cg"
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1721
!
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1722
1385
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1723
cannotRepresentImageSignal
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1724
    "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
  1725
     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
  1726
     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
  1727
     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
  1728
     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
  1729
     (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
  1730
     format then."
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1731
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
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1734
    "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
  1735
!
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1736
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1737
fileCreationErrorSignal
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1738
    "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
  1739
     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
  1740
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1741
    ^ FileCreationErrorSignal
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:32:59 / 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
2380
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  1746
imageErrorSignal
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  1747
    "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
  1748
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  1749
    ^ ImageErrorSignal
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  1750
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  1751
    "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
  1752
!
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  1753
2678
e12976d7084b raise a query signal when a loadError happens;
Claus Gittinger <cg@exept.de>
parents: 2645
diff changeset
  1754
imageLoadErrorSignal
e12976d7084b raise a query signal when a loadError happens;
Claus Gittinger <cg@exept.de>
parents: 2645
diff changeset
  1755
    "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
  1756
e12976d7084b raise a query signal when a loadError happens;
Claus Gittinger <cg@exept.de>
parents: 2645
diff changeset
  1757
    ^ ImageLoadErrorSignal
e12976d7084b raise a query signal when a loadError happens;
Claus Gittinger <cg@exept.de>
parents: 2645
diff changeset
  1758
e12976d7084b raise a query signal when a loadError happens;
Claus Gittinger <cg@exept.de>
parents: 2645
diff changeset
  1759
    "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
  1760
!
e12976d7084b raise a query signal when a loadError happens;
Claus Gittinger <cg@exept.de>
parents: 2645
diff changeset
  1761
1156
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  1762
imageNotFoundQuerySignal
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  1763
    "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
  1764
     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
  1765
     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
  1766
     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
  1767
     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
  1768
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  1769
    ^ ImageNotFoundQuerySignal
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  1770
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  1771
    "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
  1772
!
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1773
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1774
imageSaveErrorSignal
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1775
    "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
  1776
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1777
    ^ ImageSaveErrorSignal
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1778
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1779
    "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
  1780
!
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
informationLostQuerySignal
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1783
    "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
  1784
     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
  1785
     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
  1786
     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
  1787
     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
  1788
     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
  1789
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1790
    ^ InformationLostQuerySignal
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1791
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
  1792
    "Created: 27.2.1997 / 12:43:50 / cg"
2182
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  1793
!
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  1794
8175
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1795
noMaskButAlphaSupportedQuerySignal
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1796
    "return the (query-) signal, which is raised if some
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1797
     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
  1798
     the mask but instead supports an alpha channel.
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1799
     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
  1800
     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
  1801
     to proceed or abort the saving."
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1802
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1803
    ^ NoMaskButAlphaSupportedQuerySignal
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1804
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1805
    "Created: / 13-09-2017 / 09:31:28 / cg"
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1806
!
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1807
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1808
noMaskSupportedQuerySignal
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1809
    "return the (query-) signal, which is raised if some
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1810
     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
  1811
     the mask.
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1812
     If unhandled, the image-save proceeds (without mask).
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1813
     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
  1814
     to proceed or abort the saving."
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
    ^ NoMaskSupportedQuerySignal
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1817
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1818
    "Created: / 13-09-2017 / 09:30:35 / cg"
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1819
!
a6bf93e434e4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8169
diff changeset
  1820
2182
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  1821
unrepresentableColorSignal
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  1822
    "return the signal, which is raised if some color is not
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  1823
     representable in the image (when storing a pixel)."
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  1824
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  1825
    ^ UnrepresentableColorSignal
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  1826
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  1827
    "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
  1828
! !
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  1829
1230
279016623d5a resource release on display shutDown
Claus Gittinger <cg@exept.de>
parents: 1175
diff changeset
  1830
!Image class methodsFor:'cleanup'!
279016623d5a resource release on display shutDown
Claus Gittinger <cg@exept.de>
parents: 1175
diff changeset
  1831
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  1832
releaseResourcesOnDevice:aDevice
1230
279016623d5a resource release on display shutDown
Claus Gittinger <cg@exept.de>
parents: 1175
diff changeset
  1833
    "this is sent when a display connection is closed,
279016623d5a resource release on display shutDown
Claus Gittinger <cg@exept.de>
parents: 1175
diff changeset
  1834
     to release all cached Images from that device"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  1835
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  1836
    Lobby
7565
462e6f62c737 #FEATURE by stefan
Stefan Vogel <sv@exept.de>
parents: 7552
diff changeset
  1837
        unregisterAllForWhichHandle:[:eachImage |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1838
            |ok|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1839
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1840
            ok := eachImage graphicsDevice == aDevice.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1841
            ok ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1842
                eachImage releaseFromDevice
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1843
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1844
            ok
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1845
        ].
6390
f9a4a09ff2a1 class: Image
Stefan Vogel <sv@exept.de>
parents: 6379
diff changeset
  1846
7573
656c59bc93ad #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7565
diff changeset
  1847
    Icon notNil ifTrue:[
656c59bc93ad #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7565
diff changeset
  1848
        Icon releaseCachedIconsFromDevice:aDevice.
656c59bc93ad #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7565
diff changeset
  1849
    ].
656c59bc93ad #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7565
diff changeset
  1850
    MenuPanel notNil ifTrue:[
656c59bc93ad #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7565
diff changeset
  1851
        MenuPanel releaseCachedImagesFromDevice:aDevice.
656c59bc93ad #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7565
diff changeset
  1852
    ].
656c59bc93ad #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7565
diff changeset
  1853
656c59bc93ad #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7565
diff changeset
  1854
6390
f9a4a09ff2a1 class: Image
Stefan Vogel <sv@exept.de>
parents: 6379
diff changeset
  1855
    "
f9a4a09ff2a1 class: Image
Stefan Vogel <sv@exept.de>
parents: 6379
diff changeset
  1856
      self releaseResourcesOnDevice:Screen current
f9a4a09ff2a1 class: Image
Stefan Vogel <sv@exept.de>
parents: 6379
diff changeset
  1857
    "
1230
279016623d5a resource release on display shutDown
Claus Gittinger <cg@exept.de>
parents: 1175
diff changeset
  1858
279016623d5a resource release on display shutDown
Claus Gittinger <cg@exept.de>
parents: 1175
diff changeset
  1859
    "Created: 16.1.1997 / 19:30:44 / cg"
279016623d5a resource release on display shutDown
Claus Gittinger <cg@exept.de>
parents: 1175
diff changeset
  1860
    "Modified: 16.1.1997 / 19:33:49 / cg"
279016623d5a resource release on display shutDown
Claus Gittinger <cg@exept.de>
parents: 1175
diff changeset
  1861
! !
279016623d5a resource release on display shutDown
Claus Gittinger <cg@exept.de>
parents: 1175
diff changeset
  1862
1086
269243c32f69 added displayOpaque, for protocol completeness
Claus Gittinger <cg@exept.de>
parents: 1070
diff changeset
  1863
!Image class methodsFor:'file reading'!
650
14fc51fc3a4e comments
Claus Gittinger <cg@exept.de>
parents: 649
diff changeset
  1864
14fc51fc3a4e comments
Claus Gittinger <cg@exept.de>
parents: 649
diff changeset
  1865
fromFile:aFileName
14fc51fc3a4e comments
Claus Gittinger <cg@exept.de>
parents: 649
diff changeset
  1866
    "read an image from a file - this methods tries to find
14fc51fc3a4e comments
Claus Gittinger <cg@exept.de>
parents: 649
diff changeset
  1867
     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
  1868
     and lets the appropriate reader read the file.
6375
b31008047817 class: Image
Claus Gittinger <cg@exept.de>
parents: 6370
diff changeset
  1869
     Also, unless the path is absolute,
b31008047817 class: Image
Claus Gittinger <cg@exept.de>
parents: 6370
diff changeset
  1870
     all bitmap directories along the searchPath are checked
1143
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  1871
     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
  1872
     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
  1873
     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
  1874
     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
  1875
     proceed with some replacement image. If unhandled, nil is returned."
650
14fc51fc3a4e comments
Claus Gittinger <cg@exept.de>
parents: 649
diff changeset
  1876
8245
31034272db80 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8242
diff changeset
  1877
    |image fn nm inStream suffix mimeType readerClass
31034272db80 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8242
diff changeset
  1878
     decompressor readersErrorMsg|
650
14fc51fc3a4e comments
Claus Gittinger <cg@exept.de>
parents: 649
diff changeset
  1879
4159
d27c88bc4c79 Fix image reading
Stefan Vogel <sv@exept.de>
parents: 4158
diff changeset
  1880
    "before trying each reader, check if the file is readable"
d27c88bc4c79 Fix image reading
Stefan Vogel <sv@exept.de>
parents: 4158
diff changeset
  1881
6532
f50614a23989 class: Image
Stefan Vogel <sv@exept.de>
parents: 6507
diff changeset
  1882
    fn := aFileName asFilename.
f50614a23989 class: Image
Stefan Vogel <sv@exept.de>
parents: 6507
diff changeset
  1883
    fn isAbsolute ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1884
        inStream := Smalltalk systemFileStreamFor:fn.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1885
        inStream isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1886
            inStream := Smalltalk bitmapFileStreamFor:fn.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1887
            inStream isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1888
                "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
  1889
                 However, a handler may provide a replacement image."
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1890
                ^ ImageNotFoundQuerySignal
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1891
                            raiseRequestWith:fn
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1892
                            errorString:('Image: ''' , fn pathName, ''' does not exist or is not readable').
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1893
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1894
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1895
        fn := inStream pathName asFilename.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1896
        inStream close.
4843
36621a8aafd5 care for absolute filename when loading an image
Claus Gittinger <cg@exept.de>
parents: 4793
diff changeset
  1897
    ].
650
14fc51fc3a4e comments
Claus Gittinger <cg@exept.de>
parents: 649
diff changeset
  1898
4158
930761d24ab2 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4156
diff changeset
  1899
    nm := fn name.
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1900
    suffix := fn suffix.
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1901
4159
d27c88bc4c79 Fix image reading
Stefan Vogel <sv@exept.de>
parents: 4158
diff changeset
  1902
    "handle compressed-suffix"
8245
31034272db80 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8242
diff changeset
  1903
    mimeType := MIMETypes mimeTypeForSuffix:suffix.
8287
d6e2901d99f9 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8282
diff changeset
  1904
    "/ 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
  1905
    ((mimeType = 'application/x-gzip-compressed') or:[mimeType = 'application/gzip']) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1906
        |baseFn|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1907
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1908
        baseFn := fn withoutSuffix.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1909
        nm := baseFn name.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1910
        suffix := baseFn suffix.
8245
31034272db80 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8242
diff changeset
  1911
        decompressor := ZipStream.
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1912
    ].
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1913
    suffix isEmpty ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1914
        suffix := nm.
1774
4241f730e0a6 fixed gunzipped image reading;
Claus Gittinger <cg@exept.de>
parents: 1771
diff changeset
  1915
    ].
4241f730e0a6 fixed gunzipped image reading;
Claus Gittinger <cg@exept.de>
parents: 1771
diff changeset
  1916
6507
05fb9b9d9e53 class: Image
Claus Gittinger <cg@exept.de>
parents: 6496
diff changeset
  1917
    "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
  1918
    readerClass := MIMETypes imageReaderForSuffix:suffix.
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  1919
    readerClass notNil ifTrue:[
8245
31034272db80 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8242
diff changeset
  1920
        decompressor notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1921
            |zipStream|
8245
31034272db80 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8242
diff changeset
  1922
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1923
            inStream := fn readStream.
8245
31034272db80 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8242
diff changeset
  1924
            zipStream := decompressor readOpenOn:inStream suppressHeaderAndChecksum:true.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1925
            zipStream notNil ifTrue:[
8245
31034272db80 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8242
diff changeset
  1926
                image := 
31034272db80 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8242
diff changeset
  1927
                    [
31034272db80 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8242
diff changeset
  1928
                        readerClass fromStream:zipStream.
31034272db80 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8242
diff changeset
  1929
                    ] ensure:[
31034272db80 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8242
diff changeset
  1930
                        zipStream close.
31034272db80 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8242
diff changeset
  1931
                        inStream close.
31034272db80 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8242
diff changeset
  1932
                    ].
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1933
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1934
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1935
            BadImageFormatQuerySignal handle:[:ex |
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  1936
                BadImageFormatQuerySignal isHandled ifTrue:[
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  1937
                    ex reject
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  1938
                ].
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  1939
                readersErrorMsg := ex description.
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  1940
                Logger warning:readersErrorMsg.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1941
                image := nil.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1942
                ex return.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1943
            ] do:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1944
                image := readerClass fromFile:fn.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1945
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1946
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1947
        image notNil ifTrue:[^ image].
4159
d27c88bc4c79 Fix image reading
Stefan Vogel <sv@exept.de>
parents: 4158
diff changeset
  1948
    ].
d27c88bc4c79 Fix image reading
Stefan Vogel <sv@exept.de>
parents: 4158
diff changeset
  1949
d27c88bc4c79 Fix image reading
Stefan Vogel <sv@exept.de>
parents: 4158
diff changeset
  1950
    (readerClass isNil or:[readersErrorMsg notNil]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1951
        "no known extension (or wrong extension)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1952
         - ask all readers if they know this format ...
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1953
         ... these look into the file, and investigate the header.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1954
         therefore, it takes a bit longer."
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1955
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1956
        MIMETypes imageReaderClasses do:[:mimeReaderClass |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1957
            (mimeReaderClass notNil
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1958
            and:[mimeReaderClass ~~ readerClass]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1959
               (mimeReaderClass isValidImageFile:fn) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1960
                    image := mimeReaderClass fromFile:fn.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1961
                    image notNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1962
                        ^ image
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1963
                    ]
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
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1966
        ].
4159
d27c88bc4c79 Fix image reading
Stefan Vogel <sv@exept.de>
parents: 4158
diff changeset
  1967
    ].
d27c88bc4c79 Fix image reading
Stefan Vogel <sv@exept.de>
parents: 4158
diff changeset
  1968
7175
4bd37cf4075e #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7173
diff changeset
  1969
    (fn exists and:[fn isReadable]) ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1970
        ^ ImageNotFoundQuerySignal
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1971
                    raiseRequestWith:fn
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1972
                    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
  1973
    ].
61933c223183 added metaData instVar (for free use by image reader)
Claus Gittinger <cg@exept.de>
parents: 7363
diff changeset
  1974
4159
d27c88bc4c79 Fix image reading
Stefan Vogel <sv@exept.de>
parents: 4158
diff changeset
  1975
    "nope - unknown format
d27c88bc4c79 Fix image reading
Stefan Vogel <sv@exept.de>
parents: 4158
diff changeset
  1976
     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
  1977
     However, a handler may provide a replacement image."
d27c88bc4c79 Fix image reading
Stefan Vogel <sv@exept.de>
parents: 4158
diff changeset
  1978
3656
11670e0e6fcb invalid format notification fixed
Claus Gittinger <cg@exept.de>
parents: 3623
diff changeset
  1979
    ^ BadImageFormatQuerySignal
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1980
        raiseRequestWith:fn
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  1981
        errorString:(readersErrorMsg ? ('Image: unknown image file format: ''' , fn pathName , '''')).
4159
d27c88bc4c79 Fix image reading
Stefan Vogel <sv@exept.de>
parents: 4158
diff changeset
  1982
d27c88bc4c79 Fix image reading
Stefan Vogel <sv@exept.de>
parents: 4158
diff changeset
  1983
    "
6532
f50614a23989 class: Image
Stefan Vogel <sv@exept.de>
parents: 6507
diff changeset
  1984
     Image fromFile:'bitmaps/gifImages/claus.gif' inPackage:'stx:goodies'
f50614a23989 class: Image
Stefan Vogel <sv@exept.de>
parents: 6507
diff changeset
  1985
     Image fromFile:'bitmaps/gifImages/garfield.gif' inPackage:'stx:goodies'
f50614a23989 class: Image
Stefan Vogel <sv@exept.de>
parents: 6507
diff changeset
  1986
f50614a23989 class: Image
Stefan Vogel <sv@exept.de>
parents: 6507
diff changeset
  1987
     Image fromFile:'bitmaps/winBitmaps/a11.ico' inPackage:'stx:goodies'
f50614a23989 class: Image
Stefan Vogel <sv@exept.de>
parents: 6507
diff changeset
  1988
     Image fromFile:'bitmaps/xpmBitmaps/countries/czech.xpm' inPackage:'stx:goodies'
f50614a23989 class: Image
Stefan Vogel <sv@exept.de>
parents: 6507
diff changeset
  1989
     Image fromFile:'bitmaps/xpmBitmaps/countries/czech.xpm.gz' inPackage:'stx:goodies'
f50614a23989 class: Image
Stefan Vogel <sv@exept.de>
parents: 6507
diff changeset
  1990
     Image fromFile:'Demos/bitmaps/hello_world.icon' inPackage:'stx:clients'
650
14fc51fc3a4e comments
Claus Gittinger <cg@exept.de>
parents: 649
diff changeset
  1991
    "
14fc51fc3a4e comments
Claus Gittinger <cg@exept.de>
parents: 649
diff changeset
  1992
1156
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  1993
    "
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  1994
     Image fromFile:'fooBar'
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  1995
    "
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  1996
1774
4241f730e0a6 fixed gunzipped image reading;
Claus Gittinger <cg@exept.de>
parents: 1771
diff changeset
  1997
    "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
  1998
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  1999
     Image imageNotFoundQuerySignal
1156
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  2000
     handle:[:ex |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2001
        Transcript showCR:ex description.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2002
        ex proceedWith:nil
1156
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  2003
     ] do:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2004
         Image fromFile:'fooBar'
1156
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  2005
     ]
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  2006
    "
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  2007
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  2008
    "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
  2009
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2010
     Image imageNotFoundQuerySignal
4160
6d31e4e6a432 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4159
diff changeset
  2011
     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
  2012
     do:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2013
         Image fromFile:'fooBar'
1156
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  2014
     ]
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  2015
    "
71ded63a3fae dont output a message for non-existing images;
Claus Gittinger <cg@exept.de>
parents: 1143
diff changeset
  2016
4843
36621a8aafd5 care for absolute filename when loading an image
Claus Gittinger <cg@exept.de>
parents: 4793
diff changeset
  2017
    "Modified: / 19-11-2007 / 15:50:52 / cg"
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  2018
    "Modified: / 31-01-2017 / 15:56:14 / stefan"
1051
5605bf1b10b9 allow reading from Streams
Claus Gittinger <cg@exept.de>
parents: 1043
diff changeset
  2019
!
5605bf1b10b9 allow reading from Streams
Claus Gittinger <cg@exept.de>
parents: 1043
diff changeset
  2020
3426
ebd06c83448e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3389
diff changeset
  2021
fromFile:aFileName inPackage:aPackage
ebd06c83448e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3389
diff changeset
  2022
    "read an image for a package from a file.
ebd06c83448e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3389
diff changeset
  2023
     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
  2024
     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
  2025
     and lets the appropriate reader read the file.
ebd06c83448e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3389
diff changeset
  2026
     Also, all bitmap directories along the searchPath are checked
ebd06c83448e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3389
diff changeset
  2027
     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
  2028
     separate directory, thereby overriding system bitmaps easily.
ebd06c83448e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3389
diff changeset
  2029
     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
  2030
     the ImageNotFoundQuerySignal is raised, which may be handled to
ebd06c83448e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3389
diff changeset
  2031
     proceed with some replacement image. If unhandled, nil is returned."
ebd06c83448e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3389
diff changeset
  2032
ebd06c83448e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3389
diff changeset
  2033
    ^ Smalltalk imageFromFileNamed:aFileName inPackage:aPackage
ebd06c83448e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3389
diff changeset
  2034
ebd06c83448e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3389
diff changeset
  2035
    "
4168
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
  2036
     Image fromFile:'libtool/bitmaps/SBrowser.xbm'
3426
ebd06c83448e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3389
diff changeset
  2037
     Image fromFile:'bitmaps/SBrowser.xbm' inPackage:'stx:libtool'
ebd06c83448e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3389
diff changeset
  2038
     Image fromFile:'garfield.gif' inPackage:'stx:goodies/bitmaps/gifImages'
ebd06c83448e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3389
diff changeset
  2039
    "
ebd06c83448e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3389
diff changeset
  2040
!
ebd06c83448e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3389
diff changeset
  2041
1143
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2042
fromFile:aFileName on:aDevice
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2043
    "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
  2044
     Return nil (or whatever a handler returned),
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2045
     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
  2046
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2047
    |img|
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2048
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2049
    img := self fromFile:aFileName.
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2050
    img notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2051
        ^ img onDevice:aDevice
1143
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2052
    ].
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2053
    ^ nil
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2054
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2055
    "Modified: 1.2.1997 / 14:48:07 / cg"
1143
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2056
!
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2057
1139
416e6abb408f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
  2058
fromFile:aFileName resolution:res
416e6abb408f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
  2059
    "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
  2060
     as appropriate (only req'd for very high resolution displays).
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2061
     Return nil (or whatever a handler returned),
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2062
     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
  2063
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2064
    ^ self fromFile:aFileName resolution:res on:nil
1139
416e6abb408f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
  2065
416e6abb408f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
  2066
    "Created: 19.12.1996 / 14:02:13 / cg"
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2067
    "Modified: 1.2.1997 / 14:48:16 / cg"
1139
416e6abb408f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
  2068
!
416e6abb408f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
  2069
1143
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2070
fromFile:aFileName resolution:dpi on:aDevice
1139
416e6abb408f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
  2071
    "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
  2072
     as appropriate (only req'd with very high resolution displays).
1143
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2073
     Prepare a device representation.
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2074
     Return nil (or whatever a handler returned),
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2075
     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
  2076
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2077
    |img dev dpiH mag|
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2078
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2079
    img := self fromFile:aFileName.
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2080
    img isNil ifTrue:[^ nil].
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2081
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2082
    "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
  2083
    dev := aDevice.
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2084
    dev isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2085
        "should not happen ..."
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2086
        dev := Screen current
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
3059
0895d23678ac assume 90dpi in #fromFile:resolution: if there is no current display
Claus Gittinger <cg@exept.de>
parents: 3038
diff changeset
  2089
    dev notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2090
        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
  2091
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2092
        dpiH := 90
3059
0895d23678ac assume 90dpi in #fromFile:resolution: if there is no current display
Claus Gittinger <cg@exept.de>
parents: 3038
diff changeset
  2093
    ].
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  2094
    (dpi between:(dpiH * 0.75) and:(dpiH * 1.5)) ifTrue:[
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  2095
        ^ img
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  2096
    ].
1143
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2097
    mag := (dpiH / dpi) rounded.
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2098
    mag = 0 ifTrue:[^ img].
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2099
    mag = 1 ifTrue:[^ img].
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2100
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2101
    img := img magnifiedBy:(mag @ mag).
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2102
    aDevice notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2103
        ^ img onDevice:aDevice
1143
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2104
    ].
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  2105
    ^ img
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2106
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  2107
    "Modified: / 01-02-1997 / 14:48:20 / cg"
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  2108
    "Modified (format): / 31-01-2017 / 15:06:23 / stefan"
1139
416e6abb408f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
  2109
!
416e6abb408f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
  2110
1051
5605bf1b10b9 allow reading from Streams
Claus Gittinger <cg@exept.de>
parents: 1043
diff changeset
  2111
fromStream:aStream
5605bf1b10b9 allow reading from Streams
Claus Gittinger <cg@exept.de>
parents: 1043
diff changeset
  2112
    "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
  2113
     out the file format itself (by contents)
5605bf1b10b9 allow reading from Streams
Claus Gittinger <cg@exept.de>
parents: 1043
diff changeset
  2114
     and lets the appropriate reader read the file.
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2115
     To do this, the stream must be positionable.
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2116
     Return nil (or whatever a handler returned),
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2117
     if the stream does not contain an appropriate image."
1051
5605bf1b10b9 allow reading from Streams
Claus Gittinger <cg@exept.de>
parents: 1043
diff changeset
  2118
1063
ba1bf8091bc1 unused variable cleanup
Claus Gittinger <cg@exept.de>
parents: 1057
diff changeset
  2119
    |image|
1051
5605bf1b10b9 allow reading from Streams
Claus Gittinger <cg@exept.de>
parents: 1043
diff changeset
  2120
5605bf1b10b9 allow reading from Streams
Claus Gittinger <cg@exept.de>
parents: 1043
diff changeset
  2121
    "
5605bf1b10b9 allow reading from Streams
Claus Gittinger <cg@exept.de>
parents: 1043
diff changeset
  2122
     ask all readers if they know
5605bf1b10b9 allow reading from Streams
Claus Gittinger <cg@exept.de>
parents: 1043
diff changeset
  2123
     this format ...
5605bf1b10b9 allow reading from Streams
Claus Gittinger <cg@exept.de>
parents: 1043
diff changeset
  2124
    "
1799
054302440308 moved all mime-knowledge to MIMETypes
Claus Gittinger <cg@exept.de>
parents: 1786
diff changeset
  2125
    MIMETypes imageReaderClasses do:[:readerClass |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2126
        readerClass notNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2127
            image := readerClass fromStream:aStream.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2128
            image notNil ifTrue:[^ image].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2129
        ]
1051
5605bf1b10b9 allow reading from Streams
Claus Gittinger <cg@exept.de>
parents: 1043
diff changeset
  2130
    ].
5605bf1b10b9 allow reading from Streams
Claus Gittinger <cg@exept.de>
parents: 1043
diff changeset
  2131
5605bf1b10b9 allow reading from Streams
Claus Gittinger <cg@exept.de>
parents: 1043
diff changeset
  2132
    "
5605bf1b10b9 allow reading from Streams
Claus Gittinger <cg@exept.de>
parents: 1043
diff changeset
  2133
     nope - unknown format
5605bf1b10b9 allow reading from Streams
Claus Gittinger <cg@exept.de>
parents: 1043
diff changeset
  2134
    "
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2135
"/    'Image [info]: unknown image file format in stream: ' infoPrintCR.
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2136
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2137
    ^ ImageNotFoundQuerySignal
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2138
                raiseRequestWith:aStream
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2139
                errorString:('Image [warning]: unknown image file format in stream').
4168
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
  2140
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
  2141
    "
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
  2142
     Image fromFile:'goodies/bitmaps/gifImages/claus.gif'
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
  2143
     Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
  2144
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
  2145
     Image fromFile:'clients/Animation/bitmaps/globe1.xbm'
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
  2146
     Image fromFile:'clients/Animation/bitmaps/globe1.xbm.Z'
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
  2147
     Image fromFile:'clients/Demos/bitmaps/hello_world.icon'
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
  2148
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
  2149
     Image fromFile:'librun/stx.ico'
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
  2150
     Image fromFile:'libwidg3/bitmaps/wall.tiff'
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
  2151
3476
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
  2152
     Image fromFile:'goodies/bitmaps/test.fax'
4168
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
  2153
     Image fromFile:'fileIn/bitmaps/founders.im8'
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
  2154
     Image fromFile:'goodies/faces/next.com/steve.face'
1051
5605bf1b10b9 allow reading from Streams
Claus Gittinger <cg@exept.de>
parents: 1043
diff changeset
  2155
    "
5605bf1b10b9 allow reading from Streams
Claus Gittinger <cg@exept.de>
parents: 1043
diff changeset
  2156
5605bf1b10b9 allow reading from Streams
Claus Gittinger <cg@exept.de>
parents: 1043
diff changeset
  2157
    "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
  2158
    "Modified: 30.6.1997 / 22:03:59 / cg"
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2159
!
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2160
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2161
fromStream:aStream using:aReaderClass
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2162
    "read an image from a stream, given an imageReaderClass.
6507
05fb9b9d9e53 class: Image
Claus Gittinger <cg@exept.de>
parents: 6496
diff changeset
  2163
     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
  2164
     extension (or non-definite header), so #fromStream: could not
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2165
     find out the images format.
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2166
     Return nil (or whatever a handler returned),
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2167
     if the stream does not contain an appropriate image."
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2168
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2169
    |image|
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2170
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2171
    image := aReaderClass fromStream:aStream.
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2172
    image notNil ifTrue:[^ image].
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2173
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2174
    "
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2175
     nope - unknown format
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2176
    "
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2177
"/    'Image [info]: unknown image file format in stream: ' infoPrintCR.
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2178
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2179
    ^ ImageNotFoundQuerySignal
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2180
                raiseRequestWith:aStream
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2181
                errorString:('Image: unknown image file format in stream').
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2182
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2183
    "Created: 1.2.1997 / 14:46:20 / cg"
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2184
    "Modified: 1.2.1997 / 14:48:53 / cg"
650
14fc51fc3a4e comments
Claus Gittinger <cg@exept.de>
parents: 649
diff changeset
  2185
! !
14fc51fc3a4e comments
Claus Gittinger <cg@exept.de>
parents: 649
diff changeset
  2186
1086
269243c32f69 added displayOpaque, for protocol completeness
Claus Gittinger <cg@exept.de>
parents: 1070
diff changeset
  2187
!Image class methodsFor:'misc'!
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2188
7898
05e286976596 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7895
diff changeset
  2189
bytesPerRowForWidth:width bitsPerPixel:bitsPerPixel
7899
c32cbefff86a #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7898
diff changeset
  2190
    "return the number of bytes in one scanline of an image.
c32cbefff86a #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7898
diff changeset
  2191
     (if there is no padding (except byte padding)"
7898
05e286976596 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7895
diff changeset
  2192
05e286976596 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7895
diff changeset
  2193
    |bitsPerRow bytesPerRow|
05e286976596 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7895
diff changeset
  2194
05e286976596 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7895
diff changeset
  2195
    bitsPerRow := width * bitsPerPixel.
05e286976596 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7895
diff changeset
  2196
    bytesPerRow := bitsPerRow // 8.
05e286976596 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7895
diff changeset
  2197
    ((bitsPerRow \\ 8) ~~ 0) ifTrue:[
05e286976596 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7895
diff changeset
  2198
        bytesPerRow := bytesPerRow + 1
05e286976596 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7895
diff changeset
  2199
    ].
05e286976596 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7895
diff changeset
  2200
    ^ bytesPerRow
05e286976596 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7895
diff changeset
  2201
05e286976596 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7895
diff changeset
  2202
    "Created: / 16-02-2017 / 16:17:42 / cg"
7899
c32cbefff86a #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7898
diff changeset
  2203
    "Modified (comment): / 16-02-2017 / 17:31:20 / cg"
7898
05e286976596 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7895
diff changeset
  2204
!
05e286976596 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7895
diff changeset
  2205
879
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  2206
ditherAlgorithm
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2207
    "return the way we dither -
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2208
        #threshold, or nil        -> no dither
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2209
        #pattern, or #ordered     -> orderedDither (ugly, but fast)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2210
        #error or #floydSteinberg -> errorDiffusion; much better
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2211
        #burkes                   -> errorDiffusion; even better."
879
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  2212
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  2213
    ^ DitherAlgorithm
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  2214
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  2215
    "Created: 17.6.1996 / 18:57:47 / cg"
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  2216
!
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  2217
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  2218
ditherAlgorithm:aSymbol
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2219
    "define how to dither -
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2220
        #threshold, or nil        -> no dither
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2221
        #pattern, or #ordered     -> orderedDither (ugly, but fast)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2222
        #error or #floydSteinberg -> errorDiffusion; much better
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2223
        #burkes                   -> errorDiffusion; even better."
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2224
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2225
    DitherAlgorithm := aSymbol
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2226
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  2227
    "
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  2228
     Image dither:#pattern
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  2229
     Image dither:#floydSteinberg
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  2230
     Image dither:#burkes
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  2231
     Image dither:nil
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  2232
    "
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  2233
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  2234
    "Modified: 10.6.1996 / 12:27:09 / cg"
879
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  2235
    "Created: 17.6.1996 / 18:57:19 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2236
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2237
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2238
numberOfDitherColors:n
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2239
    "define how many colors (i.e. patterns) to use when
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2240
     doing a pattern dither"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2241
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2242
    NumberOfDitherColors := n
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2243
!
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2244
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2245
orderedDitherMatrixOfSize:sz
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2246
    sz == 2 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2247
        ^ #[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2248
                0 2
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2249
                3 1
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2250
           ].
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2251
    ].
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2252
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2253
    sz == 4 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2254
        ^ #[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2255
                 0  8  2 10
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2256
                12  4 14  6
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2257
                 3 11  1  9
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2258
                15  7 13  5
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2259
           ].
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2260
    ].
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2261
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2262
    sz == 8 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2263
        ^  #[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2264
                0 32  8 40    2 34 10 42
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2265
               48 16 56 24   50 18 58 26
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2266
               12 44  4 36   14 46  6 38
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2267
               60 28 52 20   62 30 54 22
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2268
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2269
                3 35 11 43    1 33  9 41
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2270
               51 19 59 27   49 17 57 25
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2271
               15 47  7 39   13 45  5 37
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2272
               63 31 55 23   61 29 53 21
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
    ^ nil
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2277
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2278
    "Created: 7.6.1996 / 14:15:05 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2279
! !
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2280
1086
269243c32f69 added displayOpaque, for protocol completeness
Claus Gittinger <cg@exept.de>
parents: 1070
diff changeset
  2281
!Image class methodsFor:'queries'!
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2282
2005
525f712084b3 oops - padding stuff was wrong (16-bit display)
tz
parents: 2001
diff changeset
  2283
bytesPerRowForWidth:width depth:bitsPerPixel padding:padding
525f712084b3 oops - padding stuff was wrong (16-bit display)
tz
parents: 2001
diff changeset
  2284
    "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
  2285
     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
  2286
525f712084b3 oops - padding stuff was wrong (16-bit display)
tz
parents: 2001
diff changeset
  2287
    |bitsPerRow paddedUnitsPerRow|
525f712084b3 oops - padding stuff was wrong (16-bit display)
tz
parents: 2001
diff changeset
  2288
525f712084b3 oops - padding stuff was wrong (16-bit display)
tz
parents: 2001
diff changeset
  2289
    bitsPerRow := width * bitsPerPixel.
525f712084b3 oops - padding stuff was wrong (16-bit display)
tz
parents: 2001
diff changeset
  2290
    paddedUnitsPerRow := bitsPerRow // padding.
525f712084b3 oops - padding stuff was wrong (16-bit display)
tz
parents: 2001
diff changeset
  2291
    ((bitsPerRow \\ padding) ~~ 0) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2292
        paddedUnitsPerRow := paddedUnitsPerRow + 1
2005
525f712084b3 oops - padding stuff was wrong (16-bit display)
tz
parents: 2001
diff changeset
  2293
    ].
525f712084b3 oops - padding stuff was wrong (16-bit display)
tz
parents: 2001
diff changeset
  2294
    ^ paddedUnitsPerRow * (padding // 8)
525f712084b3 oops - padding stuff was wrong (16-bit display)
tz
parents: 2001
diff changeset
  2295
5126
d3f2baf80581 color conversions fixed (16bit images)
Claus Gittinger <cg@exept.de>
parents: 5074
diff changeset
  2296
    "
d3f2baf80581 color conversions fixed (16bit images)
Claus Gittinger <cg@exept.de>
parents: 5074
diff changeset
  2297
     self bytesPerRowForWidth:7 depth:1 padding:8
d3f2baf80581 color conversions fixed (16bit images)
Claus Gittinger <cg@exept.de>
parents: 5074
diff changeset
  2298
     self bytesPerRowForWidth:7 depth:1 padding:16
d3f2baf80581 color conversions fixed (16bit images)
Claus Gittinger <cg@exept.de>
parents: 5074
diff changeset
  2299
     self bytesPerRowForWidth:7 depth:1 padding:32
d3f2baf80581 color conversions fixed (16bit images)
Claus Gittinger <cg@exept.de>
parents: 5074
diff changeset
  2300
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 6037
diff changeset
  2301
     self bytesPerRowForWidth:15 depth:1 padding:8
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 6037
diff changeset
  2302
     self bytesPerRowForWidth:15 depth:1 padding:16
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 6037
diff changeset
  2303
     self bytesPerRowForWidth:15 depth:1 padding:32
5126
d3f2baf80581 color conversions fixed (16bit images)
Claus Gittinger <cg@exept.de>
parents: 5074
diff changeset
  2304
    "
2005
525f712084b3 oops - padding stuff was wrong (16-bit display)
tz
parents: 2001
diff changeset
  2305
!
525f712084b3 oops - padding stuff was wrong (16-bit display)
tz
parents: 2001
diff changeset
  2306
6797
161685b0d113 class: Image
Claus Gittinger <cg@exept.de>
parents: 6755
diff changeset
  2307
defaultImageFileWriter
161685b0d113 class: Image
Claus Gittinger <cg@exept.de>
parents: 6755
diff changeset
  2308
    "only used, if a file is saved with no particular extension
161685b0d113 class: Image
Claus Gittinger <cg@exept.de>
parents: 6755
diff changeset
  2309
     or explicit writer given.
161685b0d113 class: Image
Claus Gittinger <cg@exept.de>
parents: 6755
diff changeset
  2310
     For now, default to tiff format.
161685b0d113 class: Image
Claus Gittinger <cg@exept.de>
parents: 6755
diff changeset
  2311
     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
  2312
161685b0d113 class: Image
Claus Gittinger <cg@exept.de>
parents: 6755
diff changeset
  2313
    ^ TIFFReader
161685b0d113 class: Image
Claus Gittinger <cg@exept.de>
parents: 6755
diff changeset
  2314
!
161685b0d113 class: Image
Claus Gittinger <cg@exept.de>
parents: 6755
diff changeset
  2315
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  2316
defaultPhotometric
6311
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
  2317
    "return the default photometric pixel interpretation.
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
  2318
     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
  2319
     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
  2320
     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
  2321
     - 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
  2322
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  2323
    ^ #blackIs0
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  2324
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  2325
    "Modified: 20.4.1996 / 23:40:41 / cg"
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  2326
    "Created: 10.6.1996 / 18:08:12 / cg"
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  2327
!
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  2328
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2329
imageDepth
579
e381761190c4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 518
diff changeset
  2330
    "return the depth of images represented by instances of
e381761190c4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 518
diff changeset
  2331
     this class.
e381761190c4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 518
diff changeset
  2332
     Must be redefined in concrete subclasses"
e381761190c4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 518
diff changeset
  2333
2913
c51ac85e9aa2 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2891
diff changeset
  2334
    ^ self subclassResponsibility
579
e381761190c4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 518
diff changeset
  2335
e381761190c4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 518
diff changeset
  2336
    "Modified: 20.4.1996 / 23:40:41 / cg"
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  2337
!
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  2338
1306
d56585b0e8c0 checkin from browser
ca
parents: 1289
diff changeset
  2339
imageFileSuffixes
d56585b0e8c0 checkin from browser
ca
parents: 1289
diff changeset
  2340
    "return a collection of suffixes which are recognized as image-file suffix"
d56585b0e8c0 checkin from browser
ca
parents: 1289
diff changeset
  2341
1799
054302440308 moved all mime-knowledge to MIMETypes
Claus Gittinger <cg@exept.de>
parents: 1786
diff changeset
  2342
    ^ MIMETypes imageFileSuffixes
1306
d56585b0e8c0 checkin from browser
ca
parents: 1289
diff changeset
  2343
d56585b0e8c0 checkin from browser
ca
parents: 1289
diff changeset
  2344
    "
d56585b0e8c0 checkin from browser
ca
parents: 1289
diff changeset
  2345
     Image imageFileSuffixes
d56585b0e8c0 checkin from browser
ca
parents: 1289
diff changeset
  2346
    "
1799
054302440308 moved all mime-knowledge to MIMETypes
Claus Gittinger <cg@exept.de>
parents: 1786
diff changeset
  2347
054302440308 moved all mime-knowledge to MIMETypes
Claus Gittinger <cg@exept.de>
parents: 1786
diff changeset
  2348
    "Modified: 30.6.1997 / 22:04:39 / cg"
1306
d56585b0e8c0 checkin from browser
ca
parents: 1289
diff changeset
  2349
!
d56585b0e8c0 checkin from browser
ca
parents: 1289
diff changeset
  2350
1783
7a487f0d4000 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1782
diff changeset
  2351
imageReaderClassForMIME:mimeType
7a487f0d4000 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1782
diff changeset
  2352
    "return an appropriate imageReader class for a given mime type;
7a487f0d4000 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1782
diff changeset
  2353
     nil if there is none (or it did not install itself)"
7a487f0d4000 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1782
diff changeset
  2354
1801
3dff7fb2bd59 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1800
diff changeset
  2355
    ^ MIMETypes imageReaderForType:mimeType
1783
7a487f0d4000 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1782
diff changeset
  2356
7a487f0d4000 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1782
diff changeset
  2357
    "
7a487f0d4000 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1782
diff changeset
  2358
     Image imageReaderClassForMIME:'image/tiff'
7a487f0d4000 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1782
diff changeset
  2359
     Image imageReaderClassForMIME:'image/x-portable-pixmap'
7a487f0d4000 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1782
diff changeset
  2360
    "
7a487f0d4000 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1782
diff changeset
  2361
7a487f0d4000 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1782
diff changeset
  2362
    "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
  2363
    "Modified: 30.6.1997 / 21:54:10 / cg"
1783
7a487f0d4000 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1782
diff changeset
  2364
!
7a487f0d4000 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1782
diff changeset
  2365
1572
029910ee5c9e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1570
diff changeset
  2366
imageReaderClassForSuffix:aSuffix
1783
7a487f0d4000 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1782
diff changeset
  2367
    "return an appropriate imageReader class for a given file-suffix;
7a487f0d4000 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1782
diff changeset
  2368
     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
  2369
1799
054302440308 moved all mime-knowledge to MIMETypes
Claus Gittinger <cg@exept.de>
parents: 1786
diff changeset
  2370
    ^ MIMETypes imageReaderForSuffix:aSuffix
1572
029910ee5c9e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1570
diff changeset
  2371
029910ee5c9e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1570
diff changeset
  2372
    "
029910ee5c9e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1570
diff changeset
  2373
     Image imageReaderClassForSuffix:'tiff'
1783
7a487f0d4000 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1782
diff changeset
  2374
     Image imageReaderClassForSuffix:'foo'
7a487f0d4000 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1782
diff changeset
  2375
    "
7a487f0d4000 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1782
diff changeset
  2376
1799
054302440308 moved all mime-knowledge to MIMETypes
Claus Gittinger <cg@exept.de>
parents: 1786
diff changeset
  2377
    "Modified: 30.6.1997 / 22:05:14 / cg"
1572
029910ee5c9e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1570
diff changeset
  2378
!
029910ee5c9e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1570
diff changeset
  2379
399
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
  2380
implementorForDepth:depth
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2381
    "return the class, which best implements images of depth"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2382
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2383
    depth == 1 ifTrue:[^ Depth1Image].
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2384
    depth == 2 ifTrue:[^ Depth2Image].
1623
56c2fd4250c8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1611
diff changeset
  2385
    depth <= 4 ifTrue:[^ Depth4Image].
56c2fd4250c8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1611
diff changeset
  2386
    depth <= 8 ifTrue:[^ Depth8Image].
56c2fd4250c8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1611
diff changeset
  2387
    depth <= 16 ifTrue:[^ Depth16Image].
56c2fd4250c8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1611
diff changeset
  2388
    depth <= 24 ifTrue:[^ Depth24Image].
1664
42b1af0353c2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1662
diff changeset
  2389
    depth <= 32 ifTrue:[^ Depth32Image].
5299
6b1d1dcf5c85 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5237
diff changeset
  2390
    depth <= 48 ifTrue:[^ Depth48Image].
5313
7c40ea0163ee *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5299
diff changeset
  2391
    depth <= 64 ifTrue:[^ Depth64Image].
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2392
    ^ self
1664
42b1af0353c2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1662
diff changeset
  2393
42b1af0353c2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1662
diff changeset
  2394
    "Modified: 24.4.1997 / 19:04:52 / cg"
1611
8ec019a529b4 added convenient #isImageFileSuffix:
Claus Gittinger <cg@exept.de>
parents: 1608
diff changeset
  2395
!
8ec019a529b4 added convenient #isImageFileSuffix:
Claus Gittinger <cg@exept.de>
parents: 1608
diff changeset
  2396
7795
490b3691a124 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7755
diff changeset
  2397
isAbstract
490b3691a124 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7755
diff changeset
  2398
    ^ self == Image
490b3691a124 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7755
diff changeset
  2399
!
490b3691a124 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7755
diff changeset
  2400
1611
8ec019a529b4 added convenient #isImageFileSuffix:
Claus Gittinger <cg@exept.de>
parents: 1608
diff changeset
  2401
isImageFileSuffix:aSuffix
8ec019a529b4 added convenient #isImageFileSuffix:
Claus Gittinger <cg@exept.de>
parents: 1608
diff changeset
  2402
    "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
  2403
8ec019a529b4 added convenient #isImageFileSuffix:
Claus Gittinger <cg@exept.de>
parents: 1608
diff changeset
  2404
     ^ self imageFileSuffixes includes:(aSuffix asLowercase)
8ec019a529b4 added convenient #isImageFileSuffix:
Claus Gittinger <cg@exept.de>
parents: 1608
diff changeset
  2405
8ec019a529b4 added convenient #isImageFileSuffix:
Claus Gittinger <cg@exept.de>
parents: 1608
diff changeset
  2406
    "
8ec019a529b4 added convenient #isImageFileSuffix:
Claus Gittinger <cg@exept.de>
parents: 1608
diff changeset
  2407
     Image isImageFileSuffix:'gif'
8ec019a529b4 added convenient #isImageFileSuffix:
Claus Gittinger <cg@exept.de>
parents: 1608
diff changeset
  2408
     Image isImageFileSuffix:'xbm'
8ec019a529b4 added convenient #isImageFileSuffix:
Claus Gittinger <cg@exept.de>
parents: 1608
diff changeset
  2409
     Image isImageFileSuffix:'foo'
8ec019a529b4 added convenient #isImageFileSuffix:
Claus Gittinger <cg@exept.de>
parents: 1608
diff changeset
  2410
    "
8ec019a529b4 added convenient #isImageFileSuffix:
Claus Gittinger <cg@exept.de>
parents: 1608
diff changeset
  2411
8ec019a529b4 added convenient #isImageFileSuffix:
Claus Gittinger <cg@exept.de>
parents: 1608
diff changeset
  2412
    "Created: 18.4.1997 / 14:55:28 / cg"
1786
302b8208bf6c more mime stuff
Claus Gittinger <cg@exept.de>
parents: 1785
diff changeset
  2413
!
302b8208bf6c more mime stuff
Claus Gittinger <cg@exept.de>
parents: 1785
diff changeset
  2414
302b8208bf6c more mime stuff
Claus Gittinger <cg@exept.de>
parents: 1785
diff changeset
  2415
mimeTypeFromSuffix:suffix
302b8208bf6c more mime stuff
Claus Gittinger <cg@exept.de>
parents: 1785
diff changeset
  2416
    "search my suffix information for a mime type and
302b8208bf6c more mime stuff
Claus Gittinger <cg@exept.de>
parents: 1785
diff changeset
  2417
     return it; return nil if unknown"
302b8208bf6c more mime stuff
Claus Gittinger <cg@exept.de>
parents: 1785
diff changeset
  2418
1802
9a3d7c669727 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1801
diff changeset
  2419
    ^ MIMETypes mimeTypeForSuffix:suffix
1786
302b8208bf6c more mime stuff
Claus Gittinger <cg@exept.de>
parents: 1785
diff changeset
  2420
302b8208bf6c more mime stuff
Claus Gittinger <cg@exept.de>
parents: 1785
diff changeset
  2421
    "
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2422
     Image mimeTypeFromSuffix:'gif'
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2423
     Image mimeTypeFromSuffix:'tiff'
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2424
     Image mimeTypeFromSuffix:'foobar'
1786
302b8208bf6c more mime stuff
Claus Gittinger <cg@exept.de>
parents: 1785
diff changeset
  2425
    "
302b8208bf6c more mime stuff
Claus Gittinger <cg@exept.de>
parents: 1785
diff changeset
  2426
1802
9a3d7c669727 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1801
diff changeset
  2427
    "Modified: 1.7.1997 / 00:17:27 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2428
! !
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2429
1086
269243c32f69 added displayOpaque, for protocol completeness
Claus Gittinger <cg@exept.de>
parents: 1070
diff changeset
  2430
!Image class methodsFor:'screen capture'!
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2431
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2432
fromScreen
1488
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  2433
    "return an image of the full screen.
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  2434
     WARNING: this temporarily grabs the display
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2435
              it may not work from within a buttonMotion
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2436
              (use #fromScreen:on:grab: with a false grabArg then)."
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2437
7966
52449eb9f442 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7962
diff changeset
  2438
    |display bounds|
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2439
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2440
    display := Screen current.
7966
52449eb9f442 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7962
diff changeset
  2441
    bounds := (0@0 corner:(display width @ display height)).
52449eb9f442 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7962
diff changeset
  2442
    
52449eb9f442 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7962
diff changeset
  2443
    OperatingSystem isOSXlike ifTrue:[
52449eb9f442 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7962
diff changeset
  2444
        "/ sigh: XQuartz does not include the dock
52449eb9f442 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7962
diff changeset
  2445
        display == Display ifTrue:[
7967
fa34f3731d4e #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7966
diff changeset
  2446
            bounds := OperatingSystem getScreenBounds:0
7966
52449eb9f442 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7962
diff changeset
  2447
        ].    
52449eb9f442 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7962
diff changeset
  2448
    ].
52449eb9f442 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7962
diff changeset
  2449
    
52449eb9f442 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7962
diff changeset
  2450
    ^ 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
  2451
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
  2452
    "
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
  2453
     Image fromScreen
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2454
     Image fromScreen inspect
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2455
    "
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2456
7967
fa34f3731d4e #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7966
diff changeset
  2457
    "Modified: / 06-03-2017 / 14:48:42 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2458
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2459
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2460
fromScreen:aRectangle
1488
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  2461
    "return an image of a part of the screen.
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  2462
     WARNING: this temporarily grabs the display
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2463
              it may not work from within a buttonMotion
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2464
              (use #fromScreen:on:grab: with a false grabArg then)."
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2465
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2466
    ^ self
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2467
        fromScreen:aRectangle
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2468
        on:Screen current
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2469
        grab:true
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2470
401
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
  2471
    "
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
  2472
     Image fromScreen:(0@0 corner:100@100)
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2473
     (Image fromScreen:(0@0 corner:100@100)) inspect
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2474
    "
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2475
1488
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  2476
    "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
  2477
!
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2478
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2479
fromScreen:aRectangle on:aDevice
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2480
    "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
  2481
     another display device.
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  2482
     WARNING: this temporarily grabs the display
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2483
              it may not work from within a buttonMotion
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2484
              (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
  2485
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2486
    ^ self
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2487
        fromScreen:aRectangle
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2488
        on:aDevice
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2489
        grab:true
1487
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2490
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2491
    "
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2492
     Image fromScreen:(0@0 corner:100@100)
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2493
    "
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2494
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2495
    "get a snapshot of your friends screen ...
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2496
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2497
     |dpy2|
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2498
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2499
     dpy2 := XWorkstation new initializeFor:'idefix:0'.
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2500
     (Image fromScreen:(dpy2 bounds) on:dpy2) inspect
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2501
    "
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
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:08 / 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:aDisplay grab:doGrab
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2507
    "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
  2508
     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
  2509
     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
  2510
     shown while the readout is done.
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  2511
     WARNING: with doGrab true, this temporarily grabs the display
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2512
              and it may not work from within a buttonMotion
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2513
              (use with a false grabArg then)."
7230
71910d55d08c #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7227
diff changeset
  2514
71910d55d08c #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7227
diff changeset
  2515
    |depth vis img tmpFile util|
71910d55d08c #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7227
diff changeset
  2516
71910d55d08c #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7227
diff changeset
  2517
    aDisplay supportsScreenReading ifFalse:[
7962
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2518
        "/ workaround (fast): look if there is an OS-hook for this...
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2519
        OperatingSystem isOSXlike ifTrue:[
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2520
            Error handle:[:ex |
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2521
                img := nil
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2522
            ] do:[
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2523
                img := OperatingSystem getFrameBufferImage:0 in:aRectangle
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2524
            ].
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2525
        ].
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2526
        img isNil ifTrue:[
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2527
            "/ workaround (slow): look for a helper utility in support/<os>/screenshot
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2528
            "/ currently there is one for osx.
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2529
            tmpFile := Filename newTemporary withSuffix:'png'.
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2530
            util := Smalltalk packageDirectory asFilename / ('../support/',OperatingSystem getSystemType,'/screenshot').
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2531
            util exists ifTrue:[
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2532
                OperatingSystem executeCommand:('%1 %2 png %3 %4 %5 %6'
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2533
                                                    bindWith:util pathName
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2534
                                                    with:tmpFile pathName
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2535
                                                    with:aRectangle left
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2536
                                                    with:aRectangle top
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2537
                                                    with:aRectangle width
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2538
                                                    with:aRectangle height).
8524
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  2539
                img := [Image fromFile:tmpFile] ensure:[tmpFile remove].
7962
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2540
            ].
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2541
        ].
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2542
        ^ img
7230
71910d55d08c #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7227
diff changeset
  2543
    ].
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2544
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2545
    depth := aDisplay depth.
401
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
  2546
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
  2547
    "/
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
  2548
    "/ 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
  2549
    "/ (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
  2550
    "/  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
  2551
    "/
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
  2552
    vis := aDisplay visualType.
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
  2553
    (vis == #TrueColor or:[vis == #DirectColor]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2554
        depth > 8 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2555
            depth := 24.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2556
        ]
401
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
  2557
    ].
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
  2558
3259
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  2559
    img := self newForDepth:depth.
1487
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2560
    ^ img fromScreen:aRectangle on:aDisplay grab:doGrab
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2561
7962
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2562
    "
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2563
     Image fromScreen:(0@0 corner:100@100)
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2564
    "
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2565
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  2566
    "Modified: / 30-01-2017 / 19:49:01 / stefan"
7962
9867dcc19191 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7961
diff changeset
  2567
    "Modified (comment): / 26-02-2017 / 18:24:41 / cg"
8524
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  2568
    "Modified: / 19-10-2018 / 16:10:41 / Stefan Vogel"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2569
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2570
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2571
fromScreenArea
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2572
    "return an image of a part of the screen;
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2573
     let user specify screen area.
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2574
     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
  2575
     Use #fromUser for ST-80 compatibility.
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  2576
     WARNING: this temporarily grabs the display
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2577
              it may not work from within a buttonMotion
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2578
              (use #fromScreen:on:grab: with a false grabArg then)."
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2579
2102
7c7d11aa956e care for empty rectangle in Image>>fromScreenArea
Claus Gittinger <cg@exept.de>
parents: 2081
diff changeset
  2580
    |r|
7c7d11aa956e care for empty rectangle in Image>>fromScreenArea
Claus Gittinger <cg@exept.de>
parents: 2081
diff changeset
  2581
2323
bf88727c4dee wait until button is released in #fromUser.
Claus Gittinger <cg@exept.de>
parents: 2311
diff changeset
  2582
    [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
  2583
    r := Rectangle fromUser.
7c7d11aa956e care for empty rectangle in Image>>fromScreenArea
Claus Gittinger <cg@exept.de>
parents: 2081
diff changeset
  2584
    r width == 0 ifTrue:[^ nil].
7c7d11aa956e care for empty rectangle in Image>>fromScreenArea
Claus Gittinger <cg@exept.de>
parents: 2081
diff changeset
  2585
    r height == 0 ifTrue:[^ nil].
7c7d11aa956e care for empty rectangle in Image>>fromScreenArea
Claus Gittinger <cg@exept.de>
parents: 2081
diff changeset
  2586
    ^ self fromScreen:r
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2587
401
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
  2588
    "
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
  2589
     Image fromScreenArea
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2590
     Image fromScreenArea inspect
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2591
    "
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2592
2323
bf88727c4dee wait until button is released in #fromUser.
Claus Gittinger <cg@exept.de>
parents: 2311
diff changeset
  2593
    "Modified: / 10.9.1998 / 15:59:58 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2594
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2595
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2596
fromUser
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2597
    "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
  2598
     Same as fromScreenArea, for ST-80 compatibility.
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  2599
     WARNING: this temporarily grabs the display
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2600
              it may not work from within a buttonMotion
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2601
              (use #fromScreen:on:grab: with a false grabArg then)."
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2602
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2603
    ^ self fromScreenArea
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2604
401
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
  2605
    "
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
  2606
     Image fromUser
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2607
     Image fromUser inspect
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2608
    "
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2609
1488
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  2610
    "Modified: 26.3.1997 / 10:45:25 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2611
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2612
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2613
fromView:aView
8152
aa729f2a2a58 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8141
diff changeset
  2614
    "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
  2615
     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
  2616
     as the Display.
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  2617
     Notice that for invisible or partial covered views,
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2618
     the returned Image is NOT correct.
1488
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  2619
     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
  2620
     WARNING: this temporarily grabs the display
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  2621
              it may not work from within a buttonMotion
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  2622
              (use #fromView:grab: with a false grabArg then)."
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  2623
8152
aa729f2a2a58 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8141
diff changeset
  2624
    ^ self fromView:aView grab:true
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  2625
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  2626
    "
1307
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2627
     Image fromView:(Launcher allInstances first window topView)
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2628
     Image fromView:(BrowserView allInstances first topView)
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2629
    "
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2630
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2631
    "get a snapshot from whichever view is active:
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2632
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2633
     |active|
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2634
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2635
     active := WindowGroup activeGroup topViews first.
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2636
     (Image fromView:active) inspect
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2637
    "
f1223fbd4e15 new suffix table
Claus Gittinger <cg@exept.de>
parents: 1306
diff changeset
  2638
8152
aa729f2a2a58 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8141
diff changeset
  2639
    "Modified: / 09-09-1996 / 22:41:01 / stefan"
aa729f2a2a58 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8141
diff changeset
  2640
    "Modified: / 26-03-1997 / 10:45:40 / cg"
aa729f2a2a58 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8141
diff changeset
  2641
    "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
  2642
!
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2643
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2644
fromView:aView grab:doGrab
8152
aa729f2a2a58 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8141
diff changeset
  2645
    "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
  2646
     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
  2647
     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
  2648
     shown while the readout is done.
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
  2649
     The returned image has the same depth and photometric
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2650
     as the Display.
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  2651
     Notice that for invisible or partial covered views,
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2652
     the returned Image is NOT correct.
1488
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  2653
     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
  2654
     WARNING: with doGrab true, this temporarily grabs the display
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  2655
              and it may not work from within a buttonMotion
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  2656
              (use with a false grabArg then)."
4540
abe9a008966e added functionality to grab a window incl. caption-border
ps
parents: 4423
diff changeset
  2657
abe9a008966e added functionality to grab a window incl. caption-border
ps
parents: 4423
diff changeset
  2658
    ^ self fromView:aView grab:doGrab withDecoration:false
abe9a008966e added functionality to grab a window incl. caption-border
ps
parents: 4423
diff changeset
  2659
8152
aa729f2a2a58 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8141
diff changeset
  2660
    "Created: / 26-03-1997 / 10:34:20 / cg"
aa729f2a2a58 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8141
diff changeset
  2661
    "Modified: / 10-10-2001 / 14:13:29 / cg"
aa729f2a2a58 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8141
diff changeset
  2662
    "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
  2663
!
abe9a008966e added functionality to grab a window incl. caption-border
ps
parents: 4423
diff changeset
  2664
abe9a008966e added functionality to grab a window incl. caption-border
ps
parents: 4423
diff changeset
  2665
fromView:aView grab:doGrab withDecoration:withDecoration
8152
aa729f2a2a58 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8141
diff changeset
  2666
    "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
  2667
     on the screen, optionally with decoration included.
4540
abe9a008966e added functionality to grab a window incl. caption-border
ps
parents: 4423
diff changeset
  2668
     If the doGrab argument is true, the display
abe9a008966e added functionality to grab a window incl. caption-border
ps
parents: 4423
diff changeset
  2669
     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
  2670
     shown while the readout is done.
abe9a008966e added functionality to grab a window incl. caption-border
ps
parents: 4423
diff changeset
  2671
     The returned image has the same depth and photometric
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2672
     as the Display.
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  2673
     Notice that for invisible or partial covered views,
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2674
     the returned Image is NOT correct.
4540
abe9a008966e added functionality to grab a window incl. caption-border
ps
parents: 4423
diff changeset
  2675
     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
  2676
     WARNING: with doGrab true, this temporarily grabs the display
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  2677
              and it may not work from within a buttonMotion
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  2678
              (use with a false grabArg then)."
4540
abe9a008966e added functionality to grab a window incl. caption-border
ps
parents: 4423
diff changeset
  2679
7271
3d35b4e39ec4 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 7242
diff changeset
  2680
    |org ext viewsDevice cH bW bH|
3d35b4e39ec4 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 7242
diff changeset
  2681
3d35b4e39ec4 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 7242
diff changeset
  2682
    viewsDevice := aView graphicsDevice.
3d35b4e39ec4 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 7242
diff changeset
  2683
    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
  2684
    ext := aView extent.
abe9a008966e added functionality to grab a window incl. caption-border
ps
parents: 4423
diff changeset
  2685
    withDecoration ifTrue:[
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  2686
        viewsDevice isWindowsPlatform ifTrue:[
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  2687
            cH := viewsDevice captionHeight.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  2688
            bW := (viewsDevice getSystemMetrics: #SM_CXFRAME )
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  2689
                  "+ ( device getSystemMetrics: #borderFrameWidth )".
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  2690
            bH := (viewsDevice getSystemMetrics: #SM_CYFRAME )
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  2691
                  " + ( device getSystemMetrics: #borderFrameHeight )".
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  2692
            org := org - (bW @ (bH + cH)).
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  2693
            ext := ext + ((bW + bW) @ (bH+bH+cH)).
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  2694
        ].
4540
abe9a008966e added functionality to grab a window incl. caption-border
ps
parents: 4423
diff changeset
  2695
    ].
7271
3d35b4e39ec4 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 7242
diff changeset
  2696
    ^ 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
  2697
abe9a008966e added functionality to grab a window incl. caption-border
ps
parents: 4423
diff changeset
  2698
    "
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2699
     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
  2700
     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
  2701
    "
3518
983e7730a905 use new translatePoint:fromView:toView:
Claus Gittinger <cg@exept.de>
parents: 3507
diff changeset
  2702
4574
4b65895bbb6b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4565
diff changeset
  2703
    "Created: / 26-03-1997 / 10:34:20 / cg"
4b65895bbb6b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4565
diff changeset
  2704
    "Modified: / 08-09-2006 / 15:41:41 / cg"
8152
aa729f2a2a58 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8141
diff changeset
  2705
    "Modified (comment): / 31-08-2017 / 20:14:53 / cg"
157
claus
parents: 154
diff changeset
  2706
! !
claus
parents: 154
diff changeset
  2707
3880
c4c8268a2d9f method category rename
Claus Gittinger <cg@exept.de>
parents: 3876
diff changeset
  2708
!Image methodsFor:'Compatibility-Squeak'!
3475
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2709
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2710
boundingBox
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2711
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2712
    ^ self bounds
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2713
!
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2714
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2715
colormapIfNeededForDepth:d
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2716
    ^ nil
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2717
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2718
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2719
!
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2720
6308
6e4008b97f64 class: Image
Claus Gittinger <cg@exept.de>
parents: 6305
diff changeset
  2721
colorsFromArray:anArrayOfRGBTriples
6e4008b97f64 class: Image
Claus Gittinger <cg@exept.de>
parents: 6305
diff changeset
  2722
    "for squeak compatibility with ColorForm:
6e4008b97f64 class: Image
Claus Gittinger <cg@exept.de>
parents: 6305
diff changeset
  2723
     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
  2724
6e4008b97f64 class: Image
Claus Gittinger <cg@exept.de>
parents: 6305
diff changeset
  2725
    |newMap|
6e4008b97f64 class: Image
Claus Gittinger <cg@exept.de>
parents: 6305
diff changeset
  2726
6e4008b97f64 class: Image
Claus Gittinger <cg@exept.de>
parents: 6305
diff changeset
  2727
    newMap := Colormap new:anArrayOfRGBTriples size.
6e4008b97f64 class: Image
Claus Gittinger <cg@exept.de>
parents: 6305
diff changeset
  2728
    anArrayOfRGBTriples doWithIndex:[:rgb :i |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2729
        newMap at:i putRGBTriple:rgb
6308
6e4008b97f64 class: Image
Claus Gittinger <cg@exept.de>
parents: 6305
diff changeset
  2730
    ].
6e4008b97f64 class: Image
Claus Gittinger <cg@exept.de>
parents: 6305
diff changeset
  2731
    self colorMap:newMap.
6e4008b97f64 class: Image
Claus Gittinger <cg@exept.de>
parents: 6305
diff changeset
  2732
6e4008b97f64 class: Image
Claus Gittinger <cg@exept.de>
parents: 6305
diff changeset
  2733
    "
6e4008b97f64 class: Image
Claus Gittinger <cg@exept.de>
parents: 6305
diff changeset
  2734
     Depth8Image new
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2735
        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
  2736
    "
6e4008b97f64 class: Image
Claus Gittinger <cg@exept.de>
parents: 6305
diff changeset
  2737
!
6e4008b97f64 class: Image
Claus Gittinger <cg@exept.de>
parents: 6305
diff changeset
  2738
3475
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2739
fill:aRectangle fillColor:aColor
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2740
    "fill the rectangular area specified by aRectangle with the given color"
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
    self fillRectangle:aRectangle withColor:aColor
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2743
!
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
fillBlack:aRectangle
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2746
    "fill the rectangular area specified by aRectangle with the black color"
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2747
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2748
    self fillRectangle:aRectangle withColor:Color black
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2749
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2750
    "
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2751
     |img|
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2752
     img := Image extent:100@100 depth:24.
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2753
     img photometric:#rgb.
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2754
     img data:(ByteArray new:100*100*3).
3475
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2755
     img fillWhite:(0@0 corner:100@100).
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2756
     img fillBlack:(10@10 corner:90@90).
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2757
     img inspect.
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2758
    "
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2759
!
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2760
8301
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
  2761
fillRectangle:aRectangle color:aColor
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
  2762
    "fill the rectangular area specified by aRectangle with the given color"
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
  2763
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
  2764
    self fillRectangle:aRectangle withColor:aColor
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
  2765
!
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
  2766
3475
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2767
fillWhite:aRectangle
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2768
    "fill the rectangular area specified by aRectangle with the white color"
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2769
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2770
    self fillRectangle:aRectangle withColor:Color white
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
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2773
isTransparentAt:aPoint
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2774
    mask isNil ifTrue:[ ^ false].
445d02892621 protocol rename
Claus Gittinger <cg@exept.de>
parents: 3458
diff changeset
  2775
    ^ (mask pixelAt:aPoint) == 0
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
3880
c4c8268a2d9f method category rename
Claus Gittinger <cg@exept.de>
parents: 3876
diff changeset
  2778
!Image methodsFor:'Compatibility-VW'!
1279
09eef854916c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1276
diff changeset
  2779
09eef854916c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1276
diff changeset
  2780
asCachedImage
09eef854916c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1276
diff changeset
  2781
    "return the receiver associated to the current screens device.
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2782
     For ST-80 compatibility
1279
09eef854916c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1276
diff changeset
  2783
     (ST/X uses Image for both device- and nonDevice-images)"
09eef854916c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1276
diff changeset
  2784
2832
793500016a2b #on: -> #onDevice:
Claus Gittinger <cg@exept.de>
parents: 2801
diff changeset
  2785
    ^ self onDevice:Screen current
1279
09eef854916c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1276
diff changeset
  2786
09eef854916c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1276
diff changeset
  2787
    "Modified: 23.4.1996 / 11:10:32 / cg"
09eef854916c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1276
diff changeset
  2788
!
09eef854916c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1276
diff changeset
  2789
09eef854916c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1276
diff changeset
  2790
asRetainedMedium
09eef854916c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1276
diff changeset
  2791
    "return the receiver associated to the current screens device.
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  2792
     For ST-80 compatibility
1279
09eef854916c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1276
diff changeset
  2793
     (ST/X uses Image for both device- and nonDevice-images)"
09eef854916c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1276
diff changeset
  2794
2832
793500016a2b #on: -> #onDevice:
Claus Gittinger <cg@exept.de>
parents: 2801
diff changeset
  2795
    ^ self onDevice:Screen current
1279
09eef854916c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1276
diff changeset
  2796
09eef854916c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1276
diff changeset
  2797
    "Modified: 23.4.1996 / 11:10:32 / cg"
09eef854916c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1276
diff changeset
  2798
    "Created: 27.1.1997 / 15:49:08 / cg"
1325
3c09b139de30 more st80 compatibility
Claus Gittinger <cg@exept.de>
parents: 1309
diff changeset
  2799
!
3c09b139de30 more st80 compatibility
Claus Gittinger <cg@exept.de>
parents: 1309
diff changeset
  2800
3c09b139de30 more st80 compatibility
Claus Gittinger <cg@exept.de>
parents: 1309
diff changeset
  2801
bounds:newBounds
3c09b139de30 more st80 compatibility
Claus Gittinger <cg@exept.de>
parents: 1309
diff changeset
  2802
    ^ self
3c09b139de30 more st80 compatibility
Claus Gittinger <cg@exept.de>
parents: 1309
diff changeset
  2803
3c09b139de30 more st80 compatibility
Claus Gittinger <cg@exept.de>
parents: 1309
diff changeset
  2804
    "Created: 10.2.1997 / 12:44:46 / cg"
3c09b139de30 more st80 compatibility
Claus Gittinger <cg@exept.de>
parents: 1309
diff changeset
  2805
!
3c09b139de30 more st80 compatibility
Claus Gittinger <cg@exept.de>
parents: 1309
diff changeset
  2806
1433
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  2807
containsPoint:aPoint
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  2808
    "in st-80, images are visualComponents ..."
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  2809
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  2810
    ^ self bounds containsPoint:aPoint
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  2811
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  2812
    "Created: 6.3.1997 / 15:24:12 / cg"
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  2813
!
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  2814
1403
4b132381579e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1386
diff changeset
  2815
convertToPalette:aColormap renderedBy:anImageRenderer
4b132381579e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1386
diff changeset
  2816
    "this does not really mimicri the corresponding ST-80 functionality"
4b132381579e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1386
diff changeset
  2817
4b132381579e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1386
diff changeset
  2818
    |monoBits convertedImage|
4b132381579e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1386
diff changeset
  2819
4b132381579e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1386
diff changeset
  2820
    aColormap size == 2 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2821
        anImageRenderer class == OrderedDither ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2822
            monoBits := self orderedDitheredMonochromeBits.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2823
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2824
            monoBits := self floydSteinbergDitheredMonochromeBits.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2825
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2826
        (((aColormap at:1) = Color black)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2827
        and:[(aColormap at:2) = Color white]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2828
            "/ ok
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2829
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2830
            (((aColormap at:1) = Color white)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2831
            and:[(aColormap at:2) = Color black]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2832
                monoBits invert
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2833
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2834
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2835
        convertedImage := Depth1Image width:width height:height fromArray:monoBits.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2836
        convertedImage palette:aColormap.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2837
        ^ convertedImage
1403
4b132381579e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1386
diff changeset
  2838
    ].
4b132381579e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1386
diff changeset
  2839
4b132381579e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1386
diff changeset
  2840
    self error:'unimplemented operation'.
4b132381579e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1386
diff changeset
  2841
    ^ self
4b132381579e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1386
diff changeset
  2842
4b132381579e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1386
diff changeset
  2843
    "Modified: 1.3.1997 / 17:25:50 / cg"
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
1433
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  2846
paintBasis
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  2847
    "huh - whats that;
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  2848
     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
  2849
     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
  2850
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  2851
    ^ ColorValue
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  2852
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  2853
    "Created: 6.3.1997 / 15:24:19 / cg"
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  2854
!
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  2855
1325
3c09b139de30 more st80 compatibility
Claus Gittinger <cg@exept.de>
parents: 1309
diff changeset
  2856
preferredBounds
3c09b139de30 more st80 compatibility
Claus Gittinger <cg@exept.de>
parents: 1309
diff changeset
  2857
    ^ self bounds
3c09b139de30 more st80 compatibility
Claus Gittinger <cg@exept.de>
parents: 1309
diff changeset
  2858
3c09b139de30 more st80 compatibility
Claus Gittinger <cg@exept.de>
parents: 1309
diff changeset
  2859
    "Created: 10.2.1997 / 12:42:36 / cg"
4380
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2860
!
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2861
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2862
tile:bounds from:origin in:tile rule:rule
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2863
    |orgX orgY tW tH|
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2864
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2865
    origin ~= (0@0) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2866
        self shouldImplement.
4380
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2867
    ].
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2868
    bounds ~= self bounds ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2869
        self shouldImplement.
4380
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2870
    ].
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2871
    rule ~= #over ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2872
        self shouldImplement.
4380
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2873
    ].
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2874
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2875
    orgX := origin x.
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2876
    orgY := origin y.
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2877
    tW := tile width.
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2878
    tH := tile height.
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2879
    (bounds top) to:(bounds bottom) by:tH do:[:dstY |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2880
        (bounds left) to:(bounds right) by:(tile width) do:[:dstX |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2881
            self
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2882
                copyFrom:tile
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2883
                x:orgX y:orgY
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2884
                toX:dstX y:dstY
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2885
                width:tW height:tH.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2886
        ].
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
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2890
valueAtPoint:aPoint put:aColorValue
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2891
    aColorValue isInteger ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2892
        self colorAtX:aPoint x y:aPoint y put:aColorValue
4380
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2893
    ] ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2894
        self pixelAtX:aPoint x y:aPoint y put:aColorValue
4380
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  2895
    ]
1279
09eef854916c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1276
diff changeset
  2896
! !
09eef854916c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1276
diff changeset
  2897
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  2898
!Image methodsFor:'accessing'!
48194c26a46c Initial revision
claus
parents:
diff changeset
  2899
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2900
bitsPerSample
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2901
    "return the number of bits per sample.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2902
     The return value is an array of bits-per-plane."
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2903
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  2904
    bitsPerSample notNil ifTrue:[^ bitsPerSample].
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  2905
    ^ Array with:self depth
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  2906
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  2907
    "Modified: 10.6.1996 / 18:04:21 / cg"
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2908
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2909
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2910
colorMap
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2911
    "return the colormap"
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2912
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2913
    ^ colorMap
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2914
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2915
7834
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
  2916
colorMap:newColorMap
6900
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  2917
    "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
  2918
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  2919
    |oldSize "{ Class: SmallInteger }"
852
318a6190e31d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 851
diff changeset
  2920
     sameColors|
318a6190e31d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 851
diff changeset
  2921
7834
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
  2922
    (newColorMap isNil and:[colorMap isNil]) ifTrue:[^ self].
2502
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  2923
6900
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  2924
    sameColors := false.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  2925
852
318a6190e31d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 851
diff changeset
  2926
    photometric == #palette ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2927
        "/ any change at all ?
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  2928
        oldSize := colorMap size.
7834
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
  2929
        newColorMap size >= oldSize ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2930
            sameColors := true.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2931
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2932
            1 to:oldSize do:[:idx |
7834
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
  2933
                (newColorMap at:idx) = (colorMap at:idx) ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2934
                    sameColors := false.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2935
                ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2936
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2937
        ].
3863
b7ba8a04be25 always ensure colorMap is a real colorMap
Claus Gittinger <cg@exept.de>
parents: 3861
diff changeset
  2938
    ].
b7ba8a04be25 always ensure colorMap is a real colorMap
Claus Gittinger <cg@exept.de>
parents: 3861
diff changeset
  2939
7834
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
  2940
    self setColorMap:newColorMap.
3863
b7ba8a04be25 always ensure colorMap is a real colorMap
Claus Gittinger <cg@exept.de>
parents: 3861
diff changeset
  2941
    sameColors ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2942
        ^ self
3863
b7ba8a04be25 always ensure colorMap is a real colorMap
Claus Gittinger <cg@exept.de>
parents: 3861
diff changeset
  2943
    ].
b7ba8a04be25 always ensure colorMap is a real colorMap
Claus Gittinger <cg@exept.de>
parents: 3861
diff changeset
  2944
7834
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
  2945
    newColorMap notNil ifTrue:[
7840
dedc215d1631 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7834
diff changeset
  2946
        (newColorMap isColormap and:[newColorMap isFixedPalette]) ifTrue:[
7834
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
  2947
            photometric := #rgb
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
  2948
        ] ifFalse:[  
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
  2949
            self assert:(self depth <= 8).
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
  2950
            photometric := #palette.
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
  2951
        ].
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  2952
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2953
        (photometric == #palette) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2954
            photometric := #blackIs0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2955
        ]
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  2956
    ].
852
318a6190e31d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 851
diff changeset
  2957
    deviceForm notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2958
        self release
852
318a6190e31d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 851
diff changeset
  2959
    ]
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2960
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  2961
    "Modified: / 31-08-1995 / 03:05:59 / claus"
7834
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
  2962
    "Modified: / 03-02-2017 / 16:52:33 / cg"
7840
dedc215d1631 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7834
diff changeset
  2963
    "Modified: / 06-02-2017 / 11:00:36 / stefan"
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2964
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2965
2068
3bc8754883ae store on the color map in an array of rgb-byte values
tz
parents: 2059
diff changeset
  2966
colorMapFromArray: anArray
2266
72460683cc97 fixed maskedPixelsAre0 flag setting when copying images.
Claus Gittinger <cg@exept.de>
parents: 2249
diff changeset
  2967
    "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
  2968
     The (byte-)Array argument should be of the form:
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2969
        #( 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
  2970
     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
  2971
3876
f4dc6267a30a getting rid of colorMap
Claus Gittinger <cg@exept.de>
parents: 3872
diff changeset
  2972
    self colorMap:(MappedPalette rgbBytesVector:anArray)
3864
b04f2f0c5eae *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3863
diff changeset
  2973
!
b04f2f0c5eae *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3863
diff changeset
  2974
b04f2f0c5eae *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3863
diff changeset
  2975
colorMapFromRGBValueArray:anArray
2266
72460683cc97 fixed maskedPixelsAre0 flag setting when copying images.
Claus Gittinger <cg@exept.de>
parents: 2249
diff changeset
  2976
    "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
  2977
     The (integer-)Array argument should be of the form:
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  2978
        #( rgb0 rgb1  ... rgbN)
2266
72460683cc97 fixed maskedPixelsAre0 flag setting when copying images.
Claus Gittinger <cg@exept.de>
parents: 2249
diff changeset
  2979
     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
  2980
8185
f4660dbcbdc1 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 8176
diff changeset
  2981
    self colorMap:(ColorPalette rgbValueVector:anArray)
f4660dbcbdc1 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 8176
diff changeset
  2982
f4660dbcbdc1 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 8176
diff changeset
  2983
    "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
  2984
!
3bc8754883ae store on the color map in an array of rgb-byte values
tz
parents: 2059
diff changeset
  2985
757
6c7dc7e05e93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 748
diff changeset
  2986
container:aVisualContainer
6c7dc7e05e93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 748
diff changeset
  2987
    "ignored here - added to allow images to be used like
6c7dc7e05e93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 748
diff changeset
  2988
     VisualComponents (later, Image should inherit from it)"
6c7dc7e05e93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 748
diff changeset
  2989
6c7dc7e05e93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 748
diff changeset
  2990
    "Created: 28.5.1996 / 23:43:49 / cg"
6c7dc7e05e93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 748
diff changeset
  2991
    "Modified: 29.5.1996 / 10:22:23 / cg"
6c7dc7e05e93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 748
diff changeset
  2992
!
6c7dc7e05e93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 748
diff changeset
  2993
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2994
depth
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2995
    "return the depth of the image"
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2996
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2997
    ^ self bitsPerPixel
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2998
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  2999
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3000
device
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3001
    "return the device, the receiver is associated with.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3002
     Return nil, if the image is unassigned."
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3003
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3004
    ^ device
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3005
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3006
7637
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
  3007
drawableId
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
  3008
    "return the id of the image on the device.
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
  3009
     Return nil, if the image is unassigned."
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
  3010
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
  3011
    deviceForm isNil ifTrue:[^ nil].
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
  3012
    ^ deviceForm drawableId
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
  3013
!
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
  3014
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3015
extent
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3016
    "return the images extent"
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3017
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3018
    ^ width@height
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3019
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3020
1950
23f49293deb8 access to filename
Claus Gittinger <cg@exept.de>
parents: 1935
diff changeset
  3021
fileName
23f49293deb8 access to filename
Claus Gittinger <cg@exept.de>
parents: 1935
diff changeset
  3022
    "return the value of the instance variable 'fileName' (automatically generated)"
23f49293deb8 access to filename
Claus Gittinger <cg@exept.de>
parents: 1935
diff changeset
  3023
23f49293deb8 access to filename
Claus Gittinger <cg@exept.de>
parents: 1935
diff changeset
  3024
    ^ fileName
23f49293deb8 access to filename
Claus Gittinger <cg@exept.de>
parents: 1935
diff changeset
  3025
23f49293deb8 access to filename
Claus Gittinger <cg@exept.de>
parents: 1935
diff changeset
  3026
    "Created: / 3.11.1997 / 14:54:46 / cg"
23f49293deb8 access to filename
Claus Gittinger <cg@exept.de>
parents: 1935
diff changeset
  3027
!
23f49293deb8 access to filename
Claus Gittinger <cg@exept.de>
parents: 1935
diff changeset
  3028
23f49293deb8 access to filename
Claus Gittinger <cg@exept.de>
parents: 1935
diff changeset
  3029
fileName:something
23f49293deb8 access to filename
Claus Gittinger <cg@exept.de>
parents: 1935
diff changeset
  3030
    "set the value of the instance variable 'fileName' (automatically generated)"
23f49293deb8 access to filename
Claus Gittinger <cg@exept.de>
parents: 1935
diff changeset
  3031
23f49293deb8 access to filename
Claus Gittinger <cg@exept.de>
parents: 1935
diff changeset
  3032
    fileName := something.
23f49293deb8 access to filename
Claus Gittinger <cg@exept.de>
parents: 1935
diff changeset
  3033
23f49293deb8 access to filename
Claus Gittinger <cg@exept.de>
parents: 1935
diff changeset
  3034
    "Created: / 3.11.1997 / 14:54:46 / cg"
23f49293deb8 access to filename
Claus Gittinger <cg@exept.de>
parents: 1935
diff changeset
  3035
!
23f49293deb8 access to filename
Claus Gittinger <cg@exept.de>
parents: 1935
diff changeset
  3036
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3037
fullColorId
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3038
    "return the id of the full color image on the device.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3039
     Return nil, if the image is unassigned."
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3040
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3041
    fullColorDeviceForm isNil ifTrue:[^ nil].
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3042
    ^ fullColorDeviceForm id
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3043
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3044
728
04d0a262b82e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 694
diff changeset
  3045
graphicsDevice
04d0a262b82e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 694
diff changeset
  3046
    "same as #device - for ST-80 compatibility"
04d0a262b82e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 694
diff changeset
  3047
04d0a262b82e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 694
diff changeset
  3048
    ^ device
04d0a262b82e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 694
diff changeset
  3049
!
744
db883c9b74b8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 728
diff changeset
  3050
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3051
height
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3052
    "return the height of the image"
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3053
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3054
    ^ height
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3055
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3056
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3057
id
7637
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
  3058
    ^ self drawableId  
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3059
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3060
2081
24f4f3004fe3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2068
diff changeset
  3061
imageSequence
24f4f3004fe3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2068
diff changeset
  3062
    "return the frameSequence of which this image is a part of;
24f4f3004fe3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2068
diff changeset
  3063
     nil if it is not part of a sequence."
24f4f3004fe3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2068
diff changeset
  3064
24f4f3004fe3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2068
diff changeset
  3065
    ^ imageSequence
24f4f3004fe3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2068
diff changeset
  3066
24f4f3004fe3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2068
diff changeset
  3067
    "Created: / 1.4.1998 / 14:43:00 / cg"
24f4f3004fe3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2068
diff changeset
  3068
!
24f4f3004fe3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2068
diff changeset
  3069
24f4f3004fe3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2068
diff changeset
  3070
imageSequence:aCollection
24f4f3004fe3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2068
diff changeset
  3071
    "private entry for imageReaders - set the frameSequence of which
24f4f3004fe3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2068
diff changeset
  3072
     this image is a part of"
24f4f3004fe3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2068
diff changeset
  3073
24f4f3004fe3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2068
diff changeset
  3074
    imageSequence := aCollection
24f4f3004fe3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2068
diff changeset
  3075
24f4f3004fe3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2068
diff changeset
  3076
    "Created: / 1.4.1998 / 14:42:36 / cg"
24f4f3004fe3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2068
diff changeset
  3077
!
24f4f3004fe3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2068
diff changeset
  3078
896
26cea84f134d mask access
Claus Gittinger <cg@exept.de>
parents: 894
diff changeset
  3079
mask
26cea84f134d mask access
Claus Gittinger <cg@exept.de>
parents: 894
diff changeset
  3080
    ^ mask
26cea84f134d mask access
Claus Gittinger <cg@exept.de>
parents: 894
diff changeset
  3081
26cea84f134d mask access
Claus Gittinger <cg@exept.de>
parents: 894
diff changeset
  3082
    "Created: 21.6.1996 / 12:57:44 / cg"
26cea84f134d mask access
Claus Gittinger <cg@exept.de>
parents: 894
diff changeset
  3083
!
26cea84f134d mask access
Claus Gittinger <cg@exept.de>
parents: 894
diff changeset
  3084
906
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
  3085
mask:anotherImage
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
  3086
    "set the images mask - currently, this may be nil or a Depth1Image.
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
  3087
     (it is planned to support alpha information in a Depth8 maskImage in
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
  3088
      the near future).
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
  3089
     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
  3090
                       1-bit is present in the mask will be drawn;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3091
                       0-bit mask pixels lead to transparent pixels.
906
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
  3092
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
  3093
     For depth8 masks: (future):
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3094
                       each pixel specifies the alpha value (0..255),
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3095
                       which specifies the transparency of that pixel.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3096
                       0 means completely transparent, 255 means completely
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3097
                       opaque. The 1-plane mask is a special case of this,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3098
                       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
  3099
                       alpha value of 255."
906
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
  3100
1591
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  3101
    mask := anotherImage.
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  3102
    maskedPixelsAre0 := false.
906
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
  3103
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
  3104
    "Created: 27.6.1996 / 17:45:22 / cg"
1591
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  3105
    "Modified: 12.4.1997 / 12:04:39 / cg"
906
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
  3106
!
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
  3107
1587
4a0b4c864ff0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1586
diff changeset
  3108
maskedPixelsAre0
4a0b4c864ff0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1586
diff changeset
  3109
    "return true if masked pixels have been cleared to zero"
4a0b4c864ff0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1586
diff changeset
  3110
2266
72460683cc97 fixed maskedPixelsAre0 flag setting when copying images.
Claus Gittinger <cg@exept.de>
parents: 2249
diff changeset
  3111
    ^ maskedPixelsAre0 == true
72460683cc97 fixed maskedPixelsAre0 flag setting when copying images.
Claus Gittinger <cg@exept.de>
parents: 2249
diff changeset
  3112
72460683cc97 fixed maskedPixelsAre0 flag setting when copying images.
Claus Gittinger <cg@exept.de>
parents: 2249
diff changeset
  3113
    "Modified: / 22.8.1998 / 11:27:22 / cg"
1587
4a0b4c864ff0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1586
diff changeset
  3114
!
4a0b4c864ff0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1586
diff changeset
  3115
4a0b4c864ff0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1586
diff changeset
  3116
maskedPixelsAre0:aBoolean
4a0b4c864ff0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1586
diff changeset
  3117
    "set/clear the flag which states if masked pixels
1591
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  3118
     have been set to zero. Knowing this to be true allows
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  3119
     faster drawing of the image later; (however, not setting
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  3120
     it will still produce correct output).
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  3121
     This flag is typically set by image readers."
1587
4a0b4c864ff0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1586
diff changeset
  3122
4a0b4c864ff0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1586
diff changeset
  3123
    maskedPixelsAre0 := aBoolean
1591
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  3124
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  3125
    "Modified: 12.4.1997 / 12:08:42 / cg"
1587
4a0b4c864ff0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1586
diff changeset
  3126
!
4a0b4c864ff0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1586
diff changeset
  3127
7374
b1a4e6ba38cb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7373
diff changeset
  3128
metaData
b1a4e6ba38cb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7373
diff changeset
  3129
    ^ metaData
b1a4e6ba38cb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7373
diff changeset
  3130
!
b1a4e6ba38cb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7373
diff changeset
  3131
b1a4e6ba38cb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7373
diff changeset
  3132
metaData:something
b1a4e6ba38cb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7373
diff changeset
  3133
    metaData := something.
b1a4e6ba38cb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7373
diff changeset
  3134
!
b1a4e6ba38cb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7373
diff changeset
  3135
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3136
monochromeId
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3137
    "return the id of the monochrome image on the device.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3138
     Return nil, if the image is unassigned."
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3139
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3140
    monoDeviceForm isNil ifTrue:[^ nil].
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3141
    ^ monoDeviceForm id
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3142
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3143
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  3144
palette
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3145
    "return the colormap; ST-80 compatibility"
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3146
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3147
    ^ colorMap
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3148
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3149
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  3150
palette:aColormap
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3151
    "set the colormap; ST-80 compatibility"
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3152
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  3153
    self colorMap:aColormap
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3154
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3155
    "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
  3156
    "Modified: 8.6.1996 / 09:54:02 / cg"
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3157
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3158
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3159
photometric
6311
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
  3160
    "return the photometric, a symbol such as #palette, #rgb etc.
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
  3161
     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
  3162
     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
  3163
     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
  3164
     - 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
  3165
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3166
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3167
    ^ photometric
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3168
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3169
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3170
samplesPerPixel
6840
3dee5e952e94 class: Image
Stefan Vogel <sv@exept.de>
parents: 6831
diff changeset
  3171
    "return the number of samples per pixel in the image."
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3172
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  3173
    samplesPerPixel notNil ifTrue:[^ samplesPerPixel].
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  3174
    ^ 1
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  3175
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  3176
    "Modified: 10.6.1996 / 18:03:30 / cg"
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3177
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3178
7834
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
  3179
setColorMap:newColorMap
7878
87d2abc0d82a #BUGFIX by Maren
matilk
parents: 7840
diff changeset
  3180
    (newColorMap isColormap or:[newColorMap isNil]) ifTrue:[
7834
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
  3181
        colorMap := newColorMap.
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  3182
    ] ifFalse:[
8185
f4660dbcbdc1 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 8176
diff changeset
  3183
        colorMap := ColorPalette withColors:newColorMap.
f4660dbcbdc1 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 8176
diff changeset
  3184
    ].
f4660dbcbdc1 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 8176
diff changeset
  3185
7834
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
  3186
    "Modified (format): / 03-02-2017 / 16:39:48 / cg"
8185
f4660dbcbdc1 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 8176
diff changeset
  3187
    "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
  3188
!
b7ba8a04be25 always ensure colorMap is a real colorMap
Claus Gittinger <cg@exept.de>
parents: 3861
diff changeset
  3189
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3190
width
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3191
    "return the width of the image"
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3192
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3193
    ^ width
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3194
! !
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3195
3263
bd92a12c9316 category changes
Claus Gittinger <cg@exept.de>
parents: 3259
diff changeset
  3196
!Image methodsFor:'accessing-pixels'!
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3197
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  3198
at:aPoint
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3199
    "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
  3200
     (backward compatibility with ST/X)
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3201
     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
  3202
     Use #colorAt: - for future compatibility.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3203
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3204
     retrieve the pixel at aPoint; return a color.
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
  3205
     Pixels start at 0@0 for upper left pixel, end at
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3206
     (width-1)@(height-1) for lower right pixel.
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
  3207
     You should not use this method for image-processing, its
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3208
     very slow ...
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3209
     (it is meant to access individual pixels - for example, in a bitmap editor)"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  3210
3433
809312fa7e4f Use <resource:#obsolete>
Stefan Vogel <sv@exept.de>
parents: 3426
diff changeset
  3211
    <resource:#obsolete>
809312fa7e4f Use <resource:#obsolete>
Stefan Vogel <sv@exept.de>
parents: 3426
diff changeset
  3212
7482
0e29bd25788b #QUALITY by stefan
Stefan Vogel <sv@exept.de>
parents: 7481
diff changeset
  3213
    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
  3214
    ^ self colorAtX:(aPoint x) y:(aPoint y)
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3215
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3216
    "Modified: / 21-06-1997 / 13:10:17 / cg"
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3217
    "Modified: / 09-01-1998 / 20:33:52 / stefan"
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3218
    "Modified (comment): / 29-08-2017 / 14:35:55 / cg"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  3219
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  3220
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3221
at:aPoint put:aColor
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3222
    "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
  3223
     (backward compatibility with ST/X)
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3224
     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
  3225
     Use #colorAt:put: - for future compatibility.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3226
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3227
     set the pixel at aPoint to aColor.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3228
     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
  3229
     (width-1)@(height-1) for lower right pixel.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3230
     You should not use this method for image-processing, its
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3231
     very slow ...
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3232
     (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
  3233
7482
0e29bd25788b #QUALITY by stefan
Stefan Vogel <sv@exept.de>
parents: 7481
diff changeset
  3234
    aColor isInteger ifTrue:[
0e29bd25788b #QUALITY by stefan
Stefan Vogel <sv@exept.de>
parents: 7481
diff changeset
  3235
        ^ self pixelAtX:aPoint x y:aPoint y put:aColor.
0e29bd25788b #QUALITY by stefan
Stefan Vogel <sv@exept.de>
parents: 7481
diff changeset
  3236
    ].
0e29bd25788b #QUALITY by stefan
Stefan Vogel <sv@exept.de>
parents: 7481
diff changeset
  3237
    self obsoleteFeatureWarning:'Image [warning]: the Image>>at:put: will change semantics soon; use #colorAt:put:'.
0e29bd25788b #QUALITY by stefan
Stefan Vogel <sv@exept.de>
parents: 7481
diff changeset
  3238
    ^ self colorAtX:aPoint x y:aPoint y put:aColor.
1764
01101be8bd5c obsolete warning messages
Claus Gittinger <cg@exept.de>
parents: 1763
diff changeset
  3239
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3240
    "Modified: / 21-06-1997 / 13:16:02 / cg"
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3241
    "Modified: / 09-01-1998 / 20:34:15 / stefan"
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3242
    "Modified (comment): / 29-08-2017 / 14:36:03 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3243
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3244
2502
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3245
atImageAndMask:aPoint put:aColorOrPixelOrNil
1972
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
  3246
    "set the pixel at x/y to aColor.
2502
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3247
     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
  3248
     otherwise to 1. Nil is treated like noColor.
1972
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
  3249
     (used by the bitmap editor)"
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
  3250
2523
4c197af8cc50 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2502
diff changeset
  3251
    |maskVal|
2502
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3252
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  3253
    (aColorOrPixelOrNil notNil and:[aColorOrPixelOrNil ~= Color noColor]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3254
        maskVal := 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3255
        aColorOrPixelOrNil isInteger ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3256
            self pixelAt:aPoint put:aColorOrPixelOrNil.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3257
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3258
            self colorAt:aPoint put:aColorOrPixelOrNil
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3259
        ]
2380
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  3260
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3261
        maskVal := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3262
        self pixelAt:aPoint put:0.
2502
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3263
    ].
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3264
    mask notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3265
        mask pixelAt:aPoint put:maskVal
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  3266
    ].
2502
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3267
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3268
    "Modified: / 30.9.1998 / 22:42:44 / cg"
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3269
!
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3270
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3271
atImageAndMask:aPoint putValue:aPixelValueOrNil
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3272
    "set the pixel at x/y to aColor.
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3273
     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
  3274
     otherwise to 1. (used by the bitmap editor)"
2502
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3275
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3276
    |pixVal maskVal|
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3277
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  3278
    aPixelValueOrNil notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3279
        pixVal := aPixelValueOrNil.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3280
        maskVal := 1.
2502
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3281
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3282
        pixVal := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3283
        maskVal := 0.
2502
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3284
    ].
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3285
    mask notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3286
        mask pixelAt:aPoint put:maskVal
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  3287
    ].
2502
ad364776706b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2447
diff changeset
  3288
    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
  3289
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  3290
    "Modified: / 30.9.1998 / 22:42:44 / cg"
1972
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
  3291
!
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
  3292
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3293
atPoint:aPoint
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3294
    "ST-80 compatibility: return the pixelValue at:aPoint."
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3295
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3296
    ^ self pixelAtX:aPoint x y:aPoint y
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3297
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3298
    "Modified: 24.4.1997 / 16:18:44 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3299
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3300
1433
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  3301
atPoint:aPoint put:aPixelValue
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  3302
    "ST-80 compatibility: set the pixelValue at:aPoint."
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  3303
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3304
    ^ self pixelAtX:aPoint x y:aPoint y put:aPixelValue
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3305
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3306
    "Modified: 24.4.1997 / 17:17:59 / cg"
1433
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  3307
!
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  3308
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  3309
atX:x y:y
7482
0e29bd25788b #QUALITY by stefan
Stefan Vogel <sv@exept.de>
parents: 7481
diff changeset
  3310
    <resource: #obsolete>
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3311
    "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
  3312
     (backward compatibility with ST/X)
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3313
     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
  3314
     Use #colorAt: - for future compatibility.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3315
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3316
     Retrieve a pixel at x/y; return a color.
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3317
     Pixels start at 0@0 for upper left pixel, end at
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3318
     (width-1)@(height-1) for lower right pixel.
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
  3319
     You should not use this method for image-processing, its
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3320
     very slow ...
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3321
     (it is meant to access individual pixels - for example, in a bitmap editor)"
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
  3322
7482
0e29bd25788b #QUALITY by stefan
Stefan Vogel <sv@exept.de>
parents: 7481
diff changeset
  3323
    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
  3324
    ^ self colorAtX:x y:y
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3325
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3326
    "Modified: / 21-06-1997 / 13:10:32 / cg"
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3327
    "Modified (comment): / 29-08-2017 / 14:36:09 / cg"
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
  3328
!
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
  3329
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
  3330
atX:x y:y put:aColor
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3331
    "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
  3332
     (backward compatibility with ST/X)
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3333
     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
  3334
     Use #colorAt:put: - for future compatibility.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3335
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3336
     set the pixel at x/y to aColor.
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3337
     Pixels start at 0@0 for the upper left pixel, end at
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3338
     (width-1)@(height-1) for the lower right pixel.
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  3339
     This method checks if the color can be stored in the image.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  3340
     (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
  3341
     You should not use this method for image-processing, it is very slow ...
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3342
     (it is meant to access individual pixels - for example, in a bitmap editor)"
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3343
4380
46328c4ff748 ST-80 compatibility
Claus Gittinger <cg@exept.de>
parents: 4317
diff changeset
  3344
    aColor isInteger ifTrue:[
7482
0e29bd25788b #QUALITY by stefan
Stefan Vogel <sv@exept.de>
parents: 7481
diff changeset
  3345
        ^ self pixelAtX:x y:y put:aColor
0e29bd25788b #QUALITY by stefan
Stefan Vogel <sv@exept.de>
parents: 7481
diff changeset
  3346
    ].
0e29bd25788b #QUALITY by stefan
Stefan Vogel <sv@exept.de>
parents: 7481
diff changeset
  3347
    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
  3348
    ^ self colorAtX:x y:y put:aColor
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3349
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3350
    "Modified: / 21-06-1997 / 13:10:44 / cg"
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3351
    "Modified (comment): / 29-08-2017 / 14:36:15 / cg"
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3352
!
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3353
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3354
atX:x y:y putValue:aPixelValue
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3355
    "set the pixel at x/y to aPixelValue.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3356
     The interpretation of the pixelValue depends on the photometric
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3357
     and the colormap. (see also: Image>>atX:y:put:)
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3358
     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
  3359
     (width-1) @ (height-1) for the lower right pixel.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3360
     You should not use this method for image-processing, its
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3361
     very slow ...
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3362
     (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
  3363
3433
809312fa7e4f Use <resource:#obsolete>
Stefan Vogel <sv@exept.de>
parents: 3426
diff changeset
  3364
    <resource:#obsolete>
809312fa7e4f Use <resource:#obsolete>
Stefan Vogel <sv@exept.de>
parents: 3426
diff changeset
  3365
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3366
    self obsoleteMethodWarning:'use #pixelAtX:y:put:'.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3367
    ^ self pixelAtX:x y:y put:aPixelValue.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3368
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3369
    "Modified: 24.4.1997 / 17:15:45 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3370
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3371
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3372
bits
7373
61933c223183 added metaData instVar (for free use by image reader)
Claus Gittinger <cg@exept.de>
parents: 7363
diff changeset
  3373
    "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
  3374
     depending on the photometric, this has to be interpreted as monochrome,
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
  3375
     greyscale, palette or rgb data.
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  3376
     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
  3377
     will store 2 pixels per byte, whereas a 2-bitPerPixel image will store
be0fa075e4c4 comment
Claus Gittinger <cg@exept.de>
parents: 4414
diff changeset
  3378
     4 pixels per byte."
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3379
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
  3380
    bytes isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3381
        pixelFunction notNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3382
            self createPixelStore.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3383
            0 to:height-1 do:[:y |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3384
                0 to:width-1 do:[:x |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3385
                    self pixelAtX:x y:y put:(pixelFunction value:x value:y)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3386
                ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3387
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3388
        ].
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
  3389
    ].
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3390
    ^ bytes
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3391
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3392
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3393
colAt:x into:aPixelBuffer
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3394
    "fill aBuffer with pixel values retrieved from a single column.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3395
     (eg. a vertical span)    
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3396
     Notice: row/column coordinates start at 0."
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3397
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3398
    ^ self colAt:x into:aPixelBuffer startingAt:1
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3399
!
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3400
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3401
colAt:x into:aPixelBuffer startingAt:startIndex
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3402
    "fill aBuffer with pixel values retrieved from a single column.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3403
     (eg. a vertical span)    
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3404
     Notice: row/column coordinates start at 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3405
     This is a slow fallBack method, which works with any depth;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3406
     concrete image subclasses should redefine this for more performance."
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3407
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3408
    |h "{ Class: SmallInteger }"|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3409
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3410
    h := height-1.    
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3411
    0 to:h do:[:row |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3412
        aPixelBuffer at:(row + startIndex) put:(self pixelAtX:x y:row)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3413
    ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3414
!
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
colAt:x putAll:pixelArray
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3417
    "store a single column's pixels from bits in the argument;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3418
     (eg. a vertical span)    
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3419
     Notice: row/column coordinates start at 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3420
     This is a slow fallBack method, which works with any depth;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3421
     concrete image subclasses should redefine this for more performance."
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3422
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3423
    ^ self colAt:x putAll:pixelArray startingAt:1
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3424
!
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3425
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3426
colAt:x putAll:pixelArray startingAt:startIndex
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3427
    "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
  3428
     (eg. a vertical span)    
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3429
     Notice: row/column coordinates start at 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3430
     This is a slow fallBack method, which works with any depth;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3431
     concrete image subclasses should redefine this for more performance."
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3432
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3433
    |h "{ Class: SmallInteger }"|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3434
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3435
    h := height-1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3436
    0 to:h do:[:row |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3437
        self pixelAtX:x y:row put:(pixelArray at:(row + startIndex))
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
    ^ pixelArray
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3440
!
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3441
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3442
colorAt:aPoint
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3443
    "retrieve a pixel at x/y; return a color.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3444
     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
  3445
     (width-1)@(height-1) for lower right pixel.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3446
     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
  3447
     very slow ...
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3448
     (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
  3449
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3450
    ^ self colorAtX:(aPoint x) y:(aPoint y)
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3451
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3452
    "Created: 24.4.1997 / 17:02:31 / cg"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3453
!
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3454
1962
8c7377d243f6 save mask in storeOn.
tz
parents: 1950
diff changeset
  3455
colorAt: aPoint put:aColor
8c7377d243f6 save mask in storeOn.
tz
parents: 1950
diff changeset
  3456
8c7377d243f6 save mask in storeOn.
tz
parents: 1950
diff changeset
  3457
    self colorAtX: aPoint x y: aPoint y put:aColor
8c7377d243f6 save mask in storeOn.
tz
parents: 1950
diff changeset
  3458
!
8c7377d243f6 save mask in storeOn.
tz
parents: 1950
diff changeset
  3459
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3460
colorAtX:x y:y
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3461
    "retrieve a pixel at x/y; return a color.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3462
     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
  3463
     (width-1)@(height-1) for lower right pixel.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3464
     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
  3465
     very slow ...
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3466
     (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
  3467
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3468
    |pixel|
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3469
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3470
    pixel := self pixelAtX:x y:y.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3471
    ^ self colorFromValue:pixel
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3472
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3473
    "Modified: 24.4.1997 / 16:18:53 / cg"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3474
    "Created: 24.4.1997 / 17:00:52 / cg"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3475
!
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3476
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3477
colorAtX:x y:y put:aColor
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3478
    "set the pixel at x/y to aColor.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3479
     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
  3480
     (width-1)@(height-1) for the lower right pixel.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3481
     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
  3482
     (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
  3483
     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
  3484
     (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
  3485
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3486
    |pixel|
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3487
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3488
    pixel := self valueFromColor:aColor.
2182
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3489
    pixel isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3490
        ^ UnrepresentableColorSignal raiseErrorString:'cannot store color - not in colormap'.
2182
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3491
    ].
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3492
    self pixelAtX:x y:y put:pixel.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3493
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3494
    "Modified: 24.4.1997 / 17:36:20 / cg"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3495
!
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3496
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3497
data
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3498
    "for backward compatibility - will vanish"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3499
3433
809312fa7e4f Use <resource:#obsolete>
Stefan Vogel <sv@exept.de>
parents: 3426
diff changeset
  3500
    <resource:#obsolete>
809312fa7e4f Use <resource:#obsolete>
Stefan Vogel <sv@exept.de>
parents: 3426
diff changeset
  3501
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3502
    self obsoleteMethodWarning:'use #bits'.
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
  3503
    ^ self bits
1660
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
    "Modified: 24.4.1997 / 17:37:57 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3506
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3507
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3508
data:aByteArray
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3509
    "for backward compatibility - will vanish"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  3510
4175
a9e65365e590 Mark obsolete methods
Stefan Vogel <sv@exept.de>
parents: 4173
diff changeset
  3511
    <resource:#obsolete>
3966
950a2db201c7 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3964
diff changeset
  3512
    self obsoleteMethodWarning:'use #bits:'.
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
  3513
    self bits:aByteArray
1660
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
    "Modified: 24.4.1997 / 17:38:18 / cg"
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
2182
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3518
maskAt:aPoint
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3519
    "retrieve the maskValue at aPoint - an integer number which is
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3520
     0 for masked pixels (invisible), 1 for unmasked (visible).
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3521
     For images without mask, 1 is returned for all pixels."
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3522
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3523
    ^ self maskAtX:aPoint x y:aPoint y
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3524
!
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3525
3457
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
  3526
maskAt:aPoint put:maskValue
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
  3527
    "set the maskValue at aPoint - an integer number which is
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
  3528
     0 for masked pixels (invisible), 1 for unmasked (visible)."
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
  3529
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
  3530
    ^ self maskAtX:aPoint x y:aPoint y put:maskValue
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
  3531
!
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
  3532
2182
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3533
maskAtX:x y:y
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3534
    "retrieve the maskValue at aPoint - an integer number which is
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3535
     0 for masked pixels (invisible), 1 for unmasked (visible).
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3536
     For images without mask, 1 is returned for all pixels."
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3537
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3538
    mask isNil ifTrue:[^ 1].
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3539
    ^ mask pixelAtX:x y:y
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3540
!
9ca11fd1d0fb addd maskAt: accessors;
Claus Gittinger <cg@exept.de>
parents: 2113
diff changeset
  3541
3457
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
  3542
maskAtX:x y:y put:maskValue
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
  3543
    "set the maskValue at aPoint - an integer number which is
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
  3544
     0 for masked pixels (invisible), 1 for unmasked (visible)."
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
  3545
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
  3546
    mask isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3547
        maskValue == 1 ifTrue:[^ self].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3548
        self error:'image has no mask'.
3457
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
  3549
    ].
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
  3550
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
  3551
    ^ mask pixelAtX:x y:y put:maskValue
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
  3552
!
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
  3553
2205
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  3554
pixelAt:aPoint
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  3555
    "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
  3556
     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
  3557
     (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
  3558
     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
  3559
     very slow ...
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  3560
     (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
  3561
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  3562
    ^ 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
  3563
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  3564
    "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
  3565
!
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  3566
2380
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  3567
pixelAt:aPoint put:aPixelValue
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  3568
    "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
  3569
     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
  3570
     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
  3571
     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
  3572
     (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
  3573
     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
  3574
     very slow ...
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  3575
     (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
  3576
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  3577
    ^ 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
  3578
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  3579
    "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
  3580
!
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
  3581
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3582
pixelAtX:x y:y
7519
c0603c8183dc #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7511
diff changeset
  3583
    "retrieve the pixelValue at aPoint; return a pixel (an integer number).
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3584
     Pixels start at 0/0 for upper left pixel, and end at
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3585
     width-1@height-1 for lower right pixel.
7519
c0603c8183dc #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7511
diff changeset
  3586
     The returned number's interpretation depends on the photometric
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3587
     and the colormap. (see also Image>>at: and Image>>atX:y:)
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3588
     You should not use this method for image-processing of
7519
c0603c8183dc #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7511
diff changeset
  3589
     big images, it's very slow ...
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  3590
     (it is meant to access individual pixels - for example, in a bitmap editor)"
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
  3591
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
  3592
    pixelFunction notNil ifTrue:[^ pixelFunction value:x value:y].
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
  3593
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
  3594
    ^ self subclassResponsibility
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3595
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3596
    "Created: 24.4.1997 / 16:06:56 / cg"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3597
!
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3598
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3599
pixelAtX:x y:y put:aPixelValue
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3600
    "set the pixel at x/y to aPixelValue.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3601
     The interpretation of the pixelValue depends on the photometric
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3602
     and the colormap. (see also: Image>>atX:y:put:)
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3603
     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
  3604
     (width-1) @ (height-1) for the lower right pixel.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3605
     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
  3606
     very slow ...
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3607
     (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
  3608
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3609
    ^ self subclassResponsibility
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3610
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3611
    "Created: 24.4.1997 / 17:05:11 / cg"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3612
!
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3613
4117
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
  3614
rgbValueAt:aPoint
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3615
    "retrieve a pixel's rgb value at x/y; 
8326
ff1b239ffe17 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  3616
     return a 24bit rgbValue (rrggbb, red is MSB),
ff1b239ffe17 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  3617
     or 32bit for alpha images (aarrggbb, alpha is MSB).
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3618
     Pixels start at 0@0 for the upper left pixel, 
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3619
     and end at (width-1)@(height-1) for the lower right pixel."
4117
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
  3620
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
  3621
    ^ self rgbValueAtX:(aPoint x) y:(aPoint y)
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3622
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3623
    "Modified (comment): / 29-08-2017 / 14:36:33 / cg"
4117
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
  3624
!
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
  3625
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
  3626
rgbValueAtX:x y:y
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3627
    "retrieve a pixel's rgb value at x/y; 
8326
ff1b239ffe17 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  3628
     return a 24bit rgbValue (rrggbb, red is MSB),
ff1b239ffe17 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  3629
     or 32bit for alpha images (aarrggbb, alpha is MSB).
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3630
     Pixels start at 0@0 for the upper left pixel, 
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3631
     and end at (width-1)@(height-1) for the lower right pixel."
4117
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
  3632
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
  3633
    |pixel|
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
  3634
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
  3635
    pixel := self pixelAtX:x y:y.
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
  3636
    ^ self rgbFromValue:pixel
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3637
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3638
    "Modified (comment): / 29-08-2017 / 14:36:48 / cg"
4117
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
  3639
!
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
  3640
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 6037
diff changeset
  3641
rgbValueAtX:x y:y put:newRGBValue
8326
ff1b239ffe17 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  3642
    "expects a 24bit rgbValue (rrggbb, red is MSB),
ff1b239ffe17 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  3643
     or 32bit for alpha images (aarrggbb, alpha is MSB)."
ff1b239ffe17 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  3644
4858
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
  3645
    |value|
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
  3646
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
  3647
    value := self valueFromRGB:newRGBValue.
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
  3648
    self pixelAtX:x y:y put:value.
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
  3649
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
  3650
    "Created: / 15-01-2008 / 15:56:10 / cg"
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
  3651
!
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
  3652
3872
390fabbc3036 comments and slight cleanup
Claus Gittinger <cg@exept.de>
parents: 3871
diff changeset
  3653
rowAt:y
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3654
    "retrieve an array filled with pixel values from a single row.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3655
     (eg. a horizontal span)    
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3656
     Notice: row/column coordinates start at 0.
8326
ff1b239ffe17 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  3657
     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
  3658
     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
  3659
     concrete image subclasses should redefine this for more performance."
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3661
    |pixelArray|
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3662
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3663
    pixelArray := self pixelArraySpecies new:width.
3872
390fabbc3036 comments and slight cleanup
Claus Gittinger <cg@exept.de>
parents: 3871
diff changeset
  3664
    self rowAt:y into:pixelArray startingAt:1.
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3665
    ^ pixelArray
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3666
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3667
    "
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3668
     |i|
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3669
3476
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
  3670
     i := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3671
     (i rowAt:0) inspect
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3672
    "
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3673
    "
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3674
     |i|
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3675
4168
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
  3676
     i := Image fromFile:'libtool/bitmaps/SBrowser.xbm'.
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3677
     (i rowAt:0) inspect
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3678
    "
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3679
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3680
    "Modified: 24.4.1997 / 15:51:24 / cg"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3681
!
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3682
3872
390fabbc3036 comments and slight cleanup
Claus Gittinger <cg@exept.de>
parents: 3871
diff changeset
  3683
rowAt:y into:aPixelBuffer
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3684
    "fill aBuffer with pixel values retrieved from a single row.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3685
     (eg. a horizontal span)    
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.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3687
     Notice: row/column coordinates start at 0."
3872
390fabbc3036 comments and slight cleanup
Claus Gittinger <cg@exept.de>
parents: 3871
diff changeset
  3688
390fabbc3036 comments and slight cleanup
Claus Gittinger <cg@exept.de>
parents: 3871
diff changeset
  3689
    ^ self rowAt:y into:aPixelBuffer startingAt:1
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3690
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3691
    "Created: 24.4.1997 / 15:44:46 / cg"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3692
    "Modified: 24.4.1997 / 15:51:35 / cg"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3693
!
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3694
3872
390fabbc3036 comments and slight cleanup
Claus Gittinger <cg@exept.de>
parents: 3871
diff changeset
  3695
rowAt:y into:aPixelBuffer startingAt:startIndex
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3696
    "fill aBuffer with pixel values retrieved from a single row.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3697
     (eg. a horizontal span)    
8326
ff1b239ffe17 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  3698
     The interpretation of the pixel values depends on the photometric.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3699
     Notice: row/column coordinates start at 0.
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3700
     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
  3701
     concrete image subclasses should redefine this for more performance."
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
    |w "{ Class: SmallInteger }"|
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3704
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3705
    w := width-1.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3706
    0 to:w do:[:col |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3707
        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
  3708
    ].
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3709
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3710
    "Created: 24.4.1997 / 15:05:21 / cg"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3711
    "Modified: 24.4.1997 / 16:52:43 / cg"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3712
!
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3713
3872
390fabbc3036 comments and slight cleanup
Claus Gittinger <cg@exept.de>
parents: 3871
diff changeset
  3714
rowAt:y putAll:pixelArray
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3715
    "store a single row's pixels from bits in the argument;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3716
     (eg. a horizontal span)    
8326
ff1b239ffe17 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  3717
     The interpretation of the pixel values depends on the photometric.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3718
     Notice: row/column coordinates start at 0.
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3719
     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
  3720
     concrete image subclasses should redefine this for more performance."
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3721
8326
ff1b239ffe17 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  3722
    self rowAt:y putAll:pixelArray startingAt:1
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3723
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3724
    "Modified: 24.4.1997 / 15:51:58 / cg"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3725
!
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3726
3872
390fabbc3036 comments and slight cleanup
Claus Gittinger <cg@exept.de>
parents: 3871
diff changeset
  3727
rowAt:y putAll:pixelArray startingAt:startIndex
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3728
    "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
  3729
     (eg. a horizontal span)
ff1b239ffe17 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  3730
     The interpretation of the pixel values depends on the photometric.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3731
     Notice: row/column coordinates start at 0.
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3732
     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
  3733
     concrete image subclasses should redefine this for more performance."
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3734
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3735
    |w "{ Class: SmallInteger }"|
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3736
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3737
    w := width-1.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3738
    0 to:w do:[:col |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3739
        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
  3740
    ].
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
    "Modified: 24.4.1997 / 17:05:57 / cg"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3743
!
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3744
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3745
valueAt:aPoint
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3746
    "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
  3747
     (backward compatibility with ST/X)
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3748
     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
  3749
     Use #pixelAt: - for future compatibility.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3750
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3751
     Retrieve the pixelValue at aPoint; return an integer number.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3752
     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
  3753
     width-1@height-1 for lower right pixel.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3754
     The returned numbers interpretation depends on the photometric
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3755
     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
  3756
     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
  3757
     very slow ...
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3758
     (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
  3759
1764
01101be8bd5c obsolete warning messages
Claus Gittinger <cg@exept.de>
parents: 1763
diff changeset
  3760
    '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
  3761
    ^ self pixelAtX:aPoint x y:aPoint y
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3762
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3763
    "Modified: / 21-06-1997 / 13:11:19 / cg"
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3764
    "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
  3765
!
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3766
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3767
valueAtX:x y:y
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3768
    "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
  3769
     (backward compatibility with ST/X)
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3770
     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
  3771
     Use #pixelAt: - for future compatibility.
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
     Retrieve the pixelValue at aPoint; return an integer number.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3774
     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
  3775
     width-1@height-1 for lower right pixel.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3776
     The returned numbers interpretation depends on the photometric
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3777
     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
  3778
     You should not use this method for image-processing of
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  3779
     big images, its very slow ...
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3780
     (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
  3781
1764
01101be8bd5c obsolete warning messages
Claus Gittinger <cg@exept.de>
parents: 1763
diff changeset
  3782
    '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
  3783
    ^ self pixelAtX:x y:y
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  3784
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3785
    "Modified: / 21-06-1997 / 13:11:29 / cg"
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
  3786
    "Modified (comment): / 29-08-2017 / 14:36:57 / cg"
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3787
! !
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3788
3263
bd92a12c9316 category changes
Claus Gittinger <cg@exept.de>
parents: 3259
diff changeset
  3789
!Image methodsFor:'accessing-private'!
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3790
8242
5ca21d0d739d #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 8231
diff changeset
  3791
bits:aByteArrayOrNil
5ca21d0d739d #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 8231
diff changeset
  3792
    "set the raw pixel data.
5ca21d0d739d #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 8231
diff changeset
  3793
     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
  3794
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3795
     This interface is only to be used when initializing
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3796
     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
  3797
     existing image may confuse later pixel interpretation
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
  3798
     (it does not care for colormaps and/or cached device image flushing)."
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3799
6894
0fc111a48edf class: Image
Claus Gittinger <cg@exept.de>
parents: 6862
diff changeset
  3800
    |expectedSize d|
0fc111a48edf class: Image
Claus Gittinger <cg@exept.de>
parents: 6862
diff changeset
  3801
8242
5ca21d0d739d #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 8231
diff changeset
  3802
    bytes := aByteArrayOrNil.
6894
0fc111a48edf class: Image
Claus Gittinger <cg@exept.de>
parents: 6862
diff changeset
  3803
0fc111a48edf class: Image
Claus Gittinger <cg@exept.de>
parents: 6862
diff changeset
  3804
    "/ sanity check:
0fc111a48edf class: Image
Claus Gittinger <cg@exept.de>
parents: 6862
diff changeset
  3805
    "/ there seem to be images in some image-resource methods,
0fc111a48edf class: Image
Claus Gittinger <cg@exept.de>
parents: 6862
diff changeset
  3806
    "/ which were written with an invalid packed pixel string.
0fc111a48edf class: Image
Claus Gittinger <cg@exept.de>
parents: 6862
diff changeset
  3807
    "/ 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
  3808
    "/ If you encounter this halt,
0fc111a48edf class: Image
Claus Gittinger <cg@exept.de>
parents: 6862
diff changeset
  3809
    "/ 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
  3810
6894
0fc111a48edf class: Image
Claus Gittinger <cg@exept.de>
parents: 6862
diff changeset
  3811
    (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
  3812
        (d <= 8) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3813
            expectedSize := (self bytesPerRow * height).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3814
            bytes size < expectedSize ifTrue:[
8242
5ca21d0d739d #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 8231
diff changeset
  3815
                bytes notNil ifTrue:[
5ca21d0d739d #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 8231
diff changeset
  3816
                    Smalltalk isSmalltalkDevelopmentSystem ifTrue:[
5ca21d0d739d #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 8231
diff changeset
  3817
                        self breakPoint:#cg info:'invalid bytearray size'.
5ca21d0d739d #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 8231
diff changeset
  3818
                    ].
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3819
                ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3820
                bytes := (ByteArray new:expectedSize) replaceFrom:1 with:bytes; yourself.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3821
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3822
        ].
6894
0fc111a48edf class: Image
Claus Gittinger <cg@exept.de>
parents: 6862
diff changeset
  3823
    ].
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3824
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3825
    "Modified: 23.4.1996 / 11:08:28 / cg"
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
  3826
!
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
  3827
6900
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3828
bits:aByteArrayArg colorMap:clrMapArg
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3829
    "set the raw data.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3830
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3831
     This interface is only to be used when initializing
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3832
     instances or by image readers. Calling for a change of an
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3833
     existing image may confuse later pixel interpretation
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3834
     (it does not care for colormaps and/or cached device image flushing)."
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3835
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3836
    self bits:aByteArrayArg.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3837
    self colorMap:clrMapArg.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3838
!
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3839
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3840
bits:aByteArrayArg colorMap:clrMapArg mask:maskArg
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3841
    "set the raw data.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3842
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3843
     This interface is only to be used when initializing
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3844
     instances or by image readers. Calling for a change of an
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3845
     existing image may confuse later pixel interpretation
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3846
     (it does not care for colormaps and/or cached device image flushing)."
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3847
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3848
    self bits:aByteArrayArg.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3849
    self colorMap:clrMapArg.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3850
    self mask:maskArg
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3851
!
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3852
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3853
bits:aByteArrayArg colorMapFromArray:clrMapArg
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3854
    "set the raw data.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3855
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3856
     This interface is only to be used when initializing
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3857
     instances or by image readers. Calling for a change of an
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3858
     existing image may confuse later pixel interpretation
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3859
     (it does not care for colormaps and/or cached device image flushing)."
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3860
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3861
    self bits:aByteArrayArg.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3862
    self colorMapFromArray:clrMapArg.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3863
!
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
bits:aByteArrayArg colorMapFromArray:clrMapArg mask:maskArg
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3866
    "set the raw data.
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
     This interface is only to be used when initializing
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3869
     instances or by image readers. Calling for a change of an
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3870
     existing image may confuse later pixel interpretation
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3871
     (it does not care for colormaps and/or cached device image flushing)."
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3872
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3873
    self bits:aByteArrayArg.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3874
    self colorMapFromArray:clrMapArg.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3875
    self mask:maskArg
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
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3878
bits:aByteArrayArg mask:maskArg
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3879
    "set the raw data.
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
     This interface is only to be used when initializing
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3882
     instances or by image readers. Calling for a change of an
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3883
     existing image may confuse later pixel interpretation
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3884
     (it does not care for colormaps and/or cached device image flushing)."
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3885
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3886
    self bits:aByteArrayArg.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3887
    self mask:maskArg
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3888
!
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  3889
4115
0e783379a6b0 Use ByteArray for bitsPerSample (255 should be enough ;-)
Stefan Vogel <sv@exept.de>
parents: 4109
diff changeset
  3890
bitsPerSample:aCollection
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  3891
    "set the number of bits per sample.
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3892
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3893
     This interface is only to be used when initializing
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3894
     instances or by image readers. Calling for a change of an
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3895
     existing image may confuse later pixel interpretation."
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3896
7373
61933c223183 added metaData instVar (for free use by image reader)
Claus Gittinger <cg@exept.de>
parents: 7363
diff changeset
  3897
    "/ 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
  3898
    "/ at least for the most common cases.
7363
778803c164cd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7349
diff changeset
  3899
    "/ Prevents writers to do what is described above.
778803c164cd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7349
diff changeset
  3900
    "/ 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
  3901
    bitsPerSample :=
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3902
        #(
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3903
            #[ 8 8 8 ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3904
            #[ 4 4 4 ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3905
            #[ 8 ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3906
            #[ 4 ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3907
            #[ 2 ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3908
            #[ 1 ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3909
        ) detect:[:bps | bps sameContentsAs:aCollection] ifNone:[aCollection asByteArray].
7363
778803c164cd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7349
diff changeset
  3910
6899
4530c3bfcef8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6896
diff changeset
  3911
    samplesPerPixel isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3912
        samplesPerPixel := bitsPerSample size.
6899
4530c3bfcef8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6896
diff changeset
  3913
    ].
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3914
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3915
    "Modified: 23.4.1996 / 11:08:31 / cg"
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3916
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3917
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3918
depth:d
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3919
    "set the depth of the image.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3920
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3921
     This interface is only to be used when initializing
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3922
     instances or by image readers. Calling for a change of an
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3923
     existing image may confuse later pixel interpretation."
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3924
1362
454d644f6ff7 set depth & bitsPerPixel for ST-80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 1349
diff changeset
  3925
    depth := self depth.
7180
40dcb4638d93 #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 7176
diff changeset
  3926
    "/ bitsPerPixel := d.
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3927
    d == 24 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3928
        samplesPerPixel := 3.
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  3929
        bitsPerSample := #[8 8 8]
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3930
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3931
        d == 32 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3932
            samplesPerPixel := 4.
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  3933
            bitsPerSample := #[8 8 8 8]
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3934
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3935
            d == 16 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3936
                samplesPerPixel := 3.
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  3937
                bitsPerSample := #[5 5 5].
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3938
                "/ bitsPerPixel := 15.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3939
            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3940
                samplesPerPixel := 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3941
                bitsPerSample := ByteArray with:d
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3942
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3943
        ]
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3944
    ]
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3945
4757
60d27f8e65bb some fixes for depth32
Claus Gittinger <cg@exept.de>
parents: 4745
diff changeset
  3946
    "Modified: / 27-05-2007 / 16:59:47 / cg"
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  3947
    "Modified: / 30-01-2017 / 19:36:00 / stefan"
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3948
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3949
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3950
extent:anExtent
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3951
    "set the images extent.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3952
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3953
     This interface is only to be used when initializing
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3954
     instances or by image readers. Calling for a change of an
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3955
     existing image may confuse later pixel interpretation."
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3956
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3957
    width := anExtent x.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3958
    height := anExtent y
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3959
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3960
    "Modified: 23.4.1996 / 11:08:38 / cg"
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3961
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3962
5326
0443d8649cac *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5319
diff changeset
  3963
hasAlphaChannel
0443d8649cac *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5319
diff changeset
  3964
    ^ false
0443d8649cac *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5319
diff changeset
  3965
!
0443d8649cac *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5319
diff changeset
  3966
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3967
height:aNumber
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3968
    "set the height of the image.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3969
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3970
     This interface is only to be used when initializing
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3971
     instances or by image readers. Calling for a change of an
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3972
     existing image may confuse later pixel interpretation."
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3973
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3974
    height := aNumber
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3975
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3976
    "Modified: 23.4.1996 / 11:08:40 / cg"
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
photometric:aSymbol
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3980
    "set the photometric interpretation of the pixel values.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3981
     The argument, aSymbol is one of:
7960
8d8cace1b6e0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7958
diff changeset
  3982
        #blackIs0, #whiteIs0, #palette, #rgb, #rgba
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3983
     See TIFF documentation, from which the photometric concept is borrowed.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3984
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3985
     This interface is only to be used when initializing
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3986
     instances or by image readers. Calling for a change of an
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3987
     existing image may confuse later pixel interpretation."
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  3988
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  3989
    |b|
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  3990
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  3991
    photometric := aSymbol.
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  3992
    bitsPerSample isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3993
        photometric == #rgb ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3994
            b := self class imageDepth // 3.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3995
            bitsPerSample := ByteArray with:b with:b with:b
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3996
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3997
            bitsPerSample := ByteArray with:(self class imageDepth)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  3998
        ].
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  3999
    ].
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  4000
    samplesPerPixel isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4001
        photometric == #rgb ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4002
            samplesPerPixel := 3
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4003
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4004
            samplesPerPixel := 1
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4005
        ]
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  4006
    ].
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  4007
7960
8d8cace1b6e0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7958
diff changeset
  4008
    "Modified: / 10-06-1996 / 18:21:29 / cg"
8d8cace1b6e0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7958
diff changeset
  4009
    "Modified (comment): / 25-02-2017 / 10:41:53 / cg"
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4010
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4011
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4012
samplesPerPixel:aNumber
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4013
    "set the array of samples per pixel.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4014
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4015
     This interface is only to be used when initializing
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4016
     instances or by image readers. Calling for a change of an
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4017
     existing image may confuse later pixel interpretation."
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4018
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4019
    samplesPerPixel := aNumber
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4020
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4021
    "Modified: 23.4.1996 / 11:08:45 / cg"
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  4022
!
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  4023
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4024
width:aNumber
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4025
    "set the width of the image.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4026
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4027
     This interface is only to be used when initializing
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4028
     instances or by image readers. Calling for a change of an
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4029
     existing image may confuse later pixel interpretation."
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4030
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4031
    width := aNumber
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4032
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4033
    "Modified: 23.4.1996 / 11:08:48 / cg"
100
1b0b86c77397 co !!:*
claus
parents: 89
diff changeset
  4034
!
1b0b86c77397 co !!:*
claus
parents: 89
diff changeset
  4035
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  4036
width:w height:h
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4037
    "set the width and height of the image.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4038
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4039
     This interface is only to be used when initializing
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4040
     instances or by image readers. Calling for a change of an
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4041
     existing image may confuse later pixel interpretation."
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4042
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4043
    width := w.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4044
    height := h
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4045
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4046
    "Modified: 23.4.1996 / 11:08:53 / cg"
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
  4047
!
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
  4048
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4049
width:w height:h depth:d
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4050
    "set the width, height and depth of the image.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4051
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4052
     This interface is only to be used when initializing
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4053
     instances or by image readers. Calling for a change of an
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4054
     existing image may confuse later pixel interpretation."
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4055
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4056
    width := w.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4057
    height := h.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4058
    self depth:d.
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4059
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4060
    "Modified: 23.4.1996 / 11:08:56 / cg"
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4061
!
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4062
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4063
width:w height:h depth:d fromArray:bits
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4064
    "set the width, height, depth and pixels of the image.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4065
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4066
     This interface is only to be used when initializing
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4067
     instances or by image readers. Calling for a change of an
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4068
     existing image may confuse later pixel interpretation."
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4069
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4070
    width := w.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4071
    height := h.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4072
    self depth:d.
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
  4073
    self bits:bits
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:59 / cg"
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4076
!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4077
1433
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  4078
width:w height:h depth:d palette:aColormap
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  4079
    "set the width, height and depth of the image.
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  4080
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  4081
     This interface is only to be used when initializing
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  4082
     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
  4083
     existing image may confuse later pixel interpretation."
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  4084
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  4085
    width := w.
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  4086
    height := h.
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  4087
    self depth:d.
3863
b7ba8a04be25 always ensure colorMap is a real colorMap
Claus Gittinger <cg@exept.de>
parents: 3861
diff changeset
  4088
    self setColorMap:aColormap.
1433
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  4089
    aColormap notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4090
        photometric := #palette
4955
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
  4091
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4092
        photometric := #blackIs0
4955
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
  4093
    ].
1433
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  4094
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  4095
    "Modified: 23.4.1996 / 11:08:56 / cg"
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  4096
    "Created: 6.3.1997 / 15:23:57 / cg"
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  4097
!
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
  4098
6900
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  4099
width:w height:h photometric:p
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  4100
    "set the width, height and photometric of the image.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  4101
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  4102
     This interface is only to be used when initializing
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  4103
     instances or by image readers. Calling for a change of an
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  4104
     existing image may confuse later pixel interpretation."
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  4105
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  4106
    width := w.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  4107
    height := h.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  4108
    self photometric:p.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  4109
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  4110
    "Modified: 23.4.1996 / 11:08:56 / cg"
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  4111
!
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
  4112
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4113
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
  4114
    "set all relevant internal state of the image.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4115
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4116
     This interface is only to be used when initializing
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4117
     instances or by image readers. Calling for a change of an
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4118
     existing image may confuse later pixel interpretation."
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4119
894
1041c0edbd35 prepare to read mask/alpha channel
Claus Gittinger <cg@exept.de>
parents: 891
diff changeset
  4120
    ^ self
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4121
        width:w
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4122
        height:h
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4123
        photometric:p
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4124
        samplesPerPixel:spp
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4125
        bitsPerSample:bps
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4126
        colorMap:cm
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4127
        bits:pixels
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4128
        mask:nil
894
1041c0edbd35 prepare to read mask/alpha channel
Claus Gittinger <cg@exept.de>
parents: 891
diff changeset
  4129
1041c0edbd35 prepare to read mask/alpha channel
Claus Gittinger <cg@exept.de>
parents: 891
diff changeset
  4130
    "Modified: 20.6.1996 / 17:10:24 / cg"
1041c0edbd35 prepare to read mask/alpha channel
Claus Gittinger <cg@exept.de>
parents: 891
diff changeset
  4131
!
1041c0edbd35 prepare to read mask/alpha channel
Claus Gittinger <cg@exept.de>
parents: 891
diff changeset
  4132
1041c0edbd35 prepare to read mask/alpha channel
Claus Gittinger <cg@exept.de>
parents: 891
diff changeset
  4133
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
  4134
    "set all relevant internal state of the image.
1041c0edbd35 prepare to read mask/alpha channel
Claus Gittinger <cg@exept.de>
parents: 891
diff changeset
  4135
1041c0edbd35 prepare to read mask/alpha channel
Claus Gittinger <cg@exept.de>
parents: 891
diff changeset
  4136
     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
  4137
     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
  4138
     existing image may confuse later pixel interpretation."
1041c0edbd35 prepare to read mask/alpha channel
Claus Gittinger <cg@exept.de>
parents: 891
diff changeset
  4139
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4140
    width := w.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4141
    height := h.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4142
    photometric := p.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4143
    samplesPerPixel := spp.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4144
    bitsPerSample := bps.
3863
b7ba8a04be25 always ensure colorMap is a real colorMap
Claus Gittinger <cg@exept.de>
parents: 3861
diff changeset
  4145
    self setColorMap:cm.
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
  4146
    self bits:pixels.
894
1041c0edbd35 prepare to read mask/alpha channel
Claus Gittinger <cg@exept.de>
parents: 891
diff changeset
  4147
    mask := m.
1041c0edbd35 prepare to read mask/alpha channel
Claus Gittinger <cg@exept.de>
parents: 891
diff changeset
  4148
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4149
    "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
  4150
    "Created: 20.6.1996 / 17:09:53 / cg"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  4151
! !
48194c26a46c Initial revision
claus
parents:
diff changeset
  4152
5135
0a2a850a20cc *** empty log message ***
sr
parents: 5126
diff changeset
  4153
8726
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4154
!Image methodsFor:'comparing'!
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4155
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4156
= anImage
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4157
    anImage species = self species ifFalse:[^ false].
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4158
    anImage depth = self depth ifFalse:[^ false].
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4159
    anImage width == self width ifFalse:[^ false].
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4160
    anImage height == self height ifFalse:[^ false].
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4161
    anImage bitsPerPixel == self bitsPerPixel ifFalse:[^ false].
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4162
    anImage colorMap = self colorMap ifFalse:[^ false].
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4163
    anImage bitsPerSample = self bitsPerSample ifFalse:[^ false].
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4164
    anImage photometric = self photometric ifFalse:[^ false].
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4165
    anImage mask = self mask ifFalse:[^ false].
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4166
    anImage pixelFunction == self pixelFunction ifFalse:[^ false].
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4167
    anImage bits = self bits ifFalse:[^ false].
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4168
    ^ true
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4169
!
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4170
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4171
hash
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4172
    ^ (((depth hash
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4173
    bitXor:width hash)
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4174
    bitXor:height hash)
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4175
    bitXor:photometric hash)
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4176
    bitXor:((bytes ? #[0]) first hash)
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4177
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4178
    "
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4179
     Image fromScreen hash
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4180
    "
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4181
! !
b90ede922f20 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 8708
diff changeset
  4182
2205
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4183
!Image methodsFor:'conversion helpers'!
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4184
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4185
rgbColormapFor:aDevice
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4186
    "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
  4187
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4188
    |nColors    "{ Class: SmallInteger }"
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4189
     scaleRed scaleGreen scaleBlue
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4190
     redShift   "{ Class: SmallInteger }"
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4191
     greenShift "{ Class: SmallInteger }"
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4192
     blueShift  "{ Class: SmallInteger }"
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4193
     colorValues|
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4194
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4195
    "/ 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
  4196
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4197
    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
  4198
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4199
    "/ 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
  4200
    "/ (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
  4201
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4202
    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
  4203
    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
  4204
    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
  4205
    redShift := aDevice shiftRed.
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4206
    greenShift := aDevice shiftGreen.
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4207
    blueShift := aDevice shiftBlue.
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4208
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4209
    colorValues := Array uninitializedNew:nColors.
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4210
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4211
    0 to:nColors-1 do:[:pixel |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4212
        |clr rv gv bv v "{ Class: SmallInteger }" |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4213
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4214
        clr := self colorFromValue:pixel.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4215
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4216
        rv := (clr red * scaleRed) rounded.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4217
        gv := (clr green * scaleGreen) rounded.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4218
        bv := (clr blue * scaleBlue) rounded.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4219
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4220
        v := rv bitShift:redShift.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4221
        v := v bitOr:(gv bitShift:greenShift).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4222
        v := v bitOr:(bv bitShift:blueShift).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4223
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4224
        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
  4225
"/ clr print. ' ' print.
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4226
"/ 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
  4227
"/ ' -> ' print. v printNL.
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4228
    ].
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4229
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4230
    ^ colorValues
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4231
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4232
    "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
  4233
! !
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
  4234
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  4235
!Image methodsFor:'converting'!
48194c26a46c Initial revision
claus
parents:
diff changeset
  4236
8113
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4237
anyImageAsTrueColorFormOn:aDevice
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4238
    "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
  4239
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4240
    |form bestFormat usedDeviceDepth usedDeviceBitsPerPixel
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4241
     pixelValue "{ Class: SmallInteger }"
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4242
     h          "{ Class: SmallInteger }"
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4243
     w          "{ Class: SmallInteger }"
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4244
     pixelArray newPixelArray i rgbValue|
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4245
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4246
    bestFormat := self bestSupportedImageFormatFor:aDevice.
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4247
    usedDeviceDepth := bestFormat at:#depth.
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4248
    usedDeviceBitsPerPixel := bestFormat at:#bitsPerPixel.
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4249
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4250
    i := (Image implementorForDepth:usedDeviceBitsPerPixel) new.
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4251
    i width:width height:height.
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4252
    i createPixelStore.
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4253
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4254
    "/ now, walk over the image and replace each pixel
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4255
    h := height - 1.
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4256
    w := width - 1.
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4257
    pixelArray := self pixelArraySpecies new:width.
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4258
    newPixelArray := i pixelArraySpecies new:width.
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4259
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4260
    0 to:h do:[:y |
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4261
        self rowAt:y into:pixelArray.
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4262
        0 to:w do:[:x |
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4263
            pixelValue := pixelArray at:(x+1).
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4264
            rgbValue := self rgbFromValue:pixelValue.
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4265
            newPixelArray at:(x+1) put:rgbValue.
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4266
        ].
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4267
        i rowAt:y putAll:newPixelArray.
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
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4270
    form := Form width:width height:height depth:usedDeviceDepth onDevice:aDevice.
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4271
    form isNil ifTrue:[^ nil].
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4272
    form initGC.
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4273
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4274
    form
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4275
        copyBitsFrom:i bits
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4276
        bitsPerPixel:usedDeviceBitsPerPixel
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4277
        depth:usedDeviceDepth
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4278
        padding:8
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4279
        width:width height:height
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4280
        x:0 y:0
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4281
        toX:0 y:0.
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
    ^ form
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4284
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4285
    "Created: / 27-08-2017 / 21:06:14 / cg"
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4286
!
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
  4287
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  4288
asFormOn:aDevice
72
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
  4289
    "get a device form, with best possible approximation.
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
  4290
     remember it in case someone asks again."
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
  4291
1041
30452cf0805b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 942
diff changeset
  4292
    |form visual|
72
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
  4293
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
  4294
    ((aDevice == device) and:[deviceForm notNil]) ifTrue:[^ deviceForm].
8282
e67d591cbebb #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8279
diff changeset
  4295
    self hasAlphaChannel ifTrue:[
e67d591cbebb #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8279
diff changeset
  4296
        "/ 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
  4297
        ^ self
e67d591cbebb #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8279
diff changeset
  4298
    ].
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  4299
901
6cacd0f4eef0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 896
diff changeset
  4300
    mask notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4301
        mask := mask onDevice:aDevice
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
  4302
    ].
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
  4303
    bytes isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4304
        pixelFunction notNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4305
            self computeBitsFromPixelFunction.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4306
        ]
901
6cacd0f4eef0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 896
diff changeset
  4307
    ].
6cacd0f4eef0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 896
diff changeset
  4308
8103
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  4309
    visual := aDevice visualType.
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  4310
    
1623
56c2fd4250c8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1611
diff changeset
  4311
    (aDevice depth == 1
8524
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4312
     or:[aDevice hasGrayscales not]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4313
        form := self asMonochromeFormOn:aDevice.
2212
ddc9cb6aeb73 more caching if device forms.
Claus Gittinger <cg@exept.de>
parents: 2206
diff changeset
  4314
    ] ifFalse:[
8103
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  4315
        (visual == #StaticGray) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4316
            form := self asGrayFormOn:aDevice.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4317
        ] ifFalse:[
8103
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  4318
            (visual == #PseudoColor or:[visual == #StaticColor]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4319
                form := self asPseudoFormQuickOn:aDevice.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4320
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4321
        ]
2212
ddc9cb6aeb73 more caching if device forms.
Claus Gittinger <cg@exept.de>
parents: 2206
diff changeset
  4322
    ].
ddc9cb6aeb73 more caching if device forms.
Claus Gittinger <cg@exept.de>
parents: 2206
diff changeset
  4323
ddc9cb6aeb73 more caching if device forms.
Claus Gittinger <cg@exept.de>
parents: 2206
diff changeset
  4324
    form isNil ifTrue:[
8524
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4325
        photometric isNil ifTrue:[ 
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4326
            "/ kludge: repair a 'should not happen' situation...
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4327
            self repairPhotometric 
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4328
        ].
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4329
        (photometric == #palette) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4330
            form := self paletteImageAsFormOn:aDevice
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4331
        ] ifFalse:[
8524
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4332
            "#(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
  4333
            form := self rgbImageAsFormOn:aDevice
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4334
        ].
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4335
    ].
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4336
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4337
    (form notNil and:[device isNil or:[aDevice == device]]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4338
        "remember this form in the receiver ..."
8524
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4339
        form := form asImageForm.
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4340
        deviceForm := form.
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4341
        maskedPixelsAre0 := nil.
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4342
        device isNil ifTrue:[
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4343
            device := aDevice.
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4344
            Lobby register:self
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4345
        ] ifFalse:[
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4346
            Lobby registerChange:self
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4347
        ].
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4348
        mask notNil ifTrue:[
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4349
            self clearMaskedPixels.
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4350
        ].
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4351
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4352
        "
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4353
         can save space, by not keeping the images data-bits
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4354
         twice (here and in the device form)
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4355
        "
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4356
        form forgetBits
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  4357
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  4358
72
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
  4359
    ^ form
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4360
4173
100ca435fb0e New class Form::ImageForm for Forms that are created from Images.
Stefan Vogel <sv@exept.de>
parents: 4168
diff changeset
  4361
    "
100ca435fb0e New class Form::ImageForm for Forms that are created from Images.
Stefan Vogel <sv@exept.de>
parents: 4168
diff changeset
  4362
     |i|
100ca435fb0e New class Form::ImageForm for Forms that are created from Images.
Stefan Vogel <sv@exept.de>
parents: 4168
diff changeset
  4363
100ca435fb0e New class Form::ImageForm for Forms that are created from Images.
Stefan Vogel <sv@exept.de>
parents: 4168
diff changeset
  4364
     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
  4365
     (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
  4366
    "
100ca435fb0e New class Form::ImageForm for Forms that are created from Images.
Stefan Vogel <sv@exept.de>
parents: 4168
diff changeset
  4367
8103
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  4368
    "Modified: / 25-08-2017 / 09:41:22 / cg"
8524
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  4369
    "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
  4370
!
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4371
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4372
asGrayFormOn:aDevice
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4373
    "get a gray device form"
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4374
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4375
    ^ self asGrayFormOn:aDevice dither:DitherAlgorithm.
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4376
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4377
    "
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4378
     |i|
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4379
3476
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
  4380
     i := Image fromFile:'goodies/bitmaps/claus.gif'.
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4381
     (i asGrayFormOn:Display) inspect.
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4382
    "
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4383
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4384
    "Modified: 10.6.1996 / 17:39:30 / cg"
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4385
    "Created: 10.6.1996 / 18:44:42 / cg"
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4386
!
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4387
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4388
asGrayFormOn:aDevice dither:aDitherAlgorithm
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4389
    "get a greyscale device form, using aDitherAlgorithm."
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4390
1063
ba1bf8091bc1 unused variable cleanup
Claus Gittinger <cg@exept.de>
parents: 1057
diff changeset
  4391
    |depth|
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4392
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4393
    depth := aDevice depth.
1623
56c2fd4250c8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1611
diff changeset
  4394
    (depth == 1
56c2fd4250c8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1611
diff changeset
  4395
    or:[aDevice hasGrayscales not]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4396
        ^ self asMonochromeFormOn:aDevice
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4397
    ].
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4398
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4399
    (aDitherAlgorithm isNil
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4400
    or:[aDitherAlgorithm == #threshold]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4401
        ^ self asThresholdGrayFormOn:aDevice
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4402
    ].
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
    (aDitherAlgorithm == #pattern
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4405
    or:[aDitherAlgorithm == #ordered]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4406
        ^ self asOrderedDitheredGrayFormOn:aDevice
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4407
    ].
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4408
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4409
    ^ self asFloydSteinbergDitheredGrayFormOn:aDevice.
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4410
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4411
    "Created: 10.6.1996 / 18:42:01 / cg"
852
318a6190e31d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 851
diff changeset
  4412
    "Modified: 14.6.1996 / 15:17:28 / cg"
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4413
!
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4414
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  4415
asGrayImageDepth:depthArg
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4416
    "get a gray image from the receiver"
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4417
8209
2f0645cca9f3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8208
diff changeset
  4418
    ((self colorMap notNil and:[depthArg between:self depth and:8])
2f0645cca9f3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8208
diff changeset
  4419
     or:[self depth >= 8 "do need for dither" ]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4420
        ^ self copyWithColorMapProcessing:[:clr | Color brightness:(clr brightness)].
4417
5e5d9b696293 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  4421
    ].
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  4422
    ^ self asGrayImageDepth:depthArg dither:DitherAlgorithm.
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  4423
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  4424
    "
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  4425
     |i|
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  4426
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  4427
     i := Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif'.
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  4428
     (i asGrayImageDepth:16).
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  4429
     (i asGrayImageDepth:4).
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  4430
    "
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  4431
8209
2f0645cca9f3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8208
diff changeset
  4432
    "Modified: / 10-06-1996 / 17:39:30 / cg"
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  4433
    "Created: / 10-06-1996 / 19:07:08 / cg"
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  4434
    "Modified: / 30-01-2017 / 20:13:06 / stefan"
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  4435
    "Modified (comment): / 31-01-2017 / 13:25:29 / stefan"
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
asGrayImageDepth:depth dither:aDitherAlgorithm
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4439
    "get a greyscale image, using aDitherAlgorithm."
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4440
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4441
    (aDitherAlgorithm isNil
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4442
    or:[aDitherAlgorithm == #threshold]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4443
        ^ self asThresholdGrayImageDepth:depth
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4444
    ].
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4445
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4446
    (aDitherAlgorithm == #pattern
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4447
    or:[aDitherAlgorithm == #ordered]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4448
        ^ self asOrderedDitheredGrayImageDepth:depth
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4449
    ].
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4450
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4451
    ^ self asFloydSteinbergDitheredGrayImageDepth:depth
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4452
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4453
    "Created: 10.6.1996 / 19:08:21 / cg"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  4454
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  4455
4423
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4456
asImageWithDepth:depth
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4457
    "return a new image with another depth. Notice that this
7242
bf3a75233d55 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 7230
diff changeset
  4458
     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
  4459
     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
  4460
     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
  4461
     In the other case, use one of the dithering converters"
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4462
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4463
    |imageClass|
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4464
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4465
    imageClass := Image implementorForDepth:depth.
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4466
    ^ imageClass fromImage:self
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4467
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4468
    "
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4469
     |i|
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4470
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4471
     i := Image fromFile:'goodies/bitmaps/gifImages/claus.gif'.
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4472
     (i asImageWithDepth:24) inspect.
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4473
    "
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4474
    "
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4475
     |i|
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4476
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4477
     i := Image fromFile:'goodies/bitmaps/gifImages/claus.gif'.
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4478
     (i asImageWithDepth:4) inspect.
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4479
    "
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4480
!
dc94d8e838e8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4421
diff changeset
  4481
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  4482
asMonochromeFormOn:aDevice
48194c26a46c Initial revision
claus
parents:
diff changeset
  4483
    "get a monochrome device form"
48194c26a46c Initial revision
claus
parents:
diff changeset
  4484
72
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
  4485
    |form|
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
  4486
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
  4487
    ((aDevice == device) and:[monoDeviceForm notNil]) ifTrue:[^ monoDeviceForm].
4390
8d752f4cd9e2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4380
diff changeset
  4488
    self depth == 1 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4489
        ((aDevice == device) and:[deviceForm notNil]) ifTrue:[^ deviceForm].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4490
        ^ self asFormOn:aDevice
1935
b71d2b3766b3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1932
diff changeset
  4491
    ].
72
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
  4492
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4493
    form := self asMonochromeFormOn:aDevice dither:DitherAlgorithm.
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  4494
72
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
  4495
    (device isNil or:[aDevice == device]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4496
        "remember this form in the receiver ..."
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4497
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4498
        form notNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4499
            form := form asImageForm.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4500
            monoDeviceForm := form.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4501
            device isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4502
                device := aDevice.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4503
                Lobby register:self
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4504
            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4505
                Lobby registerChange:self
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4506
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4507
            "
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4508
             can save space, by not keeping the images data-bits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4509
             twice (here and in the device form)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4510
            "
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4511
            form forgetBits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4512
        ]
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  4513
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  4514
72
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
  4515
    ^ form
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4516
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4517
    "
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4518
     |i|
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4519
4173
100ca435fb0e New class Form::ImageForm for Forms that are created from Images.
Stefan Vogel <sv@exept.de>
parents: 4168
diff changeset
  4520
     i := Image fromFile:'goodies/bitmaps/gifImages/claus.gif'.
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4521
     (i asMonochromeFormOn:Display) inspect.
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4522
    "
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4523
1935
b71d2b3766b3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1932
diff changeset
  4524
    "Modified: 23.10.1997 / 00:44:59 / cg"
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4525
!
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4526
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4527
asMonochromeFormOn:aDevice dither:aDitherAlgorithm
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4528
    "get a monochrome device form, using aDitherAlgorithm."
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4529
1063
ba1bf8091bc1 unused variable cleanup
Claus Gittinger <cg@exept.de>
parents: 1057
diff changeset
  4530
    |monoBits|
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4531
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4532
    (aDitherAlgorithm isNil
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4533
    or:[aDitherAlgorithm == #threshold]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4534
        ^ self asThresholdMonochromeFormOn:aDevice
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4535
    ].
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4536
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4537
    aDitherAlgorithm == #burkes ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4538
        monoBits := self burkesDitheredMonochromeBits.
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4539
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4540
        aDitherAlgorithm == #stevensonArce ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4541
            monoBits := self stevensonArceDitheredMonochromeBits.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4542
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4543
            (aDitherAlgorithm == #pattern
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4544
            or:[aDitherAlgorithm == #ordered]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4545
                ^ self asOrderedDitheredGrayFormOn:aDevice.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4546
            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4547
                ^ self asFloydSteinbergDitheredMonochromeFormOn:aDevice.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4548
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4549
        ]
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4550
    ].
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
    "/
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4553
    "/ make its pixel interpretation correct for the device
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  4554
    "/
816
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
  4555
    ^ self makeDeviceMonochromeBitmapOn:aDevice fromArray:monoBits
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
  4556
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
  4557
    "Modified: 10.6.1996 / 20:18:05 / cg"
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4558
!
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4559
873
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4560
asPseudoFormQuickOn:aDevice
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4561
    "return a pseudo-deviceForm from the image.
878
b99add8dc742 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 874
diff changeset
  4562
     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
  4563
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  4564
    |f d
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  4565
     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
  4566
     w            "{ Class: SmallInteger }"
e8ceedf9aeab code cleanup & a few more SmallInteger type hints
Claus Gittinger <cg@exept.de>
parents: 2760
diff changeset
  4567
     h            "{ Class: SmallInteger }"
e8ceedf9aeab code cleanup & a few more SmallInteger type hints
Claus Gittinger <cg@exept.de>
parents: 2760
diff changeset
  4568
     dDev         "{ Class: SmallInteger }"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  4569
     nClr         "{ Class: SmallInteger }"
2772
e8ceedf9aeab code cleanup & a few more SmallInteger type hints
Claus Gittinger <cg@exept.de>
parents: 2760
diff changeset
  4570
     bytesPerLine "{ Class: SmallInteger }"
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
  4571
     usedColors pix fmt bytes|
873
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4572
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4573
    d := self depth.
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4574
    (d == 1
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4575
    or:[d == 2
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4576
    or:[d == 4
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4577
    or:[d == 8]]]) ifFalse:[^ nil].
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4578
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
  4579
    bytes := self bits.
2772
e8ceedf9aeab code cleanup & a few more SmallInteger type hints
Claus Gittinger <cg@exept.de>
parents: 2760
diff changeset
  4580
    w := width.
e8ceedf9aeab code cleanup & a few more SmallInteger type hints
Claus Gittinger <cg@exept.de>
parents: 2760
diff changeset
  4581
    h := height.
e8ceedf9aeab code cleanup & a few more SmallInteger type hints
Claus Gittinger <cg@exept.de>
parents: 2760
diff changeset
  4582
2530
81b8ffe7662f use new supportedImageFormat query from Device
Claus Gittinger <cg@exept.de>
parents: 2527
diff changeset
  4583
    "/ 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
  4584
    "/ if the padding is not supported: fail
81b8ffe7662f use new supportedImageFormat query from Device
Claus Gittinger <cg@exept.de>
parents: 2527
diff changeset
  4585
81b8ffe7662f use new supportedImageFormat query from Device
Claus Gittinger <cg@exept.de>
parents: 2527
diff changeset
  4586
    dDev := aDevice depth.
81b8ffe7662f use new supportedImageFormat query from Device
Claus Gittinger <cg@exept.de>
parents: 2527
diff changeset
  4587
    (bytesPerLine := dDev) == 8 ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4588
        bytesPerLine := (w * dDev + 7) // 8.
2530
81b8ffe7662f use new supportedImageFormat query from Device
Claus Gittinger <cg@exept.de>
parents: 2527
diff changeset
  4589
    ].
81b8ffe7662f use new supportedImageFormat query from Device
Claus Gittinger <cg@exept.de>
parents: 2527
diff changeset
  4590
2532
Claus Gittinger <cg@exept.de>
parents: 2530
diff changeset
  4591
    fmt := aDevice supportedImageFormatForDepth:dDev.
2530
81b8ffe7662f use new supportedImageFormat query from Device
Claus Gittinger <cg@exept.de>
parents: 2527
diff changeset
  4592
    fmt isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4593
        "/ cannot draw directly
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4594
        ^ nil
2530
81b8ffe7662f use new supportedImageFormat query from Device
Claus Gittinger <cg@exept.de>
parents: 2527
diff changeset
  4595
    ].
81b8ffe7662f use new supportedImageFormat query from Device
Claus Gittinger <cg@exept.de>
parents: 2527
diff changeset
  4596
    (bytesPerLine * 8) \\ (fmt at:#padding) == 0 ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4597
        "/ mhmh - ought to repad here;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4598
        "/ however, the nonQuick converter does it.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4599
        ^ nil
2530
81b8ffe7662f use new supportedImageFormat query from Device
Claus Gittinger <cg@exept.de>
parents: 2527
diff changeset
  4600
    ].
81b8ffe7662f use new supportedImageFormat query from Device
Claus Gittinger <cg@exept.de>
parents: 2527
diff changeset
  4601
873
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4602
    "/ see if all of the images colors are representable
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4603
    "/ on the device
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4604
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4605
    bits := self bitsPerPixel.
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4606
    nClr := (1 bitShift:bits).
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4607
    cMap := Array new:nClr.
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4608
    idMap := ByteArray new:nClr.
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4609
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4610
    photometric == #palette ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4611
        nClr := nClr min:(colorMap size)
873
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4612
    ].
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4613
878
b99add8dc742 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 874
diff changeset
  4614
    d == 8 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4615
        usedColors := bytes usedValues.    "gets us an array filled with used values"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4616
        1 to:nClr do:[:pixel |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4617
            (usedColors includes:(pixel - 1)) ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4618
                clr := Color black
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4619
            ] ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4620
                clr := self colorFromValue:pixel-1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4621
                clr := clr exactOn:aDevice.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4622
                clr isNil ifTrue:[^ nil].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4623
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4624
            (pix := clr colorId) isNil ifTrue:[^ nil].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4625
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4626
            cMap at:(pixel) put:clr.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4627
            idMap at:(pixel) put:pix.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4628
        ].
878
b99add8dc742 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 874
diff changeset
  4629
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4630
        1 to:nClr do:[:pixel |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4631
            clr := self colorFromValue:pixel-1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4632
            clr := clr exactOn:aDevice.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4633
            clr isNil ifTrue:[^ nil].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4634
            (pix := clr colorId) isNil ifTrue:[^ nil].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4635
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4636
            cMap at:(pixel) put:clr.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4637
            idMap at:(pixel) put:pix.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4638
        ].
873
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4639
    ].
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4640
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4641
    "/ got all colors; good - simply change depth & translate pixels
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4642
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4643
    (d == 8 and:[dDev == 8]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4644
        "/ only translate
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4645
        temp := ByteArray uninitializedNew:(w * h).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4646
        bytes expandPixels:8         "xlate only"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4647
                    width:w
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4648
                   height:h
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4649
                     into:temp
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4650
                  mapping:idMap.
873
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4651
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4652
        "/ stupid: expandPixels can only handle any-to-8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4653
        "/ compressPixels can only handle 8-to-any
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4654
        "/ However, those methods are faster
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4655
        "/ - even if we convert twice.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4656
        "/ Therefore, convert first from myDepth to 8,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4657
        "/ then from 8 to the device depth.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4658
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4659
        d ~~ 8 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4660
            temp8 := ByteArray uninitializedNew:(w * h).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4661
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4662
            bytes expandPixels:d
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4663
                         width:w
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4664
                        height:h
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4665
                          into:temp8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4666
                       mapping:idMap.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4667
            idMap := nil.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4668
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4669
            temp8 := bytes.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4670
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4671
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4672
        dDev ~~ 8 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4673
            temp := ByteArray uninitializedNew:(bytesPerLine * h).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4674
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4675
            temp8 compressPixels:dDev
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.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4680
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4681
            temp := temp8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4682
        ].
4780
03c3e810a584 Change senders of obsolete messages Form>>...on: to ...onDevice:
Stefan Vogel <sv@exept.de>
parents: 4769
diff changeset
  4683
    ].
03c3e810a584 Change senders of obsolete messages Form>>...on: to ...onDevice:
Stefan Vogel <sv@exept.de>
parents: 4769
diff changeset
  4684
03c3e810a584 Change senders of obsolete messages Form>>...on: to ...onDevice:
Stefan Vogel <sv@exept.de>
parents: 4769
diff changeset
  4685
    f := Form width:w height:h depth:dDev onDevice:aDevice.
873
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4686
    f isNil ifTrue:[^ nil].
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4687
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  4688
    f colorMap:cMap.
873
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4689
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  4690
    aDevice
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4691
        drawBits:temp
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4692
        depth:dDev
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4693
        padding:8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4694
        width:w
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4695
        height:h
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4696
        x:0 y:0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4697
        into:(f id) x:0 y:0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4698
        width:w
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4699
        height:h
7755
75f5eba88e77 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 7689
diff changeset
  4700
        with:(f initGC).
873
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4701
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4702
    ^ f
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4703
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4704
    "
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4705
     (
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4706
        (((Depth4Image
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4707
             width:4
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4708
             height:4
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4709
             fromArray:#[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4710
                            16r01 16r23
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4711
                            16r45 16r67
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4712
                            16r89 16rab
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4713
                            16rcd 16ref
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4714
                        ]))
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4715
               magnifiedBy:30
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4716
         )
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4717
          asPseudoFormQuickOn:Display
873
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4718
      ) inspect
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4719
     "
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4720
2113
c64f89f9ffba checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2102
diff changeset
  4721
    "Modified: / 7.5.1998 / 19:40:47 / cg"
873
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4722
!
f44d57cc8d05 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 869
diff changeset
  4723
1591
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  4724
clearMaskedPixels
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  4725
    "assuming that I already have a device representation
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  4726
     in deviceForm, clear any masked pixels.
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  4727
     This will allow faster drawing in the future."
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  4728
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  4729
    maskedPixelsAre0 == true ifTrue:[^ self].   "/ already cleared
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  4730
    mask isNil ifTrue:[^ self].         "/ no mask
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  4731
    deviceForm isNil ifTrue:[^ self].   "/ no device rep.
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  4732
    mask depth ~~ 1 ifTrue:[^ self].    "/ not done with alpha masks
8374
fb59fd51713a #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8329
diff changeset
  4733
    deviceForm isForm ifTrue:[
fb59fd51713a #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8329
diff changeset
  4734
        deviceForm clearMaskedPixels:(mask asFormOn:device).
fb59fd51713a #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8329
diff changeset
  4735
        maskedPixelsAre0 := true.
fb59fd51713a #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8329
diff changeset
  4736
    ].
fb59fd51713a #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8329
diff changeset
  4737
fb59fd51713a #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8329
diff changeset
  4738
    "Created: / 12-04-1997 / 12:18:05 / cg"
fb59fd51713a #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8329
diff changeset
  4739
    "Modified: / 26-05-2018 / 15:21:10 / Claus Gittinger"
1591
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  4740
!
87e1a30150c9 added #clearMaskedPixels.
Claus Gittinger <cg@exept.de>
parents: 1587
diff changeset
  4741
3104
edc88b280153 added #exactOn: - for Color-protocol compatibility
Claus Gittinger <cg@exept.de>
parents: 3092
diff changeset
  4742
exactOn:aDevice
3107
ed51e2c00f1d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3105
diff changeset
  4743
    "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
  4744
edc88b280153 added #exactOn: - for Color-protocol compatibility
Claus Gittinger <cg@exept.de>
parents: 3092
diff changeset
  4745
    ^ self onDevice:aDevice
edc88b280153 added #exactOn: - for Color-protocol compatibility
Claus Gittinger <cg@exept.de>
parents: 3092
diff changeset
  4746
!
edc88b280153 added #exactOn: - for Color-protocol compatibility
Claus Gittinger <cg@exept.de>
parents: 3092
diff changeset
  4747
3105
4fb4dcd2b055 more Color-protocol compatibility
Claus Gittinger <cg@exept.de>
parents: 3104
diff changeset
  4748
exactOrNearestOn:aDevice
3107
ed51e2c00f1d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3105
diff changeset
  4749
    "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
  4750
4fb4dcd2b055 more Color-protocol compatibility
Claus Gittinger <cg@exept.de>
parents: 3104
diff changeset
  4751
    ^ self onDevice:aDevice
4fb4dcd2b055 more Color-protocol compatibility
Claus Gittinger <cg@exept.de>
parents: 3104
diff changeset
  4752
!
4fb4dcd2b055 more Color-protocol compatibility
Claus Gittinger <cg@exept.de>
parents: 3104
diff changeset
  4753
7913
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4754
fromAlphaInImage:anImage
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4755
    "setup the receiver from the alpha channel of another image.
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4756
     WARNING:
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4757
       This implementation is a slow fallback (the loop over the
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4758
       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
  4759
       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
  4760
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4761
    |myDepth|
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4762
8504
2d8f21131bb3 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8497
diff changeset
  4763
    anImage photometric == #rgba ifFalse:[self error:'no an aplpha image'].
7913
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4764
    
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4765
    width := anImage width.
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4766
    height := anImage height.
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4767
    bitsPerSample := self bitsPerSample.
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4768
    samplesPerPixel := self samplesPerPixel.
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4769
    photometric := #blackIs0.
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4770
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4771
    myDepth := self depth.
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4772
    self bits:(ByteArray new: "uninitializedNew:"(self bytesPerRow * height) withAll:16rFF).
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4773
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4774
    myDepth == 1 ifTrue:[
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4775
        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
  4776
            |a|
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4777
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4778
            a := clr alphaByte.
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4779
            a < 128 ifTrue:[ self pixelAtX:x y:y put:0 ]
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4780
        ].
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4781
    ] ifFalse:[    
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4782
        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
  4783
            |a|
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4784
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4785
            a := clr alphaByte.
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4786
            a ~~ 255 ifTrue:[ self pixelAtX:x y:y put:a ]
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4787
        ].
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4788
    ].
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
    "Created: / 17-02-2017 / 17:43:57 / cg"
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4791
!
a4a886f5c480 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7911
diff changeset
  4792
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4793
fromForm:aForm
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4794
    "setup the receiver from a form"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4795
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4796
    |map c0 c1|
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4797
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4798
    width := aForm width.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4799
    height := aForm height.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4800
    bitsPerSample := self bitsPerSample.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4801
    samplesPerPixel := self samplesPerPixel.
924
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  4802
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  4803
    aForm hasBits ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4804
        "/ must read the data from the device
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4805
        self from:aForm in:(0@0 extent:aForm extent).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4806
        ^ self
924
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  4807
    ].
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  4808
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  4809
    "/ the form has all data available
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  4810
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
  4811
    self bits:(aForm bits).
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4812
    map := aForm colorMap.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4813
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4814
    aForm depth == 1 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4815
        map isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4816
            photometric := #whiteIs0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4817
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4818
            c0 := map at:1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4819
            c1 := map at:2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4820
            ((c0 = Color white)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4821
            and:[c1 = Color black]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4822
                photometric := #whiteIs0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4823
            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4824
                ((c0 = Color black)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4825
                and:[c1 = Color white]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4826
                    photometric := #blackIs0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4827
                ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4828
                    photometric := #palette.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4829
                    self setColorMap:(Array with:c0 with:c1).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4830
                ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4831
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4832
        ]
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4833
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4834
        map notNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4835
            photometric := #palette.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4836
            self setColorMap:(map copy).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4837
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4838
            "
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4839
             photometric stays at default
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4840
             (which is rgb for d24, greyscale for others)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4841
            "
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4842
        ]
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4843
    ].
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
  4844
924
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
  4845
    "Modified: 5.7.1996 / 16:24:31 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4846
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  4847
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4848
fromImage:anImage
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4849
    "setup the receiver from another image.
4888
7d2d5ef445e3 conversion fixes (palette problem / implizit greyscale conversion)
Claus Gittinger <cg@exept.de>
parents: 4859
diff changeset
  4850
     Color precision may be lost, if conversion is from a higher depth image.
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  4851
     WARNING:
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  4852
     This implementation is a slow fallback (the loop over the
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4853
     source pixels is very slow). If this method is used heavily, you
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4854
     may want to redefine it in concrete subclasses for common source images."
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4855
3259
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  4856
    ^ 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
  4857
!
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  4858
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  4859
fromImage:anImage photometric:photometricOrNil
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  4860
    "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
  4861
     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
  4862
     WARNING:
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
  4863
     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
  4864
     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
  4865
     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
  4866
3363
de7e8628d329 fixed conversion of 3-3-2 8-bit truecolor images
Claus Gittinger <cg@exept.de>
parents: 3273
diff changeset
  4867
    |map clr mappedRowPixels samePhotometric
1784
25b96d8904c6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1783
diff changeset
  4868
     h "{ Class: SmallInteger }"
8664
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  4869
     w "{ Class: SmallInteger }" 
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  4870
     myDepth otherDepth otherPhotometric|
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  4871
8663
b24e56c97483 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8524
diff changeset
  4872
    myDepth := self depth.
b24e56c97483 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8524
diff changeset
  4873
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4874
    width := anImage width.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4875
    height := anImage height.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4876
    bitsPerSample := self bitsPerSample.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4877
    samplesPerPixel := self samplesPerPixel.
4859
553f9013f270 only try to fetch colormap for palette images
Claus Gittinger <cg@exept.de>
parents: 4858
diff changeset
  4878
4888
7d2d5ef445e3 conversion fixes (palette problem / implizit greyscale conversion)
Claus Gittinger <cg@exept.de>
parents: 4859
diff changeset
  4879
    photometricOrNil isNil ifTrue:[
8663
b24e56c97483 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8524
diff changeset
  4880
        (myDepth <= 8) ifTrue:[
8099
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  4881
            anImage isGrayscaleImage ifTrue:[
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  4882
                self photometric:#blackIs0
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  4883
            ] ifFalse:[
8663
b24e56c97483 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8524
diff changeset
  4884
                (anImage usedColorsMax:4096) size <= (1 bitShift:myDepth) ifTrue:[
8099
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  4885
                    self photometric:#palette.
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  4886
                    self colorMap:(anImage usedColors asArray)
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  4887
                ]
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  4888
            ].    
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  4889
        ] ifFalse:[    
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  4890
            photometric := self class defaultPhotometric.
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  4891
        ].
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  4892
        
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4893
        "/ photometric := anImage photometric
4888
7d2d5ef445e3 conversion fixes (palette problem / implizit greyscale conversion)
Claus Gittinger <cg@exept.de>
parents: 4859
diff changeset
  4894
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4895
        photometricOrNil == #rgba ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4896
            samplesPerPixel == 3 ifTrue:[ photometric := #rgb ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4897
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4898
            photometric := photometricOrNil
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4899
        ].
4888
7d2d5ef445e3 conversion fixes (palette problem / implizit greyscale conversion)
Claus Gittinger <cg@exept.de>
parents: 4859
diff changeset
  4900
    ].
7d2d5ef445e3 conversion fixes (palette problem / implizit greyscale conversion)
Claus Gittinger <cg@exept.de>
parents: 4859
diff changeset
  4901
7d2d5ef445e3 conversion fixes (palette problem / implizit greyscale conversion)
Claus Gittinger <cg@exept.de>
parents: 4859
diff changeset
  4902
    photometric == #palette ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4903
        self colormapFromImage:anImage photometric:photometric.
4859
553f9013f270 only try to fetch colormap for palette images
Claus Gittinger <cg@exept.de>
parents: 4858
diff changeset
  4904
    ].
1374
ab515c0576c6 preserve mask when creating an image from another image.
Claus Gittinger <cg@exept.de>
parents: 1362
diff changeset
  4905
    self mask:anImage mask.
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  4906
8664
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  4907
    otherPhotometric := anImage photometric.
7272
4ec4788352ce #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7271
diff changeset
  4908
    otherDepth := anImage depth.
8664
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  4909
    samePhotometric := (photometric == otherPhotometric).
7272
4ec4788352ce #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7271
diff changeset
  4910
4ec4788352ce #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7271
diff changeset
  4911
    ((myDepth = otherDepth) and:[samePhotometric]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4912
        self bits:(anImage bits copy).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4913
        ^ self.
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
  4914
    ].
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
  4915
7272
4ec4788352ce #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7271
diff changeset
  4916
    self bits:(ByteArray new: "uninitializedNew:"(self bytesPerRow * height)).
4ec4788352ce #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7271
diff changeset
  4917
4ec4788352ce #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7271
diff changeset
  4918
    myDepth >= otherDepth ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4919
        otherDepth <= 12 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4920
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4921
            "/ if my depth is greater, all colors can be represented,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4922
            "/ and the loop can be done over pixel values ...
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4923
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4924
            (colorMap isNil or:[samePhotometric not]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4925
                map := Array new:(1 bitShift:otherDepth).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4926
                1 to:map size do:[:i |
8059
1e08cb836ecb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8050
diff changeset
  4927
                    |newIdx|
1e08cb836ecb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8050
diff changeset
  4928
                    
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4929
                    clr := anImage colorFromValue:(i - 1).
8059
1e08cb836ecb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8050
diff changeset
  4930
                    newIdx := self valueFromColor:clr.
1e08cb836ecb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8050
diff changeset
  4931
                    newIdx isNil ifTrue:[ 
1e08cb836ecb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8050
diff changeset
  4932
                        clr := colorMap colorNearestTo:clr.
1e08cb836ecb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8050
diff changeset
  4933
                        newIdx := self valueFromColor:clr.
1e08cb836ecb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8050
diff changeset
  4934
                        newIdx isNil ifTrue:[ self halt ].
1e08cb836ecb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8050
diff changeset
  4935
                    ].
1e08cb836ecb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8050
diff changeset
  4936
                    map at:i put:newIdx.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4937
                ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4938
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4939
            mappedRowPixels := self pixelArraySpecies new:width.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4940
            h := height-1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4941
            w := width.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4942
            0 to:h do:[:row |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4943
                anImage rowAt:row into:mappedRowPixels startingAt:1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4944
                map notNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4945
                    1 to:w do:[:i |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4946
                        mappedRowPixels at:i put:(map at:(mappedRowPixels at:i)+1)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4947
                    ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4948
                ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4949
                self rowAt:row putAll:mappedRowPixels
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4950
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4951
            ^ self
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4952
        ].
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  4953
    ].
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  4954
7272
4ec4788352ce #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7271
diff changeset
  4955
    (myDepth == 24 and:[otherDepth == 32]) ifTrue:[
8729
ac6b7e021151 #BUGFIX by Stefan Reise
sr
parents: 8726
diff changeset
  4956
        (photometric == #rgb) ifTrue:[ "/ target-photometric
ac6b7e021151 #BUGFIX by Stefan Reise
sr
parents: 8726
diff changeset
  4957
            (otherPhotometric == #argb) ifTrue:[
ac6b7e021151 #BUGFIX by Stefan Reise
sr
parents: 8726
diff changeset
  4958
                "/ low byte is alpha, to be ignored
ac6b7e021151 #BUGFIX by Stefan Reise
sr
parents: 8726
diff changeset
  4959
                self copyPixels32AlphaLowTo24From:anImage.
ac6b7e021151 #BUGFIX by Stefan Reise
sr
parents: 8726
diff changeset
  4960
                ^ self
ac6b7e021151 #BUGFIX by Stefan Reise
sr
parents: 8726
diff changeset
  4961
            ].
ac6b7e021151 #BUGFIX by Stefan Reise
sr
parents: 8726
diff changeset
  4962
            ((otherPhotometric == #rgb) or:[otherPhotometric == #rgba]) ifTrue:[
ac6b7e021151 #BUGFIX by Stefan Reise
sr
parents: 8726
diff changeset
  4963
                "/ high byte is alpha, to be ignored
ac6b7e021151 #BUGFIX by Stefan Reise
sr
parents: 8726
diff changeset
  4964
                self copyPixels32AlphaHighTo24From:anImage.
ac6b7e021151 #BUGFIX by Stefan Reise
sr
parents: 8726
diff changeset
  4965
                ^ self
ac6b7e021151 #BUGFIX by Stefan Reise
sr
parents: 8726
diff changeset
  4966
            ].
8665
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  4967
        ].
5712
b4d960599bc8 changed: #fromImage:photometric:
Claus Gittinger <cg@exept.de>
parents: 5710
diff changeset
  4968
    ].
b4d960599bc8 changed: #fromImage:photometric:
Claus Gittinger <cg@exept.de>
parents: 5710
diff changeset
  4969
8664
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  4970
    "/ this is a veeery slow fallback
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4971
    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
  4972
        self colorAtX:x y:y put:clr
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4973
    ].
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4974
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4975
    "
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  4976
     |i i2 i4 i8 i16 i24|
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4977
6496
614e100374da class: Image
Stefan Vogel <sv@exept.de>
parents: 6493
diff changeset
  4978
     i := GenericToolbarIconLibrary desktop32x32Icon2.
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4979
     i inspect.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4980
     i2 := Depth2Image fromImage:i.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4981
     i2 inspect.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4982
     i4 := Depth4Image fromImage:i.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4983
     i4 inspect.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4984
     i8 := Depth8Image fromImage:i.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4985
     i8 inspect.
6496
614e100374da class: Image
Stefan Vogel <sv@exept.de>
parents: 6493
diff changeset
  4986
     i16 := Depth16Image fromImage:i.
614e100374da class: Image
Stefan Vogel <sv@exept.de>
parents: 6493
diff changeset
  4987
     i16 inspect.
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4988
     i24 := Depth24Image fromImage:i.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4989
     i24 inspect.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  4990
    "
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  4991
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  4992
    "
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  4993
     |i i24|
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  4994
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  4995
     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
  4996
     Transcript showCR:(
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4997
        Time millisecondsToRun:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4998
            i24 := Depth24Image fromImage:i.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  4999
        ]
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  5000
     ).
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  5001
     i24 inspect.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  5002
    "
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  5003
    "
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  5004
     |i i24|
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  5005
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5006
     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
  5007
     MessageTally spyOn:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5008
        i24 := Depth24Image fromImage:i.
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  5009
     ]
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  5010
    "
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  5011
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  5012
    "Modified (format): / 30-01-2017 / 20:46:22 / stefan"
8099
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  5013
    "Modified: / 24-08-2017 / 17:28:25 / cg"
8665
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  5014
    "Modified: / 25-03-2019 / 14:43:27 / Claus Gittinger"
8729
ac6b7e021151 #BUGFIX by Stefan Reise
sr
parents: 8726
diff changeset
  5015
    "Modified: / 12-07-2019 / 14:25:48 / Stefan Reise"
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5016
!
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5017
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5018
fromSubImage:anImage in:aRectangle
7373
61933c223183 added metaData instVar (for free use by image reader)
Claus Gittinger <cg@exept.de>
parents: 7363
diff changeset
  5019
    "setup the receiver from another image, extracting a rectangular area.
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5020
     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
  5021
     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
  5022
     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
  5023
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5024
    |w h xL yT imgWidth imgHeight|
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5025
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5026
    w := aRectangle width.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5027
    h := aRectangle height.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5028
    xL := aRectangle left.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5029
    yT := aRectangle top.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5030
    imgWidth := anImage width.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5031
    imgHeight := anImage height.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5032
7373
61933c223183 added metaData instVar (for free use by image reader)
Claus Gittinger <cg@exept.de>
parents: 7363
diff changeset
  5033
    xL isFloat ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5034
        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
  5035
    ].
61933c223183 added metaData instVar (for free use by image reader)
Claus Gittinger <cg@exept.de>
parents: 7363
diff changeset
  5036
    yT isFloat ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5037
        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
  5038
    ].
61933c223183 added metaData instVar (for free use by image reader)
Claus Gittinger <cg@exept.de>
parents: 7363
diff changeset
  5039
    w isFloat ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5040
        w := (imgWidth * w) rounded.
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5041
    ].
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5042
    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
  5043
    h isFloat ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5044
        h := (imgHeight * h) rounded.
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5045
    ].
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5046
    h := h min:(imgHeight - yT).
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5047
    self fromSubImage:anImage inX:xL y:yT width:w height:h
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5048
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5049
    "
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5050
     |i i2 i4 i8 i16 i24|
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5051
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5052
     i := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5053
     i inspect.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5054
     i4 := Depth4Image fromSubImage:i in:(300@160 corner:340@200).
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5055
     i4 inspect.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5056
     i8 := Depth8Image fromSubImage:i in:(300@160 corner:340@200).
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5057
     i8 inspect.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5058
     i24 := Depth24Image fromSubImage:i in:(300@160 corner:340@200).
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5059
     i24 inspect.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5060
    "
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5061
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5062
    "Created: / 20.9.1995 / 01:06:02 / claus"
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5063
    "Modified: / 20.9.1995 / 10:15:37 / claus"
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5064
    "Modified: / 18.5.1999 / 20:06:55 / cg"
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5065
!
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5066
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5067
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
  5068
    "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
  5069
     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
  5070
     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
  5071
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5072
     WARNING:
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  5073
       This implementation is a slow fallback (the loop over the
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  5074
       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
  5075
       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
  5076
       of creating a subImage with the same depth & palette."
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5077
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5078
    |xR yB imagesMask maskClass|
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5079
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5080
    width := w.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5081
    height := h.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5082
3912
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
  5083
    self createPixelStore.
3458
b2e098e6288b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3457
diff changeset
  5084
    depth := self depth.
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5085
    bitsPerSample := self bitsPerSample.
7180
40dcb4638d93 #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 7176
diff changeset
  5086
    "/ bitsPerPixel := self bitsPerPixel.
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5087
    samplesPerPixel := self samplesPerPixel.
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5088
    self colormapFromImage:anImage.
2678
e12976d7084b raise a query signal when a loadError happens;
Claus Gittinger <cg@exept.de>
parents: 2645
diff changeset
  5089
6826
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5090
    xR := xL + w - 1.
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5091
    yB := yT + h - 1.
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  5092
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5093
    ((photometric == anImage photometric)
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  5094
    and:[self bitsPerPixel = anImage bitsPerPixel
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5095
    and:[colorMap = anImage colorMap]]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5096
        "/ can do it by value
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5097
        anImage
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5098
            valuesFromX:xL y:yT toX:xR y:yB
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5099
            do:[:x :y :pixelValue | self pixelAtX:x-xL y:y-yT put:pixelValue ]
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5100
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5101
        "/ must do it by colors
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5102
        anImage
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5103
            colorsFromX:xL y:yT toX:xR y:yB
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5104
            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
  5105
    ].
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5106
1081ccc4cbd8 class: Image
Claus Gittinger <cg@exept.de>
parents: 6797
diff changeset
  5107
    (imagesMask := anImage mask) notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5108
        imagesMask depth == 1 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5109
            maskClass := ImageMask
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5110
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5111
            maskClass := imagesMask class.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5112
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5113
        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
  5114
    ].
1963
ab2d96e4e140 care for masks in copy/copySubImage;
tz
parents: 1962
diff changeset
  5115
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5116
    "
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  5117
     |i i2 i4 i8 i16 i24|
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5118
3476
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
  5119
     i := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
191
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5120
     i inspect.
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5121
     i4 := Depth4Image fromSubImage:i in:(300@160 corner:340@200).
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5122
     i4 inspect.
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5123
     i8 := Depth8Image fromSubImage:i in:(300@160 corner:340@200).
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5124
     i8 inspect.
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5125
     i24 := Depth24Image fromSubImage:i in:(300@160 corner:340@200).
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5126
     i24 inspect.
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5127
    "
a81db32ff94b subimage extraction methods
claus
parents: 178
diff changeset
  5128
2678
e12976d7084b raise a query signal when a loadError happens;
Claus Gittinger <cg@exept.de>
parents: 2645
diff changeset
  5129
    "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
  5130
    "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
  5131
    "Modified: / 18.5.1999 / 20:06:55 / cg"
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  5132
!
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  5133
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  5134
monochromeOn:aDevice
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  5135
    "return a monochrome device image of the receiver for aDevice.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  5136
     (monochrome, even if device supports colors)"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  5137
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  5138
    ((aDevice == device) and:[monoDeviceForm notNil]) ifTrue:[^ self].
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  5139
    (device notNil and:[aDevice ~~ device]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5140
        "oops, I am already accociated to another device
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5141
         - need a copy ...
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5142
        "
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5143
        ^ self copy monochromeOn:aDevice
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  5144
    ].
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  5145
    monoDeviceForm := self asMonochromeFormOn:aDevice.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  5146
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  5147
3105
4fb4dcd2b055 more Color-protocol compatibility
Claus Gittinger <cg@exept.de>
parents: 3104
diff changeset
  5148
nearestOn:aDevice
3107
ed51e2c00f1d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3105
diff changeset
  5149
    "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
  5150
4fb4dcd2b055 more Color-protocol compatibility
Claus Gittinger <cg@exept.de>
parents: 3104
diff changeset
  5151
    ^ self onDevice:aDevice
4fb4dcd2b055 more Color-protocol compatibility
Claus Gittinger <cg@exept.de>
parents: 3104
diff changeset
  5152
!
4fb4dcd2b055 more Color-protocol compatibility
Claus Gittinger <cg@exept.de>
parents: 3104
diff changeset
  5153
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  5154
on:aDevice
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  5155
    "return an image with the same pixels as the receiver, but
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  5156
     associated to aDevice. If the receiver is not yet bound to
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  5157
     a device, this will be the receiver. Otherwise, a new image
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  5158
     is returned."
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  5159
3623
16665d9b7263 #on: -> #onDevice
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  5160
    "/ send out a warning: #on: is typically used to create views
16665d9b7263 #on: -> #onDevice
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  5161
    "/ operating on a model.
16665d9b7263 #on: -> #onDevice
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  5162
    "/ Please use #onDevice: to avoid confusion.
16665d9b7263 #on: -> #onDevice
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  5163
16665d9b7263 #on: -> #onDevice
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  5164
    <resource:#obsolete>
16665d9b7263 #on: -> #onDevice
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  5165
16665d9b7263 #on: -> #onDevice
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  5166
    self obsoleteMethodWarning:'use #onDevice:'.
3477
9440bfc0768d on: -> onDevice:
Claus Gittinger <cg@exept.de>
parents: 3476
diff changeset
  5167
    ^ self onDevice:aDevice
1496
fc27b03282af added #onDevice: for protocol completeness.
Claus Gittinger <cg@exept.de>
parents: 1488
diff changeset
  5168
!
fc27b03282af added #onDevice: for protocol completeness.
Claus Gittinger <cg@exept.de>
parents: 1488
diff changeset
  5169
fc27b03282af added #onDevice: for protocol completeness.
Claus Gittinger <cg@exept.de>
parents: 1488
diff changeset
  5170
onDevice:aDevice
fc27b03282af added #onDevice: for protocol completeness.
Claus Gittinger <cg@exept.de>
parents: 1488
diff changeset
  5171
    "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
  5172
     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
  5173
     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
  5174
     is returned."
fc27b03282af added #onDevice: for protocol completeness.
Claus Gittinger <cg@exept.de>
parents: 1488
diff changeset
  5175
2980
409e9547a45c ignore nil device in #onDevice:
Claus Gittinger <cg@exept.de>
parents: 2947
diff changeset
  5176
    aDevice isNil ifTrue:[^ self].
3477
9440bfc0768d on: -> onDevice:
Claus Gittinger <cg@exept.de>
parents: 3476
diff changeset
  5177
    ((aDevice == device) and:[deviceForm notNil]) ifTrue:[^ self].
9440bfc0768d on: -> onDevice:
Claus Gittinger <cg@exept.de>
parents: 3476
diff changeset
  5178
9440bfc0768d on: -> onDevice:
Claus Gittinger <cg@exept.de>
parents: 3476
diff changeset
  5179
    (device notNil and:[aDevice ~~ device]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5180
        "oops, I am already associated to another device
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5181
         - need a copy ...
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5182
        "
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5183
        ^ self copy onDevice:aDevice
3477
9440bfc0768d on: -> onDevice:
Claus Gittinger <cg@exept.de>
parents: 3476
diff changeset
  5184
    ].
7573
656c59bc93ad #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7565
diff changeset
  5185
    device := aDevice.
3477
9440bfc0768d on: -> onDevice:
Claus Gittinger <cg@exept.de>
parents: 3476
diff changeset
  5186
    deviceForm := self asFormOn:aDevice.
9440bfc0768d on: -> onDevice:
Claus Gittinger <cg@exept.de>
parents: 3476
diff changeset
  5187
    maskedPixelsAre0 := nil.
6496
614e100374da class: Image
Stefan Vogel <sv@exept.de>
parents: 6493
diff changeset
  5188
    mask notNil ifTrue:[
7573
656c59bc93ad #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7565
diff changeset
  5189
        mask := mask onDevice:aDevice.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  5190
        self clearMaskedPixels.
6496
614e100374da class: Image
Stefan Vogel <sv@exept.de>
parents: 6493
diff changeset
  5191
    ].
3477
9440bfc0768d on: -> onDevice:
Claus Gittinger <cg@exept.de>
parents: 3476
diff changeset
  5192
    Lobby register:self
9440bfc0768d on: -> onDevice:
Claus Gittinger <cg@exept.de>
parents: 3476
diff changeset
  5193
9440bfc0768d on: -> onDevice:
Claus Gittinger <cg@exept.de>
parents: 3476
diff changeset
  5194
    "Modified: / 22.8.1998 / 13:34:24 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  5195
! !
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  5196
7904
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5197
!Image methodsFor:'converting - dithering'!
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5198
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5199
asBurkesDitheredMonochromeImage
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5200
    "return a burkes dithered monochrome image from the receiver image.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5201
     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
  5202
     a floyd-steinberg dithered image.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5203
     Notice that floyd-steinberg dithering is faster; both because less
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5204
     error diffusion is done and due to being specially tuned."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5205
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5206
    |monoBits|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5207
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5208
    monoBits := self burkesDitheredMonochromeBits.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5209
    ^ Depth1Image width:width height:height fromArray:monoBits
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5210
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5211
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5212
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5213
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5214
     i := Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5215
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5216
     i asFloydSteinbergDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5217
     i asBurkesDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5218
     i asOrderedDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5219
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5220
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5221
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5222
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5223
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5224
     i := Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5225
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5226
     i asFloydSteinbergDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5227
     i asBurkesDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5228
     i asOrderedDitheredMonochromeImage inspect.
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
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5231
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5232
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5233
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5234
     i := Depth4Image
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5235
             width:4
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5236
             height:4
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5237
             fromArray:#[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5238
                            16r01 16r23
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5239
                            16r45 16r67
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5240
                            16r89 16rab
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5241
                            16rcd 16ref
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 := i magnifiedBy:30.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5244
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5245
     i asFloydSteinbergDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5246
     i asBurkesDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5247
     i asOrderedDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5248
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5249
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5250
    "Created: / 10-06-1996 / 12:34:44 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5251
    "Modified: / 12-06-1996 / 13:58:16 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5252
    "Modified (comment): / 16-02-2017 / 17:59:53 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5253
!
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5254
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5255
asDitheredImageUsing:colors
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5256
    "return a dithered image from the picture,
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5257
     using colors in colors for dithering."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5258
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5259
    ^ self asDitheredImageUsing:colors depth:self depth
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
asDitheredImageUsing:colors depth:d
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5263
    "return a dithered image from the picture,
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5264
     using colors in colors for dithering."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5265
8099
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  5266
    |newBits img8|
7904
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5267
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5268
    newBits := self floydSteinbergDitheredDepth8BitsColors:colors map:(0 to:colors size - 1).
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5269
    newBits isNil ifTrue:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5270
        self error:'dithering failed'
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5271
    ].
8099
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  5272
    d ~~ 8 ifTrue:[
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  5273
        img8 := Depth8Image new extent:(self extent).
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  5274
        img8 colorMap:colors.
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  5275
        img8 bits:newBits.
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  5276
        ^ (self class implementorForDepth:d) fromImage:img8.
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  5277
    ].
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  5278
    
7904
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5279
    ^ (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
  5280
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5281
    "Modified: / 30-01-2017 / 19:40:19 / stefan"
8099
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
  5282
    "Modified: / 24-08-2017 / 17:37:12 / cg"
7904
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5283
!
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5284
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5285
asErrorDitheredMonochromeImage
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5286
    "return an error-diffusion dithered monochrome image from the receiver image."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5287
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5288
    DitherAlgorithm == #burkes ifTrue:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5289
        ^ self asBurkesDitheredMonochromeImage
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5290
    ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5291
    DitherAlgorithm == #stevensonArce ifTrue:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5292
        ^ self asStevensonArceDitheredMonochromeImage
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5293
    ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5294
    ^ self asFloydSteinbergDitheredMonochromeImage
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5295
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5296
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5297
     |i|
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
     i := Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5300
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5301
     i asErrorDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5302
     i asOrderedDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5303
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5304
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5305
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5306
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5307
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5308
     i := Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5309
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5310
     i asErrorDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5311
     i asOrderedDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5312
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5313
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5314
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5315
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5316
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5317
     i := Depth4Image
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5318
             width:4
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5319
             height:4
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5320
             fromArray:#[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5321
                            16r01 16r23
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5322
                            16r45 16r67
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5323
                            16r89 16rab
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5324
                            16rcd 16ref
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5325
                        ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5326
     i := i magnifiedBy:30.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5327
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5328
     i asErrorDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5329
     i asOrderedDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5330
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5331
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5332
    "Modified: / 10-06-1996 / 14:22:30 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5333
    "Modified (comment): / 16-02-2017 / 17:58:42 / cg"
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
asFloydSteinbergDitheredDepth8FormOn:aDevice colors:fixColors
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5337
    "return a floyd-steinberg dithered pseudoForm from the picture.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5338
     Use the colors in the fixColors array.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5339
     By passing the ditherColors as extra array, this method can
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5340
     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
  5341
     for example to create dithered Depth4Images from Depth8Images."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5342
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5343
    |pseudoBits f deviceDepth map|
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
    deviceDepth := aDevice depth.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5346
    deviceDepth == 8 ifFalse:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5347
        (aDevice supportedImageFormatForDepth:8) isNil ifTrue:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5348
            ^ nil.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5349
        ]
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5350
    ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5351
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5352
    pseudoBits := self floydSteinbergDitheredDepth8BitsColors:fixColors.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5353
    pseudoBits isNil ifTrue:[^ nil].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5354
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5355
    f := Form width:width height:height depth:deviceDepth onDevice:aDevice.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5356
    f isNil ifTrue:[^ nil].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5357
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5358
    "/
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5359
    "/ have to create a funny colorMap, where
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5360
    "/ color at:index == color colorId:index
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
    map := Array new:256.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5363
    fixColors do:[:clr |
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5364
        map at:clr colorId + 1 put:clr
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
    f colorMap:map.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5367
    f bits:pseudoBits.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5368
    aDevice
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5369
        drawBits:pseudoBits
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5370
        bitsPerPixel:8
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5371
        depth:deviceDepth
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5372
        padding:8
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5373
        width:width height:height
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5374
        x:0 y:0
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5375
        into:(f id) x:0 y:0
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5376
        width:width height:height
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5377
        with:(f initGC).
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5378
    ^ f
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5379
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
     example:
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5382
        color reduction from Depth8 to Depth4 (dithering) can be done by:
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5383
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5384
     |img8 reducedImg8 img4 map form|
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
     map := #(
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5387
                  (0     0   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5388
                  (0     0 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5389
                  (0    50   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5390
                  (0    50 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5391
                  (0   100   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5392
                  (0   100 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5393
                  (100   0   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5394
                  (100   0 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5395
                  (100  50   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5396
                  (100  50 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5397
                  (100 100   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5398
                  (100 100 100)) collect:[:rgb | (Color red:(rgb at:1)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5399
                                                      green:(rgb at:2)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5400
                                                       blue:(rgb at:3)) onDevice:Display].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5401
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5402
     img8 := Image fromFile:'goodies/bitmaps/bf.im8'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5403
     form := img8 paletteImageAsDitheredPseudoFormOn:Display
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5404
                      colors:map
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5405
                        nRed:2
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5406
                      nGreen:3
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5407
                       nBlue:2.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5408
     img8 := Depth8Image fromForm:form.    'dithered version of original image'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5409
     img4 := Depth4Image fromImage:img8.
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
    "Modified: 14.6.1996 / 16:52:34 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5413
    "Created: 23.6.1997 / 15:25:37 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5414
!
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5415
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5416
asFloydSteinbergDitheredDepth8FormOn:aDevice colors:fixColors nRed:nRed nGreen:nGreen nBlue:nBlue
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5417
    "return a floyd-steinberg dithered pseudoForm from the palette picture.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5418
     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
  5419
     colors assigned to aDevice, such as the preallocated colors of the
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5420
     Color class.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5421
     By passing the ditherColors as extra array, this method can
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5422
     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
  5423
     for example to create dithered Depth4Images from Depth8Images."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5424
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5425
    |pseudoBits f deviceDepth map|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5426
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5427
    deviceDepth := aDevice depth.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5428
    deviceDepth == 8 ifFalse:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5429
        (aDevice supportedImageFormatForDepth:8) isNil ifTrue:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5430
            ^ nil
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5431
        ]
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5432
    ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5433
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5434
    pseudoBits := self floydSteinbergDitheredDepth8BitsColors:fixColors nRed:nRed nGreen:nGreen nBlue:nBlue.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5435
    pseudoBits isNil ifTrue:[^ nil].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5436
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5437
    f := Form width:width height:height depth:deviceDepth onDevice:aDevice.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5438
    f isNil ifTrue:[^ nil].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5439
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5440
    "/
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5441
    "/ have to create a funny colorMap, where
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5442
    "/ color at:index == color colorId:index
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5443
    "/
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5444
    map := Array new:256.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5445
    fixColors do:[:clr |
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5446
        map at:clr colorId + 1 put:clr
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5447
    ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5448
    f colorMap:map.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5449
    f bits:pseudoBits.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5450
    aDevice
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5451
        drawBits:pseudoBits
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5452
        bitsPerPixel:8
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5453
        depth:deviceDepth
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5454
        padding:8
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5455
        width:width height:height
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5456
        x:0 y:0
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5457
        into:(f id) x:0 y:0
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5458
        width:width height:height
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5459
        with:(f initGC).
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5460
    ^ f
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5461
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
     example:
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5464
        color reduction from Depth8 to Depth4 (dithering) can be done by:
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5465
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5466
     |img8 reducedImg8 img4 map form|
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
     map := #(
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5469
                  (0     0   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5470
                  (0     0 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5471
                  (0    50   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5472
                  (0    50 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5473
                  (0   100   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5474
                  (0   100 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5475
                  (100   0   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5476
                  (100   0 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5477
                  (100  50   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5478
                  (100  50 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5479
                  (100 100   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5480
                  (100 100 100)) collect:[:rgb | (Color red:(rgb at:1)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5481
                                                      green:(rgb at:2)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5482
                                                       blue:(rgb at:3)) onDevice:Display].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5483
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5484
     img8 := Image fromFile:'goodies/bitmaps/bf.im8'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5485
     form := img8 paletteImageAsDitheredPseudoFormOn:Display
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5486
                      colors:map
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5487
                        nRed:2
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5488
                      nGreen:3
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5489
                       nBlue:2.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5490
     img8 := Depth8Image fromForm:form.    'dithered version of original image'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5491
     img4 := Depth4Image fromImage:img8.
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
    "Modified: 14.6.1996 / 16:52:34 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5495
!
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5496
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5497
asFloydSteinbergDitheredGrayFormOn:aDevice
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5498
    "return a dithered depth-x grey form from the receiver image."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5499
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5500
    |depth bits|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5501
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5502
    depth := aDevice depth.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5503
    (depth == 1
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5504
    or:[aDevice hasGrayscales not]) ifTrue:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5505
        "/ for monochrome, there is specialized
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5506
        "/ monochrome dither code available
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5507
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5508
        bits := self floydSteinbergDitheredMonochromeBits.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5509
    ] ifFalse:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5510
        bits := self floydSteinbergDitheredGrayBitsDepth:depth.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5511
    ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5512
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5513
    ^ self makeDeviceGrayPixmapOn:aDevice depth:depth fromArray:bits
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5514
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5515
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5516
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5517
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5518
     i := Image fromFile:'goodies/bitmaps/gifImages/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5519
     (i asFloydSteinbergDitheredGrayFormOn:Display) inspect
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5520
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5521
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5522
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5523
     |i|
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
     i := Image fromFile:'bitmaps/granite.tiff'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5526
     (i asFloydSteinbergDitheredGrayFormOn:Display) inspect
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
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5529
    "Created: 10.6.1996 / 14:11:39 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5530
    "Modified: 17.4.1997 / 01:11:54 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5531
!
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
asFloydSteinbergDitheredGrayImageDepth:depth
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5534
    "return a floyd-steinberg dithered image from the receiver image."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5535
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5536
    |ditheredBits|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5537
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5538
    (depth == 1) ifTrue:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5539
        ^ self asFloydSteinbergDitheredMonochromeImage
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5540
    ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5541
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5542
    ditheredBits := self floydSteinbergDitheredGrayBitsDepth:depth.
8132
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
  5543
    ^ ((self class implementorForDepth:depth)
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
  5544
        width:width height:height fromArray:ditheredBits)
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
  5545
            photometric:#blackIs0
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
  5546
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
  5547
    "
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
  5548
     |i|
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
  5549
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
  5550
     i := Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif'.
7904
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5551
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5552
     (i asFloydSteinbergDitheredGrayImageDepth:1) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5553
     (i asFloydSteinbergDitheredGrayImageDepth:2) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5554
     (i asFloydSteinbergDitheredGrayImageDepth:4) inspect.
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
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5557
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5558
     |i|
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
     i := Depth24Image width:4 height:1
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5561
          fromArray:#[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5562
            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
  5563
            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
  5564
            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
  5565
            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
  5566
     i := i magnifiedBy:4@1.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5567
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5568
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5569
     (i asFloydSteinbergDitheredGrayImageDepth:1) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5570
     (i asFloydSteinbergDitheredGrayImageDepth:2) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5571
     (i asFloydSteinbergDitheredGrayImageDepth:4) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5572
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5573
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5574
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5575
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5576
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5577
     i := Depth24Image width:4 height:6
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5578
          fromArray:#[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5579
            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
  5580
            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
  5581
            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
  5582
            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
  5583
            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
  5584
            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
  5585
     i := i magnifiedBy:30.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5586
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5587
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5588
     (i asFloydSteinbergDitheredGrayImageDepth:1) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5589
     (i asFloydSteinbergDitheredGrayImageDepth:2) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5590
     (i asFloydSteinbergDitheredGrayImageDepth:4) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5591
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5592
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5593
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5594
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5595
     i := Image fromFile:'granite.tiff'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5596
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5597
     (i asFloydSteinbergDitheredGrayImageDepth:1) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5598
     (i asFloydSteinbergDitheredGrayImageDepth:2) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5599
     (i asFloydSteinbergDitheredGrayImageDepth:4) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5600
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5601
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5602
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5603
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5604
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5605
     i := Image fromFile:'goodies/bitmaps/gifImages/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5606
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5607
     (i asFloydSteinbergDitheredGrayImageDepth:1) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5608
     (i asFloydSteinbergDitheredGrayImageDepth:2) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5609
     (i asFloydSteinbergDitheredGrayImageDepth:4) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5610
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5611
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5612
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5613
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5614
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5615
     i := Depth4Image
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5616
             width:4
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5617
             height:4
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5618
             fromArray:#[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5619
                            16r01 16r23
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5620
                            16r45 16r67
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5621
                            16r89 16rab
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5622
                            16rcd 16ref
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 := i magnifiedBy:30.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5625
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5626
     (i asFloydSteinbergDitheredGrayImageDepth:1) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5627
     (i asFloydSteinbergDitheredGrayImageDepth:2) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5628
     (i asFloydSteinbergDitheredGrayImageDepth:4) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5629
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5630
8132
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
  5631
    "Created: / 10-06-1996 / 12:33:47 / cg"
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
  5632
    "Modified (comment): / 30-08-2017 / 01:43:56 / cg"
7904
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
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5635
asFloydSteinbergDitheredMonochromeFormOn:aDevice
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5636
    "return a dithered moncohrome form from the receiver image."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5637
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5638
    |monoBits|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5639
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5640
    monoBits := self floydSteinbergDitheredMonochromeBits.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5641
    ^ self makeDeviceMonochromeBitmapOn:aDevice fromArray:monoBits
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 f|
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 := Image fromFile:'goodies/bitmaps/gifImages/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5647
     (i asFloydSteinbergDitheredMonochromeFormOn:Display) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5648
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5649
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5650
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5651
     |i f|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5652
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5653
     i := Depth2Image width:8 height:8
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5654
          fromArray:#[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5655
                        4r0000 4r0000
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5656
                        4r0000 4r0000
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5657
                        4r1111 4r1111
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5658
                        4r1111 4r1111
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5659
                        4r2222 4r2222
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5660
                        4r2222 4r2222
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5661
                        4r3333 4r3333
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5662
                        4r3333 4r3333
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5663
                     ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5664
     (i asFloydSteinbergDitheredMonochromeFormOn:Display) inspect.
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
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5667
    "Created: 10.6.1996 / 14:11:39 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5668
    "Modified: 17.4.1997 / 01:14:02 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5669
!
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
asFloydSteinbergDitheredMonochromeImage
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5672
    "return a floyd-steinberg dithered monochrome image from the receiver image."
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
    |monoBits|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5675
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5676
    monoBits := self floydSteinbergDitheredMonochromeBits.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5677
    ^ Depth1Image width:width height:height fromArray:monoBits
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5678
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5679
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5680
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5681
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5682
     i := Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5683
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5684
     i asFloydSteinbergDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5685
     i asBurkesDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5686
     i asOrderedDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5687
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5688
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5689
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5690
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5691
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5692
     i := Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5693
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5694
     i asFloydSteinbergDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5695
     i asBurkesDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5696
     i asOrderedDitheredMonochromeImage inspect.
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
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5699
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5700
     |i|
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
     i := Depth4Image
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5703
             width:4
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5704
             height:4
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5705
             fromArray:#[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5706
                            16r01 16r23
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5707
                            16r45 16r67
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5708
                            16r89 16rab
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5709
                            16rcd 16ref
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 := i magnifiedBy:30.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5712
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5713
     i asFloydSteinbergDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5714
     i asBurkesDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5715
     i asOrderedDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5716
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5717
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5718
    "Created: / 10-06-1996 / 12:33:47 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5719
    "Modified: / 17-04-1997 / 01:15:28 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5720
    "Modified (comment): / 16-02-2017 / 17:59:16 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5721
!
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
asFloydSteinbergDitheredPseudoFormUsing:colors on:aDevice
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5724
    "return a floyd-steinberg dithered pseudoForm from the picture,
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5725
     using colors in colors for dithering."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5726
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5727
    |pseudoBits pseudoBits8 f has8BitImage deviceDepth map d|
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
    deviceDepth := aDevice depth.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5730
    has8BitImage := (deviceDepth == 8)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5731
                    or:[ (aDevice supportedImageFormatForDepth:8) notNil ].
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
    has8BitImage ifFalse:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5734
        deviceDepth == 4 ifFalse:[^ nil].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5735
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5736
        pseudoBits8 := self nfloydSteinbergDitheredDepth8BitsColors:colors.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5737
        pseudoBits8 isNil ifTrue:[^ nil].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5738
        "/ convert to devices depth
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5739
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5740
        pseudoBits := ByteArray new:(width*4+7//8 * height).
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5741
        pseudoBits8 compressPixels:4 width:width height:height into:pseudoBits mapping:nil.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5742
        d := 4.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5743
    ] ifTrue:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5744
        pseudoBits := self nfloydSteinbergDitheredDepth8BitsColors:colors.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5745
        pseudoBits isNil ifTrue:[^ nil].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5746
        d := 8.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5747
    ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5748
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5749
    f := Form width:width height:height depth:deviceDepth onDevice:aDevice.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5750
    f isNil ifTrue:[^ nil].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5751
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
    "/ have to create a funny colorMap, where
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5754
    "/ color at:index == color colorId:index
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5755
    "/
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5756
    map := Array new:256 withAll:0.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5757
    colors do:[:clr |
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5758
        clr notNil ifTrue:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5759
            map at:clr colorId + 1 put:clr
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5760
        ]
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5761
    ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5762
    f colorMap:map.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5763
    f bits:pseudoBits.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5764
    aDevice
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5765
        drawBits:pseudoBits
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5766
        bitsPerPixel:d
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5767
        depth:deviceDepth
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5768
        padding:8
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5769
        width:width height:height
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5770
        x:0 y:0
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5771
        into:(f id) x:0 y:0
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5772
        width:width height:height
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5773
        with:(f initGC).
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5774
    ^ f
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5775
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5776
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5777
     |i|
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
     i := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5780
     (i asFloydSteinbergDitheredPseudoFormUsing:(Smalltalk at:#'Color:DitherColors') on:Display) inspect
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5781
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
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5784
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5785
     i := Image fromFile:'goodies/bitmaps/gifImages/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5786
     (i asFloydSteinbergDitheredPseudoFormUsing:(Smalltalk at:#'Color:DitherColors') on:Display) inspect
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5787
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5788
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5789
    "Created: 17.6.1996 / 12:13:35 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5790
    "Modified: 5.9.1996 / 19:42:57 / cg"
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
asOrderedDitheredGrayFormOn:aDevice
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5794
    "return a dithered depth-x grey form from the receiver image.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5795
     Uses an 8x8 dithermatrix."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5796
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5797
    |depth bits|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5798
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5799
    depth := aDevice depth.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5800
    (depth == 1
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5801
    or:[aDevice hasGrayscales not]) ifTrue:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5802
        "/ for monochrome, there is highly specialized
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5803
        "/ monochrome dither code available
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5804
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5805
        ^ self asOrderedDitheredMonochromeFormOn:aDevice
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
    bits := self
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5809
                orderedDitheredGrayBitsWithDitherMatrix:(self class orderedDitherMatrixOfSize:8)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5810
                ditherWidth:8
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5811
                depth:depth.
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
    ^ self makeDeviceGrayPixmapOn:aDevice depth:depth fromArray:bits
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5814
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5815
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5816
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5817
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5818
     i := Image fromFile:'goodies/bitmaps/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5819
     (i asOrderedDitheredGrayFormOn:Display) inspect
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5820
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5821
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5822
    "Modified: 24.6.1997 / 22:19:30 / cg"
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
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5825
asOrderedDitheredGrayImageDepth:depth
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5826
    "return a dithered depth-x grey image from the receiver image.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5827
     Uses an 8x8 dithermatrix."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5828
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5829
    |dither|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5830
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5831
    dither := self class orderedDitherMatrixOfSize:8.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5832
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5833
    (depth == 1) ifTrue:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5834
        "/ for monochrome, there is highly specialized
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5835
        "/ monochrome dither code available
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5836
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5837
        ^ Depth1Image
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5838
            width:width
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5839
            height:height
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5840
            fromArray:(
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5841
                self
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5842
                    orderedDitheredMonochromeBitsWithDitherMatrix:dither
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5843
                    ditherWidth:8)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5844
    ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5845
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5846
    ^ (self class implementorForDepth:depth)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5847
        width:width
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5848
        height:height
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5849
        fromArray:(
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5850
            self
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5851
                orderedDitheredGrayBitsWithDitherMatrix:dither
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5852
                ditherWidth:8
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5853
                depth:depth)
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
     |i i1 i2 i4 i8|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5857
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5858
     i := Image fromFile:'goodies/bitmaps/gifImages/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5859
     i1 := i asOrderedDitheredGrayImageDepth:1.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5860
     i1 inspect.
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
     i2 := i asOrderedDitheredGrayImageDepth:2.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5863
     i2 inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5864
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5865
     i4 := i asOrderedDitheredGrayImageDepth:4.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5866
     i4 inspect.
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
     i8 := i asOrderedDitheredGrayImageDepth:8.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5869
     i8 inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5870
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5871
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5872
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5873
     |i i1 i2 i4 i8|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5874
     i := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5875
     i1 := i asOrderedDitheredGrayImageDepth:1.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5876
     i1 inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5877
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5878
     i2 := i asOrderedDitheredGrayImageDepth:2.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5879
     i2 inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5880
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5881
     i4 := i asOrderedDitheredGrayImageDepth:4.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5882
     i4 inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5883
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5884
     i8 := i asOrderedDitheredGrayImageDepth:8.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5885
     i8 inspect.
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
     i2 := i8 asOrderedDitheredGrayImageDepth:2.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5888
     i2 inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5889
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5890
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5891
    "Created: 7.6.1996 / 18:03:54 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5892
    "Modified: 24.6.1997 / 22:19:36 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5893
!
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5894
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5895
asOrderedDitheredMonochromeFormOn:aDevice
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5896
    "return a dithered monochrome form from the grey image.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5897
     Uses a 4x4 dithermatrix."
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
    "/ 4x4 seems a good comprimize between:
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5900
    "/    number of grey levels (8x8 is better)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5901
    "/    artifacts             (4x4 is better)
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
    "/ could look at the image and decide upon the number of
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5904
    "/ distinct colors present. Use 8x8 for high-number,
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5905
    "/ 4x4 for small number of colors ...
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5906
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5907
    ^ self
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5908
        asOrderedDitheredMonochromeFormOn:aDevice
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5909
        ditherMatrix:(self class orderedDitherMatrixOfSize:4)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5910
        ditherWidth:4
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
"/    ^ self
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5913
"/        asOrderedDitheredMonochromeFormOn:aDevice
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5914
"/        ditherMatrix:(self class orderedDitherMatrixOfSize:8)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5915
"/        ditherWidth:8
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5916
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5917
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5918
     |i f|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5919
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5920
     i := Image fromFile:'goodies/bitmaps/gifImages/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5921
     f := i asOrderedDitheredMonochromeFormOn:Display.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5922
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5923
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5924
     |i f|
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
     i := (Image fromFile:'goodies/bitmaps/winBitmaps/a11.ico') magnifiedBy:10.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5927
     f := i asOrderedDitheredMonochromeFormOn:Display.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5928
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5929
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5930
     |i f|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5931
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5932
     i := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5933
     f := i asOrderedDitheredMonochromeFormOn:Display.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5934
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5935
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5936
     |i f|
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
     i := (Image fromFile:'doc/online/pictures/PasteButton.gif') magnifiedBy:10.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5939
     f := i asOrderedDitheredMonochromeFormOn:Display.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5940
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5941
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5942
     |i f|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5943
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5944
     i := (Image fromFile:'goodies/bitmaps/gifImages/blue-ball.gif') magnifiedBy:1.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5945
     f := i asOrderedDitheredMonochromeFormOn:Display.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5946
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5947
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5948
    "Created: 7.6.1996 / 14:52:32 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5949
    "Modified: 17.4.1997 / 01:10:10 / cg"
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
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5952
asOrderedDitheredMonochromeFormOn:aDevice ditherMatrix:ditherMatrix ditherWidth:dW
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5953
    "return a dithered monochrome form from the image.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5954
     Uses the passed ditherMatrix and ditherWidth."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5955
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5956
    |monoBits|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5957
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5958
    monoBits := self orderedDitheredMonochromeBitsWithDitherMatrix:ditherMatrix ditherWidth:dW.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5959
    ^ self makeDeviceMonochromeBitmapOn:aDevice fromArray:monoBits
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5960
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5961
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5962
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5963
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5964
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5965
     i := Image fromFile:'goodies/bitmaps/gifImages/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5966
     (i asOrderedDitheredMonochromeFormOn:Display) inspect
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5967
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|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5970
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5971
     i := Image fromFile:'goodies/bitmaps/granite.tiff'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5972
     (i asOrderedDitheredMonochromeFormOn:Display) inspect
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5973
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5974
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5975
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5976
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5977
     i := (Image fromFile:'goodies/bitmaps/PasteButton.tiff') magnifiedBy:10.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5978
     (i asOrderedDitheredMonochromeFormOn:Display) inspect
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5979
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5980
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5981
    "Created: 7.6.1996 / 14:51:42 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5982
    "Modified: 17.4.1997 / 01:08:24 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5983
!
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5984
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5985
asOrderedDitheredMonochromeImage
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5986
    "return a dithered monochrome image from the receiver image.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5987
     Uses a 4x4 dithermatrix."
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
    "/ 4x4 seems a good comprimize between:
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5990
    "/    number of grey levels (8x8 is better)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5991
    "/    artifacts             (4x4 is better)
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
    "/ could look at the image and decide upon the number of
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5994
    "/ distinct colors present. Use 8x8 for high-number,
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5995
    "/ 4x4 for small number of colors ...
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5996
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5997
    ^ self
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5998
        asOrderedDitheredMonochromeImageWithDitherMatrix:(self class orderedDitherMatrixOfSize:4)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  5999
        ditherWidth:4
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6000
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6001
"/    ^ self
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6002
"/        asOrderedDitheredMonochromeImageWithDitherMatrix:(self class orderedDitherMatrixOfSize:8)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6003
"/        ditherWidth:8
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/gifImages/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6009
     i asOrderedDitheredMonochromeImage 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
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6013
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6014
     i := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6015
     i asOrderedDitheredMonochromeImage inspect
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6016
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6017
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6018
     |i|
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
     i := (Image fromFile:'doc/online/pictures/PasteButton.gif') magnifiedBy:10.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6021
     i asOrderedDitheredMonochromeImage inspect
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6022
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
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6025
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6026
     i := (Image fromFile:'goodies/bitmaps/gifImages/blue-ball.gif') magnifiedBy:1.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6027
     i asOrderedDitheredMonochromeImage inspect
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6028
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6029
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6030
     |i|
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
     i := Image fromFile:'libwidg3/bitmaps/granite.tiff'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6033
     i asOrderedDitheredMonochromeImage inspect
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6034
    "
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
    "Created: 7.6.1996 / 15:02:07 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6037
    "Modified: 10.6.1996 / 11:15:09 / cg"
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
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6040
asOrderedDitheredMonochromeImageWithDitherMatrix:ditherMatrix ditherWidth:dW
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6041
    "return a dithered monochrome image from the receiver image.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6042
     Uses the passed ditherMatrix and ditherWidth."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6043
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6044
    |monoBits|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6045
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6046
    monoBits := self orderedDitheredMonochromeBitsWithDitherMatrix:ditherMatrix ditherWidth:dW.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6047
    ^ (Depth1Image width:width height:height fromArray:monoBits) photometric:#blackIs0
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
    "order-4 dither:
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|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6052
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6053
     i := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6054
     i
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6055
        asOrderedDitheredMonochromeImageWithDitherMatrix:(Image orderedDitherMatrixOfSize:4)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6056
        ditherWidth:4
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6057
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6058
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6059
    "order-6 dither:
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:'goodies/bitmaps/gifImages/garfield.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6064
     i
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6065
        asOrderedDitheredMonochromeImageWithDitherMatrix:(Image orderedDitherMatrixOfSize:8)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6066
        ditherWidth:8
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6067
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6068
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
    "thresholding at:0.5 (all above 0.5 becomes white):
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6071
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6072
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6073
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6074
     i := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6075
     i
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6076
        asOrderedDitheredMonochromeImageWithDitherMatrix:(ByteArray new:16 withAll:8)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6077
        ditherWidth:4
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6078
    "
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
    "thresholding at: 0.25 (all above 0.25 becomes white):
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:(ByteArray new:16 withAll:3)
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
    "thresholding at: 0.75 (all above 0.75 becomes white):
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:(ByteArray new:16 withAll:11)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6097
        ditherWidth:4
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
    "Modified: 7.6.1996 / 17:23:47 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6101
!
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
asStevensonArceDitheredMonochromeImage
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6104
    "return a stevenson-arce dithered monochrome image from the receiver image.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6105
     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
  6106
     a floyd-steinberg dithered image.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6107
     Notice that floyd-steinberg dithering is faster; both because less
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6108
     error diffusion is done and due to being specially tuned."
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
    |monoBits|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6111
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6112
    monoBits := self stevensonArceDitheredMonochromeBits.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6113
    ^ (Depth1Image width:width height:height fromArray:monoBits) photometric:#blackIs0
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
    "
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
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6118
     i := Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6119
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6120
     i asFloydSteinbergDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6121
     i asBurkesDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6122
     i asStevensonArceDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6123
     i asOrderedDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6124
     (i asThresholdMonochromeImage:0.5) inspect
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6125
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6126
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6127
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6128
     |i|
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
     i := Image fromFile:'goodies/bitmaps/gifImages/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6131
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6132
     i asFloydSteinbergDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6133
     i asBurkesDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6134
     i asStevensonArceDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6135
     i asOrderedDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6136
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6137
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6138
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6139
     |i|
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
     i := Depth4Image
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6142
             width:4
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6143
             height:4
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6144
             fromArray:#[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6145
                            16r01 16r23
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6146
                            16r45 16r67
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6147
                            16r89 16rab
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6148
                            16rcd 16ref
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6149
                        ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6150
     i := i magnifiedBy:30.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6151
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6152
     i asStevensonArceDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6153
     i asOrderedDitheredMonochromeImage inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6154
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6155
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6156
    "Created: 10.6.1996 / 12:38:29 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6157
    "Modified: 12.6.1996 / 13:58:24 / cg"
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
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6160
!Image methodsFor:'converting - thresholding'!
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6161
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6162
asNearestPaintDepth8FormOn:aDevice colors:fixColors
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6163
    "return a nearest paint pseudoForm from the palette picture.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6164
     Use the colors in the fixColors array.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6165
     By passing the ditherColors as extra array, this method can
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6166
     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
  6167
     for example to create dithered Depth4Images from Depth8Images."
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
    ^ self asNearestPaintDepth8FormOn:aDevice colors:fixColors nRed:nil nGreen:nil nBlue:nil.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6170
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
     example:
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6173
        color reduction from Depth8 to Depth4 can be done by:
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6174
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6175
     |img8 reducedImg8 img4 map form|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6176
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6177
     map := #(
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6178
                  (0     0   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6179
                  (0     0 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6180
                  (0    50   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6181
                  (0    50 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6182
                  (0   100   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6183
                  (0   100 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6184
                  (100   0   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6185
                  (100   0 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6186
                  (100  50   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6187
                  (100  50 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6188
                  (100 100   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6189
                  (100 100 100)) collect:[:rgb | (Color red:(rgb at:1)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6190
                                                      green:(rgb at:2)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6191
                                                       blue:(rgb at:3)) onDevice:Display].
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
     img8 := Image fromFile:'goodies/bitmaps/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6194
     form := img8 asNearestPaintDepth8FormOn:Display
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6195
                      colors:map
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6196
                        nRed:2
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6197
                      nGreen:3
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6198
                       nBlue:2.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6199
     img8 := Depth8Image fromForm:form.    'dithered version of original image'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6200
     img4 := Depth4Image fromImage:img8.
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
    "Modified: 17.6.1996 / 18:52:47 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6204
    "Created: 23.6.1997 / 15:26:09 / cg"
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
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6207
asNearestPaintDepth8FormOn:aDevice colors:fixColors nRed:nRed nGreen:nGreen nBlue:nBlue
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6208
    "return a nearest paint pseudoForm from the palette picture.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6209
     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
  6210
     colors assigned to aDevice, such as the preallocated colors of the
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6211
     Color class.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6212
     By passing the ditherColors as extra array, this method can
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6213
     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
  6214
     for example to create dithered Depth4Images from Depth8Images."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6215
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6216
    |pseudoBits f deviceDepth map|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6217
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6218
    deviceDepth := aDevice depth.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6219
    deviceDepth == 8 ifFalse:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6220
        (aDevice supportedImageFormatForDepth:8) isNil ifTrue:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6221
            ^ nil
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6222
        ]
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
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6225
    pseudoBits := self nearestPaintDepth8BitsColors:fixColors nRed:nRed nGreen:nGreen nBlue:nBlue.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6226
    pseudoBits isNil ifTrue:[^ nil].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6227
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6228
    f := Form width:width height:height depth:deviceDepth onDevice:aDevice.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6229
    f isNil ifTrue:[^ nil].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6230
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6231
    "/
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6232
    "/ have to create a funny colorMap, where
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6233
    "/ color at:index == color colorId:index
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6234
    "/
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6235
    map := Array new:256.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6236
    fixColors do:[:clr |
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6237
        map at:clr colorId + 1 put:clr
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6238
    ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6239
    f colorMap:map.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6240
    f bits:pseudoBits.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6241
    aDevice
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6242
        drawBits:pseudoBits
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6243
        bitsPerPixel:8
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6244
        depth:deviceDepth
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6245
        padding:8
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6246
        width:width height:height
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6247
        x:0 y:0
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6248
        into:(f id) x:0 y:0
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6249
        width:width height:height
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6250
        with:(f initGC).
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6251
    ^ f
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6252
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6253
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6254
     example:
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6255
        color reduction from Depth8 to Depth4 (dithering) can be done by:
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6256
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6257
     |img8 reducedImg8 img4 map form|
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
     map := #(
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6260
                  (0     0   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6261
                  (0     0 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6262
                  (0    50   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6263
                  (0    50 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6264
                  (0   100   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6265
                  (0   100 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6266
                  (100   0   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6267
                  (100   0 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6268
                  (100  50   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6269
                  (100  50 100)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6270
                  (100 100   0)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6271
                  (100 100 100)) collect:[:rgb | (Color red:(rgb at:1)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6272
                                                      green:(rgb at:2)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6273
                                                       blue:(rgb at:3)) onDevice:Display].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6274
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6275
     img8 := Image fromFile:'goodies/bitmaps/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6276
     form := img8 asNearestPaintDepth8FormOn:Display
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6277
                      colors:map
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6278
                        nRed:2
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6279
                      nGreen:3
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6280
                       nBlue:2.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6281
     img8 := Depth8Image fromForm:form.    'dithered version of original image'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6282
     img4 := Depth4Image fromImage:img8.
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
    "Created: 17.6.1996 / 18:47:46 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6286
    "Modified: 17.6.1996 / 18:52:47 / cg"
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
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6289
asNearestPaintImageDepth:d colors:colors
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6290
    "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
  6291
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6292
    |newBits|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6293
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6294
    d ~~ 8 ifTrue:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6295
        self error:'unsupported depth'
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6296
    ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6297
    newBits := self nearestPaintDepth8BitsColors:colors nRed:nil nGreen:nil nBlue:nil.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6298
    newBits isNil ifTrue:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6299
        self error:'conversion failed'
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6300
    ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6301
    ^ (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
  6302
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6303
    "Modified: / 30-01-2017 / 19:40:28 / stefan"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6304
!
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
asThresholdGrayFormOn:aDevice
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6307
    "return a thresholded grey form from the receiver image."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6308
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6309
    |depth|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6310
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6311
    (depth := aDevice depth) == 1 ifTrue:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6312
        ^ self asThresholdMonochromeFormOn:aDevice
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6313
    ].
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
    ^ self
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6316
        makeDeviceGrayPixmapOn:aDevice
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6317
        depth:depth
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6318
        fromArray:(self
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6319
                        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
  6320
                        ditherWidth:4
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6321
                        depth:depth)
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
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6324
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6325
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6326
     i := Image fromFile:'goodies/bitmaps/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6327
     (i asThresholdGrayFormOn:Display) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6328
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6329
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6330
    "Created: 10.6.1996 / 18:38:31 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6331
    "Modified: 24.6.1997 / 22:19:46 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6332
!
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
asThresholdGrayImageDepth:depth
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6335
    "return a thresholded depth-x grey image from the receiver image."
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
    (depth == 1) ifTrue:[
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6338
        "/ for monochrome, there is highly specialized
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6339
        "/ monochrome dither code available
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6340
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6341
        ^ Depth1Image
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6342
            width:width
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6343
            height:height
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6344
            fromArray:(
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6345
                self
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6346
                    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
  6347
                    ditherWidth:4)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6348
    ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6349
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6350
    ^ (self class implementorForDepth:depth)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6351
        width:width
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6352
        height:height
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6353
        fromArray:(
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6354
            self
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6355
                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
  6356
                ditherWidth:4
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6357
                depth:depth)
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6358
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6359
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6360
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6361
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6362
     i := Image fromFile:'goodies/bitmaps/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6363
     (i asThresholdGrayImageDepth:1) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6364
     (i asThresholdGrayImageDepth:2) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6365
     (i asThresholdGrayImageDepth:4) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6366
     (i asThresholdGrayImageDepth:8) inspect.
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
     (i asOrderedDitheredGrayImageDepth:1) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6369
     (i asOrderedDitheredGrayImageDepth:2) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6370
     (i asOrderedDitheredGrayImageDepth:4) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6371
     (i asOrderedDitheredGrayImageDepth:8) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6372
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6373
     (i asFloydSteinbergDitheredGrayImageDepth:1) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6374
     (i asFloydSteinbergDitheredGrayImageDepth:2) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6375
     (i asFloydSteinbergDitheredGrayImageDepth:4) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6376
     (i asFloydSteinbergDitheredGrayImageDepth:8) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6377
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6378
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6379
    "Created: 7.6.1996 / 18:13:33 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6380
    "Modified: 24.6.1997 / 22:19:52 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6381
!
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6382
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6383
asThresholdMonochromeFormOn:aDevice
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6384
    "return a threshold monochrome form from the image."
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6385
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6386
    ^ self
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6387
        asOrderedDitheredMonochromeFormOn:aDevice
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6388
        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
  6389
        ditherWidth:4
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
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6392
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6393
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6394
     i := Image fromFile:'goodies/bitmaps/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6395
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6396
     (i asThresholdMonochromeFormOn:Display) inspect
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6397
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6398
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6399
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6400
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6401
     i := (Image fromFile:'goodies/bitmaps/a11.ico') magnifiedBy:10.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6402
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6403
     (i asThresholdMonochromeFormOn:Display) inspect
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6404
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6405
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6406
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6407
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6408
     i := Image fromFile:'goodies/bitmaps/granite.tiff'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6409
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6410
     (i asThresholdMonochromeFormOn:Display) inspect
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6411
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
     |i|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6414
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6415
     i := (Image fromFile:'goodies/bitmaps/PasteButton.tiff') magnifiedBy:10.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6416
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6417
     (i asThresholdMonochromeFormOn:Display) inspect
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6418
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6419
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6420
    "Created: 7.6.1996 / 16:15:17 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6421
    "Modified: 10.6.1996 / 17:44:29 / cg"
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
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6424
asThresholdMonochromeImage
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6425
    "return a threshold monochrome image from the image.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6426
     Threshold means: brightness < 0.5 -> black / otherwise white"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6427
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6428
    ^ self
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6429
        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
  6430
        ditherWidth:4
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
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6433
     |i i2|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6434
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6435
     i := Image fromFile:'goodies/bitmaps/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6436
     i2 := i asThresholdMonochromeImage
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6437
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 i2|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6440
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6441
     i := (Image fromFile:'/cdrom/icons/a/a11.ico') magnifiedBy:10.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6442
     i2 := i asThresholdMonochromeImage
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
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6445
     |i i2|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6446
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6447
     i := Image fromFile:'goodies/bitmaps/granite.tiff'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6448
     i2 := i asThresholdMonochromeImage
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
     |i i2|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6452
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6453
     i := (Image fromFile:'goodies/bitmaps/PasteButton.tiff') magnifiedBy:10.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6454
     i2 := i asThresholdMonochromeImage
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6455
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6456
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6457
    "Created: 7.6.1996 / 16:15:17 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6458
    "Modified: 7.6.1996 / 17:16:10 / cg"
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6459
!
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6460
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6461
asThresholdMonochromeImage:thresholdBrighness
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6462
    "return a threshold monochrome image from the image.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6463
     The argument (0..1) gives the threshold value;
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6464
     Threshold means: brightness < threshold -> black / otherwise white"
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
    |value ditherMatrix|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6467
8208
05a688e9dc8c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8194
diff changeset
  6468
    "/ here, reuse the dithering code, 
05a688e9dc8c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8194
diff changeset
  6469
    "/ passing an all-one or all-zero dither matrix
7904
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6470
    value := thresholdBrighness * 255.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6471
    ditherMatrix := ByteArray new:256 withAll:(value truncated).
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6472
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6473
    ^ self
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6474
        asOrderedDitheredMonochromeImageWithDitherMatrix:ditherMatrix
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6475
        ditherWidth:16
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6476
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|
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6479
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6480
     i := Image width:4 height:4 depth:4
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6481
                fromArray:#[ 16r01 16r23
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6482
                             16r45 16r67
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6483
                             16r89 16rab
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6484
                             16rcd 16ref ].
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6485
     i := i magnifiedBy:30.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6486
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6487
     (i asThresholdMonochromeImage:0.125) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6488
     (i asThresholdMonochromeImage:0.25) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6489
     (i asThresholdMonochromeImage:0.5) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6490
     (i asThresholdMonochromeImage:0.75) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6491
     (i asThresholdMonochromeImage:1) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6492
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6493
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6494
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6495
     |i|
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
     i := Image fromFile:'goodies/bitmaps/claus.gif'.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6498
     i inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6499
     (i asThresholdMonochromeImage:0.125) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6500
     (i asThresholdMonochromeImage:0.25) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6501
     (i asThresholdMonochromeImage:0.5) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6502
     (i asThresholdMonochromeImage:0.625) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6503
     (i asThresholdMonochromeImage:0.75) inspect.
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6504
    "
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6505
8208
05a688e9dc8c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8194
diff changeset
  6506
    "Created: / 07-06-1996 / 16:15:17 / cg"
05a688e9dc8c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8194
diff changeset
  6507
    "Modified: / 08-06-1996 / 14:51:57 / cg"
05a688e9dc8c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8194
diff changeset
  6508
    "Modified (format): / 23-10-2017 / 10:49:54 / cg"
7904
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6509
! !
0956735cde54 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7899
diff changeset
  6510
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6511
!Image methodsFor:'converting greyscale images'!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6512
8103
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6513
anyImageAsFormOn:aDevice
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6514
    "return a (usually truecolor) deviceForm from an arbitrary image."
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6515
8524
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  6516
    (samplesPerPixel == 2) ifTrue:[
8103
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6517
        'Image [info]: alpha plane ignored' infoPrintCR.
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6518
    ].
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6519
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6520
    (aDevice visualType == #TrueColor) ifTrue:[
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6521
        ^ self anyImageAsTrueColorFormOn:aDevice
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6522
    ].
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6523
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6524
    "/ PseudoColor conversion also works, although possibly with suboptimal results
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6525
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6526
    ^ self anyImageAsPseudoFormOn:aDevice
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6527
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6528
    "Created: / 25-08-2017 / 09:31:17 / cg"
8524
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  6529
    "Modified: / 19-10-2018 / 16:01:01 / Stefan Vogel"
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  6530
!
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  6531
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  6532
anyImageAsPseudoFormOn:aDevice
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  6533
    "return a (usually truecolor) deviceForm from an arbitrary image."
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  6534
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  6535
    ^ self subclassResponsibility.
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  6536
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
  6537
    "Created: / 19-10-2018 / 16:02:16 / Stefan Vogel"
8103
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6538
!
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6539
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6540
greyImageAsFormOn:aDevice
1932
6afe07d9c88c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1927
diff changeset
  6541
    "return a grey-deviceForm from the grey image."
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6542
1063
ba1bf8091bc1 unused variable cleanup
Claus Gittinger <cg@exept.de>
parents: 1057
diff changeset
  6543
    |pictureDepth nPlanes|
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6544
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  6545
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6546
    nPlanes := samplesPerPixel.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6547
    (nPlanes == 2) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6548
        'Image [info]: alpha plane ignored' infoPrintCR.
3872
390fabbc3036 comments and slight cleanup
Claus Gittinger <cg@exept.de>
parents: 3871
diff changeset
  6549
    ].
390fabbc3036 comments and slight cleanup
Claus Gittinger <cg@exept.de>
parents: 3871
diff changeset
  6550
    "/ first plane only
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6551
    pictureDepth := bitsPerSample at:1.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6552
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6553
    "monochrome is very easy ..."
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6554
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6555
    (pictureDepth == 1) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6556
        ^ Form width:width height:height fromArray:self bits onDevice:aDevice
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6557
    ].
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6558
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6559
    (aDevice visualType == #TrueColor) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6560
        ^ self greyImageAsTrueColorFormOn:aDevice
1932
6afe07d9c88c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1927
diff changeset
  6561
    ].
858
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  6562
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  6563
    "/ PseudoColor conversion also works for StaticColor,
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  6564
    "/ GrayScale and DirectColor; although possibly with suboptimal results
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  6565
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  6566
    ^ self greyImageAsPseudoFormOn:aDevice
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  6567
1932
6afe07d9c88c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1927
diff changeset
  6568
    "Modified: 19.10.1997 / 05:17:25 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6569
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6570
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6571
greyImageAsPseudoFormOn:aDevice
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6572
    "return an 8-bit pseudo Form from the grey image"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6573
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  6574
    |wideBits pictureDepth f map
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  6575
     colorMap usedColors nUsed aColor
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6576
     nColors "{ Class: SmallInteger }"
1766
08b918d293a6 fixed conversion of greyScale images with colorCube
Claus Gittinger <cg@exept.de>
parents: 1764
diff changeset
  6577
     range id
1932
6afe07d9c88c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1927
diff changeset
  6578
     cube nR nG nB grayColors
6afe07d9c88c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1927
diff changeset
  6579
     fit|
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6580
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6581
    pictureDepth := bitsPerSample at:1.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6582
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  6583
    (#[2 4 8] includes:pictureDepth) ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6584
        self error:'currently only depth-2, 4 or 8 supported'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6585
        ^ nil
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6586
    ].
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6587
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6588
    wideBits := ByteArray uninitializedNew:(width * height).
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
    (pictureDepth == 8) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6591
        "for 8bits, we scan for used colors first;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6592
         to avoid allocating too many colors"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6593
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6594
        (grayColors := aDevice fixGrayColors) notNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6595
            DitherAlgorithm == #floydSteinberg ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6596
                f := self
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6597
                       asFloydSteinbergDitheredDepth8FormOn:aDevice
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6598
                       colors:grayColors
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6599
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6600
            f notNil ifTrue:[^ f].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6601
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6602
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6603
        (cube := aDevice fixColors) notNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6604
            nR := aDevice numFixRed.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6605
            nG := aDevice numFixGreen.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6606
            nB := aDevice numFixBlue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6607
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6608
            DitherAlgorithm == #floydSteinberg ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6609
                f := self
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6610
                       asFloydSteinbergDitheredDepth8FormOn:aDevice
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6611
                       colors:cube
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6612
                       nRed:nR
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6613
                       nGreen:nG
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6614
                       nBlue:nB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6615
            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6616
                f := self
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6617
                       asNearestPaintDepth8FormOn:aDevice
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6618
                       colors:cube
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6619
                       nRed:nR
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6620
                       nGreen:nG
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6621
                       nBlue:nB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6622
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6623
            f notNil ifTrue:[^ f].
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
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6626
        usedColors := self bits usedValues.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6627
        nUsed := usedColors max + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6628
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6629
        colorMap := Array new:nUsed.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6630
        range := 100 / 255.0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6631
        usedColors do:[:grey |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6632
            colorMap at:(grey + 1) put:(Color gray:(range * grey))
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6633
        ].
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  6634
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6635
        nColors := (1 bitShift:pictureDepth).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6636
        colorMap := Array new:nColors.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6637
        range := 100 / (nColors - 1) asFloat.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6638
        1 to:nColors do:[:i |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6639
            colorMap at:i put:(Color gray:(i - 1) * range).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6640
        ].
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6641
    ].
1932
6afe07d9c88c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1927
diff changeset
  6642
    photometric ~~ #blackIs0 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6643
        colorMap reverse
1932
6afe07d9c88c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1927
diff changeset
  6644
    ].
6afe07d9c88c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1927
diff changeset
  6645
6afe07d9c88c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1927
diff changeset
  6646
    "allocate those colors & setup the translation map"
6afe07d9c88c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1927
diff changeset
  6647
6afe07d9c88c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1927
diff changeset
  6648
    fit := true.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6649
    map := ByteArray uninitializedNew:256.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6650
    nColors := colorMap size.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6651
    1 to:nColors do:[:i |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6652
        aColor := colorMap at:i.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6653
        aColor notNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6654
            aColor := aColor onDevice:aDevice.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6655
            colorMap at:i put:aColor.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6656
            id := aColor colorId.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6657
            id isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6658
                id := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6659
                fit := false.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6660
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6661
            map at:i put:id
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6662
        ]
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  6663
    ].
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6664
1932
6afe07d9c88c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1927
diff changeset
  6665
    fit ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6666
        "/ here comes the hard part - some grey value
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6667
        "/ could not be allocated.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6668
        "/ Must dither.
1932
6afe07d9c88c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1927
diff changeset
  6669
6afe07d9c88c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1927
diff changeset
  6670
    ].
6afe07d9c88c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1927
diff changeset
  6671
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6672
    "expand & translate"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  6673
    self bits
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6674
        expandPixels:pictureDepth
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6675
        width:width height:height
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6676
        into:wideBits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6677
        mapping:map.
4780
03c3e810a584 Change senders of obsolete messages Form>>...on: to ...onDevice:
Stefan Vogel <sv@exept.de>
parents: 4769
diff changeset
  6678
03c3e810a584 Change senders of obsolete messages Form>>...on: to ...onDevice:
Stefan Vogel <sv@exept.de>
parents: 4769
diff changeset
  6679
    f := Form width:width height:height depth:8 onDevice:aDevice.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6680
    f isNil ifTrue:[^ nil].
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  6681
    f colorMap:colorMap.
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  6682
    aDevice
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6683
        drawBits:wideBits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6684
        depth:8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6685
        padding:8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6686
        width:width height:height
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6687
        x:0 y:0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6688
        into:(f id)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6689
        x:0 y:0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6690
        width:width height:height
7755
75f5eba88e77 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 7689
diff changeset
  6691
        with:(f initGC).
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6692
    ^ f
746
f5479d603f64 gray vs. grey
Claus Gittinger <cg@exept.de>
parents: 744
diff changeset
  6693
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  6694
    "Modified: / 19-10-1997 / 05:19:44 / cg"
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  6695
    "Modified: / 30-01-2017 / 19:37:01 / stefan"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  6696
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  6697
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6698
greyImageAsTrueColorFormOn:aDevice
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6699
    "return a true-color device-form for the grey-image receiver.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6700
     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
  6701
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  6702
    |myDepth    "{ Class: SmallInteger }"
1143
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  6703
     nColors    "{ Class: SmallInteger }"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6704
     colorValues
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  6705
     scaleDown
1143
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  6706
     scaleRed   "{ Class: SmallInteger }"
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  6707
     scaleGreen "{ Class: SmallInteger }"
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  6708
     scaleBlue  "{ Class: SmallInteger }"
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  6709
     redShift   "{ Class: SmallInteger }"
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  6710
     blueShift  "{ Class: SmallInteger }"
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  6711
     greenShift "{ Class: SmallInteger }"
8096
42e3303fe2c2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8093
diff changeset
  6712
     form bestFormat usedDeviceDepth usedDeviceBitsPerPixel
1175
5595569cfbd3 newStyle info & error messages
Claus Gittinger <cg@exept.de>
parents: 1170
diff changeset
  6713
     greyValue  "{ Class: SmallInteger }"
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6714
     h          "{ Class: SmallInteger }"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6715
     w          "{ Class: SmallInteger }"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6716
     pixelArray newPixelArray i|
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6717
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6718
    "/ this is a slow fallback method; this ought to be
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6719
    "/ redefined in DepthxImage for more performance.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6720
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6721
    myDepth := self depth.
5315
cbac968cee6c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5314
diff changeset
  6722
    myDepth > 16 ifTrue:[
8096
42e3303fe2c2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8093
diff changeset
  6723
        "/ for now: deep greyscale images are not supported.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6724
        self error:'unsupported depth' mayProceed:true.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6725
        ^ nil
5315
cbac968cee6c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5314
diff changeset
  6726
    ].
5314
517094dfa71c changed #greyImageAsTrueColorFormOn:
Claus Gittinger <cg@exept.de>
parents: 5313
diff changeset
  6727
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6728
    "/ compute scale to map from my pixels into devices range
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6729
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6730
    scaleDown := 1 bitShift:myDepth.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6731
    scaleRed := (1 bitShift:aDevice bitsRed).
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6732
    scaleGreen := (1 bitShift:aDevice bitsGreen).
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6733
    scaleBlue := (1 bitShift:aDevice bitsBlue).
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6734
    redShift := aDevice shiftRed.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6735
    greenShift := aDevice shiftGreen.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6736
    blueShift := aDevice shiftBlue.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6737
1143
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  6738
    "/ prepare the map
6aed722d750d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1139
diff changeset
  6739
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6740
    nColors := (1 bitShift:myDepth).
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6741
    colorValues := Array new:nColors.
6256
1e510d7aea8e Inline block variable rename to avoid stc bug
Stefan Vogel <sv@exept.de>
parents: 6166
diff changeset
  6742
    1 to:nColors do:[:colorIdx |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6743
        |v gv bv rv nv|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6744
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6745
        "/ scale down to 0..1
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6746
        v := (colorIdx-1) / scaleDown.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6747
        rv := (v * scaleRed) truncated.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6748
        gv := (v * scaleGreen) truncated.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6749
        bv := (v * scaleBlue) truncated.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6750
        nv := rv bitShift:redShift.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6751
        nv := nv bitOr:(gv bitShift:greenShift).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6752
        nv := nv bitOr:(bv bitShift:blueShift).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6753
        colorValues at:colorIdx put:nv
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  6754
    ].
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6755
    photometric == #whiteIs0 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6756
        "/ reverse the order; 0 is brightest
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6757
        colorValues reverse
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6758
    ].
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6759
8096
42e3303fe2c2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8093
diff changeset
  6760
    "/ the temporary helper image is only needed to allow
42e3303fe2c2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8093
diff changeset
  6761
    "/ the rowAt:putAll: calls below.
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6762
    bestFormat := self bestSupportedImageFormatFor:aDevice.
235
579f3f804a46 padding info in supportedFormats
Claus Gittinger <cg@exept.de>
parents: 230
diff changeset
  6763
    usedDeviceDepth := bestFormat at:#depth.
579f3f804a46 padding info in supportedFormats
Claus Gittinger <cg@exept.de>
parents: 230
diff changeset
  6764
    usedDeviceBitsPerPixel := bestFormat at:#bitsPerPixel.
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6765
1668
95dafe4184d5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1667
diff changeset
  6766
    i := (Image implementorForDepth:usedDeviceBitsPerPixel) new.
95dafe4184d5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1667
diff changeset
  6767
    i width:width height:height.
3912
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
  6768
    i createPixelStore.
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6769
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6770
    "/ now, walk over the image and replace
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6771
    "/ colorMap indices by color values in the bits array
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6772
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6773
    h := height - 1.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6774
    w := width - 1.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6775
    pixelArray := self pixelArraySpecies new:width.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6776
    newPixelArray := i pixelArraySpecies new:width.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6777
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6778
    0 to:h do:[:y |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6779
        self rowAt:y into:pixelArray.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6780
        0 to:w do:[:x |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6781
            greyValue := pixelArray at:(x+1).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6782
            newPixelArray at:(x+1) put:(colorValues at:greyValue + 1).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6783
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6784
        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
  6785
    ].
03c3e810a584 Change senders of obsolete messages Form>>...on: to ...onDevice:
Stefan Vogel <sv@exept.de>
parents: 4769
diff changeset
  6786
03c3e810a584 Change senders of obsolete messages Form>>...on: to ...onDevice:
Stefan Vogel <sv@exept.de>
parents: 4769
diff changeset
  6787
    form := Form width:width height:height depth:usedDeviceDepth onDevice:aDevice.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6788
    form isNil ifTrue:[^ nil].
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6789
    form initGC.
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6790
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  6791
    form
8096
42e3303fe2c2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8093
diff changeset
  6792
        copyBitsFrom:i bits
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6793
        bitsPerPixel:usedDeviceBitsPerPixel
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6794
        depth:usedDeviceDepth
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6795
        padding:8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6796
        width:width height:height
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6797
        x:0 y:0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6798
        toX:0 y:0.
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6799
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6800
    ^ form
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6801
5710
9928e8b52195 changed: #greyImageAsTrueColorFormOn:
Claus Gittinger <cg@exept.de>
parents: 5655
diff changeset
  6802
    "Created: / 20-10-1995 / 22:05:10 / cg"
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  6803
    "Modified (format): / 31-01-2017 / 14:42:05 / stefan"
8096
42e3303fe2c2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8093
diff changeset
  6804
    "Modified (format): / 23-08-2017 / 16:35:13 / cg"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  6805
! !
48194c26a46c Initial revision
claus
parents:
diff changeset
  6806
48194c26a46c Initial revision
claus
parents:
diff changeset
  6807
!Image methodsFor:'converting palette images'!
48194c26a46c Initial revision
claus
parents:
diff changeset
  6808
48194c26a46c Initial revision
claus
parents:
diff changeset
  6809
paletteImageAsFormOn:aDevice
72
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
  6810
    "return a device-form for the palette-image receiver"
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
  6811
380
c5ffc6d48a9e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 379
diff changeset
  6812
    |type ddepth|
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6813
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  6814
    ddepth := aDevice depth.
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  6815
    type := aDevice visualType.
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  6816
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6817
    (type == #TrueColor) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6818
        DitherAlgorithm == #floydSteinberg ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6819
            ddepth == 8 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6820
                self depth == 8 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6821
                    "/ use fixColor dither algorithm
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6822
                    ^ self asDitheredTrueColor8FormOn:aDevice
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6823
                ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6824
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6825
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6826
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6827
        ^ self paletteImageAsTrueColorFormOn:aDevice
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6828
    ].
858
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  6829
8141
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
  6830
    aDevice hasGrayscales ifFalse:[
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
  6831
        ^ self asMonochromeFormOn:aDevice
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
  6832
    ].
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
  6833
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
  6834
    (type == #StaticGray) ifTrue:[
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
  6835
        "/ ddepth == 8 ifTrue:[
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
  6836
        "/     ^ self paletteImageAsGray8FormOn:aDevice
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
  6837
        "/ ].
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
  6838
        ^ self asGrayFormOn:aDevice
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
  6839
    ].
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
  6840
858
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  6841
    "/ the PseudoColor conversion also works for
8141
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
  6842
    "/ StaticColor, GrayScale & DirectColor; 
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
  6843
    "/ although possibly with suboptimal results
858
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  6844
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  6845
    ^ self paletteImageAsPseudoFormOn:aDevice
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  6846
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  6847
    "Modified: / 14-06-1996 / 19:31:01 / cg"
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  6848
    "Modified: / 30-01-2017 / 20:55:32 / stefan"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  6849
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  6850
48194c26a46c Initial revision
claus
parents:
diff changeset
  6851
paletteImageAsPseudoFormOn:aDevice
72
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
  6852
    "return a pseudo-deviceForm from the palette image."
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  6853
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  6854
    |tempImage d temp8|
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  6855
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  6856
    d := self depth.
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  6857
    (#[1 2 4 8] includes:d) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6858
        "
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6859
         fallback code for some depth's:
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6860
         create a temporary Depth8Image and use its conversion method
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6861
        "
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6862
        temp8 := ByteArray uninitializedNew:(width * height).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6863
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6864
        self bits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6865
            expandPixels:d
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6866
            width:width height:height
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6867
            into:temp8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6868
            mapping:nil.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6869
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6870
        tempImage := Image width:width height:height depth:8 fromArray:temp8.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6871
        tempImage colorMap:colorMap.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6872
        ^ tempImage paletteImageAsPseudoFormOn:aDevice
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
  6873
    ].
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
  6874
    ^ self subclassResponsibility
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  6875
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  6876
    "Modified: / 30-01-2017 / 19:37:57 / stefan"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  6877
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  6878
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6879
paletteImageAsTrueColorFormOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6880
    "return a true-color device-form for the palette-image receiver."
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6881
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  6882
    |nColors "{ Class: SmallInteger }"
1605
64151392ff64 added generic #paletteImageAsTrueColorForm implementation
Claus Gittinger <cg@exept.de>
parents: 1595
diff changeset
  6883
     h       "{ Class: SmallInteger }"
64151392ff64 added generic #paletteImageAsTrueColorForm implementation
Claus Gittinger <cg@exept.de>
parents: 1595
diff changeset
  6884
     pixel   "{ Class: SmallInteger }"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  6885
     colorValues
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6886
     scaleRed scaleGreen scaleBlue redShift greenShift blueShift
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  6887
     form imageBits bestFormat usedDeviceDepth usedDeviceBitsPerPixel
4187
411b7b76a8bb fixedPalette has more functionality
Claus Gittinger <cg@exept.de>
parents: 4175
diff changeset
  6888
     i pixelArray newPixelArray
411b7b76a8bb fixedPalette has more functionality
Claus Gittinger <cg@exept.de>
parents: 4175
diff changeset
  6889
     clr r g b rv gv bv v "{ Class: SmallInteger }" |
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6890
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6891
    "/ this is a slow fallback method; this ought to be
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6892
    "/ redefined in DepthxImage for more performance.
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6893
4187
411b7b76a8bb fixedPalette has more functionality
Claus Gittinger <cg@exept.de>
parents: 4175
diff changeset
  6894
    bestFormat := self bestSupportedImageFormatFor:aDevice.
411b7b76a8bb fixedPalette has more functionality
Claus Gittinger <cg@exept.de>
parents: 4175
diff changeset
  6895
    usedDeviceDepth := bestFormat at:#depth.
411b7b76a8bb fixedPalette has more functionality
Claus Gittinger <cg@exept.de>
parents: 4175
diff changeset
  6896
    usedDeviceDepth == 1 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6897
        ^ self asMonochromeFormOn:aDevice.
4187
411b7b76a8bb fixedPalette has more functionality
Claus Gittinger <cg@exept.de>
parents: 4175
diff changeset
  6898
    ].
411b7b76a8bb fixedPalette has more functionality
Claus Gittinger <cg@exept.de>
parents: 4175
diff changeset
  6899
    usedDeviceBitsPerPixel := bestFormat at:#bitsPerPixel.
411b7b76a8bb fixedPalette has more functionality
Claus Gittinger <cg@exept.de>
parents: 4175
diff changeset
  6900
411b7b76a8bb fixedPalette has more functionality
Claus Gittinger <cg@exept.de>
parents: 4175
diff changeset
  6901
411b7b76a8bb fixedPalette has more functionality
Claus Gittinger <cg@exept.de>
parents: 4175
diff changeset
  6902
    scaleRed := ((1 bitShift:aDevice bitsRed) - 1) / 255.
411b7b76a8bb fixedPalette has more functionality
Claus Gittinger <cg@exept.de>
parents: 4175
diff changeset
  6903
    scaleGreen := ((1 bitShift:aDevice bitsGreen) - 1) / 255.
411b7b76a8bb fixedPalette has more functionality
Claus Gittinger <cg@exept.de>
parents: 4175
diff changeset
  6904
    scaleBlue := ((1 bitShift:aDevice bitsBlue) - 1) / 255.
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6905
    redShift := aDevice shiftRed.
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6906
    greenShift := aDevice shiftGreen.
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6907
    blueShift := aDevice shiftBlue.
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6908
4187
411b7b76a8bb fixedPalette has more functionality
Claus Gittinger <cg@exept.de>
parents: 4175
diff changeset
  6909
    nColors := colorMap size.
411b7b76a8bb fixedPalette has more functionality
Claus Gittinger <cg@exept.de>
parents: 4175
diff changeset
  6910
    nColors <= 4096 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6911
        "/ precompute scales to map from 0..100 into devices range
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6912
        "/ (this may be different for the individual components)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6913
        colorValues := Array uninitializedNew:nColors.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6914
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6915
        1 to:nColors do:[:index |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6916
            r := colorMap redByteAt:index.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6917
            g := colorMap greenByteAt:index.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6918
            b := colorMap blueByteAt:index.
8103
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6919
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6920
            rv := (r * scaleRed) rounded.
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6921
            gv := (g * scaleGreen) rounded.
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6922
            bv := (b * scaleBlue) rounded.
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6923
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6924
            v := rv bitShift:redShift.
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6925
            v := v bitOr:(gv bitShift:greenShift).
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6926
            v := v bitOr:(bv bitShift:blueShift).
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6927
            colorValues at:index put:v.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6928
        ].
2864
dd151bfdff9d care for deep devices which do not support deep bitmaps
Claus Gittinger <cg@exept.de>
parents: 2832
diff changeset
  6929
    ].
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6930
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6931
    "/ the temporary helper image is only needed to allow
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6932
    "/ the rowAt:putAll: calls below.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6933
1665
e0329f98904d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1664
diff changeset
  6934
    i := (Image implementorForDepth:usedDeviceBitsPerPixel) new.
e0329f98904d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1664
diff changeset
  6935
    i width:width height:height.
3912
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
  6936
    i createPixelStore.
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
  6937
    imageBits := i bits.
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6938
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6939
    "/ now, walk over the image and replace
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6940
    "/ colorMap indices by color values in the bits array
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6941
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6942
    h := height - 1.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6943
    pixelArray := self pixelArraySpecies new:width.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6944
    newPixelArray := i pixelArraySpecies new:width.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  6945
4187
411b7b76a8bb fixedPalette has more functionality
Claus Gittinger <cg@exept.de>
parents: 4175
diff changeset
  6946
    colorValues notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6947
        0 to:h do:[:y |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6948
            self rowAt:y into:pixelArray.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6949
            1 to:width do:[:x |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6950
                pixel := pixelArray at:x.
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  6951
                newPixelArray at:x put:(colorValues at:pixel + 1 ifAbsent:[0]).
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6952
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6953
            i rowAt:y putAll:newPixelArray.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6954
        ].
4187
411b7b76a8bb fixedPalette has more functionality
Claus Gittinger <cg@exept.de>
parents: 4175
diff changeset
  6955
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6956
        0 to:h do:[:y |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6957
            self rowAt:y into:pixelArray.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6958
            1 to:width do:[:x |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6959
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6960
                pixel := pixelArray at:x.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6961
                clr := self colorFromValue:pixel.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6962
                r := clr redByte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6963
                g := clr greenByte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6964
                b := clr blueByte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6965
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6966
                rv := (r * scaleRed) rounded.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6967
                gv := (g * scaleGreen) rounded.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6968
                bv := (b * scaleBlue) rounded.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6969
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6970
                v := rv bitShift:redShift.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6971
                v := v bitOr:(gv bitShift:greenShift).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6972
                v := v bitOr:(bv bitShift:blueShift).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6973
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6974
                newPixelArray at:x put:v.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6975
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6976
            i rowAt:y putAll:newPixelArray.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6977
        ].
4780
03c3e810a584 Change senders of obsolete messages Form>>...on: to ...onDevice:
Stefan Vogel <sv@exept.de>
parents: 4769
diff changeset
  6978
    ].
03c3e810a584 Change senders of obsolete messages Form>>...on: to ...onDevice:
Stefan Vogel <sv@exept.de>
parents: 4769
diff changeset
  6979
03c3e810a584 Change senders of obsolete messages Form>>...on: to ...onDevice:
Stefan Vogel <sv@exept.de>
parents: 4769
diff changeset
  6980
    form := Form width:width height:height depth:usedDeviceDepth onDevice:aDevice.
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6981
    form isNil ifTrue:[^ nil].
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6982
    form initGC.
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6983
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  6984
    form
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6985
        copyBitsFrom:imageBits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6986
        bitsPerPixel:usedDeviceBitsPerPixel
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6987
        depth:usedDeviceDepth
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6988
        padding:8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6989
        width:width height:height
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6990
        x:0 y:0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  6991
        toX:0 y:0.
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6992
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6993
    ^ form
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  6994
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  6995
    "Modified: / 31-01-2017 / 15:01:05 / stefan"
8103
8ba2da3ccfc3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8100
diff changeset
  6996
    "Modified: / 25-08-2017 / 08:54:23 / cg"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  6997
! !
48194c26a46c Initial revision
claus
parents:
diff changeset
  6998
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  6999
!Image methodsFor:'converting rgb images'!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7000
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7001
asDitheredTrueColor8FormOn:aDevice
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7002
    "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
  7003
     Return the device-form.
1771
ee831cb59127 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1766
diff changeset
  7004
     This method is only valid for trueColor displays."
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7005
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7006
    |fixColors pixel
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7007
     dstIdx     "{ Class: SmallInteger }"
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7008
     shiftRed   "{ Class: SmallInteger }"
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7009
     shiftGreen "{ Class: SmallInteger }"
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7010
     shiftBlue  "{ Class: SmallInteger }"
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7011
     nRed    "{ Class: SmallInteger }"
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7012
     nGreen  "{ Class: SmallInteger }"
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7013
     nBlue   "{ Class: SmallInteger }"|
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7014
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7015
    shiftRed := aDevice shiftRed.
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7016
    shiftGreen := aDevice shiftGreen.
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7017
    shiftBlue := aDevice shiftBlue.
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7018
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  7019
    nRed := 1 bitShift:aDevice bitsRed.
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  7020
    nGreen := 1 bitShift:aDevice bitsGreen.
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  7021
    nBlue := 1 bitShift:aDevice bitsBlue.
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7022
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7023
    fixColors := Array new:(nRed * nGreen * nBlue).
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7024
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7025
    dstIdx := 1.
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7026
    0 to:nRed - 1 do:[:sR |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7027
        0 to:nGreen - 1 do:[:sG |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7028
            0 to:nBlue - 1 do:[:sB |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7029
                pixel := (sR bitShift:shiftRed)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7030
                         + (sG bitShift:shiftGreen)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7031
                         + (sB bitShift:shiftBlue).
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  7032
                fixColors at:dstIdx put:(Color colorId:pixel).
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7033
                dstIdx := dstIdx + 1
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7034
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7035
        ]
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
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7038
    ^ self
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7039
        asFloydSteinbergDitheredDepth8FormOn:aDevice
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7040
        colors:fixColors
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7041
        nRed:nRed nGreen:nGreen nBlue:nBlue
1771
ee831cb59127 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1766
diff changeset
  7042
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  7043
    "Created: / 14-06-1996 / 17:23:52 / cg"
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  7044
    "Modified: / 23-06-1997 / 15:22:36 / cg"
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  7045
    "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
  7046
!
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7047
5919
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7048
compressColorMap
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7049
    "calculates a new color map for the image, using only used colors"
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7050
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 6037
diff changeset
  7051
    |depth newColorMap usedColors oldToNew oldBits newBits tmpBits sortBlockForColors|
5919
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7052
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7053
    depth := self depth.
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7054
    usedColors := self realUsedColors.
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7055
    sortBlockForColors := [:a :b |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7056
            a redByte == b redByte ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7057
                a greenByte == b greenByte ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7058
                    a blueByte < b blueByte
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7059
                ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7060
                    a greenByte < b greenByte
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7061
                ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7062
            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7063
                a redByte < b redByte
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7064
            ]
5919
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7065
      ].
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7066
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7067
    "/ translation table
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7068
    oldToNew := ByteArray new:(1 bitShift:depth).
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7069
    newColorMap := usedColors asArray.
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7070
    newColorMap sort:sortBlockForColors.
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7071
    self colorMap notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7072
        self colorMap asArray keysAndValuesDo:[:oldIdx :clr |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7073
            |newPixel|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7074
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7075
            (usedColors includes:clr) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7076
                newPixel := newColorMap indexOf:clr.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7077
                oldToNew at:oldIdx put:newPixel-1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7078
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7079
        ].
5919
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7080
    ].
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7081
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7082
    oldBits := self bits.
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7083
    newBits := ByteArray new:(oldBits size).
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7084
    depth ~~ 8 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7085
        "/ expand/compress can only handle 8bits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7086
        tmpBits := ByteArray uninitializedNew:(self width*self height).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7087
        oldBits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7088
            expandPixels:depth
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7089
            width:self width
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7090
            height:self height
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7091
            into:tmpBits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7092
            mapping:oldToNew.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7093
        tmpBits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7094
            compressPixels:depth
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7095
            width:self width
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7096
            height:self height
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7097
            into:newBits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7098
            mapping:nil
5919
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7099
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7100
        oldBits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7101
            expandPixels:depth
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7102
            width:self width
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7103
            height:self height
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7104
            into:newBits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7105
            mapping:oldToNew.
5919
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7106
    ].
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7107
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7108
    self bits:newBits.
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7109
    self colorMap:newColorMap.
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7110
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7111
    "Created: / 17-07-2012 / 12:13:18 / anwild"
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7112
!
6312700fedb2 added: #compressColorMap
anwild
parents: 5712
diff changeset
  7113
8665
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7114
copyPixels32AlphaHighTo24From:anImage
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7115
    "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
  7116
     to me as a 24bit non-alpha rgb image"
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7117
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7118
    |imageBits|
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7119
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7120
    imageBits := anImage bits.
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7121
%{
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7122
    OBJ _myBits = __INST(bytes);
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7123
    OBJ w = __INST(width);
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7124
    OBJ h = __INST(height);
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7125
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7126
    if (__isByteArrayLike(_myBits)
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7127
     && __isByteArrayLike(imageBits)
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7128
     && __bothSmallInteger(w, h)) {
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7129
        int _idx;
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7130
        int _w = __intVal(w);
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7131
        int _h = __intVal(h);
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7132
        int _mySize = __byteArraySize(_myBits);
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7133
        int _imgSize = __byteArraySize(imageBits);
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7134
        char *_myBitsPtr = __ByteArrayInstPtr(_myBits)->ba_element;
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7135
        char *_imgBitsPtr = __ByteArrayInstPtr(imageBits)->ba_element;
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7136
        char *_myBitsEndPtr = _myBitsPtr + (_w * _h * 3);
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7137
        char *_imgBitsEndPtr = _imgBitsPtr + (_w * _h * 4);
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7138
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7139
        if ((_w * _h * 3) > _mySize) goto error;
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7140
        if ((_w * _h * 4) > _imgSize) goto error;
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7141
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7142
#if (__POINTER_SIZE__ == 8) && defined(__LSBFIRST__)
8708
b637a45bb4d1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8691
diff changeset
  7143
        // 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
  7144
        while (_myBitsPtr < (_myBitsEndPtr-sizeof(int)*3)) {
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7145
            // LSB argbargb; r in LSB
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7146
            // a2 b2 g2 r2 a1 b1 g1 r1 
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7147
            unsigned INT in12 = ((unsigned INT*)_imgBitsPtr)[0];
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7148
            // a4 b4 g4 r4 a3 b3 g3 r3
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7149
            unsigned INT in34 = ((unsigned INT*)_imgBitsPtr)[1];
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
            // a2 b2 g2 r2 a1 b1 g1 r1 =>    b1 g1 r1
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7152
            // a2 b2 g2 r2 a1 b1 g1 r1 => r2    
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7153
            ((unsigned int*)_myBitsPtr)[0] = (unsigned int)(((in12) & 0x00FFFFFFLL) 
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7154
                                                         | ((in12 >> 8) & 0xFF000000LL));
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7155
            // a2 b2 g2 r2 a1 b1 g1 r1 =>       b2 g2
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7156
            // a4 b4 g4 r4 a3 b3 g3 r3 => g3 r3
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7157
            ((unsigned int*)_myBitsPtr)[1] = (unsigned int)(((in12 >> 40) & 0x0000FFFFLL) 
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7158
                                                         |   ((in34 << 16) & 0xFFFF0000LL));
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7159
            // a4 b4 g4 r4 a3 b3 g3 r3 =>          b3
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7160
            // a4 b4 g4 r4 a3 b3 g3 r3 => b4 g4 r4
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7161
            ((unsigned int*)_myBitsPtr)[2] = (unsigned int)(((in34 >> 16) & 0x000000FFLL) 
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7162
                                                         |  ((in34 >> 24) & 0xFFFFFF00LL));
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7163
            _imgBitsPtr += (2 * sizeof(INT));
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7164
            _myBitsPtr += (3 * sizeof(int));
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7165
        }
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7166
#endif
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7167
        while (_myBitsPtr < _myBitsEndPtr) {
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7168
            // fetch rgba => r..g..b
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7169
#if defined(__LSBFIRST__)
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7170
            unsigned int in = ((unsigned int*)_imgBitsPtr)[0];
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7171
            _myBitsPtr[0] = (in) & 0xFF;
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7172
            _myBitsPtr[1] = (in >> 8) & 0xFF;
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7173
            _myBitsPtr[2] = (in >> 16) & 0xFF;
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7174
#else
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7175
            unsigned char _r = _imgBitsPtr[0];
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7176
            unsigned char _g = _imgBitsPtr[1];
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7177
            unsigned char _b = _imgBitsPtr[2];
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7178
            _myBitsPtr[0] = _r;
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7179
            _myBitsPtr[1] = _g;
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7180
            _myBitsPtr[2] = _b;
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7181
#endif
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7182
            _imgBitsPtr += 4;
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7183
            _myBitsPtr += 3;
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7184
        }
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7185
        RETURN( self );
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7186
    }
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7187
error: ;
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7188
    console_printf("Image: oops - bits-size in copyPixels32\n");
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7189
%}.
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7190
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7191
    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
  7192
        self pixelAtX:x y:y put:(pixel bitAnd:16rFFFFFF)
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7193
    ].
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7194
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7195
    "Created: / 25-03-2019 / 14:48:52 / Claus Gittinger"
8708
b637a45bb4d1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8691
diff changeset
  7196
    "Modified: / 27-06-2019 / 15:31:33 / Claus Gittinger"
8665
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7197
!
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7198
7282
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7199
copyPixels32AlphaLowTo24From:anImage
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7200
    "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
  7201
     to me as a 24bit non-alpha rgb image"
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7202
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7203
    |imageBits|
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7204
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7205
    imageBits := anImage bits.
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7206
%{
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7207
    OBJ _myBits = __INST(bytes);
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7208
    OBJ w = __INST(width);
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7209
    OBJ h = __INST(height);
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7210
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7211
    if (__isByteArrayLike(_myBits)
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7212
     && __isByteArrayLike(imageBits)
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7213
     && __bothSmallInteger(w, h)) {
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7214
        int _idx;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7215
        int _w = __intVal(w);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7216
        int _h = __intVal(h);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7217
        int _mySize = __byteArraySize(_myBits);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7218
        int _imgSize = __byteArraySize(imageBits);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7219
        char *_myBitsPtr = __ByteArrayInstPtr(_myBits)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7220
        char *_imgBitsPtr = __ByteArrayInstPtr(imageBits)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7221
        char *_myBitsEndPtr = _myBitsPtr + (_w * _h * 3);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7222
        char *_imgBitsEndPtr = _imgBitsPtr + (_w * _h * 4);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7223
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7224
        if ((_w * _h * 3) > _mySize) goto error;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7225
        if ((_w * _h * 4) > _imgSize) goto error;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7226
8664
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7227
#if (__POINTER_SIZE__ == 8) && defined(__LSBFIRST__)
8708
b637a45bb4d1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8691
diff changeset
  7228
        // 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
  7229
        while (_myBitsPtr < (_myBitsEndPtr-sizeof(int)*3)) {
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7230
            // LSB argbargb; r in LSB
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7231
            // b2 g2 r2 a2 b1 g1 r1 a1
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7232
            unsigned INT in12 = ((unsigned INT*)_imgBitsPtr)[0];
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7233
            // b4 g4 r4 a4 b3 g3 r3 a3
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7234
            unsigned INT in34 = ((unsigned INT*)_imgBitsPtr)[1];
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7235
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7236
            // b2 g2 r2 a2 b1 g1 r1 a1 =>    b1 g1 r1
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7237
            // b2 g2 r2 a2 b1 g1 r1 a1 => r2    
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7238
            ((unsigned int*)_myBitsPtr)[0] = (unsigned int)(((in12 >> 8) & 0x00FFFFFFLL) 
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7239
                                                         | ((in12 >> 16) & 0xFF000000LL));
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7240
            // b2 g2 r2 a2 b1 g1 r1 a1 =>       b2 g2
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7241
            // b4 g4 r4 a4 b3 g3 r3 a3 => g3 r3
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7242
            ((unsigned int*)_myBitsPtr)[1] = (unsigned int)(((in12 >> 48) & 0x0000FFFFLL) 
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7243
                                                         |   ((in34 << 8) & 0xFFFF0000LL));
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7244
            // b4 g4 r4 a4 b3 g3 r3 a3 =>          b3
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7245
            // b4 g4 r4 a4 b3 g3 r3 a3 => b4 g4 r4
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7246
            ((unsigned int*)_myBitsPtr)[2] = (unsigned int)(((in34 >> 24) & 0x000000FFLL) 
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7247
                                                         |  ((in34 >> 32) & 0xFFFFFF00LL));
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7248
            _imgBitsPtr += (2 * sizeof(INT));
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7249
            _myBitsPtr += (3 * sizeof(int));
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7250
        }
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7251
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7252
        while (_myBitsPtr < _myBitsEndPtr) {
8664
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7253
            // fetch bgra => r..g..b
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7254
#if defined(__LSBFIRST__)
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7255
            unsigned int in = ((unsigned int*)_imgBitsPtr)[0];
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7256
            _myBitsPtr[0] = (in >> 8) & 0xFF;
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7257
            _myBitsPtr[1] = (in >> 16) & 0xFF;
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7258
            _myBitsPtr[2] = (in >> 24) & 0xFF;
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7259
#else
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7260
            unsigned char _r = _imgBitsPtr[0];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7261
            unsigned char _g = _imgBitsPtr[1];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7262
            unsigned char _b = _imgBitsPtr[2];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7263
            _myBitsPtr[0] = _r;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7264
            _myBitsPtr[1] = _g;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7265
            _myBitsPtr[2] = _b;
8664
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7266
#endif
8cc70d4053f4 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8663
diff changeset
  7267
            _imgBitsPtr += 4;
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7268
            _myBitsPtr += 3;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7269
        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7270
        RETURN( self );
7282
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7271
    }
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7272
error: ;
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7273
    console_printf("Image: oops - bits-size in copyPixels32\n");
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7274
%}.
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7275
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7276
    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
  7277
        self pixelAtX:x y:y put:((pixel bitShift:-8) bitAnd:16rFFFFFF)
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7278
    ].
aa7342c1b59f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8664
diff changeset
  7279
8708
b637a45bb4d1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8691
diff changeset
  7280
    "Modified: / 27-06-2019 / 15:32:03 / Claus Gittinger"
7282
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7281
!
8b3434078110 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7277
diff changeset
  7282
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7283
rgbImageAsFormOn:aDevice
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7284
    "convert am rgb image to a device-form on aDevice.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7285
     Return the device-form."
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7286
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7287
    |visual|
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7288
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7289
    visual := aDevice visualType.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7290
    (visual == #StaticGray) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7291
        ^ self asGrayFormOn:aDevice
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  7292
    ].
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7293
    (visual == #TrueColor) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7294
        ^ self rgbImageAsTrueColorFormOn:aDevice
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  7295
    ].
858
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  7296
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  7297
    "/ PseudoColor conversion also works for StaticColor, GrayScale
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  7298
    "/ and DirectColor displays; although possibly with suboptimal results
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  7299
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7300
    ^ self rgbImageAsPseudoFormOn:aDevice
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7301
858
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  7302
    "Modified: 14.6.1996 / 19:30:06 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7303
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7304
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7305
rgbImageAsPseudoFormOn:aDevice
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7306
    "return a pseudocolor form from the rgb-picture"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7307
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  7308
    |n     "{ Class: SmallInteger }"
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  7309
     depth "{ Class: SmallInteger }"
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  7310
     palette f|
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  7311
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  7312
    (depth := self depth) <= 8 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7313
        "/ simulate it via a temporary palette image
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7314
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7315
        palette := Array new:(1 bitShift:depth).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7316
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7317
        n := (1 bitShift:depth)-1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7318
        0 to:n do:[:pixelValue |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7319
            palette at:(pixelValue+1) put:(self colorFromValue:pixelValue)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7320
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7321
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7322
        self setColorMap:palette.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7323
        photometric := #palette.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7324
        f := self paletteImageAsPseudoFormOn:aDevice.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7325
        self setColorMap:nil.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7326
        photometric := #rgb.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7327
        ^ f
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  7328
    ].
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  7329
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7330
    ^ self subclassResponsibility
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  7331
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
  7332
    "Modified: 8.6.1996 / 10:58:25 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7333
!
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
rgbImageAsTrueColorFormOn:aDevice
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7336
    "return a truecolor form from the rgb-picture."
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7337
1063
ba1bf8091bc1 unused variable cleanup
Claus Gittinger <cg@exept.de>
parents: 1057
diff changeset
  7338
    |bestFormat usedDeviceDepth usedDeviceBitsPerPixel
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7339
     form|
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  7340
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  7341
    bestFormat := self bestSupportedImageFormatFor:aDevice.
235
579f3f804a46 padding info in supportedFormats
Claus Gittinger <cg@exept.de>
parents: 230
diff changeset
  7342
    usedDeviceDepth := bestFormat at:#depth.
579f3f804a46 padding info in supportedFormats
Claus Gittinger <cg@exept.de>
parents: 230
diff changeset
  7343
    usedDeviceBitsPerPixel := bestFormat at:#bitsPerPixel.
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  7344
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  7345
    "/ 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
  7346
    usedDeviceBitsPerPixel == 15 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7347
        usedDeviceBitsPerPixel := 16
399
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
  7348
    ].
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
  7349
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7350
    "/
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7351
    "/ only the trivial case, where the depths match
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7352
    "/ is handled here; conversions are supposed to
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7353
    "/ be done in concrete subclasses (see D24Image)
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7354
    "/
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7355
    self bitsPerPixel == usedDeviceBitsPerPixel ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7356
        "/ kludge - convert to a deep image first, then to a form.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7357
        ^ ((Image implementorForDepth:usedDeviceBitsPerPixel) fromImage:self) asFormOn:aDevice
5126
d3f2baf80581 color conversions fixed (16bit images)
Claus Gittinger <cg@exept.de>
parents: 5074
diff changeset
  7358
"/        '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
  7359
"/        ^ self asMonochromeFormOn:aDevice
4757
60d27f8e65bb some fixes for depth32
Claus Gittinger <cg@exept.de>
parents: 4745
diff changeset
  7360
    ].
60d27f8e65bb some fixes for depth32
Claus Gittinger <cg@exept.de>
parents: 4745
diff changeset
  7361
60d27f8e65bb some fixes for depth32
Claus Gittinger <cg@exept.de>
parents: 4745
diff changeset
  7362
    form := Form width:width height:height depth:usedDeviceDepth onDevice:aDevice.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7363
    form isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7364
        'Image [warning]: display bitmap creation failed' errorPrintCR.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7365
        ^ nil
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  7366
    ].
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  7367
    form initGC.
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  7368
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  7369
    form
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7370
        copyBitsFrom:self bits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7371
        bitsPerPixel:usedDeviceBitsPerPixel
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7372
        depth:usedDeviceDepth
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7373
        padding:8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7374
        width:width height:height
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7375
        x:0 y:0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7376
        toX:0 y:0.
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  7377
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  7378
    ^ form
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
  7379
4757
60d27f8e65bb some fixes for depth32
Claus Gittinger <cg@exept.de>
parents: 4745
diff changeset
  7380
    "Modified: / 27-05-2007 / 13:44:26 / cg"
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
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7383
!Image methodsFor:'copying'!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7384
2947
53f0ea77b1e4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2934
diff changeset
  7385
skipInstvarIndexInDeepCopy:index
53f0ea77b1e4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2934
diff changeset
  7386
    "a helper for deepCopy; only indices for which this method returns
53f0ea77b1e4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2934
diff changeset
  7387
     false are copied in a deep copy."
53f0ea77b1e4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2934
diff changeset
  7388
7494
70c399ea367b #OTHER by stefan
Stefan Vogel <sv@exept.de>
parents: 7484
diff changeset
  7389
    "
70c399ea367b #OTHER by stefan
Stefan Vogel <sv@exept.de>
parents: 7484
diff changeset
  7390
        self allInstanceVariableNames indexOf:#device
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  7391
        self allInstanceVariableNames indexOf:#deviceForm
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  7392
        self allInstanceVariableNames indexOf:#monoDeviceForm
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  7393
        self allInstanceVariableNames indexOf:#fullColorDeviceForm
7494
70c399ea367b #OTHER by stefan
Stefan Vogel <sv@exept.de>
parents: 7484
diff changeset
  7394
    "
70c399ea367b #OTHER by stefan
Stefan Vogel <sv@exept.de>
parents: 7484
diff changeset
  7395
70c399ea367b #OTHER by stefan
Stefan Vogel <sv@exept.de>
parents: 7484
diff changeset
  7396
    index == 13 ifTrue:[
70c399ea367b #OTHER by stefan
Stefan Vogel <sv@exept.de>
parents: 7484
diff changeset
  7397
        ^ true "/ skip device
70c399ea367b #OTHER by stefan
Stefan Vogel <sv@exept.de>
parents: 7484
diff changeset
  7398
    ].
70c399ea367b #OTHER by stefan
Stefan Vogel <sv@exept.de>
parents: 7484
diff changeset
  7399
    index == 14 ifTrue:[
70c399ea367b #OTHER by stefan
Stefan Vogel <sv@exept.de>
parents: 7484
diff changeset
  7400
        ^ true "/ skip deviceForm
70c399ea367b #OTHER by stefan
Stefan Vogel <sv@exept.de>
parents: 7484
diff changeset
  7401
    ].
70c399ea367b #OTHER by stefan
Stefan Vogel <sv@exept.de>
parents: 7484
diff changeset
  7402
    index == 15 ifTrue:[
70c399ea367b #OTHER by stefan
Stefan Vogel <sv@exept.de>
parents: 7484
diff changeset
  7403
        ^ true "/ skip monoDeviceForm
2947
53f0ea77b1e4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2934
diff changeset
  7404
    ].
7573
656c59bc93ad #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7565
diff changeset
  7405
    index == 16 ifTrue:[
656c59bc93ad #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7565
diff changeset
  7406
        ^ true "/ skip fullColorDeviceForm
656c59bc93ad #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7565
diff changeset
  7407
    ].
2947
53f0ea77b1e4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2934
diff changeset
  7408
    ^ false
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  7409
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
  7410
    "Modified (comment): / 31-01-2017 / 15:41:40 / stefan"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7411
! !
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7412
8691
bfa5c82bf5a1 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 8665
diff changeset
  7413
!Image methodsFor:'copying-private'!
bfa5c82bf5a1 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 8665
diff changeset
  7414
bfa5c82bf5a1 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 8665
diff changeset
  7415
postCopy
bfa5c82bf5a1 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 8665
diff changeset
  7416
    "redefined to also copy the pixels and the colorMap
bfa5c82bf5a1 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 8665
diff changeset
  7417
     and clear out any device handles in the copy."
bfa5c82bf5a1 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 8665
diff changeset
  7418
bfa5c82bf5a1 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 8665
diff changeset
  7419
    bytes := bytes copy.
bfa5c82bf5a1 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 8665
diff changeset
  7420
    colorMap notNil ifTrue:[
bfa5c82bf5a1 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 8665
diff changeset
  7421
        colorMap isColormap ifTrue:[
bfa5c82bf5a1 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 8665
diff changeset
  7422
            colorMap := colorMap copy.
bfa5c82bf5a1 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 8665
diff changeset
  7423
        ] ifFalse:[
bfa5c82bf5a1 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 8665
diff changeset
  7424
            colorMap := MappedPalette withColors:colorMap.
bfa5c82bf5a1 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 8665
diff changeset
  7425
        ].
bfa5c82bf5a1 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 8665
diff changeset
  7426
    ].
bfa5c82bf5a1 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 8665
diff changeset
  7427
    device := deviceForm := monoDeviceForm := fullColorDeviceForm := nil.
bfa5c82bf5a1 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 8665
diff changeset
  7428
    mask := mask copy.
bfa5c82bf5a1 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 8665
diff changeset
  7429
    maskedPixelsAre0 := false.
bfa5c82bf5a1 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 8665
diff changeset
  7430
bfa5c82bf5a1 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 8665
diff changeset
  7431
    "Modified: / 22-08-1998 / 11:27:09 / cg"
bfa5c82bf5a1 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 8665
diff changeset
  7432
    "Modified: / 30-01-2017 / 19:16:02 / stefan"
bfa5c82bf5a1 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 8665
diff changeset
  7433
! !
bfa5c82bf5a1 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 8665
diff changeset
  7434
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7435
!Image methodsFor:'displaying'!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7436
1737
30e65b9fee9c ST-80 compatibility
ca
parents: 1733
diff changeset
  7437
asImage
30e65b9fee9c ST-80 compatibility
ca
parents: 1733
diff changeset
  7438
    "ST-80 compatibility
30e65b9fee9c ST-80 compatibility
ca
parents: 1733
diff changeset
  7439
    "
30e65b9fee9c ST-80 compatibility
ca
parents: 1733
diff changeset
  7440
    ^ self
30e65b9fee9c ST-80 compatibility
ca
parents: 1733
diff changeset
  7441
!
30e65b9fee9c ST-80 compatibility
ca
parents: 1733
diff changeset
  7442
758
51ac65155b96 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 757
diff changeset
  7443
displayFilledOn:aGC
759
52f5ceda5347 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 758
diff changeset
  7444
    "display the receiver as an opaque image.
758
51ac65155b96 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 757
diff changeset
  7445
     This allows Images to be wrapped by a FillingWrapper"
51ac65155b96 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 757
diff changeset
  7446
51ac65155b96 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 757
diff changeset
  7447
    aGC displayOpaqueForm:self x:0 y:0.
51ac65155b96 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 757
diff changeset
  7448
51ac65155b96 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 757
diff changeset
  7449
    "Created: 29.5.1996 / 10:34:18 / cg"
759
52f5ceda5347 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 758
diff changeset
  7450
    "Modified: 29.5.1996 / 10:52:36 / cg"
758
51ac65155b96 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 757
diff changeset
  7451
!
51ac65155b96 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 757
diff changeset
  7452
7928
b84b8d86ebb9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7921
diff changeset
  7453
displayOn:aGCOrStream
b84b8d86ebb9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7921
diff changeset
  7454
    "draw the receiver in the graphicsContext, aGC.
b84b8d86ebb9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7921
diff changeset
  7455
     Smalltalk-80 compatibility"
b84b8d86ebb9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7921
diff changeset
  7456
b84b8d86ebb9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7921
diff changeset
  7457
    "Compatibility
b84b8d86ebb9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7921
diff changeset
  7458
       append a printed desription on some stream (Dolphin,  Squeak)
b84b8d86ebb9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7921
diff changeset
  7459
     OR:
b84b8d86ebb9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7921
diff changeset
  7460
       display the receiver in a graphicsContext at 0@0 (ST80).
b84b8d86ebb9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7921
diff changeset
  7461
     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
  7462
     (although the fallBack is to display its printString ...)"
b84b8d86ebb9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7921
diff changeset
  7463
b84b8d86ebb9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7921
diff changeset
  7464
    "/ what a kludge - Dolphin and Squeak mean: printOn: a stream;
7930
300040dda391 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7928
diff changeset
  7465
    "/ old ST80 means: draw-yourself on a GC.
300040dda391 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7928
diff changeset
  7466
    aGCOrStream isStream ifFalse:[
300040dda391 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7928
diff changeset
  7467
        ^ super displayOn:aGCOrStream.
300040dda391 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7928
diff changeset
  7468
    ].
300040dda391 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7928
diff changeset
  7469
    
300040dda391 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7928
diff changeset
  7470
    aGCOrStream nextPutAll:(self class name).
300040dda391 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7928
diff changeset
  7471
    aGCOrStream nextPutAll:('(%1 x %2' bindWith:width with:height).
300040dda391 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7928
diff changeset
  7472
    fileName notNil ifTrue:[ aGCOrStream nextPutAll:(' from "%1"' bindWith:fileName) ].
300040dda391 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7928
diff changeset
  7473
    aGCOrStream nextPutAll:')'.
7928
b84b8d86ebb9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7921
diff changeset
  7474
b84b8d86ebb9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7921
diff changeset
  7475
    "Created: / 22-02-2017 / 15:51:29 / cg"
7930
300040dda391 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 7928
diff changeset
  7476
    "Modified (format): / 22-02-2017 / 17:03:50 / cg"
7928
b84b8d86ebb9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7921
diff changeset
  7477
!
b84b8d86ebb9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7921
diff changeset
  7478
3865
18532e89cdca *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3864
diff changeset
  7479
displayOn:aGC x:x y:y
18532e89cdca *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3864
diff changeset
  7480
    "draw the receiver in the graphicsContext, aGC.
18532e89cdca *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3864
diff changeset
  7481
     Smalltalk-80 compatibility"
18532e89cdca *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3864
diff changeset
  7482
18532e89cdca *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3864
diff changeset
  7483
    aGC displayForm:self x:x y:y.
18532e89cdca *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3864
diff changeset
  7484
18532e89cdca *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3864
diff changeset
  7485
    "Modified: 23.4.1996 / 11:12:31 / cg"
18532e89cdca *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3864
diff changeset
  7486
    "Created: 12.5.1996 / 20:14:31 / cg"
758
51ac65155b96 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 757
diff changeset
  7487
!
51ac65155b96 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 757
diff changeset
  7488
3729
d2cd7d8585a3 *** empty log message ***
penk
parents: 3700
diff changeset
  7489
displayOn:aGC x:x y:y opaque:opaque
d2cd7d8585a3 *** empty log message ***
penk
parents: 3700
diff changeset
  7490
    "draw the receiver in the graphicsContext, aGC.
d2cd7d8585a3 *** empty log message ***
penk
parents: 3700
diff changeset
  7491
     Smalltalk-80 compatibility"
d2cd7d8585a3 *** empty log message ***
penk
parents: 3700
diff changeset
  7492
d2cd7d8585a3 *** empty log message ***
penk
parents: 3700
diff changeset
  7493
    opaque ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7494
        self displayOpaqueOn:aGC x:x y:y .
3729
d2cd7d8585a3 *** empty log message ***
penk
parents: 3700
diff changeset
  7495
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7496
        self displayOn:aGC x:x y:y .
3729
d2cd7d8585a3 *** empty log message ***
penk
parents: 3700
diff changeset
  7497
    ].
d2cd7d8585a3 *** empty log message ***
penk
parents: 3700
diff changeset
  7498
!
d2cd7d8585a3 *** empty log message ***
penk
parents: 3700
diff changeset
  7499
3379
0d1d05ddad7c added displayOpaque
martin
parents: 3363
diff changeset
  7500
displayOpaqueOn:aGC at:aPoint
0d1d05ddad7c added displayOpaque
martin
parents: 3363
diff changeset
  7501
    "draw the receiver in the graphicsContext, aGC.
0d1d05ddad7c added displayOpaque
martin
parents: 3363
diff changeset
  7502
     Smalltalk-80 compatibility"
0d1d05ddad7c added displayOpaque
martin
parents: 3363
diff changeset
  7503
0d1d05ddad7c added displayOpaque
martin
parents: 3363
diff changeset
  7504
    self displayOpaqueOn:aGC x:aPoint x y:aPoint y.
0d1d05ddad7c added displayOpaque
martin
parents: 3363
diff changeset
  7505
0d1d05ddad7c added displayOpaque
martin
parents: 3363
diff changeset
  7506
    "Modified: 12.5.1996 / 20:16:38 / cg"
0d1d05ddad7c added displayOpaque
martin
parents: 3363
diff changeset
  7507
!
0d1d05ddad7c added displayOpaque
martin
parents: 3363
diff changeset
  7508
1086
269243c32f69 added displayOpaque, for protocol completeness
Claus Gittinger <cg@exept.de>
parents: 1070
diff changeset
  7509
displayOpaqueOn:aGC x:x y:y
269243c32f69 added displayOpaque, for protocol completeness
Claus Gittinger <cg@exept.de>
parents: 1070
diff changeset
  7510
    "draw the receiver in the graphicsContext, aGC.
269243c32f69 added displayOpaque, for protocol completeness
Claus Gittinger <cg@exept.de>
parents: 1070
diff changeset
  7511
     Smalltalk-80 compatibility"
269243c32f69 added displayOpaque, for protocol completeness
Claus Gittinger <cg@exept.de>
parents: 1070
diff changeset
  7512
269243c32f69 added displayOpaque, for protocol completeness
Claus Gittinger <cg@exept.de>
parents: 1070
diff changeset
  7513
    aGC displayOpaqueForm:self x:x y:y.
269243c32f69 added displayOpaque, for protocol completeness
Claus Gittinger <cg@exept.de>
parents: 1070
diff changeset
  7514
269243c32f69 added displayOpaque, for protocol completeness
Claus Gittinger <cg@exept.de>
parents: 1070
diff changeset
  7515
    "Modified: 23.4.1996 / 11:12:31 / cg"
269243c32f69 added displayOpaque, for protocol completeness
Claus Gittinger <cg@exept.de>
parents: 1070
diff changeset
  7516
    "Created: 22.10.1996 / 16:35:49 / cg"
269243c32f69 added displayOpaque, for protocol completeness
Claus Gittinger <cg@exept.de>
parents: 1070
diff changeset
  7517
!
269243c32f69 added displayOpaque, for protocol completeness
Claus Gittinger <cg@exept.de>
parents: 1070
diff changeset
  7518
758
51ac65155b96 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 757
diff changeset
  7519
displayStrokedOn:aGC
759
52f5ceda5347 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 758
diff changeset
  7520
    "display the receiver as an non opaque image.
758
51ac65155b96 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 757
diff changeset
  7521
     This allows Images to be wrapped by a StrokingWrapper"
51ac65155b96 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 757
diff changeset
  7522
51ac65155b96 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 757
diff changeset
  7523
    aGC displayForm:self x:0 y:0.
51ac65155b96 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 757
diff changeset
  7524
759
52f5ceda5347 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 758
diff changeset
  7525
    "Created: 29.5.1996 / 10:34:18 / cg"
52f5ceda5347 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 758
diff changeset
  7526
    "Modified: 29.5.1996 / 10:52:30 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7527
! !
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
  7528
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7529
!Image methodsFor:'dither helpers'!
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7530
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7531
burkesDitheredMonochromeBits
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7532
    "return the bitmap for a dithered monochrome bitmap from the image.
6311
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
  7533
     Works for any source depths / photometric.
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
  7534
     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
  7535
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7536
    |dstIndex        "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7537
     nextDst         "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7538
     bytesPerMonoRow "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7539
     monoBits greyValues
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7540
     errorArray
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7541
     errorArray1
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7542
     e t
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7543
     w               "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7544
     h               "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7545
     bitCnt          "{Class: SmallInteger }"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  7546
     byte            "{Class: SmallInteger }"
1063
ba1bf8091bc1 unused variable cleanup
Claus Gittinger <cg@exept.de>
parents: 1057
diff changeset
  7547
     grey|
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7548
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7549
    self depth > 12 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7550
        ^ self floydSteinbergDitheredMonochromeBits
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7551
    ].
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7552
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7553
    w := width.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7554
    h := height.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7555
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7556
    bytesPerMonoRow := (w + 7) // 8.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7557
    monoBits := ByteArray uninitializedNew:(bytesPerMonoRow * h).
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7558
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7559
    errorArray := Array new:(w+4).
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7560
    errorArray1 := Array new:(w+4) withAll:0.
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
    dstIndex := 1.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7563
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7564
    "/ 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
  7565
    "/ use table-value in loop
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
    greyValues := self greyMapForRange:(255*1024).
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  7568
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7569
    0 to:(h-1) do:[:y |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7570
        nextDst := dstIndex + bytesPerMonoRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7571
        byte := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7572
        bitCnt := 8.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7573
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7574
        t := errorArray.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7575
        errorArray := errorArray1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7576
        errorArray1 := t.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7577
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7578
        errorArray1 atAllPut:0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7579
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7580
        self valuesAtY:y from:0 to:(w-1) do:[:x :pixel |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7581
            |eP "{Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7582
             eD
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7583
             eI "{Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7584
             xE "{Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7585
             xN "{Class: SmallInteger }" |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7586
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7587
            "/ get the colors grey value [0 .. 1]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7588
            grey := greyValues at:(pixel + 1).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7589
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7590
            "/ adjust error
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7591
            xE := x + 2 + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7592
            grey := (grey + (errorArray at:xE)).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7593
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7594
            byte := byte bitShift:1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7595
            grey > (127*1024) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7596
                byte := byte bitOr:1.      "/ white
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7597
                e := grey - (255*1024)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7598
            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7599
                e := grey                  "/ black
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7600
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7601
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7602
            e ~= 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7603
                "/ distribute the error:
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7604
                "/                  XX  8  4
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7605
                "/             2  4  8  4  2
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7606
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7607
                eD := e.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7608
                eI := e // 32.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7609
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7610
                eP := eI * 8. eD := eD - eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7611
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7612
                xN := xE + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7613
                errorArray at:xN put:(errorArray at:xN) + eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7614
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7615
                eD := eD - eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7616
                errorArray1 at:xE put:(errorArray1 at:xE) + eP.
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
                eP := eI * 4. eD := eD - eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7619
                xN := xE + 2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7620
                errorArray at:xN put:(errorArray at:xN) + eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7621
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7622
                eD := eD - eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7623
                xN := xE - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7624
                errorArray1 at:xN put:(errorArray1 at:xN) + eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7625
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7626
                eD := eD - eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7627
                xN := xE + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7628
                errorArray1 at:xN put:(errorArray1 at:xN) + eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7629
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7630
                eP := eI * 2. eD := eD - eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7631
                xN := xE - 2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7632
                errorArray1 at:xN put:(errorArray1 at:xN) + eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7633
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7634
                "/ eD := eD.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7635
                xN := xE + 2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7636
                errorArray1 at:xN put:(errorArray1 at:xN) + eP.
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
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7639
            bitCnt := bitCnt - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7640
            bitCnt == 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7641
                monoBits at:dstIndex put:byte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7642
                dstIndex := dstIndex + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7643
                byte := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7644
                bitCnt := 8.
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
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7647
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7648
        bitCnt ~~ 8 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7649
            byte := byte bitShift:bitCnt.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7650
            monoBits at:dstIndex put:byte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7651
        ].
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
        dstIndex := nextDst.
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7654
    ].
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7655
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7656
    ^ monoBits
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7657
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7658
    "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
  7659
    "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
  7660
!
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  7661
874
cce9c1029d38 added floydSteinberg dithering for pseudo-8 images
Claus Gittinger <cg@exept.de>
parents: 873
diff changeset
  7662
floydSteinbergDitheredDepth8BitsColors:colors
cce9c1029d38 added floydSteinberg dithering for pseudo-8 images
Claus Gittinger <cg@exept.de>
parents: 873
diff changeset
  7663
    "return a floyd-steinberg dithered bitmap from the receiver picture,
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  7664
     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
  7665
     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
  7666
     (which need not be a colorCubes colors)."
cce9c1029d38 added floydSteinberg dithering for pseudo-8 images
Claus Gittinger <cg@exept.de>
parents: 873
diff changeset
  7667
3157
f95dc03365da added some dither helpers
Claus Gittinger <cg@exept.de>
parents: 3145
diff changeset
  7668
    ^ self floydSteinbergDitheredDepth8BitsColors:colors map:nil
f95dc03365da added some dither helpers
Claus Gittinger <cg@exept.de>
parents: 3145
diff changeset
  7669
f95dc03365da added some dither helpers
Claus Gittinger <cg@exept.de>
parents: 3145
diff changeset
  7670
!
f95dc03365da added some dither helpers
Claus Gittinger <cg@exept.de>
parents: 3145
diff changeset
  7671
f95dc03365da added some dither helpers
Claus Gittinger <cg@exept.de>
parents: 3145
diff changeset
  7672
floydSteinbergDitheredDepth8BitsColors:colors map:aMapOrNil
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7673
    "return a floyd-steinberg dithered bitmap from the receiver picture,
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  7674
     which must be a depth-24 image.
3157
f95dc03365da added some dither helpers
Claus Gittinger <cg@exept.de>
parents: 3145
diff changeset
  7675
     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
  7676
     (which need not be a colorCubes colors)."
f95dc03365da added some dither helpers
Claus Gittinger <cg@exept.de>
parents: 3145
diff changeset
  7677
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  7678
    |pseudoBits
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7679
     ditherRGBBytes ditherColors
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7680
     w       "{Class: SmallInteger }"
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7681
     h       "{Class: SmallInteger }"
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7682
     index   "{Class: SmallInteger }"
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  7683
     lookupPos "{Class: SmallInteger }"
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7684
     ditherIds failed lastColor qScramble
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  7685
     clrLookup error clr|
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7686
7996
a9afe1d564aa #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  7687
    self depth ~~ 24 ifTrue:[
a9afe1d564aa #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  7688
        ^ (Depth24Image fromImage:self) floydSteinbergDitheredDepth8BitsColors:colors map:aMapOrNil
a9afe1d564aa #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  7689
    ].
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7690
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7691
    "/ collect valid ditherColors ...
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7692
    aMapOrNil isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7693
        ditherColors := colors select:[:clr | clr notNil].
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7694
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7695
        ditherColors := colors
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7696
    ].
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7697
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7698
    "/ ... and sort by manhatten distance from black
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7699
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7700
    qScramble := #(
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7701
                "/  2rX00X00X00X00
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7702
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7703
                    2r000000000000    "/ 0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7704
                    2r000000000100    "/ 1
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7705
                    2r000000100000    "/ 2
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7706
                    2r000000100100    "/ 3
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7707
                    2r000100000000    "/ 4
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7708
                    2r000100000100    "/ 5
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7709
                    2r000100100000    "/ 6
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7710
                    2r000100100100    "/ 7
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7711
                    2r100000000000    "/ 8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7712
                    2r100000000100    "/ 9
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7713
                    2r100000100000    "/ a
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7714
                    2r100000100100    "/ b
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7715
                    2r100100000000    "/ c
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7716
                    2r100100000100    "/ d
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7717
                    2r100100100000    "/ e
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7718
                    2r100100100100    "/ f
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7719
                  ).
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7720
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7721
    ditherColors := ditherColors sort:[:a :b |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7722
                                |cr "{Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7723
                                 cg "{Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7724
                                 cb "{Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7725
                                 i1 "{Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7726
                                 i2 "{Class: SmallInteger }"|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7727
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7728
                                cr := a redByte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7729
                                cg := a greenByte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7730
                                cb := a blueByte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7731
                                i1 := qScramble at:((cr bitShift:-4) bitAnd:16r0F) + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7732
                                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
  7733
                                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
  7734
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7735
                                cr := b redByte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7736
                                cg := b greenByte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7737
                                cb := b blueByte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7738
                                i2 := qScramble at:((cr bitShift:-4) bitAnd:16r0F) + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7739
                                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
  7740
                                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
  7741
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7742
                                i1 < i2
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7743
                    ].
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7744
    aMapOrNil isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7745
        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
  7746
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7747
        ditherIds := aMapOrNil asByteArray
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7748
    ].
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7749
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7750
    "/ 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
  7751
    "/ to the position in the colorList
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7752
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7753
    clrLookup := ByteArray new:(4096).
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7754
    index := 0.
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7755
    ditherColors keysAndValuesDo:[:clrPosition :clr |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7756
        |r g b i|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7757
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7758
        r := clr redByte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7759
        g := clr greenByte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7760
        b := clr blueByte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7761
        i := qScramble at:((r bitShift:-4) bitAnd:16r0F) + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7762
        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
  7763
        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
  7764
        lookupPos := i.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7765
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  7766
        index+1 to:lookupPos do:[:idx|
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  7767
            clrLookup at:idx put:(clrPosition-1-1).
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  7768
        ].
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  7769
        index := lookupPos.
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7770
    ].
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7771
    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
  7772
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7773
"/    [index <= (4095)] whileTrue:[
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7774
"/        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
  7775
"/        index := index + 1.
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7776
"/    ].
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7777
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7778
    "/ collect ditherColor components
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
    lastColor := ditherColors size.
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7781
    ditherIds := ByteArray uninitializedNew:lastColor.
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7782
    ditherRGBBytes := ByteArray uninitializedNew:(lastColor * 3).
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7783
    index := 1.
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7784
    1 to:lastColor do:[:pix |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7785
        clr := ditherColors at:pix.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7786
        ditherRGBBytes at:index put:(clr redByte).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7787
        ditherRGBBytes at:index+1 put:(clr greenByte).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7788
        ditherRGBBytes at:index+2 put:(clr blueByte).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7789
        aMapOrNil isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7790
            ditherIds at:pix put:clr colorId.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7791
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7792
            ditherIds at:pix put:(aMapOrNil at:pix).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7793
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7794
        index := index + 3.
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7795
    ].
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7796
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7797
    pseudoBits := ByteArray uninitializedNew:(width * height).
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7798
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7799
    w := width + 2.
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7800
    error := ByteArray uninitializedNew:w*(3*2).
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
    w := width.
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7803
    h := height.
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7804
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7805
    failed := true.
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7806
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
    int __x, __y;
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7809
    int __eR, __eG, __eB;
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7810
    unsigned char *srcP, *dstP;
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7811
    unsigned char *idP;
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7812
    unsigned char *dp;
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7813
    unsigned char *__clrLookup;
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7814
    short *errP, *eP;
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7815
    int __fR, __fG, __fB;
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7816
    int iR, iG, iB;
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7817
    int idx;
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7818
    int __w = __intVal(w);
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7819
    int __h = __intVal(h);
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7820
    int __nColors = __intVal(lastColor);
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7821
    int __wR = -1, __wG, __wB;
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7822
    static int __qScramble[16] = {
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7823
                    0x000 /* 2r000000000000    0 */,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7824
                    0x004 /* 2r000000000100    1 */,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7825
                    0x020 /* 2r000000100000    2 */,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7826
                    0x024 /* 2r000000100100    3 */,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7827
                    0x100 /* 2r000100000000    4 */,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7828
                    0x104 /* 2r000100000100    5 */,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7829
                    0x120 /* 2r000100100000    6 */,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7830
                    0x124 /* 2r000100100100    7 */,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7831
                    0x800 /* 2r100000000000    8 */,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7832
                    0x804 /* 2r100000000100    9 */,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7833
                    0x820 /* 2r100000100000    a */,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7834
                    0x824 /* 2r100000100100    b */,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7835
                    0x900 /* 2r100100000000    c */,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7836
                    0x904 /* 2r100100000100    d */,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7837
                    0x920 /* 2r100100100000    e */,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7838
                    0x924 /* 2r100100100100    f */,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7839
                  };
5476
06e08505bc6f __isByteArray() to __isByteArrayLike() in primitive code
Stefan Vogel <sv@exept.de>
parents: 5352
diff changeset
  7840
06e08505bc6f __isByteArray() to __isByteArrayLike() in primitive code
Stefan Vogel <sv@exept.de>
parents: 5352
diff changeset
  7841
    if (__isByteArrayLike(__INST(bytes))
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7842
     && __isByteArray(pseudoBits)
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7843
     && __isByteArray(ditherRGBBytes)
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7844
     && __isByteArray(ditherIds)
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7845
     && __isByteArray(clrLookup)
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7846
     && __isByteArray(error)) {
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7847
        failed = false;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7848
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7849
        srcP = __ByteArrayInstPtr(__INST(bytes))->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7850
        dstP = __ByteArrayInstPtr(pseudoBits)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7851
        idP = __ByteArrayInstPtr(ditherIds)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7852
        __clrLookup = __ByteArrayInstPtr(clrLookup)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7853
        errP = (short *) __ByteArrayInstPtr(error)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7854
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7855
        /*
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7856
         * clear error accumulator
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7857
         */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7858
        eP = errP;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7859
        bzero(eP, (__w+2) * 2 * 3);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7860
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7861
        for (__y=__h; __y>0; __y--) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7862
            __eR = __eG = __eB = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7863
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7864
            eP = &(errP[3]);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7865
            __eR = eP[0];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7866
            __eG = eP[1];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7867
            __eB = eP[2];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7868
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7869
            for (__x=__w; __x>0; __x--) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7870
                int __want;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7871
                int pix;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7872
                int __wantR, __wantG, __wantB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7873
                int idx;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7874
                int tR, tG, tB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7875
                int nR, nG, nB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7876
                int dR, dG, dB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7877
                int minDelta, bestIdx;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7878
                int cnt;
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
                __wantR = *srcP++;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7881
                __wantG = *srcP++;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7882
                __wantB = *srcP++;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7883
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7884
                /*
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7885
                 * wR, wG and wB is the wanted r/g/b value;
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
                __wantR = __wantR + __eR;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7888
                __wantG = __wantG + __eG;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7889
                __wantB = __wantB + __eB;
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7890
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7891
#define RED_SCALE 30
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7892
#define GREEN_SCALE 59
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7893
#define BLUE_SCALE 11
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7894
#define GOOD_DELTA 30
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7895
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7896
#define xRED_SCALE 1
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7897
#define xGREEN_SCALE 1
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7898
#define xBLUE_SCALE 1
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7899
#define xGOOD_DELTA 3
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7900
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7901
#define FAST_LOOKUP
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7902
/* #define ONE_SHOT */
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7903
#define NPROBE 8
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7904
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7905
#ifndef FAST_LOOKUP
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7906
                if ((__wantR == __wR)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7907
                 && (__wantG == __wG)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7908
                 && (__wantB == __wB)) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7909
                    /*
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7910
                     * same color again - reuse last bestMatch
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7911
                     */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7912
                } else
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7913
#endif
7522
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
                    __wR = __wantR;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7916
                    __wG = __wantG;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7917
                    __wB = __wantB;
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7918
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7919
#ifdef FAST_LOOKUP
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7920
                    if(__wR > 255) __wR = 255;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7921
                    else if (__wR < 0) __wR = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7922
                    if(__wG > 255) __wG = 255;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7923
                    else if (__wG < 0) __wG = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7924
                    if(__wB > 255) __wB = 255;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7925
                    else if (__wB < 0) __wB = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7926
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7927
                    {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7928
                        int lookupIndex;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7929
                        int idx, idx0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7930
                        int d, delta;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7931
                        unsigned char *dp0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7932
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7933
                        dp = __ByteArrayInstPtr(ditherRGBBytes)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7934
                        lookupIndex =    __qScramble[((__wR & 0xF0)>>4)];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7935
                        lookupIndex |=   __qScramble[((__wG & 0xF0)>>4)] >> 1;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7936
                        lookupIndex |=   __qScramble[((__wB & 0xF0)>>4)] >> 2;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7937
                        idx = bestIdx =__clrLookup[lookupIndex];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7938
                        dp += (idx+idx+idx);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7939
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7940
                        /* try color at lookupIndex */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7941
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7942
                        d = dp[0];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7943
                        delta = (__wR - d) * RED_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7944
                        if (delta < 0) delta = -delta;
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
                        d = dp[1];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7947
                        if (__wG > d)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7948
                            delta += (__wG - d) * GREEN_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7949
                        else
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7950
                            delta += (d - __wG) * GREEN_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7951
                        d = dp[2];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7952
                        if (__wB > d)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7953
                            delta += (__wB - d) * BLUE_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7954
                        else
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7955
                            delta += (d - __wB) * BLUE_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7956
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7957
                        if (delta <= GOOD_DELTA) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7958
                            goto foundBest;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7959
                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7960
                        minDelta = delta;
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  7961
# ifndef ONE_SHOT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7962
                        idx0 = idx; dp0 = dp;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7963
                        cnt = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7964
                        while ((++cnt <= NPROBE) && (idx > 0)) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7965
                            /* try previous color(s) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7966
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7967
                            idx--; dp -= 3;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7968
                            d = dp[0];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7969
                            delta = (__wR - d) * RED_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7970
                            if (delta < 0) delta = -delta;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7971
                            d = dp[1];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7972
                            if (__wG > d)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7973
                                delta += (__wG - d) * GREEN_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7974
                            else
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7975
                                delta += (d - __wG) * GREEN_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7976
                            d = dp[2];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7977
                            if (__wB > d)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7978
                                delta += (__wB - d) * BLUE_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7979
                            else
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7980
                                delta += (d - __wB) * BLUE_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7981
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7982
                            if (delta < minDelta) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7983
                                bestIdx = idx;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7984
                                if (delta <= GOOD_DELTA) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7985
                                    goto foundBest;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7986
                                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7987
                                minDelta = delta;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7988
                            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7989
                        }
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
                        idx = idx0; dp = dp0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7992
                        cnt = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7993
                        while ((++cnt <= NPROBE) && (++idx < __nColors)) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7994
                            /* try next color */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7995
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7996
                            dp += 3;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7997
                            d = dp[0];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7998
                            delta = (__wR - d) * RED_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  7999
                            if (delta < 0) delta = -delta;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8000
                            d = dp[1];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8001
                            if (__wG > d)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8002
                                delta += (__wG - d) * GREEN_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8003
                            else
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8004
                                delta += (d - __wG) * GREEN_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8005
                            d = dp[2];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8006
                            if (__wB > d)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8007
                                delta += (__wB - d) * BLUE_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8008
                            else
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8009
                                delta += (d - __wB) * BLUE_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8010
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8011
                            if (delta < minDelta) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8012
                                bestIdx = idx;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8013
                                if (delta <= GOOD_DELTA) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8014
                                    goto foundBest;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8015
                                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8016
                                minDelta = delta;
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
                        }
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  8019
# endif
7522
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
        foundBest: ;
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  8022
#else
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  8023
/*
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8024
                    if(__wR > 255) __wR = 255;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8025
                    else if (__wR < 0) __wR = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8026
                    if(__wG > 255) __wG = 255;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8027
                    else if (__wG < 0) __wG = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8028
                    if(__wB > 255) __wB = 255;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8029
                    else if (__wB < 0) __wB = 0;
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  8030
*/
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  8031
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8032
                    /* find the best matching color */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8033
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8034
                    minDelta = 99999;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8035
                    bestIdx = -1;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8036
                    dp = __ByteArrayInstPtr(ditherRGBBytes)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8037
                    for (idx = 0; idx<__nColors; idx++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8038
                        int d, delta;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8039
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8040
                        d = dp[0];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8041
                        delta = (__wR - d) * RED_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8042
                        if (delta < 0) delta = -delta;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8043
                        if (delta < minDelta) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8044
                            d = dp[1];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8045
                            if (__wG > d)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8046
                                delta += (__wG - d) * GREEN_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8047
                            else
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8048
                                delta += (d - __wG) * GREEN_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8049
                            if (delta < minDelta) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8050
                                d = dp[2];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8051
                                if (__wB > d)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8052
                                    delta += (__wB - d) * BLUE_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8053
                                else
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8054
                                    delta += (d - __wB) * BLUE_SCALE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8055
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8056
                                if (delta < minDelta) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8057
                                    bestIdx = idx;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8058
                                    if (delta <= GOOD_DELTA) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8059
                                        break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8060
                                    }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8061
                                    minDelta = delta;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8062
                                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8063
                            }
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
                        dp += 3;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8066
                    }
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  8067
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8068
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8069
                dp = __ByteArrayInstPtr(ditherRGBBytes)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8070
                dp += bestIdx * 3;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8071
                dR = dp[0];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8072
                dG = dp[1];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8073
                dB = dp[2];
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  8074
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  8075
/*
4725
c8896df7bd3f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4717
diff changeset
  8076
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
  8077
                __wantR, __wantG, __wantB,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8078
                __wR, __wG, __wB,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8079
                dR, dG, dB);
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  8080
*/
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8081
                /*
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8082
                 * store the corresponding dither colors colorId
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8083
                 */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8084
                *dstP++ = idP[bestIdx];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8085
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
                 * the new error & distribute the error
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8088
                 */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8089
                __eR = __wantR - dR;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8090
                if (__eR) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8091
                    tR = __eR >> 4;  /* 16th of error */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8092
                    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
  8093
                    eP[0] = tR*5;         /* 5/16th for (x / y+1) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8094
                    eP[-3] = tR*3;        /* 3/16th for (x-1 / y+1) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8095
                    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
  8096
                    __eR = nR;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8097
                } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8098
                    __eR = eP[3];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8099
                    eP[0] = eP[-3] = eP[3] = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8100
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8101
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8102
                __eG = __wantG - dG;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8103
                if (__eG) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8104
                    tG = __eG >> 4;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8105
                    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
  8106
                    eP[1] = tG*5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8107
                    eP[-2] = tG*3;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8108
                    eP[4] = __eG - (tG*15);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8109
                    __eG = nG;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8110
                } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8111
                    __eG = eP[4];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8112
                    eP[1] = eP[-2] = eP[4] = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8113
                }
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
                __eB = __wantB - dB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8116
                if (__eB) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8117
                    tB = __eB >> 4;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8118
                    nB = eP[5] + (tB * 7);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8119
                    eP[2] = tB*5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8120
                    eP[-1] = tB*3;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8121
                    eP[5] = __eB - (tB*15);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8122
                    __eB = nB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8123
                } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8124
                    __eB = eP[5];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8125
                    eP[2] = eP[-1] = eP[5] = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8126
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8127
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8128
                eP += 3;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8129
            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8130
        }
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  8131
    }
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  8132
%}.
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  8133
    failed ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8134
        self primitiveFailed.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8135
        ^ nil
3908
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  8136
    ].
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  8137
d39322d668f6 oops - asDitheredImage must return a depth8 image
Claus Gittinger <cg@exept.de>
parents: 3906
diff changeset
  8138
    ^ pseudoBits
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  8139
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
  8140
    "Modified: / 30-01-2017 / 19:58:45 / stefan"
7996
a9afe1d564aa #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  8141
    "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
  8142
!
cce9c1029d38 added floydSteinberg dithering for pseudo-8 images
Claus Gittinger <cg@exept.de>
parents: 873
diff changeset
  8143
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8144
floydSteinbergDitheredDepth8BitsColors:fixColors nRed:nRed nGreen:nGreen nBlue:nBlue
858
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  8145
    "return a floyd-steinberg dithered bitmap from the receiver picture,
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8146
     which must be a depth-8 image.
858
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  8147
     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
  8148
     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
  8149
     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
  8150
     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
  8151
     Color class.
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8152
     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
  8153
     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
  8154
     for example to create dithered Depth4Images from Depth8Images."
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8155
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8156
    |pseudoBits
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8157
     rgbBytes
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8158
     w       "{Class: SmallInteger }"
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8159
     h       "{Class: SmallInteger }"
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8160
     index   "{Class: SmallInteger }"
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8161
     fixR    "{Class: SmallInteger }"
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8162
     fixG    "{Class: SmallInteger }"
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8163
     fixB    "{Class: SmallInteger }"
879
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8164
     fixGfixB
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8165
     fixIds failed map lastColor
879
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8166
     rgbIDX  "{Class: SmallInteger }"
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8167
     idxAndErrRBytes idxAndErrGBytes idxAndErrBBytes
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8168
     error clr|
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8169
858
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  8170
    self depth ~~ 8 ifTrue:[^ nil].
5eb598185858 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 854
diff changeset
  8171
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8172
    fixR := nRed.
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8173
    fixR == 0 ifTrue:[ ^ nil].
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8174
    fixG := nGreen.
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8175
    fixG == 0 ifTrue:[ ^ nil].
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8176
    fixB := nBlue.
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8177
    fixB == 0 ifTrue:[ ^ nil].
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8178
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8179
    "/ simple check
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8180
    (fixR * fixG * fixB) ~~ fixColors size ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8181
        self error:'invalid color array passed'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8182
        ^ nil
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8183
    ].
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8184
    fixIds := (fixColors asArray collect:[:clr | clr colorId]) asByteArray.
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8185
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8186
    "/
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8187
    "/ collect color components as integer values (for integer arithmetic)
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8188
    "/
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8189
    rgbBytes := ByteArray uninitializedNew:256 * 3.
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8190
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8191
    index := 1.
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8192
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8193
    photometric == #palette ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8194
        lastColor := colorMap size - 1
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8195
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8196
        lastColor := 255.
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8197
    ].
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8198
    0 to:lastColor do:[:pix |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8199
        clr := self colorFromValue:pix.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8200
        rgbBytes at:index put:(clr redByte).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8201
        rgbBytes at:index+1 put:(clr greenByte).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8202
        rgbBytes at:index+2 put:(clr blueByte).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8203
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8204
        index := index + 3.
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8205
    ].
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8206
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8207
    pseudoBits := ByteArray uninitializedNew:(width * height).
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8208
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8209
    w := width + 2.
1636
c30f6644666e dont use bcopy in #floydSteinbergDitheredDepth8BitsColors
Claus Gittinger <cg@exept.de>
parents: 1630
diff changeset
  8210
    error := ByteArray new:w*(3*2).
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8211
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8212
    w := width.
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8213
    h := height.
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8214
879
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8215
    idxAndErrRBytes := ByteArray uninitializedNew:256*2.
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8216
    idxAndErrGBytes := ByteArray uninitializedNew:256*2.
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8217
    idxAndErrBBytes := ByteArray uninitializedNew:256*2.
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8218
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8219
    fixGfixB := fixG * fixB.
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8220
    index := 1.
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8221
    0 to:255 do:[:i |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8222
        rgbIDX := (i * (fixR-1) + 128) // 255. "red index rounded"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8223
        idxAndErrRBytes at:index put:(rgbIDX * fixGfixB).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8224
        idxAndErrRBytes at:index+1 put:i - (rgbIDX * 255 // (fixR-1)) + 128.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8225
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8226
        rgbIDX := (i * (fixG-1) + 128) // 255. "green index rounded"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8227
        idxAndErrGBytes at:index put:(rgbIDX * fixB).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8228
        idxAndErrGBytes at:index+1 put:i - (rgbIDX * 255 // (fixG-1)) + 128.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8229
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8230
        rgbIDX := (i * (fixB-1) + 128) // 255. "blue index rounded"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8231
        idxAndErrBBytes at:index put:(rgbIDX ).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8232
        idxAndErrBBytes at:index+1 put:i - (rgbIDX * 255 // (fixB-1)) + 128.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8233
        index := index + 2.
879
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8234
    ].
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8235
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8236
    failed := true.
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
%{
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8239
    int __x, __y;
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8240
    int __eR, __eG, __eB;
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8241
    unsigned char *srcP, *dstP;
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8242
    unsigned char *rgbP;
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8243
    unsigned char *idP;
879
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8244
    unsigned char *__idxAndErrRBytes, *__idxAndErrGBytes, *__idxAndErrBBytes;
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8245
    short *errP, *eP;
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8246
    int idx;
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8247
    int __w = __intVal(w);
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8248
5476
06e08505bc6f __isByteArray() to __isByteArrayLike() in primitive code
Stefan Vogel <sv@exept.de>
parents: 5352
diff changeset
  8249
    if (__isByteArrayLike(__INST(bytes))
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8250
     && __isByteArray(pseudoBits)
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8251
     && __isByteArray(rgbBytes)
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8252
     && __isByteArray(fixIds)
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8253
     && __isByteArray(error)
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8254
     && __bothSmallInteger(fixR, fixG)
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8255
     && __isSmallInteger(fixB)) {
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8256
        failed = false;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8257
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8258
        srcP = __ByteArrayInstPtr(__INST(bytes))->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8259
        dstP = __ByteArrayInstPtr(pseudoBits)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8260
        rgbP = __ByteArrayInstPtr(rgbBytes)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8261
        idP = __ByteArrayInstPtr(fixIds)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8262
        __idxAndErrRBytes = __ByteArrayInstPtr(idxAndErrRBytes)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8263
        __idxAndErrGBytes = __ByteArrayInstPtr(idxAndErrGBytes)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8264
        __idxAndErrBBytes = __ByteArrayInstPtr(idxAndErrBBytes)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8265
        errP = (short *) __ByteArrayInstPtr(error)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8266
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8267
        eP = errP;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8268
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8269
        for (__y=__intVal(h); __y>0; __y--) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8270
            __eR = __eG = __eB = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8271
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8272
            eP = &(errP[3]);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8273
            __eR = eP[0];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8274
            __eG = eP[1];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8275
            __eB = eP[2];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8276
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8277
            for (__x=__w; __x>0; __x--) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8278
                int __want;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8279
                int pix;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8280
                int idx;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8281
                int tR, tG, tB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8282
                int nR, nG, nB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8283
                int iRGB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8284
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8285
                pix = *srcP++;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8286
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8287
                /*
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8288
                 * wR, wG and wB is the wanted r/g/b value;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8289
                 */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8290
                pix = pix+pix+pix;  /* pix * 3 */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8291
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8292
                /*
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8293
                 * compute indexR/G/B and the new error:
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8294
                 */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8295
                __want = rgbP[pix]   + __eR;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8296
                if (__want > 255) __want = 255;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8297
                else if (__want < 0) __want = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8298
                __want += __want;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8299
                idx = __idxAndErrRBytes[__want];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8300
                __eR = __idxAndErrRBytes[__want+1];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8301
                __eR -= 128;
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
                __want = rgbP[pix+1] + __eG;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8304
                if (__want > 255) __want = 255;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8305
                else if (__want < 0) __want = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8306
                __want += __want;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8307
                idx += __idxAndErrGBytes[__want];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8308
                __eG = __idxAndErrGBytes[__want+1];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8309
                __eG -= 128;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8310
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8311
                __want = rgbP[pix+2] + __eB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8312
                if (__want > 255) __want = 255;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8313
                else if (__want < 0) __want = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8314
                __want += __want;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8315
                idx += __idxAndErrBBytes[__want];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8316
                __eB = __idxAndErrBBytes[__want+1];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8317
                __eB -= 128;
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
                /*
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8320
                 * store the corresponding dither colors colorId
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8321
                 */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8322
                *dstP++ = idP[idx];
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
                /*
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8325
                 * distribute the error
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8326
                 */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8327
                if (__eR) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8328
                    tR = __eR >> 4;  /* 16th of error */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8329
                    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
  8330
                    eP[0] = tR*5;         /* 5/16th for (x / y+1) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8331
                    eP[-3] = tR*3;        /* 3/16th for (x-1 / y+1) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8332
                    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
  8333
                    __eR = nR;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8334
                } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8335
                    __eR = eP[3];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8336
                    eP[0] = eP[-3] = eP[3] = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8337
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8338
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8339
                if (__eG) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8340
                    tG = __eG >> 4;  /* 16th of error */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8341
                    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
  8342
                    eP[1] = tG*5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8343
                    eP[-2] = tG*3;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8344
                    eP[4] = __eG - (tG*15);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8345
                    __eG = nG;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8346
                } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8347
                    __eG = eP[4];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8348
                    eP[1] = eP[-2] = eP[4] = 0;
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
                if (__eB) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8352
                    tB = __eB >> 4;  /* 16th of error */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8353
                    nB = eP[5] + (tB * 7);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8354
                    eP[2] = tB*5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8355
                    eP[-1] = tB*3;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8356
                    eP[5] = __eB - (tB*15);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8357
                    __eB = nB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8358
                } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8359
                    __eB = eP[5];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8360
                    eP[2] = eP[-1] = eP[5] = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8361
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8362
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8363
                eP += 3;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8364
            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8365
        }
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8366
    }
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8367
%}.
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8368
    failed ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8369
        self primitiveFailed.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8370
        ^ nil
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8371
    ].
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8372
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8373
    ^ pseudoBits
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8374
!
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
  8375
1782
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8376
floydSteinbergDitheredGrayBitsDepth:depth
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8377
    "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
  8378
     Works for any source depths / photometric,
1782
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8379
     but possibly slow since each pixel is processed individually.
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8380
     Redefined by some subclasses for more performance (D8Image/D24Image)"
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8381
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8382
    |dstIndex        "{Class: SmallInteger }"
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8383
     nextDst         "{Class: SmallInteger }"
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8384
     bytesPerOutRow  "{Class: SmallInteger }"
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8385
     outBits greyValues greyErrors greyPixels greyLevels
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8386
     errorArray
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8387
     nextErrorArray
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8388
     t
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8389
     w               "{Class: SmallInteger }"
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8390
     h               "{Class: SmallInteger }"
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8391
     bitCnt          "{Class: SmallInteger }"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8392
     byte            "{Class: SmallInteger }"
1782
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8393
     grey
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8394
     eR eRB eB eLB |
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8395
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8396
    depth > 8 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8397
        self error:'unimplemented conversion'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8398
        ^ nil
1782
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8399
    ].
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8400
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8401
    w := width.
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8402
    h := height.
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8403
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8404
    bytesPerOutRow := ((w * depth) + 7) // 8.
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8405
    outBits := ByteArray uninitializedNew:(bytesPerOutRow * h).
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8406
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8407
    greyLevels := (1 bitShift:depth) - 1.
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8408
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8409
    errorArray := Array new:w+2.
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8410
    nextErrorArray := Array new:w+2.
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8411
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8412
    nextErrorArray atAllPut:0.
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8413
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8414
    dstIndex := 1.
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8415
    bitCnt := 8.
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8416
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8417
    self depth <= 12 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8418
        "/ fetch scaled brightness values outside of loop into a table;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8419
        "/ use table-value in loop
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8420
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8421
        greyValues := self greyMapForRange:(greyLevels).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8422
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8423
        greyPixels := greyValues collect:[:v | v isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8424
                                                   0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8425
                                               ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8426
                                                   v truncated]].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8427
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8428
        greyPixels := ByteArray withAll:greyPixels.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8429
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8430
        greyErrors := greyValues collect:[:v | v isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8431
                                                   0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8432
                                               ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8433
                                                   ((v - v truncated) * 1024) truncated
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8434
                                               ]].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8435
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8436
        0 to:(h-1) do:[:y |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8437
            nextDst := dstIndex + bytesPerOutRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8438
            byte := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8439
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8440
            t := errorArray.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8441
            errorArray := nextErrorArray.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8442
            nextErrorArray := t.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8443
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8444
            nextErrorArray atAllPut:0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8445
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8446
            self valuesAtY:y from:0 to:(w-1) do:[:x :value |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8447
                |e     "{ Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8448
                 pixel "{ Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8449
                 error "{ Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8450
                 e16   "{ Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8451
                 xE    "{ Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8452
                 xN    "{ Class: SmallInteger }" |
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
                pixel := greyPixels at:(value + 1).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8455
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8456
                "/ adjust error
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8457
                xE := x + 2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8458
                error := (greyErrors at:(value + 1)) + (errorArray at:xE).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8459
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8460
                byte := byte bitShift:depth.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8461
                error > 512 "0.5" ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8462
                    pixel := pixel + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8463
                    e := error - 1024 "1.0"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8464
                ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8465
                    e := error
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
                byte := byte bitOr:pixel.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8468
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8469
                e ~= 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8470
                    e16 := e // 16.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8471
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8472
                    eR  := e16 * 7.              "/ 7/16 to right
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8473
                    eRB := e16 "* 1".            "/ 1/16 to right below
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8474
                    eB  := e16 * 5.              "/ 5/16 to below
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8475
                    eLB := e - eR - eRB - eB.  "/ 3/16 to left below
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
                    xN := xE + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8478
                    eR ~= 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8479
                        errorArray     at:xN put:(errorArray at:xN) + eR.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8480
                    ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8481
                    eRB ~= 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8482
                        nextErrorArray at:xN put:(nextErrorArray at:xN) + eRB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8483
                    ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8484
                    eB ~= 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8485
                        nextErrorArray at:xE put:(nextErrorArray at:xE) + eB.
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
                    eLB ~= 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8488
                        xN := xE - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8489
                        nextErrorArray at:xN put:(nextErrorArray at:xN) + eLB.
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
                ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8492
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8493
                bitCnt := bitCnt - depth.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8494
                bitCnt == 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8495
                    outBits at:dstIndex put:byte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8496
                    dstIndex := dstIndex + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8497
                    byte := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8498
                    bitCnt := 8.
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
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8501
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8502
            bitCnt ~~ 8 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8503
                byte := byte bitShift:bitCnt.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8504
                outBits at:dstIndex put:byte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8505
                bitCnt := 8.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8506
            ].
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
            dstIndex := nextDst.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8509
        ].
1782
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8510
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8511
        0 to:(h-1) do:[:y |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8512
            nextDst := dstIndex + bytesPerOutRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8513
            byte := 0.
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
            t := errorArray.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8516
            errorArray := nextErrorArray.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8517
            nextErrorArray := t.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8518
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8519
            nextErrorArray atAllPut:0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8520
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8521
            self colorsAtY:y from:0 to:(w-1) do:[:x :clr |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8522
                |e     "{ Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8523
                 pixel "{ Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8524
                 error "{ Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8525
                 e16   "{ Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8526
                 xE    "{ Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8527
                 xN    "{ Class: SmallInteger }" |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8528
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8529
                grey := (clr brightness * greyLevels).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8530
                pixel := grey truncated.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8531
                error := ((grey - pixel) * 1024) truncated.
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
                "/ adjust error
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8534
                xE := x + 2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8535
                error := error + (errorArray at:xE).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8536
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8537
                byte := byte bitShift:depth.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8538
                error > 512 "0.5" ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8539
                    pixel := pixel + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8540
                    e := error - 1024 "1.0"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8541
                ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8542
                    e := error
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8543
                ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8544
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8545
                byte := byte bitOr:pixel.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8546
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8547
                e ~= 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8548
                    e16 := e // 16.
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
                    eR  := e16 * 7.              "/ 7/16 to right
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8551
                    eRB := e16 "* 1".            "/ 1/16 to right below
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8552
                    eB  := e16 * 5.              "/ 5/16 to below
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8553
                    eLB := e - eR - eRB - eB.  "/ 3/16 to left below
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8554
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8555
                    xN := xE + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8556
                    eR ~= 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8557
                        errorArray     at:xN put:(errorArray at:xN) + eR.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8558
                    ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8559
                    eRB ~= 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8560
                        nextErrorArray at:xN put:(nextErrorArray at:xN) + eRB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8561
                    ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8562
                    eB ~= 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8563
                        nextErrorArray at:xE put:(nextErrorArray at:xE) + eB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8564
                    ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8565
                    eLB ~= 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8566
                        xN := xE - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8567
                        nextErrorArray at:xN put:(nextErrorArray at:xN) + eLB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8568
                    ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8569
                ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8570
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8571
                bitCnt := bitCnt - depth.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8572
                bitCnt == 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8573
                    outBits at:dstIndex put:byte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8574
                    dstIndex := dstIndex + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8575
                    byte := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8576
                    bitCnt := 8.
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
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8579
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8580
            bitCnt ~~ 8 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8581
                byte := byte bitShift:bitCnt.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8582
                outBits at:dstIndex put:byte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8583
                bitCnt := 8.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8584
            ].
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
            dstIndex := nextDst.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8587
        ].
1782
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8588
    ].
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8589
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8590
    ^ outBits
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8591
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8592
    "Created: 10.6.1996 / 13:28:22 / cg"
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8593
    "Modified: 11.6.1996 / 00:13:38 / cg"
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8594
!
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  8595
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8596
floydSteinbergDitheredMonochromeBits
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8597
    "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
  8598
     Works for any source depths / photometric,
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8599
     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
  8600
     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
  8601
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8602
    |dstIndex        "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8603
     nextDst         "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8604
     bytesPerMonoRow "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8605
     monoBits greyValues
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8606
     errorArray
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8607
     nextErrorArray
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8608
     e eD t
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8609
     w               "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8610
     h               "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8611
     bitCnt          "{Class: SmallInteger }"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8612
     byte            "{Class: SmallInteger }"
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8613
     grey
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8614
     eR eRB eB eLB |
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8615
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8616
    w := width.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8617
    h := height.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8618
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8619
    bytesPerMonoRow := (w + 7) // 8.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8620
    monoBits := ByteArray uninitializedNew:(bytesPerMonoRow * h).
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8621
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8622
    errorArray := Array new:w+2.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8623
    nextErrorArray := Array new:w+2.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8624
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8625
    nextErrorArray atAllPut:0.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8626
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8627
    dstIndex := 1.
828
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8628
    bitCnt := 8.
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8629
    byte := 0.
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8630
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8631
    self depth <= 12 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8632
        "/ fetch scaled brightness values outside of loop into a table;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8633
        "/ use table-value in loop
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8634
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8635
        greyValues := self greyMapForRange:(255 * 1024).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8636
        greyValues := greyValues collect:[:v | v rounded].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8637
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8638
        0 to:(h-1) do:[:y |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8639
            nextDst := dstIndex + bytesPerMonoRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8640
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8641
            t := errorArray.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8642
            errorArray := nextErrorArray.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8643
            nextErrorArray := t.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8644
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8645
            nextErrorArray atAllPut:0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8646
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8647
            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
  8648
%{
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8649
                int __grey, __e;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8650
                int __byte = __intVal(byte);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8651
                OBJ *__errorArray = __ArrayInstPtr(errorArray)->a_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8652
                OBJ *__nextErrorArray = __ArrayInstPtr(nextErrorArray)->a_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8653
                int __x = __intVal(x);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8654
                int __eR, __eB, __eRB, __eLB, __eI;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8655
                int __bitCnt = __intVal(bitCnt);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8656
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8657
                __grey = __intVal(__ArrayInstPtr(greyValues)->a_element[__intVal(pixel)]);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8658
                __grey += __intVal(__errorArray[__x+1]);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8659
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8660
                __byte <<= 1;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8661
                if (__grey > 127*1024) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8662
                    __e = __grey - (255*1024);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8663
                    __byte |= 1;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8664
                } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8665
                    __e = __grey;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8666
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8667
                if (__e) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8668
                    __eI = __e >> 4;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8669
                    __eR  = __eI * 7;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8670
                    __eRB = __eI * 1;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8671
                    __eB  = __eI * 5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8672
                    __eLB = __e - __eR - __eRB - __eB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8673
                    __errorArray[__x+2] = __MKSMALLINT(__intVal(__errorArray[__x+2]) + __eR);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8674
                    __nextErrorArray[__x+2] = __MKSMALLINT(__intVal(__nextErrorArray[__x+2]) + __eRB);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8675
                    __nextErrorArray[__x+1] = __MKSMALLINT(__intVal(__nextErrorArray[__x+1]) + __eB);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8676
                    __nextErrorArray[__x  ] = __MKSMALLINT(__intVal(__nextErrorArray[__x  ]) + __eLB);
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
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8679
                __bitCnt--;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8680
                if (__bitCnt == 0) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8681
                    int __dstIndex = __intVal(dstIndex);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8682
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8683
                    __ByteArrayInstPtr(monoBits)->ba_element[__dstIndex-1] = __byte;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8684
                    dstIndex = __MKSMALLINT(__dstIndex + 1);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8685
                    __byte = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8686
                    __bitCnt = 8;
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
                byte = __MKSMALLINT(__byte);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8689
                bitCnt = __MKSMALLINT(__bitCnt);
828
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8690
%}.
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8691
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8692
"/                |eI "{ Class: SmallInteger }"
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8693
"/                 xE "{ Class: SmallInteger }"
829
d104ec97c38c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  8694
"/                 xN "{ Class: SmallInteger }" |
d104ec97c38c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  8695
"/
828
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8696
"/                "/ get the colors grey value [0 .. 1]
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8697
"/                grey := greyValues at:(pixel + 1).
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8698
"/
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8699
"/                "/ adjust error
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8700
"/                xE := x + 2.
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8701
"/                grey := (grey + (errorArray at:xE)).
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8702
"/
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8703
"/                byte := byte bitShift:1.
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8704
"/                grey > (127*1024) ifTrue:[
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8705
"/                    byte := byte bitOr:1.      "/ white
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8706
"/                    e := grey - (255*1024)
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8707
"/                ] ifFalse:[
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8708
"/                    e := grey                  "/ black
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8709
"/                ].
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8710
"/                e ~= 0 ifTrue:[
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8711
"/                    eD := e.
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8712
"/                    eI := e // 16.
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8713
"/
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8714
"/                    eR  := eI * 7.              "/ 7/16 to right
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8715
"/                    eRB := eI * 1.              "/ 1/16 to right below
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8716
"/                    eB  := eI * 5.              "/ 5/16 to below
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8717
"/                    eLB := eD - eR - eRB - eB.  "/ 3/16 to left below
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8718
"/
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8719
"/                    xN := xE + 1.
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8720
"/                    eR ~= 0 ifTrue:[
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8721
"/                        errorArray     at:xN put:(errorArray at:xN) + eR.
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8722
"/                    ].
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8723
"/                    eRB ~= 0 ifTrue:[
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8724
"/                        nextErrorArray at:xN put:(nextErrorArray at:xN) + eRB.
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8725
"/                    ].
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8726
"/                    eB ~= 0 ifTrue:[
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8727
"/                        nextErrorArray at:xE put:(nextErrorArray at:xE) + eB.
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8728
"/                    ].
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8729
"/                    eLB ~= 0 ifTrue:[
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8730
"/                        xN := xE - 1.
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8731
"/                        nextErrorArray at:xN put:(nextErrorArray at:xN) + eLB.
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8732
"/                    ].
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
"/
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8735
"/                bitCnt := bitCnt - 1.
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8736
"/                bitCnt == 0 ifTrue:[
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8737
"/                    monoBits at:dstIndex put:byte.
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8738
"/                    dstIndex := dstIndex + 1.
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8739
"/                    byte := 0.
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8740
"/                    bitCnt := 8.
e5cc03d2c673 integerized floydSteinberg code
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  8741
"/                ].
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8742
                  0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8743
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8744
            bitCnt ~~ 8 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8745
                byte := byte bitShift:bitCnt.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8746
                monoBits at:dstIndex put:byte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8747
                bitCnt := 8.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8748
                byte := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8749
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8750
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8751
            dstIndex := nextDst.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8752
        ].
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8753
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8754
        'Image [info]: slow floydSteinberg dither ..' infoPrintCR.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8755
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8756
        0 to:(h-1) do:[:y |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8757
            nextDst := dstIndex + bytesPerMonoRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8758
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8759
            t := errorArray.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8760
            errorArray := nextErrorArray.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8761
            nextErrorArray := t.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8762
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8763
            nextErrorArray atAllPut:0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8764
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8765
            self colorsAtY:y from:0 to:(w-1) do:[:x :clr |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8766
                |eI "{ Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8767
                 xE "{ Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8768
                 xN "{ Class: SmallInteger }" |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8769
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8770
                "/ get the colors grey value [0 .. 1]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8771
                grey := (clr brightness * 255).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8772
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8773
                "/ adjust error
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8774
                xE := x + 2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8775
                grey := (grey + (errorArray at:xE)) rounded.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8776
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8777
                byte := byte bitShift:1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8778
                grey > 127 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8779
                    byte := byte bitOr:1.      "/ white
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8780
                    e := grey - 255
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8781
                ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8782
                    e := grey                  "/ black
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8783
                ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8784
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8785
                e ~= 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8786
                    eD := e.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8787
                    eI := e // 16.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8788
                    eR  := eI * 7.              "/ 7/16 to right
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8789
                    eRB := eI "* 1".            "/ 1/16 to right below
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8790
                    eB  := eI * 5.              "/ 5/16 to below
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8791
                    eLB := eD - eR - eRB - eB.  "/ 3/16 to left below
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8792
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8793
                    xN := xE + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8794
                    eR ~= 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8795
                        errorArray     at:xN put:(errorArray at:xN) + eR.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8796
                    ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8797
                    eRB ~= 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8798
                        nextErrorArray at:xN put:(nextErrorArray at:xN) + eRB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8799
                    ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8800
                    eB ~= 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8801
                        nextErrorArray at:xE put:(nextErrorArray at:xE) + eB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8802
                    ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8803
                    eLB ~= 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8804
                        xN := xE - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8805
                        nextErrorArray at:xN put:(nextErrorArray at:xN) + eLB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8806
                    ].
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
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8809
                bitCnt := bitCnt - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8810
                bitCnt == 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8811
                    monoBits at:dstIndex put:byte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8812
                    dstIndex := dstIndex + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8813
                    byte := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8814
                    bitCnt := 8.
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
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8817
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8818
            bitCnt ~~ 8 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8819
                byte := byte bitShift:bitCnt.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8820
                monoBits at:dstIndex put:byte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8821
                bitCnt := 8.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8822
                byte := 0.
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
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8825
            dstIndex := nextDst.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8826
        ].
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8827
    ].
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8828
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8829
    ^ monoBits
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8830
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8831
    "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
  8832
    "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
  8833
!
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  8834
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8835
nearestPaintDepth8BitsColors:fixColors nRed:nRed nGreen:nGreen nBlue:nBlue
879
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8836
    "return a nearest paint bitmap from the receiver picture,
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8837
     which must be a depth-8 image.
879
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8838
     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
  8839
     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
  8840
     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
  8841
     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
  8842
     Color class."
879
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8843
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8844
    |pseudoBits
879
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8845
     fixR    "{Class: SmallInteger }"
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8846
     fixG    "{Class: SmallInteger }"
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8847
     fixB    "{Class: SmallInteger }"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8848
     fixGfixB
884
d7cc8a20505b oops - nearest paint color conversion can be done much faster
Claus Gittinger <cg@exept.de>
parents: 883
diff changeset
  8849
     r       "{Class: SmallInteger }"
d7cc8a20505b oops - nearest paint color conversion can be done much faster
Claus Gittinger <cg@exept.de>
parents: 883
diff changeset
  8850
     g       "{Class: SmallInteger }"
d7cc8a20505b oops - nearest paint color conversion can be done much faster
Claus Gittinger <cg@exept.de>
parents: 883
diff changeset
  8851
     b       "{Class: SmallInteger }"
d7cc8a20505b oops - nearest paint color conversion can be done much faster
Claus Gittinger <cg@exept.de>
parents: 883
diff changeset
  8852
     idx     "{Class: SmallInteger }"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8853
     idMap lastColor
879
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8854
     clr|
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8855
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8856
    self depth ~~ 8 ifTrue:[^ nil].
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8857
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8858
    photometric == #palette ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8859
        lastColor := colorMap size - 1
879
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8860
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8861
        lastColor := 255.
879
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8862
    ].
884
d7cc8a20505b oops - nearest paint color conversion can be done much faster
Claus Gittinger <cg@exept.de>
parents: 883
diff changeset
  8863
    idMap := ByteArray uninitializedNew:256.
d7cc8a20505b oops - nearest paint color conversion can be done much faster
Claus Gittinger <cg@exept.de>
parents: 883
diff changeset
  8864
3915
dd2dae91c068 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3914
diff changeset
  8865
    (nRed isNil or:[nGreen isNil or:[nBlue isNil]]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8866
        0 to:lastColor do:[:pix |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8867
            |clr repClr|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8868
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8869
            clr := self colorFromValue:pix.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8870
            repClr := clr nearestIn:fixColors.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8871
            idMap at:(pix+1) put:(fixColors identityIndexOf:repClr)-1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8872
        ].
3914
875c38aa66ab *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3913
diff changeset
  8873
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8874
        fixR := nRed.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8875
        fixR == 0 ifTrue:[ ^ nil].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8876
        fixG := nGreen.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8877
        fixG == 0 ifTrue:[ ^ nil].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8878
        fixB := nBlue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8879
        fixB == 0 ifTrue:[ ^ nil].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8880
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8881
        "/ simple check
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8882
        (fixR * fixG * fixB) ~~ fixColors size ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8883
            self error:'invalid color array passed'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8884
            ^ nil
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8885
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8886
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8887
        "/
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8888
        "/ collect colorIds
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8889
        "/
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8890
        fixGfixB := fixG * fixB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8891
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8892
        0 to:lastColor do:[:pix |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8893
            clr := self colorFromValue:pix.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8894
            r := clr redByte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8895
            g := clr greenByte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8896
            b := clr blueByte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8897
            idx := ((r * (fixR-1) + 128) // 255) * fixGfixB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8898
            idx := idx + (((g * (fixG-1) + 128) // 255) * fixB).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8899
            idx := idx + ((b * (fixB-1) + 128) // 255).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8900
            idMap at:(pix+1) put:(fixColors at:(idx+1)) colorId.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8901
        ].
879
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8902
    ].
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8903
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8904
    pseudoBits := ByteArray uninitializedNew:(width * height).
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8905
884
d7cc8a20505b oops - nearest paint color conversion can be done much faster
Claus Gittinger <cg@exept.de>
parents: 883
diff changeset
  8906
    "/ translate
d7cc8a20505b oops - nearest paint color conversion can be done much faster
Claus Gittinger <cg@exept.de>
parents: 883
diff changeset
  8907
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
  8908
    self bits
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8909
        expandPixels:8         "xlate only"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8910
        width:width height:height
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8911
        into:pseudoBits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8912
        mapping:idMap.
879
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8913
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8914
    ^ pseudoBits
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8915
884
d7cc8a20505b oops - nearest paint color conversion can be done much faster
Claus Gittinger <cg@exept.de>
parents: 883
diff changeset
  8916
    "Modified: 18.6.1996 / 09:18:09 / cg"
879
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8917
!
2adf7645e7e6 added #nearestPaint for fixColor images
Claus Gittinger <cg@exept.de>
parents: 878
diff changeset
  8918
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8919
nfloydSteinbergDitheredDepth8BitsColors:colors
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8920
    "return a floyd-steinberg dithered bitmap from the receiver picture,
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8921
     which must be a depth-8 image.
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8922
     This method expects an array of colors to be used for dithering
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8923
     (which need not be a colorCubes colors)."
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8924
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8925
    |pseudoBits
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8926
     rgbBytes
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8927
     ditherRGBBytes ditherColors
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8928
     w       "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8929
     h       "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8930
     index   "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8931
     numR    "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8932
     numG    "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8933
     numB    "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8934
     bitsR    "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8935
     bitsG    "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8936
     bitsB    "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8937
     maxBits  "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8938
     maskR    "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8939
     maskG    "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8940
     maskB    "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8941
     shR      "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8942
     shG      "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8943
     shB      "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8944
     ditherIds failed map lastColor colorsByDistance qScramble
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8945
     clrLookup lookupPos cube nCube
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8946
     dR  "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8947
     dG  "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8948
     dB  "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8949
     iR    "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8950
     iRG   "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8951
     iRGB  "{Class: SmallInteger }"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8952
     clr
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8953
     rI  "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8954
     gI  "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8955
     bI  "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8956
     maxIDX  "{Class: SmallInteger }"
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8957
     subCubeColorCollection
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  8958
     error
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8959
     dl "{Class: SmallInteger }"|
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8960
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8961
    self depth ~~ 8 ifTrue:[^ nil].
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8962
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8963
    "/
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8964
    "/ collect color components as integer values (for integer arithmetic)
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8965
    "/
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8966
    rgbBytes := ByteArray uninitializedNew:256 * 3.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8967
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8968
    photometric == #palette ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8969
        lastColor := colorMap size - 1
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8970
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8971
        lastColor := 255.
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8972
    ].
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8973
    index := 1.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8974
    0 to:lastColor do:[:pix |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8975
        clr := self colorFromValue:pix.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8976
        rgbBytes at:index put:(clr redByte).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8977
        rgbBytes at:index+1 put:(clr greenByte).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8978
        rgbBytes at:index+2 put:(clr blueByte).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8979
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8980
        index := index + 3.
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8981
    ].
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8982
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8983
    "/ collect valid ditherColors ...
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8984
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8985
    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
  8986
    ditherColors := ditherColors select:[:clr | clr colorId notNil].
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8987
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8988
    "/ collect ditherColor components
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8989
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8990
    lastColor := ditherColors size.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8991
    ditherIds := ByteArray uninitializedNew:lastColor.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8992
    ditherRGBBytes := ByteArray uninitializedNew:(lastColor * 3).
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8993
    index := 1.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  8994
    1 to:lastColor do:[:pix |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8995
        clr := ditherColors at:pix.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8996
        ditherRGBBytes at:index put:(clr redByte).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8997
        ditherRGBBytes at:index+1 put:(clr greenByte).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8998
        ditherRGBBytes at:index+2 put:(clr blueByte).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  8999
        ditherIds at:pix put:clr colorId.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9000
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9001
        index := index + 3.
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9002
    ].
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
    "/ place the ditherColor positions into a color cube
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9005
    bitsR := 5.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9006
    bitsG := 6.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9007
    bitsB := 4.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9008
    maxBits := 6.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9009
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9010
"/    bitsR := 4.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9011
"/    bitsG := 4.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9012
"/    bitsB := 3.
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
    numR := 1 bitShift:bitsR.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9015
    numG := 1 bitShift:bitsG.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9016
    numB := 1 bitShift:bitsB.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9017
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9018
    maskR := (numR-1) bitShift:(bitsG + bitsB).
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9019
    maskG := (numG-1) bitShift:bitsB.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9020
    maskB := numB-1.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9021
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9022
    shR := -16+bitsR+bitsG+bitsB.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9023
    shG := -16+bitsG+bitsB.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9024
    shB := -16+bitsB.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9025
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9026
    maxIDX := numR*numG*numB.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9027
    cube := Array new:maxIDX.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9028
    1 to:lastColor do:[:clrIdx |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9029
        clr := ditherColors at:clrIdx.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9030
        rI := clr scaledRed. rI := (rI bitShift:shR) bitAnd:maskR.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9031
        gI := clr scaledGreen. gI := (gI bitShift:shG) bitAnd:maskG.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9032
        bI := clr scaledBlue. bI := (bI bitShift:shB) bitAnd:maskB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9033
        index := rI + gI + bI + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9034
        subCubeColorCollection := cube at:index.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9035
        subCubeColorCollection isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9036
            subCubeColorCollection := OrderedCollection new.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9037
            cube at:index put:subCubeColorCollection.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9038
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9039
        subCubeColorCollection add:(clrIdx - 1).
903
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
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9042
    shR := 1 bitShift:(bitsG+bitsB).
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9043
    shG := 1 bitShift:(bitsB).
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9044
    shB := 1.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9045
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9046
    1 to:maxIDX do:[:i |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9047
        subCubeColorCollection := cube at:i.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9048
        subCubeColorCollection notNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9049
            cube at:i put:(subCubeColorCollection asByteArray)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9050
        ]
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9051
    ].
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
"/    nCube := cube copy.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9054
"/
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9055
"/    cube keysAndValuesDo:[:i :indices |
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9056
"/        indices notNil ifTrue:[
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9057
"/            nCube at:i put:(indices asByteArray)
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9058
"/        ] ifFalse:[
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9059
"/            "/ find nearest color
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  9060
"/
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9061
"/            dl := 1.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9062
"/            [dl < maxBits] whileTrue:[
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9063
"/                dR := dl negated.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9064
"/                [dR <= dl] whileTrue:[
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9065
"/                    iR := i + (dR * shR).
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  9066
"/                    (iR > 0 and:[iR < maxIDX]) ifTrue:[
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9067
"/                        dG := dl negated.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9068
"/                        [dG < dl] whileTrue:[
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9069
"/                            iRG := iR + (dG * shG).
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9070
"/                            (iRG > 0 and:[iRG < maxIDX]) ifTrue:[
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9071
"/                                dB := dl negated.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9072
"/                                [dB < dl] whileTrue:[
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9073
"/                                    iRGB := iRG + dB.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9074
"/                                    (iRG > 0 and:[iRG < maxIDX]) ifTrue:[
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9075
"/                                        (cube at:iRGB) notNil ifTrue:[
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9076
"/                                            nCube at:i put:(cube at:iRGB).
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9077
"/                                            dB := dG := dR := dl := 999.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9078
"/                                        ]
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9079
"/                                    ].
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9080
"/                                    dB := dB + 1.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9081
"/                                ]
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
"/                            dG := dG + 1.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9084
"/                        ]
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
"/                    dR := dR + 1.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9087
"/                ].
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9088
"/                dl := dl + 1.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9089
"/            ]
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9090
"/        ]
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9091
"/    ].
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9092
"/self halt.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9093
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9094
    "/ now, cube contains collections of colors which are
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  9095
    "/ positioned in a subCube; quickly accessed by a lookup
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9096
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9097
    pseudoBits := ByteArray uninitializedNew:(width * height).
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9098
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9099
    w := width.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9100
    h := height.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9101
    error := ByteArray new:(w+2)*3*2.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9102
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9103
%{
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9104
#define BITSR   5
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9105
#define BITSG   6
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9106
#define BITSB   4
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9107
#define MAXBITS 6
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9108
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9109
#define xBITSR   4
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9110
#define xBITSG   4
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9111
#define xBITSB   3
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9112
#define xMAXBITS 4
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
#define NR      32 /* (1<<BITSR) */
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9115
#define NG      64 /* (1<<BITSG) */
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9116
#define NB      16 /* (1<<BITSB) */
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9117
#define MAXRGB  64 /* (1<<MAXBITS) */
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
#define SHR     (BITSG+BITSB)
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9120
#define SHG     BITSB
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
#define REMEMBER_SEARCH
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9123
#define xNO_FLOYD_STEINBERG
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
    int __x, __y;
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9126
    int __eR, __eG, __eB;
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9127
    unsigned char *srcP, *dstP;
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9128
    unsigned char *rgbP;
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9129
    unsigned char *idP;
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9130
    short *errP, *eP;
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9131
    int __fR, __fG, __fB;
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9132
    int idx;
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9133
    int __w = __intVal(w);
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9134
    int __h = __intVal(h);
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9135
    int __nColors = __intVal(lastColor);
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9136
    int __wR = -1, __wG, __wB;
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9137
    OBJ *__cube;
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9138
    int cubeIndex, cubeIndex2;
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9139
5476
06e08505bc6f __isByteArray() to __isByteArrayLike() in primitive code
Stefan Vogel <sv@exept.de>
parents: 5352
diff changeset
  9140
    if (__isByteArrayLike(__INST(bytes))
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9141
     && __isByteArray(pseudoBits)
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9142
     && __isByteArray(rgbBytes)
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9143
     && __isByteArray(ditherRGBBytes)
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9144
     && __isByteArray(ditherIds)
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9145
     && __isByteArray(error)) {
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9146
        failed = false;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9147
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9148
        srcP = __ByteArrayInstPtr(__INST(bytes))->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9149
        dstP = __ByteArrayInstPtr(pseudoBits)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9150
        rgbP = __ByteArrayInstPtr(rgbBytes)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9151
        idP = __ByteArrayInstPtr(ditherIds)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9152
        errP = (short *) __ByteArrayInstPtr(error)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9153
        __cube = __ArrayInstPtr(cube)->a_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9154
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9155
        eP = errP;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9156
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9157
        for (__y=__h; __y>0; __y--) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9158
            eP = &(errP[3]);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9159
            __eR = eP[0];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9160
            __eG = eP[1];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9161
            __eB = eP[2];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9162
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9163
            for (__x=__w; __x>0; __x--) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9164
                int __want;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9165
                int pix;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9166
                int __wantR, __wantG, __wantB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9167
                int idx;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9168
                int tR, tG, tB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9169
                int nR, nG, nB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9170
                int __dR, __dG, __dB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9171
                int minDelta, bestIdx;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9172
                int __iR, __iG, __iB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9173
                int cR, cG, cB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9174
                int delta;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9175
                OBJ subCubeColors;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9176
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9177
                pix = *srcP++;
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
                /*
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9180
                 * wR, wG and wB is the wanted r/g/b value;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9181
                 */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9182
                idx = pix+pix+pix;  /* pix * 3 */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9183
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9184
                __wR = __wantR = rgbP[idx] + __eR;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9185
                __wG = __wantG = rgbP[idx+1] + __eG;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9186
                __wB = __wantB = rgbP[idx+2] + __eB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9187
                if(__wR > 255) __wR = 255;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9188
                else if (__wR < 0) __wR = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9189
                if(__wG > 255) __wG = 255;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9190
                else if (__wG < 0) __wG = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9191
                if(__wB > 255) __wB = 255;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9192
                else if (__wB < 0) __wB = 0;
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
                __iR = __wR >> (8-BITSR);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9195
                __iG = __wG >> (8-BITSG);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9196
                __iB = __wB >> (8-BITSB);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9197
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9198
                cubeIndex = (__iR<<SHR) + (__iG<<SHG) + __iB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9199
                subCubeColors = __cube[cubeIndex];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9200
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9201
                if (subCubeColors == nil) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9202
                    /* search around in spirals, for the first match */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9203
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9204
                    delta = 1;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9205
                    while (delta < MAXRGB) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9206
                        /* check plane above */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9207
                        cR = __iR + delta;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9208
                        if ((unsigned)cR < NR) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9209
                            for (cG=__iG-delta; cG<=__iG+delta; cG++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9210
                                if ((unsigned)cG < NG) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9211
                                    for (cB=__iB-delta; cB<=__iB+delta; cB++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9212
                                        if ((unsigned)cB < NB) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9213
                                            cubeIndex2 = (cR<<SHR) + (cG<<SHG) + cB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9214
                                            subCubeColors = __cube[cubeIndex2];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9215
                                            if (__isNonNilObject(subCubeColors)) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9216
                                                goto found;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9217
                                            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9218
                                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9219
                                    }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9220
                                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9221
                            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9222
                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9223
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9224
                        /* check plane below */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9225
                        cR = __iR - delta;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9226
                        if ((unsigned)cR < NR) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9227
                            for (cG=__iG-delta; cG<=__iG+delta; cG++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9228
                                if ((unsigned)cG < NG) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9229
                                    for (cB=__iB-delta; cB<=__iB+delta; cB++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9230
                                        if ((unsigned)cB < NB) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9231
                                            cubeIndex2 = (cR<<SHR) + (cG<<SHG) + cB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9232
                                            subCubeColors = __cube[cubeIndex2];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9233
                                            if (__isNonNilObject(subCubeColors)) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9234
                                                goto found;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9235
                                            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9236
                                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9237
                                    }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9238
                                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9239
                            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9240
                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9241
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9242
                        /* check plane to the right */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9243
                        cG = __iG + delta;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9244
                        if ((unsigned)cG < NG) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9245
                            for (cR=__iR-delta+1; cR<=__iR+delta-1; cR++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9246
                                if ((unsigned)cR < NR) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9247
                                    for (cB=__iB-delta; cB<=__iB+delta; cB++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9248
                                        if ((unsigned)cB < NB) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9249
                                            cubeIndex2 = (cR<<SHR) + (cG<<SHG) + cB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9250
                                            subCubeColors = __cube[cubeIndex2];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9251
                                            if (__isNonNilObject(subCubeColors)) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9252
                                                goto found;
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
                                    }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9256
                                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9257
                            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9258
                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9259
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9260
                        /* check plane to the left */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9261
                        cG = __iG - delta;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9262
                        if ((unsigned)cG < NG) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9263
                            for (cR=__iR-delta+1; cR<=__iR+delta-1; cR++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9264
                                if ((unsigned)cR < NR) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9265
                                    for (cB=__iB-delta; cB<=__iB+delta; cB++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9266
                                        if ((unsigned)cB < NB) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9267
                                            cubeIndex2 = (cR<<SHR) + (cG<<SHG) + cB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9268
                                            subCubeColors = __cube[cubeIndex2];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9269
                                            if (__isNonNilObject(subCubeColors)) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9270
                                                goto found;
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
                                    }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9274
                                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9275
                            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9276
                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9277
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9278
                        /* check plane at back */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9279
                        cB = __iB + delta;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9280
                        if ((unsigned)cB < NB) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9281
                            for (cR=__iR-delta+1; cR<=(__iR+delta-1); cR++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9282
                                if ((unsigned)cR < NR) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9283
                                    for (cG=__iG-delta+1; cG<=(__iG+delta-1); cG++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9284
                                        if ((unsigned)cG < NG) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9285
                                            cubeIndex2 = (cR<<SHR) + (cG<<SHG) + cB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9286
                                            subCubeColors = __cube[cubeIndex2];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9287
                                            if (__isNonNilObject(subCubeColors)) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9288
                                                goto found;
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
                                    }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9292
                                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9293
                            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9294
                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9295
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9296
                        /* check plane at front */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9297
                        cB = __iB - delta;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9298
                        if ((unsigned)cB < NB) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9299
                            for (cR=__iR-delta+1; cR<=(__iR+delta-1); cR++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9300
                                if ((unsigned)cR < NR) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9301
                                    for (cG=__iG-delta+1; cG<=(__iG+delta-1); cG++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9302
                                        if ((unsigned)cG < NG) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9303
                                            cubeIndex2 = (cR<<SHR) + (cG<<SHG) + cB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9304
                                            subCubeColors = __cube[cubeIndex2];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9305
                                            if (__isNonNilObject(subCubeColors)) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9306
                                                goto found;
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
                                    }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9310
                                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9311
                            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9312
                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9313
                        delta = delta + 1;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9314
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9315
                    }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9316
                    /* cannot happen - will lead to a segmentation violation ... */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9317
                    subCubeColors = nil;
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9318
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9319
    found:
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9320
                    __iR = cR;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9321
                    __iG = cG;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9322
                    __iB = cB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9323
                    bestIdx = __ByteArrayInstPtr(subCubeColors)->ba_element[0];
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9324
#ifdef REMEMBER_SEARCH
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9325
                    __cube[cubeIndex] = __MKSMALLINT(bestIdx);
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9326
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9327
                } else {
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9328
#ifdef REMEMBER_SEARCH
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9329
                    if (__isSmallInteger(subCubeColors)) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9330
                        bestIdx = __intVal(subCubeColors);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9331
                    } else
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9332
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9333
                    {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9334
                        bestIdx = __ByteArrayInstPtr(subCubeColors)->ba_element[0];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9335
                    }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9336
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9337
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
                 * ok, now, we have found a collection of nearby
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9340
                 * colors in subCubeColors.
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
                 * 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
  9343
                 * don't care for searching the best - simply take the
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9344
                 * first color found there.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9345
                 * (statistic reduces the error to even a smaller value).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9346
                 * There is no real problem due to that error, since
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9347
                 * it will be diffused anyway ...
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9348
                 */
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
#ifndef NO_FLOYD_STEINBERG
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9351
                {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9352
                    unsigned char *dp;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9353
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9354
                    /*
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9355
                     * fetch that colors r/g/b components
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9356
                     */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9357
                    dp = __ByteArrayInstPtr(ditherRGBBytes)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9358
                    dp += bestIdx * 3;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9359
                    __dR = dp[0];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9360
                    __dG = dp[1];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9361
                    __dB = dp[2];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9362
                }
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9363
#endif
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9364
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9365
/*
4725
c8896df7bd3f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4717
diff changeset
  9366
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
  9367
                __wantR, __wantG, __wantB,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9368
                __wR, __wG, __wB,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9369
                __dR, __dG, __dB);
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9370
*/
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9371
                /*
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9372
                 * store the corresponding dither colors colorId
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9373
                 */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9374
                *dstP++ = idP[bestIdx];
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9375
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9376
#ifndef NO_FLOYD_STEINBERG
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9377
                /*
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9378
                 * the new error & distribute the error
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9379
                 */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9380
                __eR = __wantR - __dR;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9381
                if (__eR) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9382
                    tR = __eR >> 4;  /* 16th of error */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9383
                    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
  9384
                    eP[0] = tR*5;         /* 5/16th for (x / y+1) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9385
                    eP[-3] = tR*3;        /* 3/16th for (x-1 / y+1) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9386
                    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
  9387
                    __eR = nR;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9388
                } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9389
                    __eR = eP[3];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9390
                    eP[0] = eP[-3] = eP[3] = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9391
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9392
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9393
                __eG = __wantG - __dG;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9394
                if (__eG) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9395
                    tG = __eG >> 4;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9396
                    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
  9397
                    eP[1] = tG*5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9398
                    eP[-2] = tG*3;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9399
                    eP[4] = __eG - (tG*15);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9400
                    __eG = nG;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9401
                } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9402
                    __eG = eP[4];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9403
                    eP[1] = eP[-2] = eP[4] = 0;
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
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9406
                __eB = __wantB - __dB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9407
                if (__eB) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9408
                    tB = __eB >> 4;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9409
                    nB = eP[5] + (tB * 7);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9410
                    eP[2] = tB*5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9411
                    eP[-1] = tB*3;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9412
                    eP[5] = __eB - (tB*15);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9413
                    __eB = nB;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9414
                } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9415
                    __eB = eP[5];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9416
                    eP[2] = eP[-1] = eP[5] = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9417
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9418
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9419
                eP += 3;
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9420
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9421
            }
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
             * allow for an interrupt after every row.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9425
             * but care to refetch C variables
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9426
             */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9427
            if (InterruptPending) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9428
                int d_srcP = srcP - __ByteArrayInstPtr(__INST(bytes))->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9429
                int d_dstP = dstP - __ByteArrayInstPtr(pseudoBits)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9430
                int d_errP = errP - (short *) __ByteArrayInstPtr(error)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9431
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9432
                __interrupt__();
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9433
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9434
                srcP = __ByteArrayInstPtr(__INST(bytes))->ba_element + d_srcP;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9435
                dstP = __ByteArrayInstPtr(pseudoBits)->ba_element + d_dstP;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9436
                rgbP = __ByteArrayInstPtr(rgbBytes)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9437
                idP = __ByteArrayInstPtr(ditherIds)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9438
                errP = (short *) __ByteArrayInstPtr(error)->ba_element + d_errP;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9439
                __cube = __ArrayInstPtr(cube)->a_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9440
            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9441
        }
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9442
    }
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9443
%}.
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9444
    failed ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9445
        self primitiveFailed.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9446
        ^ nil
903
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9447
    ].
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9448
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9449
    ^ pseudoBits
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9450
!
fcb45024a286 experimental nfloydSteinberg....
Claus Gittinger <cg@exept.de>
parents: 901
diff changeset
  9451
1782
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  9452
orderedDitheredGrayBitsDepth:depth
861
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
  9453
    "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
  9454
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
  9455
    ^ self
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9456
        orderedDitheredGrayBitsWithDitherMatrix:(self class orderedDitherMatrixOfSize:8)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9457
        ditherWidth:8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9458
        depth:depth.
1782
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  9459
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  9460
    "Created: 24.6.1997 / 22:20:12 / cg"
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  9461
!
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  9462
a1d67a9456ea method rename
Claus Gittinger <cg@exept.de>
parents: 1781
diff changeset
  9463
orderedDitheredGrayBitsWithDitherMatrix:ditherMatrix ditherWidth:dW depth:depth
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9464
    "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
  9465
     with a constant ditherMatrix, this can be used for thresholding.
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  9466
     Works for any source depths / photometric,
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9467
     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
  9468
     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
  9469
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  9470
    |dH nDither
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9471
     greyLevels greyValues greyPixels greyErrors
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9472
     dstIndex        "{Class: SmallInteger }"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  9473
     nextDst
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9474
     bytesPerOutRow  "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9475
     pixelsPerByte   "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9476
     outBits
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9477
     w               "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9478
     h               "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9479
     bitCnt          "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9480
     byte            "{Class: SmallInteger }" |
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9481
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9482
    depth > 8 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9483
        'IMAGE: unimplemented orderedDither conversion' errorPrintCR.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9484
        ^ nil
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9485
    ].
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9486
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9487
    nDither := ditherMatrix size.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9488
    dH := nDither / dW.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9489
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9490
    w := width.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9491
    h := height.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9492
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9493
    greyLevels := 1 bitShift:depth.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9494
    pixelsPerByte := 8 / depth.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9495
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9496
    bytesPerOutRow := (w * depth + 7) // 8.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9497
    outBits := ByteArray uninitializedNew:(bytesPerOutRow * h).
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9498
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9499
    dstIndex := 1.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9500
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9501
    self bitsPerPixel <= 12 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9502
        "/ fetch scaled brightness values outside of loop into a table;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9503
        "/ use table-value in loop
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9504
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9505
        greyValues := self greyMapForRange:(greyLevels-1).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9506
        greyPixels := greyValues collect:[:v | v isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9507
                                                   0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9508
                                               ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9509
                                                   v truncated]].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9510
        greyPixels := ByteArray withAll:greyPixels.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9511
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9512
        greyErrors := greyValues collect:[:v | v isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9513
                                                   0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9514
                                               ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9515
                                                   ((v - v truncated) * nDither) rounded
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9516
                                               ]].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9517
        greyErrors := ByteArray withAll:greyErrors.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9518
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9519
        0 to:(h-1) do:[:y |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9520
            nextDst := dstIndex + bytesPerOutRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9521
            byte := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9522
            bitCnt := 8.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9523
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9524
            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
  9525
%{
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9526
                int __dW = __intVal(dW);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9527
                int __byte = __intVal(byte);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9528
                /* Note: __value is reserved in Visual C++ 8 (2005) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9529
                int __val = __intVal(value);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9530
                int __dT;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9531
                int __dstIdx;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9532
                int __pixel, __grey;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9533
                int __bitCnt = __intVal(bitCnt);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9534
                unsigned char *__greyPixels = __ByteArrayInstPtr(greyPixels)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9535
                unsigned char *__greyErrors = __ByteArrayInstPtr(greyErrors)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9536
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9537
                __pixel = __greyPixels[__val];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9538
                __grey = __greyErrors[__val];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9539
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9540
                __dT = __ByteArrayInstPtr(ditherMatrix)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9541
                            ->ba_element[__intVal(x) % __dW
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9542
                                         + (__intVal(y) % __intVal(dH)) * __dW];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9543
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9544
                if (__grey > __dT) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9545
                    __pixel++;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9546
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9547
                __byte = (__byte << __intVal(depth)) | __pixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9548
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9549
                __bitCnt = __bitCnt - __intVal(depth);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9550
                if (__bitCnt == 0) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9551
                    __dstIdx = __intVal(dstIndex);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9552
                    __ByteArrayInstPtr(outBits)->ba_element[__dstIdx-1] = __byte;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9553
                    __dstIdx = __dstIdx + 1;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9554
                    dstIndex = __MKSMALLINT(__dstIdx);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9555
                    __byte = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9556
                    __bitCnt = 8;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9557
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9558
                byte = __MKSMALLINT(__byte);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9559
                bitCnt = __MKSMALLINT(__bitCnt);
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9560
%}.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9561
                0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9562
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9563
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9564
            bitCnt ~~ 8 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9565
                byte := byte bitShift:bitCnt.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9566
                outBits at:dstIndex put:byte.
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
            dstIndex := nextDst.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9569
        ].
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9570
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9571
        'Image [info]: slow ordered dither ..' infoPrintCR.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9572
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9573
        0 to:(h-1) do:[:y |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9574
            nextDst := dstIndex + bytesPerOutRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9575
            byte := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9576
            bitCnt := 8.
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
            "/ this is the representaion independent (but slow)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9579
            "/ inner loop - it extracts colors from the receiver
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9580
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9581
            self colorsAtY:y from:0 to:(w-1) do:[:x :clr |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9582
                |dstClr grey dT pixel|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9583
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9584
                "/ get the colors grey value [0 .. 1]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9585
                grey := clr brightness.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9586
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9587
                "/ remap into [0 .. greyLevels-1]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9588
                grey := grey * (greyLevels-1).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9589
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9590
                "/ get threshold pixel [0 .. greyLevels-1]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9591
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9592
                pixel := grey truncated.
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
                "/ compute the error [0..1]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9595
                grey := grey - pixel.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9596
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9597
                "/ map into dither space [0 .. nDither]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9598
                grey := (grey * (nDither)) rounded.
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9599
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9600
%{
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9601
                int __dW = __intVal(dW);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9602
                int __byte = __intVal(byte);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9603
                int __dT;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9604
                int __dstIdx;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9605
                int __pixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9606
                int __bitCnt = __intVal(bitCnt);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9607
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9608
                __dT = __ByteArrayInstPtr(ditherMatrix)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9609
                            ->ba_element[__intVal(x) % __dW
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9610
                                         + (__intVal(y) % __intVal(dH)) * __dW];
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
                __pixel = __intVal(pixel);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9613
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9614
                if (__intVal(grey) > __dT) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9615
                    __pixel++;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9616
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9617
                __byte = (__byte << __intVal(depth)) | __pixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9618
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9619
                __bitCnt = __bitCnt - __intVal(depth);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9620
                if (__bitCnt == 0) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9621
                    __dstIdx = __intVal(dstIndex);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9622
                    __ByteArrayInstPtr(outBits)->ba_element[__dstIdx-1] = __byte;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9623
                    __dstIdx = __dstIdx + 1;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9624
                    dstIndex = __MKSMALLINT(__dstIdx);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9625
                    __byte = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9626
                    __bitCnt = 8;
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
                byte = __MKSMALLINT(__byte);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9629
                bitCnt = __MKSMALLINT(__bitCnt);
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9630
%}.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9631
                0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9632
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9633
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9634
            bitCnt ~~ 8 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9635
                byte := byte bitShift:bitCnt.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9636
                outBits at:dstIndex put:byte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9637
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9638
            dstIndex := nextDst.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9639
        ].
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9640
    ].
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9641
    ^ outBits
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9642
!
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9643
831
ceb4e9f32262 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  9644
orderedDitheredMonochromeBits
ceb4e9f32262 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  9645
    "return the bitmap for a dithered monochrome bitmap from the image;
ceb4e9f32262 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  9646
     using a default ditherMatrix."
ceb4e9f32262 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  9647
ceb4e9f32262 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  9648
    ^ self
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9649
        orderedDitheredMonochromeBitsWithDitherMatrix:(self class orderedDitherMatrixOfSize:8)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9650
        ditherWidth:8
831
ceb4e9f32262 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  9651
ceb4e9f32262 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  9652
    "Created: 11.6.1996 / 16:48:57 / cg"
ceb4e9f32262 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  9653
!
ceb4e9f32262 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  9654
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9655
orderedDitheredMonochromeBitsWithDitherMatrix:ditherMatrix ditherWidth:dW
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9656
    "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
  9657
     with a constant ditherMatrix, this can be used for thresholding.
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  9658
     Works for any source depths / photometric,
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9659
     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
  9660
     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
  9661
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  9662
    |dH nDither
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9663
     greyValues
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9664
     dstIndex        "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9665
     nextDst         "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9666
     bytesPerMonoRow "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9667
     monoBits
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9668
     w               "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9669
     h               "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9670
     bitCnt          "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9671
     byte            "{Class: SmallInteger }" |
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9672
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9673
    nDither := ditherMatrix size.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9674
    dH := nDither / dW.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9675
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9676
    w := width.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9677
    h := height.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9678
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9679
    bytesPerMonoRow := (w + 7) // 8.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9680
    monoBits := ByteArray uninitializedNew:(bytesPerMonoRow * h).
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9681
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9682
    dstIndex := 1.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9683
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9684
    self bitsPerPixel <= 12 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9685
        "/ fetch scaled brightness values outside of loop into a table;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9686
        "/ use table-value in loop
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9687
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9688
        greyValues := self greyByteMapForRange:nDither.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9689
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9690
        0 to:(h-1) do:[:y |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9691
            nextDst := dstIndex + bytesPerMonoRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9692
            byte := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9693
            bitCnt := 8.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9694
            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
  9695
%{
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9696
                int __dW = __intVal(dW);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9697
                int __byte = __intVal(byte);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9698
                int __dT;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9699
                int __dstIdx;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9700
                int __bitCnt = __intVal(bitCnt);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9701
                int __grey;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9702
                unsigned char *__greyValues = __ByteArrayInstPtr(greyValues)->ba_element;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9703
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9704
                __grey = __greyValues[__intVal(value)];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9705
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9706
                __dT = __ByteArrayInstPtr(ditherMatrix)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9707
                            ->ba_element[__intVal(x) % __dW
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9708
                                         + (__intVal(y) % __intVal(dH)) * __dW];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9709
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9710
                __byte = __byte << 1;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9711
                if (__grey > __dT) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9712
                    __byte = __byte | 1;            /* white */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9713
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9714
                __bitCnt = __bitCnt - 1;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9715
                if (__bitCnt == 0) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9716
                    __dstIdx = __intVal(dstIndex);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9717
                    __ByteArrayInstPtr(monoBits)->ba_element[__dstIdx-1] = __byte;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9718
                    __dstIdx = __dstIdx + 1;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9719
                    dstIndex = __MKSMALLINT(__dstIdx);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9720
                    __byte = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9721
                    __bitCnt = 8;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9722
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9723
                byte = __MKSMALLINT(__byte);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9724
                bitCnt = __MKSMALLINT(__bitCnt);
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9725
%}.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9726
                0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9727
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9728
            bitCnt ~~ 8 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9729
                byte := byte bitShift:bitCnt.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9730
                monoBits at:dstIndex put:byte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9731
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9732
            dstIndex := nextDst.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9733
        ].
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9734
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9735
        'Image [info]: slow ordered dither ..' infoPrintCR.
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
        0 to:(h-1) do:[:y |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9738
            nextDst := dstIndex + bytesPerMonoRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9739
            byte := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9740
            bitCnt := 8.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9741
            self colorsAtY:y from:0 to:(w-1) do:[:x :clr |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9742
                |dstClr grey dT|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9743
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9744
                "/ get the colors grey value [0 .. 1]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9745
                grey := clr brightness.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9746
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9747
                "/ map into dither space [0 .. nDither]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9748
                grey := (grey * (nDither)) rounded.
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9749
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9750
%{
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9751
                int __dW = __intVal(dW);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9752
                int __byte = __intVal(byte);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9753
                int __dT;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9754
                int __dstIdx;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9755
                int __bitCnt = __intVal(bitCnt);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9756
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9757
                __dT = __ByteArrayInstPtr(ditherMatrix)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9758
                            ->ba_element[__intVal(x) % __dW
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9759
                                         + (__intVal(y) % __intVal(dH)) * __dW];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9760
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9761
                __byte = __byte << 1;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9762
                if (__intVal(grey) > __dT) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9763
                    __byte = __byte | 1;            /* white */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9764
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9765
                __bitCnt = __bitCnt - 1;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9766
                if (__bitCnt == 0) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9767
                    __dstIdx = __intVal(dstIndex);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9768
                    __ByteArrayInstPtr(monoBits)->ba_element[__dstIdx-1] = __byte;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9769
                    __dstIdx = __dstIdx + 1;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9770
                    dstIndex = __MKSMALLINT(__dstIdx);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9771
                    __byte = 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9772
                    __bitCnt = 8;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9773
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9774
                byte = __MKSMALLINT(__byte);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9775
                bitCnt = __MKSMALLINT(__bitCnt);
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9776
%}.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9777
                0
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9778
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9779
"/                dT := ditherMatrix at:(x \\ dW) + (y \\ dH * dW) + 1.
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  9780
"/
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9781
"/                byte := byte bitShift:1.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9782
"/                grey < dT ifTrue:[
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9783
"/                    byte := byte bitOr:1.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9784
"/                ].
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9785
"/                bitCnt := bitCnt - 1.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9786
"/                bitCnt == 0 ifTrue:[
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9787
"/                    monoBits at:dstIndex put:byte.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9788
"/                    dstIndex := dstIndex + 1.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9789
"/                    byte := 0.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9790
"/                    bitCnt := 8.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9791
"/                ].
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9792
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9793
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9794
            bitCnt ~~ 8 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9795
                byte := byte bitShift:bitCnt.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9796
                monoBits at:dstIndex put:byte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9797
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9798
            dstIndex := nextDst.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9799
        ].
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9800
    ].
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9801
    ^ monoBits
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9802
!
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9803
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9804
stevensonArceDitheredMonochromeBits
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9805
    "return the bitmap for a dithered monochrome bitmap from the image.
6311
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
  9806
     Works for any source depths / photometric.
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
  9807
     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
  9808
1063
ba1bf8091bc1 unused variable cleanup
Claus Gittinger <cg@exept.de>
parents: 1057
diff changeset
  9809
    |dstIndex        "{Class: SmallInteger }"
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9810
     nextDst         "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9811
     bytesPerMonoRow "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9812
     monoBits greyValues
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9813
     errorArray
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9814
     errorArray1 errorArray2 errorArray3
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9815
     e t
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9816
     w               "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9817
     h               "{Class: SmallInteger }"
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9818
     bitCnt          "{Class: SmallInteger }"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  9819
     byte            "{Class: SmallInteger }"
1063
ba1bf8091bc1 unused variable cleanup
Claus Gittinger <cg@exept.de>
parents: 1057
diff changeset
  9820
     grey
ba1bf8091bc1 unused variable cleanup
Claus Gittinger <cg@exept.de>
parents: 1057
diff changeset
  9821
     xE              "{Class: SmallInteger }" |
809
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
    self depth > 12 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9824
        ^ self floydSteinbergDitheredMonochromeBits
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9825
    ].
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9826
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9827
    w := width.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9828
    h := height.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9829
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9830
    bytesPerMonoRow := (w + 7) // 8.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9831
    monoBits := ByteArray uninitializedNew:(bytesPerMonoRow * h).
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9832
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9833
    errorArray := Array new:(w+6).
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9834
    errorArray1 := Array new:(w+6) withAll:0.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9835
    errorArray2 := Array new:(w+6) withAll:0.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9836
    errorArray3 := Array new:(w+6) withAll:0.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9837
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9838
    dstIndex := 1.
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9839
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9840
    "/ 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
  9841
    "/ use table-value in loop
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9842
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9843
    greyValues := self greyMapForRange:(255 * 1024).
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
  9844
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9845
    0 to:(h-1) do:[:y |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9846
        nextDst := dstIndex + bytesPerMonoRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9847
        byte := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9848
        bitCnt := 8.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9849
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9850
        t := errorArray.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9851
        errorArray := errorArray1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9852
        errorArray1 := errorArray2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9853
        errorArray2 := errorArray3.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9854
        errorArray3 := t.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9855
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9856
        errorArray3 atAllPut:0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9857
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9858
        self valuesAtY:y from:0 to:(w-1) do:[:x :pixel |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9859
            |eP eD|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9860
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9861
            "/ get the colors grey value [0 .. 1]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9862
            grey := greyValues at:(pixel + 1).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9863
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9864
            "/ adjust error
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9865
            xE := x + 3 + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9866
            grey := (grey + (errorArray at:xE)).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9867
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9868
            byte := byte bitShift:1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9869
            grey > (127 * 1024) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9870
                byte := byte bitOr:1.      "/ white
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9871
                e := grey - (255 * 1024)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9872
            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9873
                e := grey                  "/ black
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9874
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9875
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9876
            e ~= 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9877
                "/ distribute the error:
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9878
                "/                  XX    32
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9879
                "/         12    26    30    16
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9880
                "/            12    26    12
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9881
                "/          5    12    12     5
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9882
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9883
                eD := e.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9884
                e := e // 200.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9885
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9886
                eP := e * 32. eD := eD - eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9887
                errorArray at:xE+2 put:(errorArray at:xE+2) + eP.
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
                eP := e * 30. eD := eD - eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9890
                errorArray1 at:xE+1 put:(errorArray1 at:xE+1) + eP.
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
                eP := e * 16. eD := eD - eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9893
                errorArray1 at:xE+3 put:(errorArray1 at:xE+3) + eP.
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
                eP := e * 26. eD := eD - eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9896
                errorArray1 at:xE-1 put:(errorArray1 at:xE-1) + eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9897
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9898
                eD := eD - eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9899
                errorArray2 at:xE put:(errorArray2 at:xE) + eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9900
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9901
                eP := e * 12. eD := eD - eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9902
                errorArray1 at:xE-3 put:(errorArray1 at:xE-3) + eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9903
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9904
                eD := eD - eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9905
                errorArray2 at:xE-2 put:(errorArray2 at:xE-2) + eP.
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
                eD := eD - eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9908
                errorArray2 at:xE+2 put:(errorArray2 at:xE+2) + eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9909
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9910
                eD := eD - eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9911
                errorArray3 at:xE-1 put:(errorArray3 at:xE-1) + eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9912
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9913
                eD := eD - eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9914
                errorArray3 at:xE+1 put:(errorArray3 at:xE+1) + eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9915
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9916
                eP := e * 5. eD := eD - eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9917
                errorArray3 at:xE-3 put:(errorArray3 at:xE-3) + eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9918
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9919
                eP := eD.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9920
                errorArray3 at:xE+3 put:(errorArray3 at:xE+3) + eP.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9921
            ].
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
            bitCnt := bitCnt - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9924
            bitCnt == 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9925
                monoBits at:dstIndex put:byte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9926
                dstIndex := dstIndex + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9927
                byte := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9928
                bitCnt := 8.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9929
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9930
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
        bitCnt ~~ 8 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9933
            byte := byte bitShift:bitCnt.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9934
            monoBits at:dstIndex put:byte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9935
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9936
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
  9937
        dstIndex := nextDst.
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9938
    ].
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9939
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9940
    ^ monoBits
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9941
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9942
    "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
  9943
    "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
  9944
! !
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
  9945
861
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
  9946
!Image methodsFor:'drawing'!
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
  9947
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
  9948
displayArcOrigin:origin corner:corner from:startAngle angle:angle withColor:aColor
8231
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
  9949
    "draw part of a circle/ellipse with some pixel value.
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
  9950
     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
  9951
5138
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9952
    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
  9953
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9954
    "
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9955
     |cm i|
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9956
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9957
     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
  9958
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9959
     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
  9960
     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
  9961
     i inspect.
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9962
    "
8231
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
  9963
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
  9964
    "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
  9965
!
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9966
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
  9967
displayArcOrigin:origin corner:corner from:startAngle angle:angle withValue:aPixelValueOrNil
8231
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
  9968
    "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
  9969
     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
  9970
     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
  9971
     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
  9972
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
  9973
    |tempForm wI "{ Class: SmallInteger }"
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
  9974
     hI "{ Class: SmallInteger }" tempImage|
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
  9975
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
  9976
    wI := self width.
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
  9977
    hI := self height.
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
  9978
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
  9979
    tempForm := Form width:wI height:hI depth:1 onDevice:Screen current.
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
  9980
    tempForm
7480
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
  9981
        paint:(Color colorId:1) on:(Color colorId:0);
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
  9982
        clear.
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
  9983
    tempForm displayArcOrigin:origin corner:corner from:startAngle angle:angle.
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
  9984
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
  9985
    tempImage := tempForm asImage.
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
  9986
    0 to:hI-1 do:[:yRun|
7480
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
  9987
        0 to:wI-1 do:[:xRun|
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
  9988
            (tempImage pixelAtX:xRun y:yRun) == 1 ifTrue:[
7480
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
  9989
                self atImageAndMask:xRun@yRun putValue:aPixelValueOrNil.
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
  9990
            ].
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
  9991
        ].
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
  9992
    ].
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
  9993
    tempForm destroy.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
  9994
    tempImage close.
5352
82a42045e996 changed:8 methods
Claus Gittinger <cg@exept.de>
parents: 5341
diff changeset
  9995
    self release. "/ device-image is no longer valid
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
  9996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
  9997
    "
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
  9998
     |cm i|
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
  9999
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10000
     cm :=  Array with:Color white with:Color black with:Color red.
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10001
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10002
     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
 10003
     i displayArcOrigin:100@100 corner:200@200 from:0 angle:90 withColor:Color red.
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10004
     i inspect.
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10005
    "
8231
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
 10006
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
 10007
    "Modified (comment): / 07-12-2017 / 15:01:35 / cg"
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10008
!
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10009
8164
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10010
drawEllipse:aRectangle with:aColorOrPixelValue
8231
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
 10011
    "draw a circle/ellipse with some pixel value or color.
8164
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10012
     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
 10013
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10014
    |pixelValue|
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10015
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10016
    (pixelValue := aColorOrPixelValue) isInteger ifFalse:[
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10017
        pixelValue := (self valueFromColor:aColorOrPixelValue).
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10018
    ].
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10019
    self drawEllipse:aRectangle withValue:pixelValue.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10020
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10021
    "Created: / 05-09-2017 / 14:54:52 / cg"
8231
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
 10022
    "Modified (comment): / 07-12-2017 / 15:01:00 / cg"
8164
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10023
!
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10024
4994
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
 10025
drawEllipse:aRectangle withColor:aColor
8231
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
 10026
    "draw a circle/ellipse with some pixel value.
4994
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
 10027
     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
 10028
7961
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10029
    self drawEllipse:aRectangle withValue:(self valueFromColor:aColor) lineWidth:nil
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10030
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10031
    "
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10032
     |i|
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10033
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10034
     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
 10035
     i drawEllipse:(0@0 corner:80@100) withColor:Color red.
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10036
     i inspect.
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10037
    "
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10038
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10039
    "Modified: / 26-02-2017 / 17:13:47 / cg"
8231
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
 10040
    "Modified (comment): / 07-12-2017 / 15:01:03 / cg"
7961
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10041
!
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10042
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10043
drawEllipse:aRectangle withColor:aColor lineWidth:lw
8231
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
 10044
    "draw a circle/ellipse with some pixel value.
7961
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10045
     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
 10046
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10047
    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
 10048
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10049
    "
7905
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10050
     |i|
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10051
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10052
     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
 10053
     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
 10054
     i inspect.
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10055
    "
7905
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10056
7961
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10057
    "Created: / 26-02-2017 / 17:12:37 / cg"
8231
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
 10058
    "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
 10059
!
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10060
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10061
drawEllipse:aRectangle withValue:aPixelValueOrNil
8231
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
 10062
    "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
 10063
     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
 10064
     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
 10065
     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
 10066
7961
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10067
    self drawEllipse:aRectangle withValue:aPixelValueOrNil lineWidth:nil
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
     |i|
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10071
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10072
     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
 10073
     i drawEllipse:(0@0 corner:80@100) withColor:Color red.
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10074
     i inspect.
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10075
    "
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10076
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10077
    "Modified: / 26-02-2017 / 17:13:36 / cg"
8231
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
 10078
    "Modified (comment): / 07-12-2017 / 15:01:08 / cg"
7961
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10079
!
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10080
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10081
drawEllipse:aRectangle withValue:aPixelValueOrNil lineWidth:lineWidthOrNil
8231
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
 10082
    "draw a circle/ellipse with some pixel value.
7961
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10083
     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
 10084
     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
 10085
     otherwise to 1. (used by the bitmap editor)"
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10086
4994
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
 10087
    |tempForm xI "{ Class: SmallInteger }"
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
 10088
     yI "{ Class: SmallInteger }"
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
 10089
     wI "{ Class: SmallInteger }"
7961
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10090
     hI "{ Class: SmallInteger }" 
8222
194b512106a2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8209
diff changeset
 10091
     tempImage lw display|
194b512106a2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8209
diff changeset
 10092
194b512106a2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8209
diff changeset
 10093
    (display := Screen current) isNil ifTrue:[
194b512106a2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8209
diff changeset
 10094
        self error:'No display - cannot draw ellipse'
194b512106a2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8209
diff changeset
 10095
    ].    
7961
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10096
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10097
    lw := lineWidthOrNil ? 1.
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10098
     
4994
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
 10099
    wI := aRectangle width.
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
 10100
    hI := aRectangle height.
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
 10101
8222
194b512106a2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8209
diff changeset
 10102
    tempForm := Form width:wI+lw height:hI+lw depth:1 onDevice:display.
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 10103
    tempForm
7480
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10104
        paint:(Color colorId:1) on:(Color colorId:0);
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10105
        clear.
7961
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10106
    tempForm lineWidth:lw.
8231
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
 10107
    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
 10108
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
 10109
    xI := aRectangle left.
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
 10110
    yI := aRectangle top.
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
 10111
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10112
    tempImage := tempForm asImage.
7961
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10113
    0 to:hI+lw-1 do:[:yRun|
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10114
        0 to:wI+lw-1 do:[:xRun|
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10115
            (tempImage pixelAtX:xRun y:yRun) == 1 ifTrue:[
7480
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10116
                self atImageAndMask: (xI+xRun)@(yI+yRun) putValue:aPixelValueOrNil.
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10117
            ].
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10118
        ].
4994
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
 10119
    ].
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10120
    tempForm destroy.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10121
    tempImage close.
5352
82a42045e996 changed:8 methods
Claus Gittinger <cg@exept.de>
parents: 5341
diff changeset
 10122
    self release. "/ device-image is no longer valid
4994
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
 10123
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
 10124
    "
7905
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10125
     |i|
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10126
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10127
     i := Depth8Image extent:300@400 depth:8 palette:{ Color white . Color black  . Color red }.
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10128
     i drawEllipse:(0@0 corner:80@100) withColor:Color red.
4994
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
 10129
     i inspect.
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
 10130
    "
7961
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10131
    "
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10132
     |i|
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10133
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10134
     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
 10135
     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
 10136
     i inspect.
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10137
    "
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10138
3a473591615c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7960
diff changeset
 10139
    "Created: / 26-02-2017 / 17:13:16 / cg"
8231
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
 10140
    "Modified (comment): / 07-12-2017 / 15:01:11 / cg"
4994
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
 10141
!
2bc5eeefaee9 +drawEllipse
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
 10142
8164
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10143
drawLineFrom:startPoint to:endPoint with:aColorOrPixelValue
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10144
    "draw a line with some pixel value.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10145
     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
 10146
     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
 10147
     (such as the HumanReadableImageGenerator)"
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10148
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10149
    |pixelValue|
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10150
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10151
    (pixelValue := aColorOrPixelValue) isInteger ifFalse:[
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10152
        pixelValue := self valueFromColor:aColorOrPixelValue
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10153
    ].
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10154
    self drawLineFrom:startPoint to:endPoint withValue:pixelValue
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10155
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10156
    "
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10157
     |i|
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10158
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10159
     i := Depth1Image extent:100@100 depth:1 palette:nil.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10160
     i photometric:#blackIs0.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10161
     i drawLineFrom:5@5 to:94@5 withColor:1.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10162
     i drawLineFrom:94@5 to:94@94 withColor:1.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10163
     i drawLineFrom:94@94 to:5@94 withColor:1.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10164
     i drawLineFrom:5@94 to:5@5 withColor:1.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10165
     i drawLineFrom:10@10 to:90@90 withColor:1.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10166
     i drawLineFrom:90@10 to:10@90 withColor:1.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10167
     i inspect.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10168
    "
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10169
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10170
    "Created: / 05-09-2017 / 14:55:50 / cg"
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10171
!
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10172
5235
e9ab91666ebf *** empty log message ***
sr
parents: 5216
diff changeset
 10173
drawLineFrom:startPoint to:endPoint withColor:aColorOrPixelValue
4955
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10174
    "draw a line with some pixel value.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10175
     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
 10176
     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
 10177
     (such as the HumanReadableImageGenerator)"
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10178
5235
e9ab91666ebf *** empty log message ***
sr
parents: 5216
diff changeset
 10179
    |pixelValue|
e9ab91666ebf *** empty log message ***
sr
parents: 5216
diff changeset
 10180
e9ab91666ebf *** empty log message ***
sr
parents: 5216
diff changeset
 10181
    pixelValue := aColorOrPixelValue.
e9ab91666ebf *** empty log message ***
sr
parents: 5216
diff changeset
 10182
    pixelValue isInteger ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10183
        pixelValue := self valueFromColor:aColorOrPixelValue
5235
e9ab91666ebf *** empty log message ***
sr
parents: 5216
diff changeset
 10184
    ].
e9ab91666ebf *** empty log message ***
sr
parents: 5216
diff changeset
 10185
    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
 10186
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10187
    "
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10188
     |i|
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10189
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10190
     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
 10191
     i photometric:#blackIs0.
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10192
     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
 10193
     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
 10194
     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
 10195
     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
 10196
     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
 10197
     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
 10198
     i inspect.
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10199
    "
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10200
!
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10201
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10202
drawLineFrom:startPoint to:endPoint withValue:aPixelValueOrNil
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10203
    "draw a line with some pixel value.
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10204
     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
 10205
     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
 10206
     (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
 10207
     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
 10208
     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
 10209
4955
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10210
    |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
 10211
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10212
    x0 := startPoint x.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10213
    y0 := startPoint y.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10214
    x1 := endPoint x.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10215
    y1 := endPoint y.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10216
8194
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 10217
    (x1 - x0) == 0 ifTrue:[
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 10218
        y0 to: y1 do:[:y |
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 10219
            self atImageAndMask:x0@y putValue:aPixelValueOrNil.
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 10220
        ].
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 10221
        ^ self.
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 10222
    ].
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 10223
    (y1 - y0) == 0 ifTrue:[
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 10224
        x0 to: x1 do:[:x |
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 10225
            self atImageAndMask:x@y0 putValue:aPixelValueOrNil.
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 10226
        ].
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 10227
        ^ self.
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 10228
    ].
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 10229
4955
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10230
    steep := (y1 - y0) abs > (x1 - x0) abs.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10231
    steep ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10232
        t := x0. x0 := y0. y0 := t.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10233
        t := x1. x1 := y1. y1 := t.
4955
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10234
    ].
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10235
    x0 > x1 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10236
        t := x0. x0 := x1. x1 := t.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10237
        t := y0. y0 := y1. y1 := t.
4955
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10238
    ].
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10239
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10240
    deltax := x1 - x0.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10241
    deltay := (y1 - y0) abs.
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
    error := 0.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10244
    deltaerr := deltay / deltax.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10245
    y := y0.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10246
    y0 < y1 ifTrue:[ ystep := 1 ] ifFalse:[ ystep := -1 ].
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10247
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10248
    x0 to: x1 do:[:x |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10249
        steep ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10250
            self atImageAndMask:y@x putValue:aPixelValueOrNil.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10251
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10252
            self atImageAndMask:x@y putValue:aPixelValueOrNil.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10253
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10254
        error := error + deltaerr.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10255
        error >= 0.5 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10256
            y := y + ystep.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10257
            error := error - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10258
        ]
4955
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10259
    ].
5352
82a42045e996 changed:8 methods
Claus Gittinger <cg@exept.de>
parents: 5341
diff changeset
 10260
    self release. "/ device-image is no longer valid
4955
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10261
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10262
    "
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10263
     |i|
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10264
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10265
     i := Depth1Image extent:100@100 depth:1 palette:nil.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10266
     i photometric:#blackIs0.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10267
     i drawLineFrom:5@5 to:94@5 withColor:1.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10268
     i drawLineFrom:94@5 to:94@94 withColor:1.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10269
     i drawLineFrom:94@94 to:5@94 withColor:1.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10270
     i drawLineFrom:5@94 to:5@5 withColor:1.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10271
     i drawLineFrom:10@10 to:90@90 withColor:1.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10272
     i drawLineFrom:90@10 to:10@90 withColor:1.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10273
     i inspect.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10274
    "
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10275
!
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10276
8164
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10277
drawRectangle: aRectangle with:aColorOrPixelValue
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10278
    "draw a rectangle with some pixel value.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10279
     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
 10280
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10281
    |pixelValue|
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10282
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10283
    (pixelValue := aColorOrPixelValue) isInteger ifFalse:[
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10284
        pixelValue := self valueFromColor:aColorOrPixelValue
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10285
    ].
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10286
    self drawRectangle:aRectangle withValue:pixelValue
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10287
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10288
    "
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10289
     |i|
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10290
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10291
     i := Depth1Image extent:100@100 depth:1 palette:nil.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10292
     i photometric:#blackIs0.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10293
     i drawRectangle:(10@10 corner:90@90) withColor:1.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10294
     i inspect.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10295
    "
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10296
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10297
    "Created: / 05-09-2017 / 14:58:10 / cg"
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10298
!
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10299
2801
9f71b58c0726 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2772
diff changeset
 10300
drawRectangle: aRectangle withColor:aColor
9f71b58c0726 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2772
diff changeset
 10301
    "draw a rectangle with some pixel value.
9f71b58c0726 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2772
diff changeset
 10302
     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
 10303
5138
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10304
    self drawRectangle:aRectangle withValue:(self valueFromColor:aColor)
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10305
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10306
    "
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10307
     |i|
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10308
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10309
     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
 10310
     i photometric:#blackIs0.
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10311
     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
 10312
     i inspect.
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10313
    "
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10314
!
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10315
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10316
drawRectangle: aRectangle withValue:aPixelValueOrNil
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10317
    "draw a rectangle with some pixel value.
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10318
     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
 10319
     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
 10320
     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
 10321
7918
ad5373d62245 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7916
diff changeset
 10322
    |xLeft  "{ Class: SmallInteger }"
ad5373d62245 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7916
diff changeset
 10323
     xRight "{ Class: SmallInteger }"
ad5373d62245 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7916
diff changeset
 10324
     yTop   "{ Class: SmallInteger }"
ad5373d62245 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7916
diff changeset
 10325
     yBot   "{ Class: SmallInteger }"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 10326
     wI "{ Class: SmallInteger }"
2801
9f71b58c0726 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2772
diff changeset
 10327
     hI "{ Class: SmallInteger }"|
9f71b58c0726 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2772
diff changeset
 10328
9f71b58c0726 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2772
diff changeset
 10329
    wI := aRectangle width.
9f71b58c0726 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2772
diff changeset
 10330
    hI := aRectangle height.
9f71b58c0726 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2772
diff changeset
 10331
7918
ad5373d62245 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7916
diff changeset
 10332
    xLeft := aRectangle left.
ad5373d62245 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7916
diff changeset
 10333
    xRight := xLeft+wI-1.
ad5373d62245 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7916
diff changeset
 10334
    yTop := aRectangle top.
ad5373d62245 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7916
diff changeset
 10335
    yBot := yTop+hI-1.
ad5373d62245 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7916
diff changeset
 10336
ad5373d62245 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7916
diff changeset
 10337
    xLeft to:xLeft+wI-1 do:[:xRun|
ad5373d62245 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7916
diff changeset
 10338
        self atImageAndMask: xRun@yTop put:aPixelValueOrNil.
ad5373d62245 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7916
diff changeset
 10339
        self atImageAndMask: xRun@yBot put:aPixelValueOrNil
ad5373d62245 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7916
diff changeset
 10340
    ].
ad5373d62245 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7916
diff changeset
 10341
    yTop+1 to:yTop+hI-2 do:[:yRun|
ad5373d62245 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7916
diff changeset
 10342
        self atImageAndMask: xLeft@yRun put:aPixelValueOrNil.
ad5373d62245 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7916
diff changeset
 10343
        self atImageAndMask: xRight@yRun put:aPixelValueOrNil
4955
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10344
    ].
5352
82a42045e996 changed:8 methods
Claus Gittinger <cg@exept.de>
parents: 5341
diff changeset
 10345
    self release. "/ device-image is no longer valid
4955
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10346
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10347
    "
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10348
     |i|
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10349
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10350
     i := Depth1Image extent:100@100 depth:1 palette:nil.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10351
     i photometric:#blackIs0.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10352
     i drawRectangle:(10@10 corner:90@90) withColor:1.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10353
     i inspect.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 10354
    "
7918
ad5373d62245 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7916
diff changeset
 10355
ad5373d62245 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7916
diff changeset
 10356
    "Modified: / 21-02-2017 / 01:41:39 / cg"
2801
9f71b58c0726 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2772
diff changeset
 10357
!
9f71b58c0726 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2772
diff changeset
 10358
5135
0a2a850a20cc *** empty log message ***
sr
parents: 5126
diff changeset
 10359
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
 10360
    "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
 10361
     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
 10362
     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
 10363
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 10364
    |tempForm wI "{ Class: SmallInteger }"
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 10365
     hI "{ Class: SmallInteger }"
8222
194b512106a2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8209
diff changeset
 10366
     colorValue tempImage display|
194b512106a2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8209
diff changeset
 10367
194b512106a2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8209
diff changeset
 10368
    (display := Screen current) isNil ifTrue:[
194b512106a2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8209
diff changeset
 10369
        self error:'No display - cannot draw arc'
194b512106a2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8209
diff changeset
 10370
    ].    
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 10371
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 10372
    wI := self width.
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 10373
    hI := self height.
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 10374
8222
194b512106a2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8209
diff changeset
 10375
    tempForm := Form width:wI height:hI depth:1 onDevice:display.
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 10376
    tempForm
7480
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10377
        paint:(Color colorId:1) on:(Color colorId:0);
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10378
        clear.
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 10379
    tempForm fillArc:origin radius:r from:startAngle angle:angle.
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 10380
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 10381
    colorValue := self valueFromColor:aColor.
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10382
    tempImage := tempForm asImage.
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 10383
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 10384
    0 to:hI-1 do:[:yRun|
7480
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10385
        0 to:wI-1 do:[:xRun|
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10386
            (tempImage pixelAtX:xRun y:yRun) == 1 ifTrue:[
7480
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10387
                self atImageAndMask:xRun@yRun putValue:colorValue.
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10388
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10389
                #(left right) do:[:aHorizontal |
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10390
                    #(top bottom) do:[:aVertical |
7905
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10391
                        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
 10392
                        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
 10393
                    ].
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10394
                ].
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10395
            ].
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10396
        ].
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10397
    ].
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10398
    tempForm destroy.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10399
    tempImage close.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10400
    self release. "/ device-image is no longer valid
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10401
7480
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10402
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10403
    "
7905
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10404
        |aaImgArray|
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10405
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10406
        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
 10407
        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
 10408
            colorDictionary:aaImgArray first
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10409
            blendStart:aaImgArray second.
7484
ac97ca090d0c #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 7483
diff changeset
 10410
        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
 10411
            colorDictionary:aaImgArray first
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10412
            blendStart:aaImgArray second.
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10413
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10414
        aaImgArray last inspect.
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 6037
diff changeset
 10415
    "
7905
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10416
8222
194b512106a2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8209
diff changeset
 10417
    "Modified: / 21-11-2017 / 16:28:05 / cg"
8231
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
 10418
    "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
 10419
!
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 6037
diff changeset
 10420
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 6037
diff changeset
 10421
fillArc:origin radius:r from:startAngle angle:angle withColor:aColorOrIndex
8231
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
 10422
    "fill part of a circle/ellipse with some pixel value.
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10423
     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
 10424
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10425
    |tempForm tempImage
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10426
     wI "{ Class: SmallInteger }"
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10427
     hI "{ Class: SmallInteger }"
8222
194b512106a2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8209
diff changeset
 10428
     colorValue display|
194b512106a2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8209
diff changeset
 10429
194b512106a2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8209
diff changeset
 10430
    (display := Screen current) isNil ifTrue:[
194b512106a2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8209
diff changeset
 10431
        self error:'No display - cannot fill arc'
194b512106a2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8209
diff changeset
 10432
    ].    
194b512106a2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8209
diff changeset
 10433
    
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10434
    wI := self width.
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10435
    hI := self height.
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10436
8222
194b512106a2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8209
diff changeset
 10437
    tempForm := Form width:wI height:hI depth:1 onDevice:display.
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 10438
    tempForm
7480
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10439
        paint:(Color colorId:1) on:(Color colorId:0);
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10440
        clear.
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10441
    tempForm fillArc:origin radius:r from:startAngle angle:angle.
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10442
4997
15d53562d4e8 changed #fillArc:radius:from:angle:withColor:
sr
parents: 4996
diff changeset
 10443
    aColorOrIndex isInteger ifTrue:[
7480
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10444
        colorValue := aColorOrIndex.
4997
15d53562d4e8 changed #fillArc:radius:from:angle:withColor:
sr
parents: 4996
diff changeset
 10445
    ] ifFalse:[
7480
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10446
        colorValue := self valueFromColor:aColorOrIndex.
4997
15d53562d4e8 changed #fillArc:radius:from:angle:withColor:
sr
parents: 4996
diff changeset
 10447
    ].
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10448
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10449
    tempImage := tempForm asImage.
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10450
    0 to:hI-1 do:[:yRun|
7480
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10451
        0 to:wI-1 do:[:xRun|
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10452
            (tempImage pixelAtX:xRun y:yRun) == 1 ifTrue:[
7480
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10453
                self atImageAndMask:xRun@yRun putValue:colorValue.
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10454
            ].
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10455
        ].
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10456
    ].
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10457
    tempForm destroy.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10458
    tempImage close.
5352
82a42045e996 changed:8 methods
Claus Gittinger <cg@exept.de>
parents: 5341
diff changeset
 10459
    self release. "/ device-image is no longer valid
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10460
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10461
    "
7905
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10462
     |i|
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10463
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10464
     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
 10465
     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
 10466
     i fillArc:100@100 radius:80 from:90 angle:270 withColor:Color blue.
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10467
     i inspect.
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10468
    "
7905
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10469
8222
194b512106a2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8209
diff changeset
 10470
    "Modified: / 21-11-2017 / 16:28:15 / cg"
8231
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
 10471
    "Modified (comment): / 07-12-2017 / 15:01:55 / cg"
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10472
!
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10473
8164
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10474
fillEllipse:aRectangle with:aColorOrPixelValue
8231
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
 10475
    "fill a circle/ellipse with some pixel value or color.
8164
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10476
     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
 10477
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10478
    |pixelValue|
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10479
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10480
    (pixelValue := aColorOrPixelValue) isInteger ifFalse:[
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10481
        pixelValue := self valueFromColor:aColorOrPixelValue
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10482
    ].
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10483
    self fillEllipse:aRectangle withValue:pixelValue.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10484
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10485
    "Created: / 05-09-2017 / 14:51:23 / cg"
8231
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
 10486
    "Modified (comment): / 07-12-2017 / 15:00:23 / cg"
8164
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10487
!
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10488
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10489
fillEllipse:aRectangle withColor:aColor
8231
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
 10490
    "fill a circle/ellipse with some color.
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10491
     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
 10492
5138
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10493
    self fillEllipse:aRectangle withValue:(self valueFromColor:aColor)
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10494
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10495
    "
7905
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10496
     |i|
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10497
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10498
     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
 10499
     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
 10500
     i inspect.
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10501
    "
7905
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10502
8231
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
 10503
    "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
 10504
!
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10505
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10506
fillEllipse:aRectangle withValue:aPixelValueOrNil
8231
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
 10507
    "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
 10508
     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
 10509
     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
 10510
     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
 10511
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10512
    |tempForm xI "{ Class: SmallInteger }"
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10513
     yI "{ Class: SmallInteger }"
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10514
     wI "{ Class: SmallInteger }"
8222
194b512106a2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8209
diff changeset
 10515
     hI "{ Class: SmallInteger }" tempImage display|
194b512106a2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8209
diff changeset
 10516
194b512106a2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8209
diff changeset
 10517
    (display := Screen current) isNil ifTrue:[
194b512106a2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8209
diff changeset
 10518
        self error:'No display - cannot fill ellipse'
194b512106a2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8209
diff changeset
 10519
    ].    
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10520
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10521
    wI := aRectangle width.
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10522
    hI := aRectangle height.
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10523
8222
194b512106a2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8209
diff changeset
 10524
    tempForm := Form width:wI height:hI depth:1 onDevice:display.
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 10525
    tempForm
7480
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10526
        paint:(Color colorId:1) on:(Color colorId:0);
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10527
        clear.
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10528
    tempForm fillArcIn:(0@0 extent:wI@hI) from:0 angle:360.
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10529
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10530
    xI := aRectangle left.
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10531
    yI := aRectangle top.
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10532
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10533
    tempImage := tempForm asImage.
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10534
    0 to:hI-1 do:[:yRun|
7480
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10535
        0 to:wI-1 do:[:xRun|
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10536
            (tempImage pixelAtX:xRun y:yRun) == 1 ifTrue:[
7480
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10537
                self atImageAndMask:(xI+xRun)@(yI+yRun) putValue:aPixelValueOrNil.
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10538
            ].
c5f7b4f01ed9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7404
diff changeset
 10539
        ].
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10540
    ].
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10541
    tempForm destroy.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 10542
    tempImage close.
5352
82a42045e996 changed:8 methods
Claus Gittinger <cg@exept.de>
parents: 5341
diff changeset
 10543
    self release. "/ device-image is no longer valid
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10544
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10545
    "
7905
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10546
     |i|
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10547
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10548
     i := Depth8Image extent:300@400 depth:8 palette:{ Color white . Color black  . Color red }.
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10549
     i fillEllipse:(0@0 corner:80@100) withColor:Color red.
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10550
     i inspect.
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10551
    "
7905
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 10552
8222
194b512106a2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8209
diff changeset
 10553
    "Modified: / 21-11-2017 / 16:28:25 / cg"
8231
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
 10554
    "Modified (comment): / 07-12-2017 / 15:00:32 / cg"
8164
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10555
!
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10556
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10557
fillRectangle:aRectangle with:aColorOrPixelValue
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10558
    "fill a rectangular area with some or pixel value."
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10559
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10560
    |pixelValue|
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10561
8231
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
 10562
    (pixelValue := aColorOrPixelValue) isColor ifTrue:[
8164
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10563
        pixelValue := self valueFromColor:aColorOrPixelValue
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10564
    ].
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10565
    self fillRectangle:aRectangle withValue:pixelValue.
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10566
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10567
    "Created: / 05-09-2017 / 14:50:36 / cg"
8231
30e4e9fe2670 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8230
diff changeset
 10568
    "Modified: / 07-12-2017 / 14:53:15 / cg"
4996
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10569
!
933de2d71291 added #fillArc... methode
sr
parents: 4995
diff changeset
 10570
4995
3a5cb7a57b0b changed #fillRectangle:aRectangle withColor:aColor
sr
parents: 4994
diff changeset
 10571
fillRectangle:aRectangle withColor:aColor
8164
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10572
    "fill a rectangular area with some color."
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10573
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 6037
diff changeset
 10574
    self
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10575
        fillRectangle:aRectangle
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10576
        withValue:(self valueFromColor:aColor)
8164
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10577
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10578
    "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
 10579
!
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10580
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10581
fillRectangle:aRectangle withValue:aPixelValueOrNil
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10582
    "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
 10583
     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
 10584
     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
 10585
     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
 10586
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 6037
diff changeset
 10587
    self
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10588
        fillRectangleX:aRectangle left y:aRectangle top
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10589
        width:aRectangle width height:aRectangle height
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10590
        withValue:aPixelValueOrNil
1972
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
 10591
!
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
 10592
8164
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10593
fillRectangleX:x y:y width:w height:h with:aColorOrPixelValue
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10594
    "fill a rectangular area with a aColor"
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
    |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
    (pixelValue := aColorOrPixelValue) isInteger ifFalse:[
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10599
        pixelValue := self valueFromColor:aColorOrPixelValue
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10600
    ].
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10601
    self fillRectangleX:x y:y width:w height:h withValue:pixelValue
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10602
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10603
    "Modified: / 05-09-2017 / 14:57:19 / cg"
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10604
!
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10605
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10606
fillRectangleX:x y:y width:w height:h withColor:aColor
1972
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
 10607
    "fill a rectangular area with a aColor"
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
 10608
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
 10609
    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
 10610
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10611
    "Created: / 05-09-2017 / 14:57:05 / cg"
1630
e75c600b1c2a added #isMask query;
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
 10612
!
e75c600b1c2a added #isMask query;
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
 10613
5138
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10614
fillRectangleX:x y:y width:w height:h withValue:aPixelValueOrNil
1630
e75c600b1c2a added #isMask query;
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
 10615
    "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
 10616
     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
 10617
     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
 10618
     otherwise to 1. (used by the bitmap editor)"
1630
e75c600b1c2a added #isMask query;
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
 10619
e75c600b1c2a added #isMask query;
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
 10620
    |xI "{ Class: SmallInteger }"
861
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 10621
     yI "{ Class: SmallInteger }"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 10622
     wI "{ Class: SmallInteger }"
5138
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10623
     hI "{ Class: SmallInteger }"
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10624
     p|
861
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 10625
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 10626
    xI := x.
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 10627
    yI := y.
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 10628
    wI := w.
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 10629
    hI := h.
5138
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10630
    p := Point new.
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 10631
8194
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 10632
    mask isNil ifTrue:[
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 10633
        yI to:yI+hI-1 do:[:yRun |
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 10634
            xI to:xI+wI-1 do:[:xRun |
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 10635
                p x:xRun y:yRun.
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 10636
                self pixelAt:p put:(aPixelValueOrNil ? 0).
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 10637
            ]
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 10638
        ].
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 10639
    ] ifFalse:[
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 10640
        yI to:yI+hI-1 do:[:yRun |
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 10641
            xI to:xI+wI-1 do:[:xRun |
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 10642
                p x:xRun y:yRun.
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 10643
                self atImageAndMask:p putValue:aPixelValueOrNil.
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 10644
            ]
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 10645
        ].
5352
82a42045e996 changed:8 methods
Claus Gittinger <cg@exept.de>
parents: 5341
diff changeset
 10646
    ].
82a42045e996 changed:8 methods
Claus Gittinger <cg@exept.de>
parents: 5341
diff changeset
 10647
    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
 10648
1630
e75c600b1c2a added #isMask query;
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
 10649
    "Created: 22.4.1997 / 14:02:14 / cg"
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 10650
    "Modified: 24.4.1997 / 17:24:58 / cg"
1972
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
 10651
!
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
 10652
8164
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10653
floodFillAt: aPoint with:aColorOrPixelValue
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10654
    "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
 10655
     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
 10656
     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
 10657
     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
 10658
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10659
    |pixelValue|
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10660
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10661
    (pixelValue := aColorOrPixelValue) isInteger ifFalse:[
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10662
        pixelValue := self valueFromColor:aColorOrPixelValue
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10663
    ].
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10664
    ^ self floodFillAt:aPoint withValue:pixelValue
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10665
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10666
    "Created: / 05-09-2017 / 14:57:34 / cg"
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10667
!
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 10668
1972
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
 10669
floodFillAt: aPoint withColor: aColor
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
 10670
    "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
 10671
     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
 10672
     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
 10673
     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
 10674
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10675
    ^ self floodFillAt:aPoint withValue:(self valueFromColor:aColor)
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10676
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10677
    "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
 10678
!
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10679
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10680
floodFillAt:aPoint withValue:aPixelValueOrNil
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10681
    "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
 10682
     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
 10683
     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
 10684
     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
 10685
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10686
    ^ self floodFillAt:aPoint withValue:aPixelValueOrNil maxDeviationInLight:0 maxDeviationInHue:0
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10687
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10688
    "Modified (format): / 30-01-2017 / 20:57:36 / stefan"
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10689
    "Modified (comment): / 17-02-2017 / 15:05:19 / cg"
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10690
!
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10691
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10692
floodFillAt:aPoint withValue:aPixelValueOrNil maxDeviationInLight:maxLightError maxDeviationInHue:maxHueError
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10693
    "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
 10694
     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
 10695
     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
 10696
     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
 10697
     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
 10698
     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
 10699
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10700
    |surroundingPixelsOfDo detectedPixel detectedMask processPixelToFill
3861
e9cbd4ec6020 flood fill with mask fixed
Claus Gittinger <cg@exept.de>
parents: 3860
diff changeset
 10701
     allDetectedPixelCoordinates enumerateDetectedPixelsAndDo
7911
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10702
     toDo w h drawAction 
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10703
     detectedColor detectedHue detectedLight minHueOK maxHueOK minLightOK maxLightOK
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10704
     almostSamePixel|
2205
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
 10705
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
 10706
    w := self width.
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
 10707
    h := self height.
1972
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
 10708
7911
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10709
    detectedPixel := self pixelAt: aPoint.
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10710
    mask isNil ifTrue:[
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10711
        detectedMask := 1
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10712
    ] ifFalse:[
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10713
        detectedMask := mask pixelAt: aPoint.
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10714
    ].
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10715
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 10716
    surroundingPixelsOfDo :=
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10717
        [:pX :pY :fn |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10718
            |nX nY|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10719
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10720
            nX := pX + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10721
            nY := pY + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10722
            (nY < h) ifTrue: [fn value:pX value:nY].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10723
            (pY > 0) ifTrue: [fn value:pX value:(pY - 1)].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10724
            (nX < w) ifTrue: [fn value:nX value:pY].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10725
            (pX > 0) ifTrue: [fn value:(pX - 1) value:pY].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10726
        ].
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 10727
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 10728
    enumerateDetectedPixelsAndDo :=
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10729
        [:detectedPixels :action |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10730
            |idx|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10731
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10732
            idx := 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10733
            0 to:h-1 do:[:y |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10734
                0 to:w-1 do:[:x |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10735
                    (detectedPixels at:idx) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10736
                        action value:x value:y
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10737
                    ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10738
                    idx := idx + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10739
                ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10740
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10741
        ].
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 6037
diff changeset
 10742
7911
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10743
    (maxLightError = 0 and:[maxHueError = 0]) ifTrue:[ 
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10744
        "/ compare pixels exactly - a faster algorithm
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10745
        processPixelToFill :=
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10746
            [:spX :spY |
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10747
                |samePixel idx|
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10748
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10749
                mask isNil ifTrue:[
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10750
                    samePixel := (self pixelAtX:spX y:spY) == detectedPixel
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10751
                ] ifFalse:[
7911
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10752
                    detectedMask == 0 ifTrue:[
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10753
                        samePixel := (mask pixelAtX:spX y:spY) == 0
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10754
                    ] ifFalse:[
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10755
                        samePixel := ((self pixelAtX:spX y:spY) == detectedPixel)
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10756
                                     and:[ (mask pixelAtX:spX y:spY) == detectedMask ]
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10757
                    ].
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10758
                ].
7911
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10759
                samePixel ifTrue: [
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10760
                    idx := 1 + spX + (spY * w).
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10761
                    (allDetectedPixelCoordinates at:idx) ifFalse:[
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10762
                        allDetectedPixelCoordinates at:idx put:true.
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10763
                        toDo add:spX @ spY.
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10764
                    ].
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10765
                ]
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10766
            ].
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10767
    ] ifFalse:[
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10768
        "/ 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
 10769
        "/ hue and light for every pixel...
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10770
        detectedColor := self colorFromValue:detectedPixel.
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10771
        detectedHue := detectedColor hue.
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10772
        detectedLight := detectedColor light.
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10773
        detectedHue notNil ifTrue:[
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10774
            minHueOK := detectedHue * (1.0 - maxHueError).
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10775
            maxHueOK := detectedHue * (1.0 + maxHueError).
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10776
        ].    
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10777
        minLightOK := detectedLight * (1.0 - maxLightError).   
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10778
        maxLightOK := detectedLight * (1.0 + maxLightError).
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
        almostSamePixel := 
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10781
            [:pixelValue |
8524
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
 10782
                |same pixelColor pixelHue pixelLight|
7911
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10783
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10784
                (same := (pixelColor == detectedPixel)) ifFalse:[
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10785
                    pixelColor := self colorFromValue:pixelValue.
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10786
                    pixelHue := pixelColor hue.
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10787
                    pixelLight := pixelColor light.
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10788
                    detectedHue isNil ifTrue:[
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10789
                        "/ detect gray - what should we do?
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10790
                        same := "(pixelHue isNil) and:["pixelLight between:minLightOK and:maxLightOK"]". 
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10791
                    ] ifFalse:[    
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10792
                        pixelHue isNil ifTrue:[
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10793
                            "/ pixel is gray - what should we do?
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10794
                            "/ same := false.
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10795
                            same := pixelLight between:minLightOK and:maxLightOK.
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10796
                        ] ifFalse:[    
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10797
                            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
 10798
                        ].
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10799
                    ].
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10800
                ].
7911
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10801
                same
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10802
            ].
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10803
            
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10804
        processPixelToFill :=
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10805
            [:spX :spY |
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10806
                |samePixel idx|
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
                mask isNil ifTrue:[
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10809
                    samePixel := almostSamePixel value:(self pixelAtX:spX y:spY)
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10810
                ] ifFalse:[
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10811
                    detectedMask == 0 ifTrue:[
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10812
                        samePixel := (mask pixelAtX:spX y:spY) == 0
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10813
                    ] ifFalse:[
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10814
                        samePixel := (almostSamePixel value:(self pixelAtX:spX y:spY))
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10815
                                     and:[ (mask pixelAtX:spX y:spY) == detectedMask ]
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10816
                    ].
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10817
                ].
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10818
                samePixel ifTrue: [
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10819
                    idx := 1 + spX + (spY * w).
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10820
                    (allDetectedPixelCoordinates at:idx) ifFalse:[
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10821
                        allDetectedPixelCoordinates at:idx put:true.
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10822
                        toDo add:spX @ spY.
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10823
                    ].
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10824
                ]
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10825
            ].
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10826
    ].
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10827
    
5138
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10828
"/    (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
 10829
"/        allDetectedPixelCoordinates := mask floodFillAt: aPoint withColor: Color white.
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10830
"/        enumerateDetectedPixelsAndDo
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10831
"/                value:allDetectedPixelCoordinates
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10832
"/                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
 10833
"/        ^ allDetectedPixelCoordinates
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10834
"/    ].
3759
5b083b0ad909 fixed stupid flood-fill algorithm
Claus Gittinger <cg@exept.de>
parents: 3729
diff changeset
 10835
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 10836
    allDetectedPixelCoordinates := BooleanArray new:(w * h).
3759
5b083b0ad909 fixed stupid flood-fill algorithm
Claus Gittinger <cg@exept.de>
parents: 3729
diff changeset
 10837
    toDo := OrderedCollection new:1000.
5138
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10838
    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
 10839
    toDo add:aPoint.
5b083b0ad909 fixed stupid flood-fill algorithm
Claus Gittinger <cg@exept.de>
parents: 3729
diff changeset
 10840
5b083b0ad909 fixed stupid flood-fill algorithm
Claus Gittinger <cg@exept.de>
parents: 3729
diff changeset
 10841
    [toDo notEmpty] whileTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10842
        |p|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10843
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10844
        p := toDo removeLast.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10845
        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
 10846
    ].
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10847
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10848
    aPixelValueOrNil isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10849
        drawAction := [:x :y |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10850
                               mask pixelAtX:x y:y put:0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10851
                               self pixelAtX:x y:y put:0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10852
                      ].
3805
d87c919fb2a7 oops - care for filling a mask
Claus Gittinger <cg@exept.de>
parents: 3763
diff changeset
 10853
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10854
        drawAction := [:x :y |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10855
                                mask notNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10856
                                    mask pixelAtX:x y:y put:1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10857
                                ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10858
                                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
 10859
    ].
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10860
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10861
    enumerateDetectedPixelsAndDo
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10862
        value:allDetectedPixelCoordinates
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10863
        value:drawAction.
5138
4b834640de69 drawing and filling with a mask color
Claus Gittinger <cg@exept.de>
parents: 5135
diff changeset
 10864
5352
82a42045e996 changed:8 methods
Claus Gittinger <cg@exept.de>
parents: 5341
diff changeset
 10865
    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
 10866
    ^ allDetectedPixelCoordinates
2205
9209bc474af9 provide common colorMap helper when converting to rgb-device form
Claus Gittinger <cg@exept.de>
parents: 2199
diff changeset
 10867
7911
58ff1521d533 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7907
diff changeset
 10868
    "Created: / 17-02-2017 / 15:03:33 / cg"
8524
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
 10869
    "Modified (format): / 19-10-2018 / 16:24:27 / Stefan Vogel"
1972
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
 10870
!
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
 10871
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
 10872
rectangle: aRectangle withColor:aColor
5216
f7ec910cfce1 Mark obsolete methods
Stefan Vogel <sv@exept.de>
parents: 5200
diff changeset
 10873
    <resource: #obsolete>
1972
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
 10874
    "draw a rectangle with some pixel value.
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
 10875
    By using #atImageAndMask:put: it also works on images with mono masks."
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
 10876
2801
9f71b58c0726 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2772
diff changeset
 10877
    self obsoleteMethodWarning.
9f71b58c0726 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2772
diff changeset
 10878
    self drawRectangle: aRectangle withColor:aColor
1972
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
 10879
c7eac5189bf5 additional draw methods.
tz
parents: 1963
diff changeset
 10880
861
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 10881
! !
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 10882
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10883
!Image methodsFor:'enumerating'!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10884
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10885
atY:y from:x1 to:x2 do:aBlock
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10886
    "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
 10887
     The block is passed the color at each pixel.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10888
     The code here provides a generic and slow implementation, and
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10889
     should be redefined in concrete subclasses, to avoid some processing
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10890
     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
 10891
     and also the color allocation)."
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10892
3433
809312fa7e4f Use <resource:#obsolete>
Stefan Vogel <sv@exept.de>
parents: 3426
diff changeset
 10893
    <resource:#obsolete>
809312fa7e4f Use <resource:#obsolete>
Stefan Vogel <sv@exept.de>
parents: 3426
diff changeset
 10894
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 10895
    self obsoleteMethodWarning:'use #colorsAtY:from:to:do:'.
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 10896
    self colorsAtY:y from:x1 to:x2 do:aBlock
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 10897
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 10898
    "Modified: 7.6.1996 / 19:13:30 / cg"
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 10899
!
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 10900
5143
72147ced8f3c +colorsAtX:from:to:do:
Claus Gittinger <cg@exept.de>
parents: 5138
diff changeset
 10901
colorsAtX:x from:y1 to:y2 do:aBlock
72147ced8f3c +colorsAtX:from:to:do:
Claus Gittinger <cg@exept.de>
parents: 5138
diff changeset
 10902
    "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
 10903
     The block is passed the color at each pixel.
72147ced8f3c +colorsAtX:from:to:do:
Claus Gittinger <cg@exept.de>
parents: 5138
diff changeset
 10904
     The code here provides a generic and slow implementation, and
72147ced8f3c +colorsAtX:from:to:do:
Claus Gittinger <cg@exept.de>
parents: 5138
diff changeset
 10905
     should be redefined in concrete subclasses, to avoid some processing
72147ced8f3c +colorsAtX:from:to:do:
Claus Gittinger <cg@exept.de>
parents: 5138
diff changeset
 10906
     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
 10907
     and also the color allocation)."
72147ced8f3c +colorsAtX:from:to:do:
Claus Gittinger <cg@exept.de>
parents: 5138
diff changeset
 10908
72147ced8f3c +colorsAtX:from:to:do:
Claus Gittinger <cg@exept.de>
parents: 5138
diff changeset
 10909
    |yStart "{Class: SmallInteger }"
72147ced8f3c +colorsAtX:from:to:do:
Claus Gittinger <cg@exept.de>
parents: 5138
diff changeset
 10910
     yEnd   "{Class: SmallInteger }"|
72147ced8f3c +colorsAtX:from:to:do:
Claus Gittinger <cg@exept.de>
parents: 5138
diff changeset
 10911
72147ced8f3c +colorsAtX:from:to:do:
Claus Gittinger <cg@exept.de>
parents: 5138
diff changeset
 10912
    yStart := y1.
72147ced8f3c +colorsAtX:from:to:do:
Claus Gittinger <cg@exept.de>
parents: 5138
diff changeset
 10913
    yEnd := y2.
72147ced8f3c +colorsAtX:from:to:do:
Claus Gittinger <cg@exept.de>
parents: 5138
diff changeset
 10914
    yStart to:yEnd do:[:yRun |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10915
        aBlock value:yRun value:(self colorAtX:x y:yRun)
5143
72147ced8f3c +colorsAtX:from:to:do:
Claus Gittinger <cg@exept.de>
parents: 5138
diff changeset
 10916
    ]
72147ced8f3c +colorsAtX:from:to:do:
Claus Gittinger <cg@exept.de>
parents: 5138
diff changeset
 10917
!
72147ced8f3c +colorsAtX:from:to:do:
Claus Gittinger <cg@exept.de>
parents: 5138
diff changeset
 10918
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 10919
colorsAtY:y from:x1 to:x2 do:aBlock
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 10920
    "perform aBlock for each pixel from x1 to x2 in row y.
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 10921
     The block is passed the color at each pixel.
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 10922
     The code here provides a generic and slow implementation, and
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 10923
     should be redefined in concrete subclasses, to avoid some processing
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 10924
     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
 10925
     and also the color allocation)."
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 10926
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10927
    |xStart "{Class: SmallInteger }"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10928
     xEnd   "{Class: SmallInteger }"|
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10929
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10930
    xStart := x1.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10931
    xEnd := x2.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10932
    xStart to:xEnd do:[:xRun |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 10933
        aBlock value:xRun value:(self colorAtX:xRun y:y)
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10934
    ]
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 10935
2380
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
 10936
    "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
 10937
    "Modified: / 30.9.1998 / 22:14:16 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10938
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10939
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10940
colorsFromX:xStart y:yStart toX:xEnd y:yEnd do:aBlock
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10941
    "perform aBlock for each color in a rectangular area of the image.
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 10942
     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
 10943
     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
 10944
     The code here provides a generic and slow implementation, and
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10945
     should be redefined in concrete subclasses, to avoid some processing
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10946
     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
 10947
     and especially, the color allocations)."
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10948
940
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 10949
    |yS "{Class: SmallInteger }"
7595
c77d718d3d94 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7573
diff changeset
 10950
     yE "{Class: SmallInteger }"|
942
5e45da3c19d3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 940
diff changeset
 10951
5e45da3c19d3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 940
diff changeset
 10952
    yS := yStart.
5e45da3c19d3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 940
diff changeset
 10953
    yE := yEnd.
940
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 10954
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 10955
    yS to:yE do:[:yRun |
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 10956
        self colorsAtY:yRun from:xStart to:xEnd do:[:xRun :color |
7595
c77d718d3d94 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7573
diff changeset
 10957
            aBlock value:xRun value:yRun value:color
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 10958
        ]
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10959
    ]
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 10960
940
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 10961
    "Modified: 11.7.1996 / 19:50:47 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10962
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 10963
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10964
rgbValuesAtY:y from:x1 to:x2 do:aBlock
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10965
    "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
 10966
     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
 10967
     
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10968
     Notice the difference between rgbValue and pixelValue: rgbValues are always
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10969
     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
 10970
     indices into a colormap or be non-byte-sized rgb values.
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10971
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10972
     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
 10973
     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
 10974
     (see also Image>>atY:from:to:do:).
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10975
     The code here provides a generic and slow implementation, and
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10976
     should be redefined in concrete subclasses, to avoid some processing
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10977
     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
 10978
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10979
    |xStart "{Class: SmallInteger }"
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10980
     xEnd   "{Class: SmallInteger }"|
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10981
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10982
    xStart := x1.
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10983
    xEnd := x2.
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10984
    xStart to:xEnd do:[:xRun |
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10985
        aBlock value:xRun value:(self rgbValueAtX:xRun y:y)
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10986
    ]
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10987
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10988
    "Created: / 29-08-2017 / 14:40:48 / cg"
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10989
!
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10990
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10991
rgbValuesFromX:xStart y:yStart toX:xEnd y:yEnd do:aBlock
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10992
    "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
 10993
     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
 10994
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10995
     Notice the difference between rgbValue and pixelValue: rgbValues are always
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 10996
     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
 10997
     indices into a colormap or be non-byte-sized rgb values.
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 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
 11000
     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
 11001
     The code here provides a generic and slow implementation, and
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11002
     should be redefined in concrete subclasses, to avoid some processing
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11003
     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
 11004
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11005
    |yS "{Class: SmallInteger }"
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11006
     yE "{Class: SmallInteger }"|
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11007
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11008
    yS := yStart.
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11009
    yE := yEnd.
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11010
    yS to:yE do:[:yRun |
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11011
        self rgbValuesAtY:yRun from:xStart to:xEnd do:[:xRun :rgb |
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11012
            aBlock value:xRun value:yRun value:rgb
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11013
        ]
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11014
    ]
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11015
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11016
    "Created: / 29-08-2017 / 14:39:34 / cg"
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
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11019
valueAtY:y from:x1 to:x2 do:aBlock
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11020
    "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
 11021
     Obsolete - remains for backward compatibility."
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 11022
3433
809312fa7e4f Use <resource:#obsolete>
Stefan Vogel <sv@exept.de>
parents: 3426
diff changeset
 11023
    <resource:#obsolete>
809312fa7e4f Use <resource:#obsolete>
Stefan Vogel <sv@exept.de>
parents: 3426
diff changeset
 11024
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 11025
    self obsoleteMethodWarning:'use #valuesAtY:from:to:do:'.
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 11026
    self valuesAtY:y from:x1 to:x2 do:aBlock
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 11027
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 11028
    "Modified: 7.6.1996 / 19:11:06 / cg"
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 11029
!
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 11030
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 11031
valuesAtY:y from:x1 to:x2 do:aBlock
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11032
    "WARNING: this enumerates pixel values which need photometric interpretation
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11033
     Do not confuse with #rgbValuesAtY:from:to:do:
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11034
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11035
     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
 11036
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11037
     Notice the difference between rgbValue and pixelValue: rgbValues are always
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11038
     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
 11039
     indices into a colormap or be non-byte-sized rgb values.
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11040
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 11041
     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
 11042
     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
 11043
     (see also Image>>atY:from:to:do:).
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11044
     The code here provides a generic and slow implementation, and
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11045
     should be redefined in concrete subclasses, to avoid some processing
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11046
     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
 11047
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11048
    |xStart "{Class: SmallInteger }"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11049
     xEnd   "{Class: SmallInteger }"|
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11050
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11051
    xStart := x1.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11052
    xEnd := x2.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11053
    xStart to:xEnd do:[:xRun |
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 11054
        aBlock value:xRun value:(self pixelAtX:xRun y:y)
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11055
    ]
692
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 11056
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11057
    "Created: / 07-06-1996 / 19:09:51 / cg"
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11058
    "Modified: / 24-04-1997 / 16:55:38 / cg"
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11059
    "Modified (comment): / 29-08-2017 / 14:44:50 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11060
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11061
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11062
valuesFromX:xStart y:yStart toX:xEnd y:yEnd 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 in a rectangular area of the image.
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 and y coordinates and pixelValue at each pixel.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11074
     The code here provides a generic and slow implementation, and
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11075
     should be redefined in concrete subclasses, to avoid some processing
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11076
     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
 11077
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 11078
    |yS "{Class: SmallInteger }"
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 11079
     yE "{Class: SmallInteger }"|
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 11080
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 11081
    yS := yStart.
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 11082
    yE := yEnd.
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 11083
    yS to:yE do:[:yRun |
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 11084
        self valuesAtY:yRun from:xStart to:xEnd do:[:xRun :pixel |
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 11085
            aBlock value:xRun value:yRun value:pixel
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 11086
        ]
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11087
    ]
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 11088
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 11089
    "Modified: / 07-06-1996 / 19:09:29 / cg"
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 11090
    "Modified: / 31-01-2017 / 14:46:26 / stefan"
8116
a91860abbaa5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8115
diff changeset
 11091
    "Modified (comment): / 29-08-2017 / 14:45:06 / cg"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
 11092
! !
48194c26a46c Initial revision
claus
parents:
diff changeset
 11093
3613
75f91a51b919 Allow #registerForFinalization for classes defining their own Lobby.
Stefan Vogel <sv@exept.de>
parents: 3611
diff changeset
 11094
!Image methodsFor:'finalization'!
75f91a51b919 Allow #registerForFinalization for classes defining their own Lobby.
Stefan Vogel <sv@exept.de>
parents: 3611
diff changeset
 11095
75f91a51b919 Allow #registerForFinalization for classes defining their own Lobby.
Stefan Vogel <sv@exept.de>
parents: 3611
diff changeset
 11096
finalizationLobby
75f91a51b919 Allow #registerForFinalization for classes defining their own Lobby.
Stefan Vogel <sv@exept.de>
parents: 3611
diff changeset
 11097
    "answer the registry used for finalization.
75f91a51b919 Allow #registerForFinalization for classes defining their own Lobby.
Stefan Vogel <sv@exept.de>
parents: 3611
diff changeset
 11098
     Images have their own Registry"
75f91a51b919 Allow #registerForFinalization for classes defining their own Lobby.
Stefan Vogel <sv@exept.de>
parents: 3611
diff changeset
 11099
75f91a51b919 Allow #registerForFinalization for classes defining their own Lobby.
Stefan Vogel <sv@exept.de>
parents: 3611
diff changeset
 11100
    ^ Lobby
75f91a51b919 Allow #registerForFinalization for classes defining their own Lobby.
Stefan Vogel <sv@exept.de>
parents: 3611
diff changeset
 11101
!
75f91a51b919 Allow #registerForFinalization for classes defining their own Lobby.
Stefan Vogel <sv@exept.de>
parents: 3611
diff changeset
 11102
75f91a51b919 Allow #registerForFinalization for classes defining their own Lobby.
Stefan Vogel <sv@exept.de>
parents: 3611
diff changeset
 11103
finalize
7483
0690072b1c56 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 7482
diff changeset
 11104
    "some Image has been collected - nothing to do.
0690072b1c56 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 7482
diff changeset
 11105
0690072b1c56 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 7482
diff changeset
 11106
     The only reason we register Images is, that we can release
0690072b1c56 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 7482
diff changeset
 11107
     their device resources when a GraphicsDevice is closed.
0690072b1c56 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 7482
diff changeset
 11108
0690072b1c56 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 7482
diff changeset
 11109
     (#releaseResourcesOnDevice: at class side)."
3613
75f91a51b919 Allow #registerForFinalization for classes defining their own Lobby.
Stefan Vogel <sv@exept.de>
parents: 3611
diff changeset
 11110
! !
75f91a51b919 Allow #registerForFinalization for classes defining their own Lobby.
Stefan Vogel <sv@exept.de>
parents: 3611
diff changeset
 11111
0
48194c26a46c Initial revision
claus
parents:
diff changeset
 11112
!Image methodsFor:'image manipulations'!
48194c26a46c Initial revision
claus
parents:
diff changeset
 11113
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 11114
applyPixelValuesTo:pixelFunctionBlock in:aRectangle into:newImage
1570
1aeaa96fa6fb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1510
diff changeset
 11115
    "helper for withPixelFunctionAppliedToValues:
1aeaa96fa6fb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1510
diff changeset
 11116
     enumerate pixelValues and evaluate the block for each.
3911
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 11117
     Could be redefined by subclasses for better performance."
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 11118
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 11119
    |w   "{Class: SmallInteger }"
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 11120
     h   "{Class: SmallInteger }"
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 11121
     x0  "{Class: SmallInteger }"
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 11122
     y0  "{Class: SmallInteger }"
3911
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 11123
     y   "{Class: SmallInteger }"
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 11124
     newPixel newPixelRow pixelRow|
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 11125
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 11126
    x0 := aRectangle left.
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 11127
    y0 := aRectangle top.
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 11128
    w := aRectangle width.
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 11129
    h := aRectangle height.
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 11130
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 11131
    newPixelRow := Array new:w.
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 11132
    pixelRow := self pixelArraySpecies new:width.
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 11133
3911
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 11134
    (x0 = 0 and:[w = self width]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11135
        "/ slightly faster
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11136
        y := y0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11137
        h timesRepeat:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11138
            self rowAt:y into:pixelRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11139
            1 to:w do:[:runCol |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11140
                newPixel := pixelFunctionBlock
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11141
                                value:self
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11142
                                value:(pixelRow at:runCol)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11143
                                value:(runCol-1)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11144
                                value:y.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11145
                newPixelRow at:runCol put:newPixel.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11146
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11147
            newImage rowAt:y putAll:newPixelRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11148
            y := y + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11149
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11150
        ^ self.
3911
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 11151
    ].
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 11152
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 11153
    y := y0.
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 11154
    h timesRepeat:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11155
        self rowAt:y into:pixelRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11156
        1 to:w do:[:runCol |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11157
            newPixel := pixelFunctionBlock
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11158
                            value:self
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11159
                            value:(pixelRow at:runCol+x0)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11160
                            value:(runCol+x0-1)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11161
                            value:y.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11162
            newPixelRow at:runCol put:newPixel.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11163
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11164
        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
 11165
        newImage rowAt:y putAll:pixelRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11166
        y := y + 1.
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 11167
    ].
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 11168
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 11169
    "Modified: 24.4.1997 / 16:18:31 / cg"
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 11170
!
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 11171
3911
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 11172
applyPixelValuesTo:pixelFunctionBlock into:newImage
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 11173
    "helper for withPixelFunctionAppliedToValues:
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 11174
     enumerate pixelValues and evaluate the block for each."
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 11175
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 11176
    ^ self
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11177
        applyPixelValuesTo:pixelFunctionBlock
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11178
        in:(0@0 corner:width@height)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11179
        into:newImage
3911
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 11180
!
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 11181
3256
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 11182
blendWith:aColor
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 11183
    "return a new image which is blended with some color.
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 11184
     The receiver must be a palette image (currently).
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 11185
     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
 11186
     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
 11187
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 11188
     ^ self
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11189
        copyWithColorMapProcessing:[:clr | clr blendWith:aColor]
3256
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 11190
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 11191
    "
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 11192
     (Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') inspect
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 11193
     ((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
 11194
     ((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
 11195
     ((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
 11196
    "
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 11197
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 11198
    "Modified: 24.4.1997 / 18:31:23 / cg"
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 11199
!
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 11200
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11201
colorMapProcessing:aBlock
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11202
    "a helper for all kinds of colormap manipulations.
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 11203
     The argument, aBlock is called for every colormap entry,
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
 11204
     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
 11205
     For non-palette images, aBlock is called for every pixel value
e67d591cbebb #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8279
diff changeset
 11206
     (instead of colormap values), and the returned color is stored back
e67d591cbebb #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8279
diff changeset
 11207
     into the image).
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
 11208
     See examples in Image>>copyWithColorMapProcessing:"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11209
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11210
    |nColors "{ Class: SmallInteger }"|
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11211
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11212
    colorMap isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11213
        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
 11214
            self colorAtX:x y:y put:(aBlock value:clr)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11215
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11216
        ^ self
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11217
    ].
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11218
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11219
    nColors := colorMap size.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11220
    1 to:nColors do:[:index |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11221
        |clr|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11222
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11223
        clr := colorMap at:index.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11224
        clr notNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11225
            colorMap at:index put:(aBlock value:clr)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11226
        ]
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11227
    ]
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
 11228
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
 11229
    "Modified: 23.4.1996 / 11:13:55 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11230
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11231
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
 11232
copyWithColorMapProcessing:aBlock
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11233
    "a helper to create & return new images based on the receiver with
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
 11234
     some colorMap processing. The receiver is copied, and the copied images
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
 11235
     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
 11236
     which is called with the original color values. 
e67d591cbebb #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8279
diff changeset
 11237
     The block is supposed to return a color.
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11238
     CAVEAT: this only works with palette images (i.e. not for rgb or greyScale)"
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11239
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11240
    |newImage|
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11241
4414
2c0f2ca53156 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4390
diff changeset
 11242
    self colorMap isNil ifTrue:[
8282
e67d591cbebb #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8279
diff changeset
 11243
        ^ self withPixelFunctionApplied:[:orig :clr :x :y | aBlock value:clr]
e67d591cbebb #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8279
diff changeset
 11244
        "/ self error:'no colormap in image'.
e67d591cbebb #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8279
diff changeset
 11245
        "/ ^ nil
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11246
    ].
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11247
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11248
    "
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11249
     the code below manipulates the colormap.
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11250
     For non-palette images, special code is required
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11251
    "
4414
2c0f2ca53156 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4390
diff changeset
 11252
    newImage := self copy.
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
 11253
    newImage colorMapProcessing:aBlock.
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11254
    ^ newImage
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11255
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11256
    "
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11257
     leave red component only:
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11258
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 11259
     (Image fromFile:'goodies/bitmaps/gifImages/claus.gif')
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11260
        copyWithColorMapProcessing:[:clr | Color red:(clr red) green:0 blue:0]
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11261
    "
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
 11262
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11263
    "
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11264
     make it reddish:
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11265
6653
aa954269f3ce class: Image
Claus Gittinger <cg@exept.de>
parents: 6648
diff changeset
 11266
     |img imgYellow imgGreen imgBlue|
aa954269f3ce class: Image
Claus Gittinger <cg@exept.de>
parents: 6648
diff changeset
 11267
     img := (Image fromFile:'../../../expeccoNET/server/data/images/styles/eXept/defects.gif').
aa954269f3ce class: Image
Claus Gittinger <cg@exept.de>
parents: 6648
diff changeset
 11268
     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
 11269
     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
 11270
     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
 11271
     imgBlue
aa954269f3ce class: Image
Claus Gittinger <cg@exept.de>
parents: 6648
diff changeset
 11272
    "
aa954269f3ce class: Image
Claus Gittinger <cg@exept.de>
parents: 6648
diff changeset
 11273
aa954269f3ce class: Image
Claus Gittinger <cg@exept.de>
parents: 6648
diff changeset
 11274
    "
aa954269f3ce class: Image
Claus Gittinger <cg@exept.de>
parents: 6648
diff changeset
 11275
     make it reddish:
aa954269f3ce class: Image
Claus Gittinger <cg@exept.de>
parents: 6648
diff changeset
 11276
aa954269f3ce class: Image
Claus Gittinger <cg@exept.de>
parents: 6648
diff changeset
 11277
     (Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif')
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11278
        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
 11279
    "
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
 11280
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11281
    "
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11282
     invert:
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11283
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 11284
     (Image fromFile:'bitmaps/gifImages/claus.gif')
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11285
        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
 11286
    "
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
 11287
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11288
    "
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11289
     lighter:
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11290
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 11291
     (Image fromFile:'bitmaps/gifImages/claus.gif')
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11292
        copyWithColorMapProcessing:[:clr | |r g b|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11293
                                                r := clr red.  g := clr green.  b := clr blue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11294
                                                Color red:(r + (100-r//2))
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11295
                                                      green:(g + (100-g//2))
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11296
                                                      blue:(b + (100-b//2))]
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11297
    "
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
 11298
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11299
    "
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11300
     darker:
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11301
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 11302
     (Image fromFile:'bitmaps/gifImages/claus.gif')
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11303
        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
 11304
    "
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11305
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11306
    "Modified: 24.4.1997 / 18:28:05 / cg"
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11307
!
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 11308
3457
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 11309
createMask
7995
2538002b8ba4 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7990
diff changeset
 11310
    "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
 11311
    
3457
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 11312
    |maskArray bytesPerMaskRow|
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 11313
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 11314
    bytesPerMaskRow := (width+7) // 8.
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 11315
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 11316
    maskArray := ByteArray new:(bytesPerMaskRow * height) withAll:2r11111111.
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 11317
    mask := ImageMask width:width height:height fromArray:maskArray.
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 11318
    ^ mask
7907
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11319
7995
2538002b8ba4 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7990
diff changeset
 11320
    "Modified (comment): / 06-04-2017 / 13:05:42 / cg"
7907
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11321
!
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11322
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11323
createMaskForPixelValue:pixelValue
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11324
    "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
 11325
     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
 11326
     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
 11327
     instead of a separate mask plane.
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11328
     
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11329
     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
 11330
     redefine in concrete image classes (especially Depth8Image)"
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11331
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11332
    |mr|
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11333
    
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11334
    mask isNil ifTrue:[
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11335
        mask := self createMask.
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11336
    ].
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11337
    0 to:height-1 do:[:y |
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11338
        mr := mask rowAt:y.
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11339
        0 to:width-1 do:[:x |
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11340
            (self pixelAtX:x y:y) == pixelValue ifTrue:[
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11341
                mr at:x+1 put:0
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11342
            ].
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11343
        ].
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11344
        mask rowAt:y putAll:mr
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11345
    ].
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11346
b736986b5efc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7906
diff changeset
 11347
    "Created: / 17-02-2017 / 11:19:09 / cg"
3457
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 11348
!
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 11349
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11350
darkened
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11351
    "return a new image which is slightly darker than the receiver.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11352
     The receiver must be a palette image (currently).
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11353
     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
 11354
     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
 11355
5655
37bd5c7eb765 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 5643
diff changeset
 11356
     ^ self copyWithColorMapProcessing:[:clr | clr darkened]
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11357
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11358
    "
3256
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 11359
     (Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') inspect
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 11360
     (Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') darkened inspect
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11361
    "
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11362
5655
37bd5c7eb765 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 5643
diff changeset
 11363
    "Modified: / 24-11-2010 / 11:06:58 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11364
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11365
7534
0b7e23635791 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7529
diff changeset
 11366
easyRotateBitsInto:destinationImage angle:degrees
7523
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11367
    "helper for rotation - does the actual pixel shuffling.
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11368
     by degrees clockwise. Here, only 90, 180 and 270 degrees
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11369
     are implemented. Hard angles are done in #hardRotate:.
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11370
     The code here is depth-independent (but not too fast);
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11371
     can be redefined in subclasses for more performance"
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11372
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11373
    |w  "{Class: SmallInteger }"
7529
5f77a718b7bd #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7523
diff changeset
 11374
     h  "{Class: SmallInteger }" 
5f77a718b7bd #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7523
diff changeset
 11375
     pixelMover|
7523
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11376
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11377
    w := width - 1.
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11378
    h := height - 1.
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11379
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11380
    degrees = 90 ifTrue:[
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11381
        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
 11382
    ] ifFalse:[
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11383
        degrees = 180 ifTrue:[
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11384
            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
 11385
        ] ifFalse:[
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11386
            degrees = 270 ifTrue:[
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11387
                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
 11388
            ] ifFalse:[
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11389
                ^ self
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11390
            ].
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11391
        ].
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11392
    ].    
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11393
    self valuesFromX:0 y:0 toX:w y:h do:pixelMover.
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11394
    ^ self.
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11395
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11396
    "
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11397
     |i|
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11398
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11399
     i := Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif'.
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11400
     i inspect.
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11401
     (i rotated:45) inspect.
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11402
     (i rotated:90) inspect.
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11403
     (i rotated:180) inspect.
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11404
     (i rotated:270) inspect.
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11405
    "
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11406
    "
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11407
     |i|
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11408
     i := Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif'.
7529
5f77a718b7bd #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7523
diff changeset
 11409
     i := Depth24Image fromImage:i.
7523
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11410
     Time millisecondsToRun:[ 100 timesRepeat:[ i rotated:90 ] ]
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11411
    "
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11412
    "
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11413
     |i|
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11414
     i := Image fromScreen.
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11415
     Time millisecondsToRun:[ 20 timesRepeat:[ i rotated:90 ] ]
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11416
    "
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11417
    
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11418
    "Created: 23.4.1997 / 14:36:45 / cg"
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11419
    "Modified: 24.4.1997 / 17:26:26 / cg"
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11420
!
f51843b46318 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7522
diff changeset
 11421
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11422
flipHorizontal
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 11423
    "destructively inplace horizontal flip"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 11424
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 11425
    |h  "{Class: SmallInteger }"
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 11426
     pixelArray|
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 11427
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11428
    h := height - 1.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11429
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 11430
    pixelArray := self pixelArraySpecies new:width.
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 11431
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11432
    0 to:h do:[:row |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11433
        self rowAt:row into:pixelArray.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11434
        pixelArray reverse.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11435
        self rowAt:row putAll:pixelArray.
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 11436
    ].
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 11437
1386
51967fde82b7 also flip mask if present
Claus Gittinger <cg@exept.de>
parents: 1385
diff changeset
 11438
    mask notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11439
        mask flipHorizontal
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 11440
    ].
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 11441
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 11442
    "/ flush device info
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
 11443
    self release
1386
51967fde82b7 also flip mask if present
Claus Gittinger <cg@exept.de>
parents: 1385
diff changeset
 11444
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11445
    "
8303
a8f01dbe8e70 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8301
diff changeset
 11446
     (Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif') flipHorizontal inspect
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11447
    "
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11448
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11449
    "Modified: 24.4.1997 / 18:29:13 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11450
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11451
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11452
flipVertical
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11453
    "inplace vertical flip"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11454
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11455
    |h           "{Class: SmallInteger }"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11456
     bytesPerRow "{Class: SmallInteger }"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 11457
     buffer
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11458
     indexLow    "{Class: SmallInteger }"
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
 11459
     indexHi     "{Class: SmallInteger }"
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
 11460
     bytes|
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
 11461
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
 11462
    bytes := self bits.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11463
    bytesPerRow := self bytesPerRow.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11464
    buffer := ByteArray new:bytesPerRow.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11465
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11466
    h := height - 1.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11467
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11468
    indexLow := 1.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11469
    indexHi := bytesPerRow * h + 1.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11470
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11471
    0 to:(h // 2) do:[:row |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11472
        buffer replaceFrom:1 to:bytesPerRow with:bytes startingAt:indexLow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11473
        bytes replaceFrom:indexLow to:(indexLow + bytesPerRow - 1) with:bytes startingAt:indexHi.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11474
        bytes replaceFrom:indexHi to:(indexHi + bytesPerRow - 1) with:buffer startingAt:1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11475
        indexLow := indexLow + bytesPerRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11476
        indexHi := indexHi - bytesPerRow.
1386
51967fde82b7 also flip mask if present
Claus Gittinger <cg@exept.de>
parents: 1385
diff changeset
 11477
    ].
51967fde82b7 also flip mask if present
Claus Gittinger <cg@exept.de>
parents: 1385
diff changeset
 11478
    mask notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11479
        mask flipVertical
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11480
    ].
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11481
    "flush device info"
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
 11482
    self release
1386
51967fde82b7 also flip mask if present
Claus Gittinger <cg@exept.de>
parents: 1385
diff changeset
 11483
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11484
    "
3476
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 11485
     (Image fromFile:'goodies/bitmaps/gifImages/garfield.gif') flipVertical inspect
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11486
    "
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11487
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11488
    "Modified: 24.4.1997 / 18:29:36 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11489
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11490
1739
34165a3bb10b antiAliasing
Claus Gittinger <cg@exept.de>
parents: 1737
diff changeset
 11491
hardAntiAliasedMagnifiedBy:scalePoint
34165a3bb10b antiAliasing
Claus Gittinger <cg@exept.de>
parents: 1737
diff changeset
 11492
    "return a new image magnified and antiAliased by scalePoint, aPoint.
34165a3bb10b antiAliasing
Claus Gittinger <cg@exept.de>
parents: 1737
diff changeset
 11493
     This converts into a depth24Image before doing the antiAlias-magnify.
34165a3bb10b antiAliasing
Claus Gittinger <cg@exept.de>
parents: 1737
diff changeset
 11494
     It is definitely slower than the non antiAliasing/integral magnification methods."
34165a3bb10b antiAliasing
Claus Gittinger <cg@exept.de>
parents: 1737
diff changeset
 11495
8132
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11496
    ^ (Depth24Image fromImage:self) hardAntiAliasedMagnifiedBy:scalePoint
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11497
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11498
    "
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11499
     |i i1 i2|
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11500
     
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11501
     i := Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif'.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11502
     Transcript showCR:(
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11503
        Time millisecondsToRun:[
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11504
            i1 := i hardMagnifiedBy:3
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11505
        ]
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11506
     ).    
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11507
     i1 inspect.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11508
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11509
     Transcript showCR:(
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11510
        Time millisecondsToRun:[
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11511
            i2 := i hardAntiAliasedMagnifiedBy:3
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11512
        ]
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11513
     ).    
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11514
     i2 inspect.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11515
    "
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11516
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11517
    "Modified: / 02-06-1997 / 13:19:57 / cg"
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11518
    "Created: / 02-06-1997 / 15:53:34 / cg"
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11519
    "Modified (comment): / 30-08-2017 / 13:55:10 / cg"
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11520
!
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11521
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11522
hardMagnifiedBy:scaleArg
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11523
    "return a new image magnified by scalePoint, aPoint.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11524
     This is the general magnification method, handling non-integral values.
8132
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11525
     It is slower than the integral magnification method.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11526
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11527
     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
 11528
     at the corresponding original pixel's point, without taking neighbors into
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11529
     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
 11530
     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
 11531
     sharp lines."
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11532
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11533
    |scalePoint mX mY
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11534
     newWidth  "{ Class: SmallInteger }"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11535
     newHeight "{ Class: SmallInteger }"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11536
     w         "{ Class: SmallInteger }"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11537
     h         "{ Class: SmallInteger }"
906
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
 11538
     newImage newBits bitsPerPixel newBytesPerRow newMask
8132
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11539
     value srcRow pixelArray|
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11540
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11541
    scalePoint := scaleArg asPoint. 
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11542
    mX := scalePoint x.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11543
    mY := scalePoint y.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11544
    ((mX < 0) or:[mY < 0]) ifTrue:[^ nil].
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11545
    ((mX = 1) and:[mY = 1]) ifTrue:[^ self].
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11546
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11547
    newWidth := (width * mX) truncated.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11548
    newHeight := (height * mY) truncated.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11549
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11550
    bitsPerPixel := self depth.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11551
    newBytesPerRow := ((newWidth * bitsPerPixel) + 7) // 8.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11552
    newBits := ByteArray uninitializedNew:(newBytesPerRow * newHeight).
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11553
906
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
 11554
    mask notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11555
        newMask := (mask magnifiedBy:scalePoint)
906
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
 11556
    ].
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
 11557
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11558
    newImage := self species new.
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 11559
    newImage
8132
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11560
        width:newWidth height:newHeight photometric:photometric
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11561
        samplesPerPixel:samplesPerPixel bitsPerSample:bitsPerSample
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11562
        colorMap:colorMap copy
8132
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11563
        bits:newBits mask:newMask.
905
228d503775d9 everywhere you go: always magnify the mask with you ...
Claus Gittinger <cg@exept.de>
parents: 904
diff changeset
 11564
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11565
    "walk over destination image fetching pixels from source image"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11566
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11567
    w := newWidth - 1.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11568
    h := newHeight - 1.
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 11569
    pixelArray := newImage pixelArraySpecies new:newWidth.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11570
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11571
    0 to:h do:[:row |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11572
        srcRow := (row // mY).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11573
        0 to:w do:[:col |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11574
            value := self pixelAtX:(col // mX) y:srcRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11575
            pixelArray at:(col+1) put:value.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11576
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11577
        newImage rowAt:row putAll:pixelArray.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11578
    ].
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11579
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11580
    ^ newImage
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11581
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 11582
    "
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 11583
     |i|
8132
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11584
     i := Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif'.
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 11585
     Time millisecondsToRun:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11586
         i := i hardMagnifiedBy:0.5@0.5
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11587
     ].
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11588
     i
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11589
    "
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 11590
8132
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11591
    "Modified (comment): / 30-08-2017 / 13:31:20 / cg"
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11592
!
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11593
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11594
hardMagnifiedBy:scaleArg smooth:smoothBoolean
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11595
    "return a new image magnified by scalePoint, aPoint.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11596
     This is the general magnification method, handling non-integral values.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11597
     It is slower than the integral magnification method.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11598
     
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11599
     If smoothBoolean is true, an improved algorithm is used, 
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11600
     which averages the pixels if shrinking or interpolates if expanding 
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11601
     (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
 11602
     images when the original contains sharp lines.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11603
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11604
     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
 11605
     but produces ugly magnifications (and especially: ugly shrunk versions)
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11606
     "
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11607
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11608
    smoothBoolean ifFalse:[
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11609
        ^ self hardMagnifiedBy:scaleArg
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11610
    ].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11611
    ^ self hardSmoothingMagnifiedBy:scaleArg
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11612
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11613
    "Created: / 30-08-2017 / 13:29:22 / cg"
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 11614
    "Modified: / 30-08-2017 / 15:04:48 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11615
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11616
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 11617
hardRotated:degrees
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11618
    "return a new image from the old one, by rotating the image
4953
b5017336aa26 comment
Claus Gittinger <cg@exept.de>
parents: 4952
diff changeset
 11619
     degrees clockwise (around its center).
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11620
     Warning: the returned image will be larger than the original image."
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11621
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11622
    |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
 11623
     newImage
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11624
     newWidth  "{ Class: SmallInteger }"
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11625
     newHeight "{ Class: SmallInteger }"
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11626
     myDepth   "{ Class: SmallInteger }"
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11627
     newBytesPerRow newBits
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11628
     blackPixel halfW halfH radians t bad
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11629
     bytesPerRow maskBits
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11630
     pX pY srcX srcY pix nX nY newMask|
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 11631
4108
117f170e2122 Use #theta inseat of obsolete #angle.
Stefan Vogel <sv@exept.de>
parents: 4033
diff changeset
 11632
    radians := degrees degreesToRadians.
117f170e2122 Use #theta inseat of obsolete #angle.
Stefan Vogel <sv@exept.de>
parents: 4033
diff changeset
 11633
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11634
    "/ placing the image at the origin,
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11635
    "/ compute the diagonal and angle.
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11636
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11637
    p := ((width - 1) / 2) @ ((height - 1) / 2).
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11638
    r := p r.
4108
117f170e2122 Use #theta inseat of obsolete #angle.
Stefan Vogel <sv@exept.de>
parents: 4033
diff changeset
 11639
    a := p theta.
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11640
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 11641
    "/ add the rotation
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11642
    "/ (sigh - subtract, we defined things clockwise ...
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11643
    "/  ... in contrast to point which thinks counter-clockwise)
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11644
4108
117f170e2122 Use #theta inseat of obsolete #angle.
Stefan Vogel <sv@exept.de>
parents: 4033
diff changeset
 11645
    aN := a - radians.
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11646
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11647
    "/ compute new corner points
4108
117f170e2122 Use #theta inseat of obsolete #angle.
Stefan Vogel <sv@exept.de>
parents: 4033
diff changeset
 11648
    p1 := Point r:r theta:aN.         "/ rotated topRight
117f170e2122 Use #theta inseat of obsolete #angle.
Stefan Vogel <sv@exept.de>
parents: 4033
diff changeset
 11649
    p2 := Point r:r theta:aN-a-a.     "/ rotated bottomRight
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11650
    p3 := p1 negated.                 "/ rotated bottomLeft
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11651
    p4 := p2 negated.                 "/ rotated topLeft
1638
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
    "/ compute the boundary of the new image
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11654
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11655
    maxX := minX := p1 x.
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11656
    (t := p2 x) > maxX ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11657
        maxX := t
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11658
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11659
        t < minX ifTrue:[minX := t].
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11660
    ].
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11661
    (t := p3 x) > maxX ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11662
        maxX := t
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11663
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11664
        t < minX ifTrue:[minX := t].
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11665
    ].
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11666
    (t := p4 x) > maxX ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11667
        maxX := t
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11668
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11669
        t < minX ifTrue:[minX := t].
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11670
    ].
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11671
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11672
    maxY := minY := p1 y.
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11673
    (t := p2 y) > maxY ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11674
        maxY := t
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11675
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11676
        t < minY ifTrue:[minY := t].
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
    (t := p3 y) > maxY ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11679
        maxY := t
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11680
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11681
        t < minY ifTrue:[minY := t].
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11682
    ].
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11683
    (t := p4 y) > maxY ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11684
        maxY := t
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11685
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11686
        t < minY ifTrue:[minY := t].
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11687
    ].
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11688
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11689
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11690
    newWidth := (maxX - minX) rounded + 1.
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11691
    newHeight := (maxY - minY) rounded + 1.
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11692
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11693
    myDepth := self depth.
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11694
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11695
    mask notNil ifTrue:[
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11696
        newMask := mask rotated:degrees.
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11697
    ] ifFalse:[
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11698
        (myDepth ~~ 1 and:[self isMask not]) ifTrue:[
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11699
            newMask := ImageMask width:width height:height.
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11700
            newMask bits:(maskBits := ByteArray new:(newMask bytesPerRow * height)).
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11701
            maskBits atAllPut:16rFF.
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11702
            newMask := newMask rotated:degrees.
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11703
        ].
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11704
    ].
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11705
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11706
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11707
    newImage := self species new.
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11708
    newImage 
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11709
        width:newWidth
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11710
        height:newHeight
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11711
        photometric:photometric
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11712
        samplesPerPixel:samplesPerPixel
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11713
        bitsPerSample:bitsPerSample
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11714
        colorMap:colorMap copy
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11715
        bits:nil
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11716
        mask:newMask;
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11717
        maskedPixelsAre0:self maskedPixelsAre0;
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11718
        createPixelStore.
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11719
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11720
    newBytesPerRow := newImage bytesPerRow.
3912
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
 11721
    newBits := newImage bits.
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11722
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11723
    (myDepth == 1 or:[self maskedPixelsAre0 or:[self isMask]]) ifTrue:[
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11724
        blackPixel := 0.
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11725
    ] ifFalse:[
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11726
        blackPixel := self valueFromColor:Color black.
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11727
        blackPixel isNil ifTrue:[
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11728
            blackPixel := self valueFromColor:Color white.
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11729
            blackPixel isNil ifTrue:[
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11730
                blackPixel := 0.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11731
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11732
        ]
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11733
    ].
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11734
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11735
"/ already filled with 0
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11736
"/    newBits atAllPut:0.
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11737
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11738
    "/ now, walk over destination pixels,
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 11739
    "/ fetching from source.
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 11740
    "/ (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
 11741
    "/  in the destination image ...)
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11742
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11743
    halfW := (width - 1) / 2.0.
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11744
    halfH := (height - 1) / 2.0.
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11745
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11746
    bytesPerRow := self bytesPerRow.
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11747
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11748
%{
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 11749
    double sin(), cos();
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11750
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11751
    bad = true;
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11752
    if (1
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 11753
     && __isFloat(minX)
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11754
     && __isFloat(minY)
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11755
     && __isFloat(radians)
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11756
     && __isFloat(halfW)
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11757
     && __isFloat(halfH)
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11758
     && __isByteArray(newBits)
5476
06e08505bc6f __isByteArray() to __isByteArrayLike() in primitive code
Stefan Vogel <sv@exept.de>
parents: 5352
diff changeset
 11759
     && __isByteArrayLike(__INST(bytes))) {
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11760
        int __dstX, __dstY, __dstMask;
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11761
        unsigned char *__dstPtr;
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11762
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11763
        int __newHeight = __intVal(newHeight);
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11764
        int __newWidth = __intVal(newWidth);
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11765
        int __height = __intVal(__INST(height));
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11766
        int __width = __intVal(__INST(width));
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11767
        int __depth = __intVal(myDepth);
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11768
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11769
        unsigned char *__srcBytes = __ByteArrayInstPtr(__INST(bytes))->ba_element;
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11770
        unsigned char *__dstBytes = __ByteArrayInstPtr(newBits)->ba_element;
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11771
        int __nSrcBytes = __byteArraySize(__INST(bytes));
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11772
        int __nDstBytes = __byteArraySize(newBits);
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11773
        int __srcBytesPerRow = __intVal(bytesPerRow);
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11774
        int __dstBytesPerRow = __intVal(newBytesPerRow);
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11775
        int __blackPixel = __intVal(blackPixel);
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11776
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11777
        double __radians = - __floatVal(radians);   /* sigh: clock-wise */
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11778
        double __sin = sin(__radians);
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11779
        double __cos = cos(__radians);
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11780
        double __minX = __floatVal(minX);
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11781
        double __minY = __floatVal(minY);
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11782
        double __halfW = __floatVal(halfW);
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11783
        double __halfH = __floatVal(halfH);
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11784
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11785
        unsigned char *__dstRowPtr = __dstBytes;
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 11786
        unsigned char *__dstEndPtr = __dstBytes + __nDstBytes;
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 11787
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 11788
#       define EARLY_OUT
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 11789
#       define FAST_ADVANCE 5
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 11790
#       define FAST_ADVANCE2
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 11791
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11792
        switch (__depth) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11793
            case 8:
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11794
                for (__dstY = 0; __dstY < __newHeight; __dstY++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11795
                    double __pY, __sinPY, __cosPY;
1639
c47081269ada faster rotation - early break from loop
Claus Gittinger <cg@exept.de>
parents: 1638
diff changeset
 11796
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11797
                    int didFetchInRow = 0;
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 11798
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11799
                    __pY = (double)(__dstY + __minY);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11800
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11801
                    __sinPY = __sin * __pY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11802
                    __cosPY = __cos * __pY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11803
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11804
                    __dstPtr = __dstRowPtr;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11805
                    __dstRowPtr += __dstBytesPerRow;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11806
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11807
                    for (__dstX = 0; __dstX < __newWidth; __dstX++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11808
                        double __pX, __nX;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11809
                        unsigned __pix;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11810
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11811
                        /* translate X in destination (center to 0/0) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11812
                        __pX = (double)(__dstX + __minX);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11813
                        /* rotate X */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11814
                        __nX = (__cos * __pX) - __sinPY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11815
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11816
                        /* translate X in source (origin to 0/0) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11817
                        __nX = __nX + __halfW + 0.5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11818
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11819
                        /* inside ? */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11820
                        if (__nX < 0) {
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 11821
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11822
                            if (didFetchInRow) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11823
                                break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11824
                            }
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 11825
#endif
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 11826
#ifdef FAST_ADVANCE
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11827
                            if (__blackPixel == 0) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11828
                                do {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11829
                                    /* try advance by FAST_ADVANCE pixels ... */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11830
                                    __dstX += FAST_ADVANCE; __dstPtr += FAST_ADVANCE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11831
                                    if (__dstX >= __newWidth) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11832
                                        break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11833
                                    }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11834
                                    __pX = (double)(__dstX + __minX);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11835
                                    __nX = (__cos * __pX) - __sinPY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11836
                                    __nX = __nX + __halfW + 0.5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11837
                                } while (__nX < 0);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11838
                                __dstX -= FAST_ADVANCE; __dstPtr -= FAST_ADVANCE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11839
                            }
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 11840
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11841
                            __pix = __blackPixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11842
                        } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11843
                            int __srcX;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11844
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11845
                            __srcX = (int)__nX;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11846
                            /* inside ? */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11847
                            if (__srcX >= __width) {
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 11848
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11849
                                if (didFetchInRow) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11850
                                    break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11851
                                }
1639
c47081269ada faster rotation - early break from loop
Claus Gittinger <cg@exept.de>
parents: 1638
diff changeset
 11852
#endif
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 11853
#ifdef FAST_ADVANCE2
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11854
                                if (__blackPixel == 0) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11855
                                    do {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11856
                                        /* try advance by FAST_ADVANCE pixels ... */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11857
                                        __dstX += FAST_ADVANCE; __dstPtr += FAST_ADVANCE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11858
                                        if (__dstX >= __newWidth) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11859
                                            break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11860
                                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11861
                                        __pX = (double)(__dstX + __minX);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11862
                                        __nX = (__cos * __pX) - __sinPY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11863
                                        __nX = __nX + __halfW + 0.5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11864
                                        __srcX = (int)__nX;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11865
                                    } while (__srcX >= __width);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11866
                                    __dstX -= FAST_ADVANCE; __dstPtr -= FAST_ADVANCE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11867
                                }
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 11868
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11869
                                __pix = __blackPixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11870
                            } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11871
                                double __nY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11872
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11873
                                /* rotate Y */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11874
                                __nY = (__sin * __pX) + __cosPY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11875
                                /* translate Y in source (origin to 0/0) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11876
                                __nY = __nY + __halfH + 0.5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11877
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11878
                                /* inside ? */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11879
                                if (__nY < 0) {
1639
c47081269ada faster rotation - early break from loop
Claus Gittinger <cg@exept.de>
parents: 1638
diff changeset
 11880
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11881
                                    if (didFetchInRow) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11882
                                        break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11883
                                    }
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 11884
#endif
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 11885
#ifdef FAST_ADVANCE2
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11886
                                    if (__blackPixel == 0) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11887
                                        do {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11888
                                            /* try advance by FAST_ADVANCE pixels ... */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11889
                                            __dstX += FAST_ADVANCE; __dstPtr += FAST_ADVANCE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11890
                                            if (__dstX >= __newWidth) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11891
                                                break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11892
                                            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11893
                                            __pX = (double)(__dstX + __minX);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11894
                                            __nY = (__sin * __pX) + __cosPY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11895
                                            __nY = __nY + __halfH + 0.5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11896
                                        } while (__nY < 0);
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
                                    }
1639
c47081269ada faster rotation - early break from loop
Claus Gittinger <cg@exept.de>
parents: 1638
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
                                    int __srcY;
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
                                    __srcY = (int)__nY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11905
                                    /* inside ? */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11906
                                    if (__srcY >= __height) {
1639
c47081269ada faster rotation - early break from loop
Claus Gittinger <cg@exept.de>
parents: 1638
diff changeset
 11907
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11908
                                        if (didFetchInRow) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11909
                                            break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11910
                                        }
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 11911
#endif
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 11912
#ifdef FAST_ADVANCE
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11913
                                        if (__blackPixel == 0) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11914
                                            do {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11915
                                                /* try advance by FAST_ADVANCE pixels ... */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11916
                                                __dstX += FAST_ADVANCE; __dstPtr += FAST_ADVANCE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11917
                                                if (__dstX >= __newWidth) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11918
                                                    break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11919
                                                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11920
                                                __pX = (double)(__dstX + __minX);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11921
                                                __nY = (__sin * __pX) + __cosPY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11922
                                                __nY = __nY + __halfH + 0.5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11923
                                                __srcY = (int)__nY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11924
                                            } while (__srcY >= __height);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11925
                                            __dstX -= FAST_ADVANCE; __dstPtr -= FAST_ADVANCE;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11926
                                        }
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 11927
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11928
                                        __pix = __blackPixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11929
                                    } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11930
                                        /* fetch source pixel */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11931
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11932
                                        int idx;
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 11933
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11934
                                        didFetchInRow = 1;
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 11935
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11936
                                        idx = __srcY * __srcBytesPerRow + __srcX;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11937
                                        if ((unsigned)idx < __nSrcBytes) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11938
                                            __pix = __srcBytes[idx];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11939
                                        } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11940
                                            __pix = __blackPixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11941
                                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11942
                                    }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11943
                                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11944
                            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11945
                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11946
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11947
                        if (__pix != 0) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11948
                            *__dstPtr = __pix;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11949
                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11950
                        __dstPtr++;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11951
                    }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11952
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11953
                break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11954
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11955
            case 1:
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11956
                for (__dstY = 0; __dstY < __newHeight; __dstY++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11957
                    double __pY, __sinPY, __cosPY;
1639
c47081269ada faster rotation - early break from loop
Claus Gittinger <cg@exept.de>
parents: 1638
diff changeset
 11958
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11959
                    int didFetchInRow = 0;
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 11960
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11961
                    __pY = (double)(__dstY + __minY);
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
                    __sinPY = __sin * __pY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11964
                    __cosPY = __cos * __pY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11965
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11966
                    __dstPtr = __dstRowPtr;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11967
                    __dstMask = 0x80;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11968
                    __dstRowPtr += __dstBytesPerRow;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11969
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11970
                    for (__dstX = 0; __dstX < __newWidth; __dstX++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11971
                        double __pX, __nX;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11972
                        int __pix;
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
                        /* translate X in destination (center to 0/0) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11975
                        __pX = (double)(__dstX + __minX);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11976
                        /* rotate X */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11977
                        __nX = (__cos * __pX) - __sinPY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11978
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11979
                        /* translate X in source (origin to 0/0) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11980
                        __nX = __nX + __halfW + 0.5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11981
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11982
                        /* inside ? */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11983
                        if (__nX < 0) {
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 11984
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11985
                            if (didFetchInRow) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11986
                                break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11987
                            }
1653
7ab13998d4cd d24 rotation fixed
Claus Gittinger <cg@exept.de>
parents: 1650
diff changeset
 11988
#endif
7ab13998d4cd d24 rotation fixed
Claus Gittinger <cg@exept.de>
parents: 1650
diff changeset
 11989
#ifdef FAST_ADVANCE
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11990
                            if (__blackPixel == 0) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11991
                                do {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11992
                                    /* try advance by 8 pixels ... */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11993
                                    __dstX += 8; __dstPtr ++;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11994
                                    if (__dstX >= __newWidth) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11995
                                        break;
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
                                    __pX = (double)(__dstX + __minX);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11998
                                    __nX = (__cos * __pX) - __sinPY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 11999
                                    __nX = __nX + __halfW + 0.5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12000
                                } while (__nX < 0);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12001
                                __dstX -= 8; __dstPtr--;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12002
                            }
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12003
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12004
                            __pix = __blackPixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12005
                        } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12006
                            int __srcX;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12007
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12008
                            __srcX = (int)__nX;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12009
                            /* inside ? */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12010
                            if (__srcX >= __width) {
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12011
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12012
                                if (didFetchInRow) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12013
                                    break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12014
                                }
1653
7ab13998d4cd d24 rotation fixed
Claus Gittinger <cg@exept.de>
parents: 1650
diff changeset
 12015
#endif
7ab13998d4cd d24 rotation fixed
Claus Gittinger <cg@exept.de>
parents: 1650
diff changeset
 12016
#ifdef FAST_ADVANCE2
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12017
                                if (__blackPixel == 0) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12018
                                    do {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12019
                                        /* try advance by 8 pixels ... */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12020
                                        __dstX += 8; __dstPtr++;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12021
                                        if (__dstX >= __newWidth) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12022
                                            break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12023
                                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12024
                                        __pX = (double)(__dstX + __minX);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12025
                                        __nX = (__cos * __pX) - __sinPY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12026
                                        __nX = __nX + __halfW + 0.5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12027
                                        __srcX = (int)__nX;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12028
                                    } while (__srcX >= __width);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12029
                                    __dstX -= 8; __dstPtr--;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12030
                                }
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12031
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12032
                                __pix = __blackPixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12033
                            } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12034
                                double __nY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12035
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12036
                                /* rotate Y */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12037
                                __nY = (__sin * __pX) + __cosPY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12038
                                /* translate Y in source (origin to 0/0) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12039
                                __nY = __nY + __halfH + 0.5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12040
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12041
                                /* inside ? */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12042
                                if (__nY < 0) {
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12043
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12044
                                    if (didFetchInRow) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12045
                                        break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12046
                                    }
1653
7ab13998d4cd d24 rotation fixed
Claus Gittinger <cg@exept.de>
parents: 1650
diff changeset
 12047
#endif
7ab13998d4cd d24 rotation fixed
Claus Gittinger <cg@exept.de>
parents: 1650
diff changeset
 12048
#ifdef FAST_ADVANCE2
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12049
                                    if (__blackPixel == 0) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12050
                                        do {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12051
                                            /* try advance by 8 pixels ... */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12052
                                            __dstX += 8; __dstPtr++;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12053
                                            if (__dstX >= __newWidth) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12054
                                                break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12055
                                            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12056
                                            __pX = (double)(__dstX + __minX);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12057
                                            __nY = (__sin * __pX) + __cosPY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12058
                                            __nY = __nY + __halfH + 0.5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12059
                                        } while (__nY < 0);
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
                                    int __srcY;
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
                                    __srcY = (int)__nY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12068
                                    /* inside ? */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12069
                                    if (__srcY >= __height) {
1639
c47081269ada faster rotation - early break from loop
Claus Gittinger <cg@exept.de>
parents: 1638
diff changeset
 12070
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12071
                                        if (didFetchInRow) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12072
                                            break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12073
                                        }
1653
7ab13998d4cd d24 rotation fixed
Claus Gittinger <cg@exept.de>
parents: 1650
diff changeset
 12074
#endif
7ab13998d4cd d24 rotation fixed
Claus Gittinger <cg@exept.de>
parents: 1650
diff changeset
 12075
#ifdef FAST_ADVANCE
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12076
                                        if (__blackPixel == 0) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12077
                                            do {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12078
                                                /* try advance by 8 pixels ... */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12079
                                                __dstX += 8; __dstPtr++;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12080
                                                if (__dstX >= __newWidth) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12081
                                                    break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12082
                                                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12083
                                                __pX = (double)(__dstX + __minX);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12084
                                                __nY = (__sin * __pX) + __cosPY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12085
                                                __nY = __nY + __halfH + 0.5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12086
                                                __srcY = (int)__nY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12087
                                            } while (__srcY >= __height);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12088
                                            __dstX -= 8; __dstPtr--;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12089
                                        }
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 12090
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12091
                                        __pix = __blackPixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12092
                                    } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12093
                                        /* fetch source pixel */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12094
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12095
                                        int idx, pV;
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 12096
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12097
                                        didFetchInRow = 1;
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 12098
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12099
                                        idx = __srcY * __srcBytesPerRow + (__srcX >> 3);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12100
                                        if ((unsigned)idx < __nSrcBytes) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12101
                                            pV = __srcBytes[idx];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12102
                                            __pix = (pV & (0x80 >> (__srcX & 7))) ? 1 : 0;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12103
                                        } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12104
                                            __pix = __blackPixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12105
                                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12106
                                    }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12107
                                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12108
                            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12109
                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12110
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12111
                        /* store pixel */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12112
                        if (__pix != 0) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12113
                            *__dstPtr |= __dstMask;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12114
                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12115
                        __dstMask >>= 1;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12116
                        if (__dstMask == 0) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12117
                            __dstMask = 0x80;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12118
                            __dstPtr++;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12119
                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12120
                    }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12121
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12122
                break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12123
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12124
            case 24:
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12125
                for (__dstY = 0; __dstY < __newHeight; __dstY++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12126
                    double __pY, __sinPY, __cosPY;
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
                    int didFetchInRow = 0;
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
                    __pY = (double)(__dstY + __minY);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12131
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12132
                    __sinPY = __sin * __pY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12133
                    __cosPY = __cos * __pY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12134
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12135
                    __dstPtr = __dstRowPtr;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12136
                    __dstRowPtr += __dstBytesPerRow;
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
                    for (__dstX = 0; __dstX < __newWidth; __dstX++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12139
                        double __pX, __nX;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12140
                        unsigned __pix;
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
                        /* translate X in destination (center to 0/0) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12143
                        __pX = (double)(__dstX + __minX);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12144
                        /* rotate X */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12145
                        __nX = (__cos * __pX) - __sinPY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12146
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12147
                        /* translate X in source (origin to 0/0) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12148
                        __nX = __nX + __halfW + 0.5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12149
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12150
                        /* inside ? */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12151
                        if (__nX < 0) {
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 12152
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12153
                            if (didFetchInRow) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12154
                                break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12155
                            }
1639
c47081269ada faster rotation - early break from loop
Claus Gittinger <cg@exept.de>
parents: 1638
diff changeset
 12156
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12157
                            __pix = __blackPixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12158
                        } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12159
                            int __srcX;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12160
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12161
                            __srcX = (int)__nX;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12162
                            /* inside ? */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12163
                            if (__srcX >= __width) {
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12164
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12165
                                if (didFetchInRow) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12166
                                    break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12167
                                }
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12168
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12169
                                __pix = __blackPixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12170
                            } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12171
                                double __nY;
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
                                /* rotate Y */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12174
                                __nY = (__sin * __pX) + __cosPY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12175
                                /* translate Y in source (origin to 0/0) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12176
                                __nY = __nY + __halfH + 0.5;
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
                                /* inside ? */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12179
                                if (__nY < 0) {
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 12180
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12181
                                    if (didFetchInRow) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12182
                                        break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12183
                                    }
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12184
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12185
                                    __pix = __blackPixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12186
                                } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12187
                                    int __srcY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12188
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12189
                                    __srcY = (int)__nY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12190
                                    /* inside ? */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12191
                                    if (__srcY >= __height) {
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12192
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12193
                                        if (didFetchInRow) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12194
                                            break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12195
                                        }
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12196
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12197
                                        __pix = __blackPixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12198
                                    } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12199
                                        /* fetch source pixel */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12200
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12201
                                        int idx;
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12202
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12203
                                        didFetchInRow = 1;
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 12204
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12205
                                        idx = __srcY * __srcBytesPerRow + __srcX + __srcX + __srcX;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12206
                                        if ((unsigned)idx < __nSrcBytes) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12207
                                            __pix = __srcBytes[idx];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12208
                                            __pix = (__pix<<8) | __srcBytes[idx+1];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12209
                                            __pix = (__pix<<8) | __srcBytes[idx+2];
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12210
                                        } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12211
                                            __pix = __blackPixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12212
                                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12213
                                    }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12214
                                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12215
                            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12216
                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12217
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12218
                        /* store pixel */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12219
                        if (__pix != 0) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12220
                            __dstPtr[0] = (__pix >> 16 & 0xFF);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12221
                            __dstPtr[1] = (__pix >> 8) & 0xFF;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12222
                            __dstPtr[2] = __pix & 0xFF;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12223
                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12224
                        __dstPtr += 3;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12225
                    }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12226
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12227
                break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12228
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12229
            default:
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12230
                for (__dstY = 0; __dstY < __newHeight; __dstY++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12231
                    double __pY, __sinPY, __cosPY;
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 12232
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12233
                    int didFetchInRow = 0;
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 12234
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12235
                    __pY = (double)(__dstY + __minY);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12236
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12237
                    __sinPY = __sin * __pY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12238
                    __cosPY = __cos * __pY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12239
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12240
                    __dstPtr = __dstRowPtr;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12241
                    __dstMask = 0x80;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12242
                    __dstRowPtr += __dstBytesPerRow;
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
                    for (__dstX = 0; __dstX < __newWidth; __dstX++) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12245
                        double __pX, __nX;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12246
                        OBJ __pix;
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
                        /* translate X in destination (center to 0/0) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12249
                        __pX = (double)(__dstX + __minX);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12250
                        /* rotate X */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12251
                        __nX = (__cos * __pX) - __sinPY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12252
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12253
                        /* translate X in source (origin to 0/0) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12254
                        __nX = __nX + __halfW + 0.5;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12255
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12256
                        /* inside ? */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12257
                        if (__nX < 0) {
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 12258
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12259
                            if (didFetchInRow) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12260
                                break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12261
                            }
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 12262
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12263
                            __pix = blackPixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12264
                        } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12265
                            int __srcX;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12266
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12267
                            __srcX = (int)__nX;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12268
                            /* inside ? */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12269
                            if (__srcX >= __width) {
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 12270
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12271
                                if (didFetchInRow) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12272
                                    break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12273
                                }
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 12274
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12275
                                __pix = blackPixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12276
                            } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12277
                                double __nY;
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
                                /* rotate Y */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12280
                                __nY = (__sin * __pX) + __cosPY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12281
                                /* translate Y in source (origin to 0/0) */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12282
                                __nY = __nY + __halfH + 0.5;
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
                                /* inside ? */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12285
                                if (__nY < 0) {
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 12286
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12287
                                    if (didFetchInRow) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12288
                                        break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12289
                                    }
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 12290
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12291
                                    __pix = blackPixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12292
                                } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12293
                                    int __srcY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12294
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12295
                                    __srcY = (int)__nY;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12296
                                    /* inside ? */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12297
                                    if (__srcY >= __height) {
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 12298
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12299
                                        if (didFetchInRow) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12300
                                            break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12301
                                        }
1642
c14ef12246aa improved hardRotate
Claus Gittinger <cg@exept.de>
parents: 1640
diff changeset
 12302
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12303
                                        __pix = blackPixel;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12304
                                    } else {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12305
                                        /* fetch source pixel */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12306
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12307
                                        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
 12308
#ifdef EARLY_OUT
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12309
                                        didFetchInRow = 1;
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12310
#endif
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12311
                                        __pix = (*valAt.ilc_func)(self,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12312
                                                              @symbol(pixelAtX:y:),
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12313
                                                              nil, &valAt,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12314
                                                              __MKSMALLINT(__srcX),
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12315
                                                              __MKSMALLINT(__srcY));
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12316
                                    }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12317
                                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12318
                            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12319
                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12320
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12321
                        /* store pixel */
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12322
                        {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12323
                            static struct inlineCache atPutVal = _ILC3;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12324
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12325
                            if (__pix != __MKSMALLINT(0)) {
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12326
                                (*atPutVal.ilc_func)(newImage,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12327
                                                      @symbol(pixelAtX:y:put:),
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12328
                                                      nil, &atPutVal,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12329
                                                      __MKSMALLINT(__dstX),
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12330
                                                      __MKSMALLINT(__dstY),
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12331
                                                      __pix
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12332
                                                     );
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12333
                            }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12334
                        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12335
                    }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12336
                }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12337
                break;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12338
        }
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12339
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12340
        bad = false;
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12341
    }
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12342
%}.
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12343
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12344
    bad ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12345
        "/ should not happen
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12346
        self primitiveFailed
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12347
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12348
"/        sinRot := radians negated sin.
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12349
"/        cosRot := radians negated cos.
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12350
"/
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12351
"/        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
 12352
"/            pY := (dstY + minY).
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12353
"/            sinPY := (sinRot * pY).
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12354
"/            cosPY := (cosRot * pY).
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12355
"/
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12356
"/            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
 12357
"/
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12358
"/                "/ translate center to origin
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12359
"/                pX := (dstX + minX).
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12360
"/
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12361
"/                nX := (cosRot * pX) - sinPY.
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12362
"/
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12363
"/                "/ translate in source
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12364
"/                srcX := nX + halfW.
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12365
"/                srcX := srcX rounded.
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12366
"/                "/ inside ?
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12367
"/
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12368
"/                (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
 12369
"/                    nY := (sinRot * pX) + cosPY.
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12370
"/                    srcY := nY + halfH.
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12371
"/                    srcY := srcY rounded.
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12372
"/
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12373
"/                    "/ inside ?
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12374
"/                    (srcY >= 0 and:[srcY < height]) ifTrue:[
1660
67a3a6eab23a pixel accessing methods cleaned up
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
 12375
"/                        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
 12376
"/                    ] ifFalse:[
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 12377
"/                        pix := blackPixel.
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
"/                ] ifFalse:[
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 12380
"/                    pix := blackPixel.
1650
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
"/                pix ~~ blackPixel ifTrue:[
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 12383
"/                    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
 12384
"/                ]
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12385
"/            ].
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 12386
"/        ].
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12387
    ].
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12388
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12389
    ^ newImage
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12390
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12391
    "
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12392
     |i|
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12393
7906
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 12394
     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
 12395
     i inspect.
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12396
     (i rotated:45) inspect.
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12397
     (i rotated:90) inspect.
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12398
     (i rotated:91) inspect.
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12399
     (i rotated:95) inspect.
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12400
    "
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12401
    "
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12402
     |i|
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12403
7906
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 12404
     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
 12405
     i := Depth24Image fromImage:i.
7ab13998d4cd d24 rotation fixed
Claus Gittinger <cg@exept.de>
parents: 1650
diff changeset
 12406
     (i rotated:200) inspect
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12407
    "
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12408
    "
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12409
     |i|
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12410
7906
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 12411
     i := Smalltalk imageFromFileNamed:'../../goodies/bitmaps/gifImages/garfield.gif' inPackage:'stx:goodies'.
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12412
     Transcript showCR:(
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12413
        Time millisecondsToRun:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12414
           i rotated:45.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12415
        ]
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12416
     ).
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12417
    "
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
     |v i rI rot|
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12420
7906
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 12421
     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
 12422
     v := View new extent:(i width max:100)@(i height max:100).
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12423
     v openAndWait.
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12424
     rot := 0.
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12425
     [true] whileTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12426
        rI := i rotated:rot.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12427
        rI := rI onDevice:v device.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12428
        v clear.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12429
        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
 12430
        rot := rot + 5.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12431
        rI close.
1638
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
    "
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12434
    "
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12435
     |v i rI rot|
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12436
7906
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 12437
     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
 12438
     v := View new extent:400@400.
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12439
     v openAndWait.
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12440
     rot := 0.
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12441
     [true] whileTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12442
        rI := i rotated:rot.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12443
        rI := rI onDevice:v device.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12444
        v clear.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12445
        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
 12446
        rot := rot + 5.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12447
        rI close.
4952
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12448
     ]
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12449
    "
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12450
    "
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12451
     |v i rI rot|
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12452
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12453
     i := Form width:200 height:100 onDevice:Screen current.
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12454
     i clear.
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12455
     i displayLineFrom:(0@0) to:(199@0).
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12456
     i displayLineFrom:(199@0) to:(199@99).
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12457
     i displayLineFrom:(199@99) to:(0@99).
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12458
     i displayLineFrom:(0@99) to:(0@0).
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12459
     i displayLineFrom:(0@0) to:(199@100).
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12460
     i displayLineFrom:(199@0) to:(0@100).
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12461
     i := Image fromForm:i.
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12462
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12463
     v := View new extent:400@400.
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12464
     v openAndWait.
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12465
     rot := 0.
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12466
     [true] whileTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12467
        rI := i rotated:rot.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12468
        rI := rI onDevice:v device.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12469
        v clear.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12470
        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
 12471
        rot := rot + 5.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12472
        rI close.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12473
        Delay waitForSeconds:0.1.
4952
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12474
     ]
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12475
    "
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12476
    "
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12477
     |v i rI rot|
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12478
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12479
     i := Form width:200 height:100 onDevice:Screen current.
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12480
     i clear.
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12481
     i displayLineFrom:(0@0) to:(199@0).
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12482
     i displayLineFrom:(199@0) to:(199@99).
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12483
     i displayLineFrom:(199@99) to:(0@99).
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12484
     i displayLineFrom:(0@99) to:(0@0).
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12485
     i displayLineFrom:(0@0) to:(199@100).
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12486
     i displayLineFrom:(199@0) to:(0@100).
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12487
     i := Image fromForm:i.
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12488
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12489
     v := View new extent:400@400.
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12490
     v openAndWait.
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12491
     rot := 0.
5ff75dd16301 comment in hardRotated
Claus Gittinger <cg@exept.de>
parents: 4951
diff changeset
 12492
     [true] whileTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12493
        rI := i rotated:rot.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12494
        rI := rI onDevice:v device.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12495
        v clear.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12496
        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
 12497
        rot := rot + 30.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12498
        rI close.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12499
        Delay waitForSeconds:0.3.
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12500
     ]
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12501
    "
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 12502
7906
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 12503
    "Modified (comment): / 16-02-2017 / 20:40:52 / cg"
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 12504
    "Modified: / 19-07-2017 / 12:30:39 / stefan"
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 12505
!
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 12506
8132
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12507
hardSmoothingMagnifiedBy:scaleArg
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12508
    "return a new image magnified by scalePoint, aPoint.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12509
     This is the general magnification method, handling non-integral values.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12510
     It is slower than the integral magnification method,
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12511
     and slower than the old hardMagnifiedBy: method.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12512
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12513
     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
 12514
     or interpolates if expanding.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12515
     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
 12516
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12517
    |scalePoint mX mY
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12518
     newWidth  "{ Class: SmallInteger }"
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12519
     newHeight "{ Class: SmallInteger }"
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12520
     w         "{ Class: SmallInteger }"
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12521
     h         "{ Class: SmallInteger }"
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12522
     newImage newBits bitsPerPixel newBytesPerRow newMask
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12523
     value srcRow pixelArray shrink|
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12524
8263
46c6448fdf2c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8245
diff changeset
 12525
    (photometric == #rgb or:[photometric == #rgba]) ifFalse:[
8326
ff1b239ffe17 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
 12526
        "/ have only implemented this for RGB images;
ff1b239ffe17 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
 12527
        "/ palette and other images are converted first to this,
8523
81d5dfb99b62 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8504
diff changeset
 12528
        "/ 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
 12529
8136
e18855468edd #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8132
diff changeset
 12530
        "/ self assert:false message:'only works with rgb images'.
e18855468edd #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8132
diff changeset
 12531
        ^ (Depth32Image fromImage:self photometric:#rgb)
e18855468edd #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8132
diff changeset
 12532
            hardSmoothingMagnifiedBy:scaleArg
e18855468edd #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8132
diff changeset
 12533
    ].
8132
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12534
    
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12535
    scalePoint := scaleArg asPoint. 
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12536
    mX := scalePoint x.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12537
    mY := scalePoint y.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12538
    ((mX < 0) or:[mY < 0]) ifTrue:[^ nil].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12539
    ((mX = 1) and:[mY = 1]) ifTrue:[^ self].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12540
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12541
    ((mX <= 1) and:[mY <= 1]) ifTrue:[
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12542
        "/ shrinking in both directions 
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12543
        shrink := true.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12544
    ] ifFalse:[
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12545
        ((mX >= 1) and:[mY >= 1]) ifTrue:[
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12546
            "/ shrinking in both directions    
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12547
            shrink := false.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12548
        ] ifFalse:[
8326
ff1b239ffe17 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
 12549
            "/ mixed shrink in one, grow in another direction.
ff1b239ffe17 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
 12550
            "/ - do it in two steps
8132
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12551
            mX > 0 ifTrue:[
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12552
                ^ (self hardSmoothingMagnifiedBy:(mX @ 1) )
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12553
                        hardSmoothingMagnifiedBy:(1 @ mY) 
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12554
            ].    
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12555
            ^ (self hardSmoothingMagnifiedBy:(1 @ mY) )
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12556
                    hardSmoothingMagnifiedBy:(mY @ 1) 
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12557
        ]
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12558
    ].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12559
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12560
    newWidth := (width * mX) truncated.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12561
    newHeight := (height * mY) truncated.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12562
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12563
    bitsPerPixel := self depth.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12564
    newBytesPerRow := ((newWidth * bitsPerPixel) + 7) // 8.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12565
    newBits := ByteArray uninitializedNew:(newBytesPerRow * newHeight).
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12566
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12567
    mask notNil ifTrue:[
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12568
        newMask := (mask magnifiedBy:scalePoint)
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12569
    ].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12570
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12571
    newImage := self species new.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12572
    newImage
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12573
        width:newWidth height:newHeight photometric:photometric
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12574
        samplesPerPixel:samplesPerPixel bitsPerSample:bitsPerSample
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12575
        colorMap:colorMap copy
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12576
        bits:newBits mask:newMask.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12577
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12578
    w := newWidth - 1.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12579
    h := newHeight - 1.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12580
    pixelArray := newImage pixelArraySpecies new:newWidth.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12581
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12582
    shrink ifTrue:[
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12583
        |rX rY|
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12584
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12585
        "/ rI is radius (nr. of pixels) to consider when averaging
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12586
        rX := 1.0 / mX.  "/ mI are <= 1 -> rI are >= 1
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12587
        rY := 1.0 / mY.
8523
81d5dfb99b62 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8504
diff changeset
 12588
        rX := rX / 2.0.
81d5dfb99b62 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8504
diff changeset
 12589
        rY := rY / 2.0.
8132
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12590
        0 to:h do:[:row |
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12591
            srcRow := (row / mY).
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12592
            0 to:w do:[:col |
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12593
                |srcCol rgb sumRed sumGreen sumBlue sumWeight
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12594
                 red green blue|
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12595
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12596
                sumRed := sumGreen := sumBlue := sumWeight := 0.0.
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
                srcCol := col / mX.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12599
                srcCol-rX to:srcCol+rX do:[:srcX |
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12600
                    srcRow-rY to:srcRow+rY do:[:srcY |
8524
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
 12601
                        |pX pY weight rgb "{ Class: SmallInteger }"|
8132
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12602
                        pX := (srcX rounded max:0) min:width-1.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12603
                        pY := (srcY rounded max:0) min:height-1.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12604
                        rgb := self rgbValueAtX:pX y:pY.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12605
                        "/ d := (srcX @ srcY) dist:(pX @ pY).
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12606
                        "/ scale according to distance.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12607
                        "/ weight := 1 / (1+d).
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12608
                        weight := 1.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12609
                        sumRed := sumRed + (weight * ((rgb rightShift:16) bitAnd:16rFF)).
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12610
                        sumGreen := sumGreen + (weight * ((rgb rightShift:8) bitAnd:16rFF)).
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12611
                        sumBlue := sumBlue + (weight * (rgb bitAnd:16rFF)).
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12612
                        sumWeight := sumWeight + weight.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12613
                    ].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12614
                ].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12615
                red := (sumRed / sumWeight) rounded.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12616
                green := (sumGreen / sumWeight) rounded.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12617
                blue := (sumBlue / sumWeight) rounded. 
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12618
                rgb := (((red bitShift:8) bitOr:green) bitShift:8) bitOr:blue.
8326
ff1b239ffe17 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
 12619
                pixelArray at:col+1 put:(self valueFromRGB:rgb).
8132
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12620
            ].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12621
            newImage rowAt:row putAll:pixelArray.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12622
        ].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12623
    ] ifFalse:[    
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12624
        0 to:h do:[:row |
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12625
            srcRow := (row // mY).
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12626
            0 to:w do:[:col |
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12627
                value := self pixelAtX:(col // mX) y:srcRow.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12628
                pixelArray at:(col+1) put:value.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12629
            ].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12630
            newImage rowAt:row putAll:pixelArray.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12631
        ].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12632
    ].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12633
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12634
    ^ newImage 
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12635
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12636
    "compare the two:
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12637
     |i i1 i2|
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12638
     i := Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif'.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12639
     i := Depth24Image fromImage:i.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12640
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12641
     Time millisecondsToRun:[
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12642
         i1 := i hardSmoothingMagnifiedBy:0.1
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12643
     ].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12644
     i1 inspect.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12645
     Time millisecondsToRun:[
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12646
         i2 := i magnifiedBy:0.1 
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12647
     ].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12648
     i2 inspect.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12649
    "
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12650
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12651
    "compare the two:
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12652
     |i i1 i2|
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12653
     i := Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif'.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12654
     i := Depth24Image fromImage:i.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12655
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12656
     Time millisecondsToRun:[
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12657
         i1 := i hardSmoothingMagnifiedBy:0.999
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12658
     ].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12659
     i1 inspect.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12660
     Time millisecondsToRun:[
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12661
         i2 := i magnifiedBy:0.999 
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
     i2 inspect.
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
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12666
    "compare the two:
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12667
     |i i1 i2|
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12668
     i := Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif'.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12669
     i := Depth24Image fromImage:i.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12670
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12671
     Time millisecondsToRun:[
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12672
         i1 := i hardSmoothingMagnifiedBy:0.3
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12673
     ].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12674
     i1 inspect.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12675
     Time millisecondsToRun:[
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12676
         i2 := i magnifiedBy:0.3 
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12677
     ].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12678
     i2 inspect.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12679
    "
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
     |i|
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12683
     i := Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif'.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12684
     i := i asGrayImageDepth:8.
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
         i := i hardSmoothingMagnifiedBy:0.2 
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
     i inspect
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12691
    "
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12692
    
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
     |i|
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12695
     i := Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif'.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12696
     i := Depth24Image fromImage:i.
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12697
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12698
     Time millisecondsToRun:[
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12699
         i := i hardSmoothingMagnifiedBy:0.3 
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12700
     ].
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12701
     i inspect
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12702
    "
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12703
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12704
    "Created: / 30-08-2017 / 15:01:53 / cg"
8524
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
 12705
    "Modified (format): / 19-10-2018 / 16:25:17 / Stefan Vogel"
8132
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12706
!
ad291138eebe #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8130
diff changeset
 12707
54
29a6b2f8e042 *** empty log message ***
claus
parents: 46
diff changeset
 12708
lightened
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
 12709
    "return a new image which is slightly brighter than the receiver.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
 12710
     The receiver must be a palette image (currently).
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 12711
     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
 12712
     CAVEAT: Need an argument, which specifies by how much it should be lighter."
54
29a6b2f8e042 *** empty log message ***
claus
parents: 46
diff changeset
 12713
5655
37bd5c7eb765 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 5643
diff changeset
 12714
    ^ self copyWithColorMapProcessing:[:clr | clr lightened]
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 12715
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 12716
    "
3256
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 12717
     (Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') inspect
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 12718
     (Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') lightened inspect
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 12719
     (Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') darkened inspect
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 12720
     (Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') darkened darkened inspect
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 12721
    "
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 12722
8282
e67d591cbebb #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8279
diff changeset
 12723
    "
e67d591cbebb #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8279
diff changeset
 12724
     |i|
e67d591cbebb #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8279
diff changeset
 12725
     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
 12726
     i lightened
e67d591cbebb #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8279
diff changeset
 12727
    "
e67d591cbebb #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8279
diff changeset
 12728
5655
37bd5c7eb765 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 5643
diff changeset
 12729
    "Modified: / 24-11-2010 / 11:17:55 / cg"
54
29a6b2f8e042 *** empty log message ***
claus
parents: 46
diff changeset
 12730
!
29a6b2f8e042 *** empty log message ***
claus
parents: 46
diff changeset
 12731
134
claus
parents: 132
diff changeset
 12732
magnifiedBy:scale
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 12733
    "return a new image magnified by scalePoint, aPoint.
72
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
 12734
     If non-integral magnify is asked for, pass the work on to 'hardMagnifyBy:'
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
 12735
     while simple (integral) magnifications are handled here."
0
48194c26a46c Initial revision
claus
parents:
diff changeset
 12736
8169
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12737
    ^ self magnifiedBy:scale smooth:false
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12738
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12739
    "
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12740
     (Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif') inspect.
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12741
     ((Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif') magnifiedBy:1@2) inspect.
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12742
    "
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12743
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12744
    "Modified (comment): / 11-09-2017 / 09:10:13 / cg"
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12745
!
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12746
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12747
magnifiedBy:scale smooth:smooth
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12748
    "return a new image magnified by scalePoint, aPoint.
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12749
     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
 12750
     while simple (integral) magnifications are handled here."
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12751
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 12752
    |scalePoint mX mY
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
 12753
     magX      "{ Class: SmallInteger }"   "new version of stc can find this out itself..."
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
 12754
     magY      "{ Class: SmallInteger }"
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
 12755
     srcOffset "{ Class: SmallInteger }"
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
 12756
     dstOffset "{ Class: SmallInteger }"
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
 12757
     w         "{ Class: SmallInteger }"
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
 12758
     h         "{ Class: SmallInteger }"
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
 12759
     first
906
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
 12760
     newWidth newHeight newImage newBits newMask
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
 12761
     bitsPerPixel newBytesPerRow oldBytesPerRow
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
 12762
     bytes|
0
48194c26a46c Initial revision
claus
parents:
diff changeset
 12763
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
 12764
    scalePoint := scale asPoint.
2772
e8ceedf9aeab code cleanup & a few more SmallInteger type hints
Claus Gittinger <cg@exept.de>
parents: 2760
diff changeset
 12765
    mX := scalePoint x.
e8ceedf9aeab code cleanup & a few more SmallInteger type hints
Claus Gittinger <cg@exept.de>
parents: 2760
diff changeset
 12766
    mY := scalePoint y.
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
 12767
    ((mX <= 0) or:[mY <= 0]) ifTrue:[^ nil].
0
48194c26a46c Initial revision
claus
parents:
diff changeset
 12768
    ((mX = 1) and:[mY = 1]) ifTrue:[^ self].
48194c26a46c Initial revision
claus
parents:
diff changeset
 12769
8169
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12770
    smooth ifTrue:[
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12771
        ^ self hardSmoothingMagnifiedBy:scalePoint
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12772
    ].
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
 12773
    ((mX isMemberOf:SmallInteger) and:[mY isMemberOf:SmallInteger]) ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12774
        ^ self hardMagnifiedBy:scalePoint
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
 12775
    ].
8169
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12776
    
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
 12777
    bytes := self bits.
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
 12778
    bitsPerPixel := self depth.
0
48194c26a46c Initial revision
claus
parents:
diff changeset
 12779
    oldBytesPerRow := ((width * bitsPerPixel) + 7) // 8.
48194c26a46c Initial revision
claus
parents:
diff changeset
 12780
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
 12781
    w := width.
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
 12782
    h := height.
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
 12783
    magX := mX.
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
 12784
    magY := mY.
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
 12785
2772
e8ceedf9aeab code cleanup & a few more SmallInteger type hints
Claus Gittinger <cg@exept.de>
parents: 2760
diff changeset
 12786
    newWidth := w * magX.
e8ceedf9aeab code cleanup & a few more SmallInteger type hints
Claus Gittinger <cg@exept.de>
parents: 2760
diff changeset
 12787
    newHeight := h * magY.
0
48194c26a46c Initial revision
claus
parents:
diff changeset
 12788
    newBytesPerRow := ((newWidth * bitsPerPixel) + 7) // 8.
48194c26a46c Initial revision
claus
parents:
diff changeset
 12789
    newBits := ByteArray uninitializedNew:(newBytesPerRow * newHeight).
48194c26a46c Initial revision
claus
parents:
diff changeset
 12790
906
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
 12791
    mask notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12792
        newMask := (mask magnifiedBy:scalePoint)
906
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
 12793
    ].
628a0e73b570 comment & mask:
Claus Gittinger <cg@exept.de>
parents: 905
diff changeset
 12794
0
48194c26a46c Initial revision
claus
parents:
diff changeset
 12795
    newImage := self species new.
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 12796
    newImage
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12797
        width:newWidth
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12798
        height:newHeight
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12799
        photometric:photometric
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12800
        samplesPerPixel:samplesPerPixel
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12801
        bitsPerSample:bitsPerSample
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12802
        colorMap:colorMap copy
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12803
        bits:newBits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12804
        mask:newMask.
0
48194c26a46c Initial revision
claus
parents:
diff changeset
 12805
48194c26a46c Initial revision
claus
parents:
diff changeset
 12806
    mX = 1 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12807
        "expand rows only"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12808
        srcOffset := 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12809
        dstOffset := 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12810
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12811
        1 to:h do:[:row |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12812
            1 to:magY do:[:i |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12813
                newBits replaceFrom:dstOffset
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12814
                        to:(dstOffset + oldBytesPerRow - 1)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12815
                        with:bytes
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12816
                        startingAt:srcOffset.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12817
                dstOffset := dstOffset + newBytesPerRow
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12818
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12819
            srcOffset := srcOffset + oldBytesPerRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12820
        ].
0
48194c26a46c Initial revision
claus
parents:
diff changeset
 12821
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12822
        "expand cols"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12823
        (mX > 1) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12824
            dstOffset := 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12825
            srcOffset := 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12826
            1 to:h do:[:row |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12827
                self magnifyRowFrom:bytes
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12828
                     offset:srcOffset
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12829
                     into:newBits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12830
                     offset:dstOffset
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12831
                     factor:mX.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12832
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12833
                first := dstOffset.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12834
                dstOffset := dstOffset + newBytesPerRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12835
                " and copy for row expansion "
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12836
                2 to:magY do:[:i |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12837
                    newBits replaceFrom:dstOffset
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12838
                            to:(dstOffset + newBytesPerRow - 1)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12839
                            with:newBits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12840
                            startingAt:first.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12841
                    dstOffset := dstOffset + newBytesPerRow
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12842
                ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12843
                srcOffset := srcOffset + oldBytesPerRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12844
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12845
        ]
0
48194c26a46c Initial revision
claus
parents:
diff changeset
 12846
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
 12847
    ^ newImage
48194c26a46c Initial revision
claus
parents:
diff changeset
 12848
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 12849
    "
3476
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 12850
     ((Image fromFile:'goodies/bitmaps/gifImages/claus.gif') magnifiedBy:1@2)
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 12851
    "
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 12852
8169
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12853
    "Created: / 10-09-2017 / 17:10:34 / cg"
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
 12854
!
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
 12855
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 12856
magnifiedPreservingRatioTo:anExtent
154
claus
parents: 153
diff changeset
 12857
    "return a new image magnified to fit into anExtent,
7242
bf3a75233d55 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 7230
diff changeset
 12858
     preserving the receiver's width/height ratio.
154
claus
parents: 153
diff changeset
 12859
     (i.e. not distorting the image).
claus
parents: 153
diff changeset
 12860
     See also #magnifiedTo: and #magnifiedBy:"
claus
parents: 153
diff changeset
 12861
8329
2151954cfb87 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8326
diff changeset
 12862
    ^ self magnifiedPreservingRatioTo:anExtent smooth:false
154
claus
parents: 153
diff changeset
 12863
claus
parents: 153
diff changeset
 12864
    "
7990
0850e1d5bc13 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7989
diff changeset
 12865
     ((Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif') magnifiedPreservingRatioTo:100@100)
154
claus
parents: 153
diff changeset
 12866
claus
parents: 153
diff changeset
 12867
    in contrast to:
claus
parents: 153
diff changeset
 12868
7990
0850e1d5bc13 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7989
diff changeset
 12869
     ((Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif') magnifiedTo:100@100)
0850e1d5bc13 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7989
diff changeset
 12870
    "
0850e1d5bc13 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7989
diff changeset
 12871
0850e1d5bc13 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7989
diff changeset
 12872
    "Modified: / 22-04-1997 / 12:33:46 / cg"
0850e1d5bc13 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7989
diff changeset
 12873
    "Modified (comment): / 26-03-2017 / 21:47:36 / cg"
154
claus
parents: 153
diff changeset
 12874
!
claus
parents: 153
diff changeset
 12875
8169
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12876
magnifiedPreservingRatioTo:anExtent smooth:smoothBoolean
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12877
    "return a new image magnified to fit into anExtent,
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12878
     preserving the receiver's width/height ratio.
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12879
     (i.e. not distorting the image).
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12880
     See also #magnifiedTo: and #magnifiedBy:"
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12881
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12882
    |rX rY|
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12883
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12884
    rX := anExtent x / self width.
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12885
    rY := anExtent y / self height.
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12886
    ^ self magnifiedBy:(rX min:rY) smooth:smoothBoolean
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12887
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12888
    "
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12889
     ((Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif') magnifiedPreservingRatioTo:100@100)
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12890
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12891
    in contrast to:
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12892
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12893
     ((Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif') magnifiedTo:100@100)
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12894
    "
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12895
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12896
    "Created: / 10-09-2017 / 17:08:57 / cg"
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12897
!
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 12898
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 12899
magnifiedTo:anExtent
154
claus
parents: 153
diff changeset
 12900
    "return a new image magnified to have the size specified by extent.
claus
parents: 153
diff changeset
 12901
     This may distort the image if the arguments ratio is not the images ratio.
claus
parents: 153
diff changeset
 12902
     See also #magnifiedPreservingRatioTo: and #magnifiedBy:"
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
 12903
134
claus
parents: 132
diff changeset
 12904
    ^ self magnifiedBy:(anExtent / self extent)
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
 12905
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
 12906
    "
4168
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
 12907
     ((Image fromFile:'goodies/bitmaps/gifImages/garfield.gif') magnifiedTo:100@100)
154
claus
parents: 153
diff changeset
 12908
claus
parents: 153
diff changeset
 12909
    in contrast to:
claus
parents: 153
diff changeset
 12910
4168
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
 12911
     ((Image fromFile:'goodies/bitmaps/gifImages/garfield.gif') magnifiedPreservingRatioTo:100@100)
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
 12912
    "
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
 12913
!
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
 12914
8176
33f71b59070d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
 12915
magnifiedTo:anExtent smooth:aBoolean
33f71b59070d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
 12916
    "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
 12917
     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
 12918
     See also #magnifiedPreservingRatioTo: and #magnifiedBy:"
33f71b59070d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
 12919
33f71b59070d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
 12920
    |mag|
33f71b59070d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
 12921
33f71b59070d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
 12922
    mag := (anExtent / self extent).
33f71b59070d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
 12923
    aBoolean ifTrue:[
8326
ff1b239ffe17 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
 12924
        ^ self hardSmoothingMagnifiedBy:mag
8176
33f71b59070d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
 12925
    ].    
33f71b59070d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
 12926
    ^ self magnifiedBy:mag
33f71b59070d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
 12927
33f71b59070d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
 12928
    "
33f71b59070d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
 12929
     (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
 12930
33f71b59070d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
 12931
    in contrast to:
33f71b59070d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
 12932
33f71b59070d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
 12933
     (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
 12934
33f71b59070d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
 12935
    and:
33f71b59070d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
 12936
     ((Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif') magnifiedPreservingRatioTo:100@100)
33f71b59070d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
 12937
    and:
33f71b59070d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
 12938
     ((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
 12939
    "
33f71b59070d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
 12940
33f71b59070d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
 12941
    "Created: / 13-09-2017 / 13:32:09 / cg"
33f71b59070d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
 12942
!
33f71b59070d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
 12943
3256
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 12944
mixed:amount with:aColor
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 12945
    "return a new image which is blended with some color;
3256
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 12946
     amount determines how much of the blending color is applied (0..)
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 12947
     where 0 means: blending color pure.
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 12948
     The receiver must be a palette image (currently).
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 12949
     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
 12950
     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
 12951
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 12952
     ^ self
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12953
        copyWithColorMapProcessing:[:clr | clr mixed:amount with:aColor]
3256
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 12954
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 12955
    "
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 12956
     (Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') inspect
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 12957
     ((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
 12958
     ((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
 12959
     ((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
 12960
     ((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
 12961
     ((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
 12962
     ((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
 12963
     ((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
 12964
     ((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
 12965
    "
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 12966
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 12967
    "Modified: / 24-04-1997 / 18:31:23 / cg"
db16071d86f7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8159
diff changeset
 12968
    "Modified (comment): / 05-09-2017 / 14:36:39 / cg"
3256
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 12969
!
77bb9ec36221 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3157
diff changeset
 12970
1762
061f5a57000a added #negative
Claus Gittinger <cg@exept.de>
parents: 1746
diff changeset
 12971
negative
061f5a57000a added #negative
Claus Gittinger <cg@exept.de>
parents: 1746
diff changeset
 12972
    "return a new image which is a negative of the receiver.
061f5a57000a added #negative
Claus Gittinger <cg@exept.de>
parents: 1746
diff changeset
 12973
     The receiver must be a palette image (currently)."
061f5a57000a added #negative
Claus Gittinger <cg@exept.de>
parents: 1746
diff changeset
 12974
1763
761b4d05ac99 more #negative
Claus Gittinger <cg@exept.de>
parents: 1762
diff changeset
 12975
    |newImage|
761b4d05ac99 more #negative
Claus Gittinger <cg@exept.de>
parents: 1762
diff changeset
 12976
761b4d05ac99 more #negative
Claus Gittinger <cg@exept.de>
parents: 1762
diff changeset
 12977
    colorMap isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12978
        photometric == #blackIs0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12979
            newImage := self copy.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12980
            newImage photometric:#whiteIs0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12981
            ^ newImage
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12982
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12983
        photometric == #whiteIs0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12984
            newImage := self copy.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12985
            newImage photometric:#blackIs0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12986
            ^ newImage
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12987
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12988
        ^ nil
1763
761b4d05ac99 more #negative
Claus Gittinger <cg@exept.de>
parents: 1762
diff changeset
 12989
    ].
761b4d05ac99 more #negative
Claus Gittinger <cg@exept.de>
parents: 1762
diff changeset
 12990
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 12991
     ^ self
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 12992
        copyWithColorMapProcessing:[:clr |
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 12993
                Color
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 12994
                    redByte:(255 - clr redByte)
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 12995
                    greenByte:(255 - clr greenByte)
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 12996
                    blueByte:(255 - clr blueByte)
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 12997
            ]
3476
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 12998
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 12999
    "
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 13000
     (Image fromFile:'goodies/bitmaps/gifImages/claus.gif') inspect
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 13001
     (Image fromFile:'goodies/bitmaps/gifImages/claus.gif') negative inspect
1762
061f5a57000a added #negative
Claus Gittinger <cg@exept.de>
parents: 1746
diff changeset
 13002
    "
061f5a57000a added #negative
Claus Gittinger <cg@exept.de>
parents: 1746
diff changeset
 13003
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 13004
    "Created: / 20-06-1997 / 13:13:41 / cg"
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 13005
    "Modified: / 31-01-2017 / 14:43:19 / stefan"
1762
061f5a57000a added #negative
Claus Gittinger <cg@exept.de>
parents: 1746
diff changeset
 13006
!
061f5a57000a added #negative
Claus Gittinger <cg@exept.de>
parents: 1746
diff changeset
 13007
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
 13008
rotated:degrees
8190
8d870345e0cd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8185
diff changeset
 13009
    "return a new image from the old one, by rotating the image degrees clockwise.
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 13010
     Notice that the resulting image has a different extent.
1646
48ab44c4664f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1644
diff changeset
 13011
     If rotation is heavily used, the workHorse methods
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 13012
     (#easyRotateBitsInto:angle: and #hardRotated:) may
1646
48ab44c4664f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1644
diff changeset
 13013
     be redefined in concrete image subclasses."
48ab44c4664f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1644
diff changeset
 13014
3912
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
 13015
    |nW nH newImage d|
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
 13016
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 13017
    d := degrees truncated.
8190
8d870345e0cd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8185
diff changeset
 13018
    "/ -45 \\ 360
8d870345e0cd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8185
diff changeset
 13019
    d := d \\ 360.
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 13020
    d = 0 ifTrue:[
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 13021
        ^ self
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 13022
    ].
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 13023
    d = 180 ifTrue:[
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 13024
        nW := width.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 13025
        nH := height.
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 13026
    ] ifFalse:[(d = 90 or:[d = 270]) ifTrue:[
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 13027
        nW := height.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 13028
        nH := width.
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 13029
    ] ifFalse:[
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 13030
        ^ self hardRotated:d
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 13031
    ]].
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
 13032
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
 13033
    newImage := self species new.
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 13034
    newImage 
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 13035
        width:nW
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 13036
        height:nH
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 13037
        photometric:photometric
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 13038
        samplesPerPixel:samplesPerPixel
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 13039
        bitsPerSample:bitsPerSample
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 13040
        colorMap:colorMap copy
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 13041
        bits:nil
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 13042
        mask:(mask ifNotNil:[mask rotated:degrees]);
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 13043
        createPixelStore.
1646
48ab44c4664f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1644
diff changeset
 13044
7534
0b7e23635791 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7529
diff changeset
 13045
    self easyRotateBitsInto:newImage angle:d.
1638
a673a91d4ca1 added hardRotation.
Claus Gittinger <cg@exept.de>
parents: 1636
diff changeset
 13046
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
 13047
    ^ newImage
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
 13048
692
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13049
    "
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13050
     |i|
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13051
7529
5f77a718b7bd #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7523
diff changeset
 13052
     i := Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif'.
7534
0b7e23635791 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7529
diff changeset
 13053
     i inspect.
0b7e23635791 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7529
diff changeset
 13054
     (i rotated:45) inspect.
0b7e23635791 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7529
diff changeset
 13055
     (i rotated:90) inspect.
0b7e23635791 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7529
diff changeset
 13056
     (i rotated:180) inspect.
0b7e23635791 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7529
diff changeset
 13057
     (i rotated:270) inspect.
0b7e23635791 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7529
diff changeset
 13058
    "
0b7e23635791 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7529
diff changeset
 13059
    "
0b7e23635791 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7529
diff changeset
 13060
     |i|
0b7e23635791 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7529
diff changeset
 13061
0b7e23635791 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7529
diff changeset
 13062
     i := Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif'.
7529
5f77a718b7bd #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 7523
diff changeset
 13063
     i := Depth24Image fromImage:i.
692
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13064
     i inspect.
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 13065
     (i rotated:45) inspect.
692
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13066
     (i rotated:90) inspect.
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13067
     (i rotated:180) inspect.
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13068
     (i rotated:270) inspect.
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13069
    "
1646
48ab44c4664f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1644
diff changeset
 13070
    "
48ab44c4664f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1644
diff changeset
 13071
     |i|
48ab44c4664f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1644
diff changeset
 13072
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 13073
     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
 13074
     i inspect.
48ab44c4664f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1644
diff changeset
 13075
     (i rotated:90) inspect.
48ab44c4664f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1644
diff changeset
 13076
     (i rotated:180) inspect.
48ab44c4664f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1644
diff changeset
 13077
     (i rotated:270) inspect.
48ab44c4664f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1644
diff changeset
 13078
    "
48ab44c4664f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1644
diff changeset
 13079
8050
12663991e344 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8025
diff changeset
 13080
    "Modified (comment): / 19-07-2017 / 12:50:55 / stefan"
8190
8d870345e0cd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8185
diff changeset
 13081
    "Modified (comment): / 09-10-2017 / 14:55:12 / cg"
692
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13082
!
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13083
6624
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13084
slightlyDarkened
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13085
    "return a new image which is slightly darker than the receiver.
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13086
     The receiver must be a palette image (currently).
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13087
     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
 13088
     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
 13089
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13090
    ^ self copyWithColorMapProcessing:[:clr | clr slightlyDarkened]
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13091
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13092
    "
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13093
     (Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') inspect
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13094
     (Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') lightened inspect
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13095
     (Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') darkened inspect
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13096
     (Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') darkened darkened inspect
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13097
    "
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13098
!
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13099
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13100
slightlyLightened
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13101
    "return a new image which is slightly brighter than the receiver.
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13102
     The receiver must be a palette image (currently).
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13103
     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
 13104
     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
 13105
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13106
    ^ self copyWithColorMapProcessing:[:clr | clr slightlyLightened]
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13107
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13108
    "
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13109
     (Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') inspect
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13110
     (Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') lightened inspect
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13111
     (Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') darkened inspect
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13112
     (Smalltalk bitmapFromFileNamed:'gifImages/claus.gif' inPackage:'stx:goodies') darkened darkened inspect
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13113
    "
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13114
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13115
    "Modified: / 24-11-2010 / 11:17:55 / cg"
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13116
!
b5ea9d6b515b class: Image
Claus Gittinger <cg@exept.de>
parents: 6613
diff changeset
 13117
8169
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13118
smoothingMagnifiedBy:scale
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13119
    "return a new image magnified by scalePoint, aPoint.
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13120
     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
 13121
     while simple (integral) magnifications are handled here."
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13122
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13123
    ^ self hardSmoothingMagnifiedBy:scale
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13124
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13125
    "Created: / 10-09-2017 / 11:47:22 / cg"
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13126
!
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13127
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13128
smoothingMagnifiedPreservingRatioTo:anExtent
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13129
    "return a new image magnified to fit into anExtent,
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13130
     preserving the receiver's width/height ratio.
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13131
     (i.e. not distorting the image).
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13132
     See also #magnifiedTo: and #magnifiedBy:"
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13133
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13134
    |rX rY|
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13135
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13136
    rX := anExtent x / self width.
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13137
    rY := anExtent y / self height.
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13138
    ^ self hardSmoothingMagnifiedBy:(rX min:rY)
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13139
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13140
    "
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13141
     ((Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif') magnifiedPreservingRatioTo:100@100)
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13142
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13143
    in contrast to:
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13144
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13145
     ((Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif') magnifiedTo:100@100)
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13146
    "
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13147
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13148
    "Created: / 10-09-2017 / 11:45:58 / cg"
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13149
!
a1c4f7d8acad #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8164
diff changeset
 13150
4972
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13151
threeDProjected:fraction1 and:fraction2
7906
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 13152
    "return a 3D-projected version.
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 13153
     Not really 3D, but good enough to create screenshots for webpages...
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 13154
     TODO: kick out this q&d hack, and write something real..."
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 13155
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 13156
    |dx1 dx2 newImage newBits 
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 13157
     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
 13158
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13159
    newImage := self species new.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13160
    newImage width:width.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13161
    newImage height:height.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13162
    newImage createPixelStore.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13163
    newBits := newImage bits.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13164
    newImage photometric:photometric.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13165
    newImage samplesPerPixel:samplesPerPixel.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13166
    newImage bitsPerSample:bitsPerSample.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13167
    newImage colorMap:colorMap copy.
7906
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 13168
    newImage maskedPixelsAre0:self maskedPixelsAre0.
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 13169
    
4972
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13170
    mask notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13171
        newImage mask:(mask threeDProjected:fraction1 and:fraction2)
4972
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13172
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13173
        self isMask ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13174
            self depth ~~ 1 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13175
                m := ImageMask width:width height:height.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13176
                m bits:(maskBits := ByteArray new:(m bytesPerRow * height)).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13177
                maskBits atAllPut:16rFF.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13178
                newImage mask:(m threeDProjected:fraction1 and:fraction2)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13179
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13180
        ]
4972
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13181
    ].
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13182
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13183
    myDepth := self depth.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13184
    myDepth == 1 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13185
        blackPixel := 0.
4972
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13186
    ] ifFalse:[
7906
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 13187
        self maskedPixelsAre0 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13188
            blackPixel := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13189
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13190
            blackPixel := self valueFromColor:Color black.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13191
            blackPixel isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13192
                blackPixel := self valueFromColor:Color white.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13193
                blackPixel isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13194
                    blackPixel := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13195
                ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13196
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13197
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13198
        self isMask ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13199
            blackPixel := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13200
        ].
4972
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13201
    ].
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13202
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13203
    newBits atAllPut:0.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13204
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13205
    "/ now, walk over destination pixels,
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13206
    "/ fetching from source.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13207
    halfH := (height - 1) / 2.0.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13208
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13209
    "/  --------------------------------------------------------------
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13210
    "/  |**************                                              |
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13211
    "/  |              ************                                  | dx1
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
    "/  |                                       **********           |
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 6037
diff changeset
 13214
    "/  |fl                          fy                   ***********|
4972
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13215
    "/  |                                                            | fr
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13216
    "/  |                                                            | Mr  (!!= Ml)      |
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13217
    "/  |Ml                          my                              | fr               | dm (=Mr-Ml)
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13218
    "/  |                                                     *******|                  |
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13219
    "/  |                            fy              *********       |
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 6037
diff changeset
 13220
    "/  |fl                                 *********                |
4972
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13221
    "/  |                          *********                         | dx2
6066
62426e8110ae stx macros with 2 underlines
Claus Gittinger <cg@exept.de>
parents: 6037
diff changeset
 13222
    "/  |                 *********                                  |
4972
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13223
    "/  |        *********                                           |
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13224
    "/  |********                                                    |
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13225
    "/  --------------------------------------------------------------
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13226
    dx1 := height * fraction1.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13227
    dx2 := height * fraction2.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13228
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13229
    fr := (height - dx1 - dx2) / 2.0.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13230
    fl := (height) / 2.0.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13231
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13232
    ml := height / 2.0.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13233
    mr := dx1+fr.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13234
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13235
    dm := mr-ml.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13236
    df := fr-fl.
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13237
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13238
    0 to:width-1 do:[:srcX |
7906
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 13239
        dstX := srcX * 0.75.
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 13240
        
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13241
        fractX := srcX / width.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13242
        my := ml + (dm * fractX).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13243
        fy := fl + (df * fractX).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13244
        o1 := dx1 * fractX.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13245
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13246
        0 to:height-1 do:[:srcY |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13247
            srcY < halfH ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13248
                dstY := o1 + (fy * (srcY / halfH)).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13249
            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13250
                dstY := my + (fy * ((srcY-halfH) / halfH)).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13251
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13252
            pix := self pixelAtX:srcX y:srcY.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13253
            dstY < 0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13254
                ifTrue:[dstY := 0]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13255
                ifFalse:[ dstY >= height ifTrue:[dstY := height-1]].
7906
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 13256
            newImage pixelAtX:dstX truncated y:dstY truncated put:pix.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13257
        ].
4972
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13258
    ].
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
    ^ newImage
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13261
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
     |i|
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13264
7906
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 13265
     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
 13266
     i := Depth24Image fromImage:i.
7906
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 13267
     (i threeDProjected:0.1 and:0.3) inspect.
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 13268
     (i threeDProjected:0.1 and:0.1) inspect.
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 13269
    "
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 13270
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 13271
    "
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 13272
     |i|
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 13273
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 13274
     Transcript topView raiseDeiconified.
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 13275
     i := Image fromView:Transcript topView.
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 13276
     i := Depth24Image fromImage:i.
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 13277
     (i threeDProjected:0.1 and:0.2) inspect.
4972
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13278
    "
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 13279
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 13280
    "Modified: / 31-01-2017 / 15:04:22 / stefan"
7906
2305611a389d #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7905
diff changeset
 13281
    "Modified: / 16-02-2017 / 20:38:53 / cg"
4972
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13282
!
0191acd468c3 3d projection (first attempt)
Claus Gittinger <cg@exept.de>
parents: 4955
diff changeset
 13283
3905
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13284
withColorResolutionReducedBy:numBits
8441
845edd2603bc #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8374
diff changeset
 13285
    "return a new image with the same picture as the receiver, 
845edd2603bc #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8374
diff changeset
 13286
     but reduced colorResolution.
845edd2603bc #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8374
diff changeset
 13287
     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
 13288
     If anything fails, return nil."
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13289
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13290
    |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
 13291
     newColors newColorArray newImage newPixelValue|
3905
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13292
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13293
    numBits > 7 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13294
        ^ nil
3905
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13295
    ].
8441
845edd2603bc #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8374
diff changeset
 13296
    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
 13297
"/    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
 13298
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13299
    anyChange := false.
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13300
4317
a24172a52a76 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4296
diff changeset
 13301
    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
 13302
    newImage photometric:photometric.
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13303
    newImage colorMap:(self colorMap copy).
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13304
    newImage bits:(self bits copy).
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13305
    newImage mask:(self mask copy).
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13306
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13307
    xMax := width - 1.
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13308
    yMax := height - 1.
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13309
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 13310
    newPixelValue :=
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13311
        [:image :pixelValue |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13312
            |r g b nR nG nB|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13313
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13314
            r := image redBitsOf:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13315
            g := image greenBitsOf:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13316
            b := image blueBitsOf:pixelValue.
8441
845edd2603bc #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8374
diff changeset
 13317
            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
 13318
            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
 13319
            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
 13320
            image valueFromRedBits:nR greenBits:nG blueBits:nB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13321
        ].
3905
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13322
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13323
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 13324
    photometric ~~ #palette ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13325
        "/ direct manipulation of the pixels
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13326
        0 to:yMax do:[:y |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13327
            0 to:xMax do:[:x |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13328
                pix := self pixelAtX:x y:y.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13329
                n_pix := newPixelValue value:self value:pix.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13330
                n_pix ~= pix ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13331
                    newImage pixelAtX:x y:y put:n_pix.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13332
                    anyChange := true.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13333
                ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13334
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13335
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13336
        anyChange ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13337
            ^ nil
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13338
        ].
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 13339
    ] ifFalse:[
8441
845edd2603bc #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8374
diff changeset
 13340
        newColors := Set new.
845edd2603bc #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8374
diff changeset
 13341
        newColorArray := OrderedCollection new.
845edd2603bc #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8374
diff changeset
 13342
        map := Array new:256.
845edd2603bc #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8374
diff changeset
 13343
        revMap := OrderedCollection new.
845edd2603bc #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8374
diff changeset
 13344
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13345
        "/ manipulate the colormap
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13346
        0 to:yMax do:[:y |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13347
            0 to:xMax do:[:x |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13348
                pix := self pixelAtX:x y:y.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13349
                (n_pix := map at:pix+1) isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13350
                    clr := self colorAtX:x y:y.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13351
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13352
                    r := clr redByte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13353
                    g := clr greenByte.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13354
                    b := clr blueByte.
8524
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
 13355
                    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
 13356
                    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
 13357
                    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
 13358
                    n_clr := Color redByte:nR greenByte:nG blueByte:nB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13359
                    (newColors includes:n_clr) ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13360
                        newColors add:n_clr.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13361
                        newColorArray add:n_clr.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13362
                        revMap add:pix.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13363
                        map at:pix+1 put:(n_pix := revMap size - 1).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13364
                    ] ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13365
                        "/ mhmh - multiple pixels mapped to the same color
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13366
                        n_pix := (newColorArray indexOf:n_clr) - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13367
                        map at:pix+1 put:n_pix.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13368
                    ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13369
                ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13370
                newImage pixelAtX:x y:y put:n_pix.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13371
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13372
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13373
        revMap size == self colorMap size ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13374
            revMap = (0 to:revMap size-1) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13375
                ^ nil
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13376
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13377
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13378
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13379
        newImage colorMap:(MappedPalette withColors:newColorArray).
3905
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13380
    ].
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13381
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13382
    ^ newImage
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 13383
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 13384
    "Modified: / 30-01-2017 / 20:15:02 / stefan"
8441
845edd2603bc #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8374
diff changeset
 13385
    "Modified: / 06-08-2018 / 00:59:27 / Claus Gittinger"
8524
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
 13386
    "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
 13387
!
bc5f7af0d9d9 colorreduction code moved from imageEditView
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
 13388
692
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13389
withPixelFunctionApplied:pixelFunctionBlock
8282
e67d591cbebb #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8279
diff changeset
 13390
    "return a new image from the old one, 
e67d591cbebb #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8279
diff changeset
 13391
     by applying a pixel processor on the pixel colors.
e67d591cbebb #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8279
diff changeset
 13392
e67d591cbebb #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 8279
diff changeset
 13393
     Notice: this method is relatively slow - either apply pixel values
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 13394
     (#withPixelFunctionAppliedToPixels:) or redefine this method in
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 13395
     a concrete subclass.
3860
571f1cd259f5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3855
diff changeset
 13396
     (read `Beyond photography, by Gerard J. Holzmann;
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13397
           ISBM 0-13-074410-7)
8497
2562e07421bb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8482
diff changeset
 13398
     See blurred / oilPainted as examples ...)"
692
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13399
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13400
    |w  "{Class: SmallInteger }"
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13401
     h  "{Class: SmallInteger }"
4160
6d31e4e6a432 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4159
diff changeset
 13402
     newImage "newBits newBytesPerRow"|
692
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13403
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13404
    newImage := self species new.
3912
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
 13405
    newImage depth:self depth.
692
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13406
    newImage width:width.
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13407
    newImage height:height.
3912
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
 13408
"/    newBytesPerRow := ((width * self depth) + 7) // 8.
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
 13409
"/    newBits := ByteArray uninitializedNew:(newBytesPerRow * height).
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
 13410
    newImage createPixelStore. "/ bits:newBits.
692
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13411
    newImage photometric:photometric.
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13412
    newImage samplesPerPixel:samplesPerPixel.
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13413
    newImage bitsPerSample:bitsPerSample.
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13414
    newImage colorMap:colorMap copy.
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13415
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13416
    w := width - 1.
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13417
    h := height - 1.
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13418
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13419
    0 to:h do:[:y |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13420
        0 to:w do:[:x |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13421
            newImage colorAtX:x y:y put:(pixelFunctionBlock
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13422
                                                value:self
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13423
                                                value:(self colorAtX:x y:y)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13424
                                                value:x
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13425
                                                value:y)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13426
        ]
692
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13427
    ].
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13428
    ^ newImage
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13429
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 13430
    "black out everything except for some rectangle:
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 13431
1570
1aeaa96fa6fb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1510
diff changeset
 13432
     |i black|
692
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13433
8497
2562e07421bb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8482
diff changeset
 13434
     i := Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif'.
692
d3af7ac649de fixed #rotated:180
Claus Gittinger <cg@exept.de>
parents: 680
diff changeset
 13435
     i inspect.
1570
1aeaa96fa6fb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1510
diff changeset
 13436
1aeaa96fa6fb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1510
diff changeset
 13437
     black := Color black.
1aeaa96fa6fb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1510
diff changeset
 13438
     (i withPixelFunctionApplied:[:oldImage :oldColor :x :y |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13439
                        ((x between:100 and:200)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13440
                        and:[y between:100 and:200]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13441
                            oldColor
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13442
                        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13443
                            black.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13444
                        ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13445
                     ]) inspect.
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 13446
    "
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 13447
    "brighten a frame:
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 13448
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 13449
     |i black w h|
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 13450
8497
2562e07421bb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8482
diff changeset
 13451
     i := Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif'.
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 13452
     i inspect.
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 13453
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 13454
     w := i width.
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 13455
     h := i height.
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 13456
     (i withPixelFunctionApplied:[:oldImage :oldColor :x :y |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13457
                        ((x between:0 and:10)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13458
                        or:[(y between:0 and:10)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13459
                        or:[(x between:w-10 and:w)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13460
                        or:[y between:h-10 and:h]]]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13461
                            oldColor lightened nearestIn:i colorMap
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13462
                        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13463
                            oldColor.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13464
                        ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13465
                     ]) inspect.
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 13466
    "
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 13467
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 13468
    "Modified: 24.4.1997 / 18:36:59 / cg"
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 13469
!
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 13470
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 13471
withPixelFunctionAppliedToPixels:pixelFunctionBlock
1509
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13472
    "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
 13473
     on the pixel values.
4296
240f73781089 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4226
diff changeset
 13474
     (read `Beyond photography, by Gerard J. Holzmann;
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13475
           ISBM 0-13-074410-7)
8497
2562e07421bb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8482
diff changeset
 13476
     See blurred / oilPainted as examples ...)"
3911
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13477
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 13478
    ^ self
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13479
        withPixelFunctionAppliedToPixels:pixelFunctionBlock
8497
2562e07421bb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8482
diff changeset
 13480
        in:(0@0 extent:width@height)
3911
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13481
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13482
    "oil painting effect:
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13483
8497
2562e07421bb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8482
diff changeset
 13484
     |i w h brushSize|
2562e07421bb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8482
diff changeset
 13485
2562e07421bb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8482
diff changeset
 13486
     i := Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif'.
3911
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13487
     i inspect.
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13488
     w := i width - 1.
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13489
     h := i height - 1.
8497
2562e07421bb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8482
diff changeset
 13490
     brushSize := 4.
3911
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13491
     (i withPixelFunctionAppliedToPixels:[:oldImage :oldPixel :x :y |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13492
                        |b p max xMin xMax yMin yMax|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13493
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13494
                        b := Bag identityNew:10.
8497
2562e07421bb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8482
diff changeset
 13495
                        xMin := x-brushSize max:0.
2562e07421bb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8482
diff changeset
 13496
                        xMax := x+brushSize min:w.
2562e07421bb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8482
diff changeset
 13497
                        yMin := y-brushSize max:0.
2562e07421bb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8482
diff changeset
 13498
                        yMax := y+brushSize min:h.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13499
                        xMin to:xMax do:[:tx|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13500
                          yMin to:yMax do:[:ty|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13501
                            b add:(oldImage pixelAtX:tx y:ty)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13502
                          ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13503
                        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13504
                        max := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13505
                        b contents keysAndValuesDo:[:pixel :n |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13506
                            n > max ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13507
                                p := pixel.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13508
                                max := n
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13509
                            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13510
                        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13511
                        p
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13512
                     ]) inspect.
3911
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13513
    "
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13514
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13515
    "fisheye effect:
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13516
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13517
     |i w h w2 h2 R white|
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13518
8497
2562e07421bb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8482
diff changeset
 13519
     i := Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif'.
3911
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13520
     i inspect.
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13521
     w := i width - 1.
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13522
     h := i height - 1.
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13523
     w2 := w // 2.
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13524
     h2 := h // 2.
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13525
     R := w2.
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13526
     white := i valueFromColor:Color white.
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13527
     (i withPixelFunctionAppliedToPixels:[:oldImage :oldPixel :x :y |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13528
                        |p r a nR nP nX nY|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13529
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13530
                        p := (x-w2)@(y-h2).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13531
                        r := p r.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13532
                        a := p theta.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13533
                        nR := r * r / R.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13534
                        nP := Point r:nR theta:a.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13535
                        nX := ((nP x+w2) rounded max:0) min:w.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13536
                        nY := ((nP y+h2) rounded max:0) min:h.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13537
                        (nX > w or:[nX < 0]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13538
                            white
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13539
                        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13540
                            (nY > h or:[nY < 0]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13541
                                white
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13542
                            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13543
                                oldImage pixelAtX:nX y:nY
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13544
                            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13545
                        ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13546
                     ]) inspect.
3911
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
    "fisheye effect:
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13549
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13550
     |i w h w2 h2 R white|
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13551
8497
2562e07421bb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8482
diff changeset
 13552
     i := Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif'.
3911
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13553
     i inspect.
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13554
     w := i width - 1.
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13555
     h := i height - 1.
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13556
     w2 := w // 2.
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13557
     h2 := h // 2.
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13558
     R := w2.
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13559
     white := i valueFromColor:Color white.
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13560
     (i withPixelFunctionAppliedToPixels:[:oldImage :oldPixel :x :y |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13561
                        |p r a nR nP nX nY|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13562
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13563
                        p := (x-w2)@(y-h2).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13564
                        r := p r.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13565
                        a := p theta.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13566
                        nR := r * r / R.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13567
                        nP := Point r:nR theta:a.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13568
                        nX := (nP x+w2) rounded.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13569
                        nY := (nP y+h2) rounded.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13570
                        (nX > w or:[nX < 0]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13571
                            white
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13572
                        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13573
                            (nY > h or:[nY < 0]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13574
                                white
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13575
                            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13576
                                oldImage pixelAtX:nX y:nY
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13577
                            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13578
                        ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13579
                     ]) inspect.
3911
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
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13582
    "Created: 24.4.1997 / 18:37:17 / cg"
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13583
    "Modified: 24.4.1997 / 18:40:02 / cg"
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13584
!
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13585
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13586
withPixelFunctionAppliedToPixels:pixelFunctionBlock in:aRectangle
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13587
    "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
 13588
     on the pixel values.
4160
6d31e4e6a432 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4159
diff changeset
 13589
     (read `Beyond photography, by Gerard J. Holzmann;
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13590
           ISBM 0-13-074410-7)
8497
2562e07421bb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8482
diff changeset
 13591
     See blurred / oilPainted as examples ...)"
1509
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13592
4160
6d31e4e6a432 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4159
diff changeset
 13593
    |newImage "newBits newBytesPerRow"|
1509
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13594
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13595
    newImage := self species new.
3912
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
 13596
    newImage depth:self depth.
1509
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13597
    newImage width:width.
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13598
    newImage height:height.
3912
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
 13599
"/    newBytesPerRow := ((width * self depth) + 7) // 8.
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
 13600
"/    newBits := ByteArray uninitializedNew:(newBytesPerRow * height).
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
 13601
    newImage createPixelStore. "/ bits:newBits
1509
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13602
    newImage photometric:photometric.
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13603
    newImage samplesPerPixel:samplesPerPixel.
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13604
    newImage bitsPerSample:bitsPerSample.
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13605
    newImage colorMap:colorMap copy.
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13606
3911
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13607
    self applyPixelValuesTo:pixelFunctionBlock in:aRectangle into:newImage.
1509
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13608
    ^ newImage
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13609
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13610
    "oil painting effect:
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13611
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13612
     |i w h|
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13613
8497
2562e07421bb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8482
diff changeset
 13614
     i := Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif'.
1509
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13615
     i inspect.
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13616
     w := i width - 1.
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13617
     h := i height - 1.
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 13618
     (i withPixelFunctionAppliedToPixels:[:oldImage :oldPixel :x :y |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13619
                        |b p max xMin xMax yMin yMax|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13620
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13621
                        b := Bag identityNew:10.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13622
                        xMin := x-3 max:0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13623
                        xMax := x+3 min:w.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13624
                        yMin := y-3 max:0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13625
                        yMax := y+3 min:h.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13626
                        xMin to:xMax do:[:tx|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13627
                          yMin to:yMax do:[:ty|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13628
                            b add:(oldImage pixelAtX:tx y:ty)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13629
                          ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13630
                        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13631
                        max := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13632
                        b contents keysAndValuesDo:[:pixel :n |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13633
                            n > max ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13634
                                p := pixel.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13635
                                max := n
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13636
                            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13637
                        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13638
                        p
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13639
                     ]) inspect.
1509
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
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13642
    "fisheye effect:
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13643
1570
1aeaa96fa6fb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1510
diff changeset
 13644
     |i w h w2 h2 R white|
1509
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13645
8497
2562e07421bb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8482
diff changeset
 13646
     i := Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif'.
1509
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13647
     i inspect.
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13648
     w := i width - 1.
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13649
     h := i height - 1.
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13650
     w2 := w // 2.
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13651
     h2 := h // 2.
1510
8b56c96a9e9d pixel processing
Claus Gittinger <cg@exept.de>
parents: 1509
diff changeset
 13652
     R := w2.
1570
1aeaa96fa6fb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1510
diff changeset
 13653
     white := i valueFromColor:Color white.
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 13654
     (i withPixelFunctionAppliedToPixels:[:oldImage :oldPixel :x :y |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13655
                        |p r a nR nP nX nY|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13656
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13657
                        p := (x-w2)@(y-h2).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13658
                        r := p r.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13659
                        a := p theta.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13660
                        nR := r * r / R.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13661
                        nP := Point r:nR theta:a.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13662
                        nX := ((nP x+w2) rounded max:0) min:w.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13663
                        nY := ((nP y+h2) rounded max:0) min:h.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13664
                        (nX > w or:[nX < 0]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13665
                            white
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13666
                        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13667
                            (nY > h or:[nY < 0]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13668
                                white
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13669
                            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13670
                                oldImage pixelAtX:nX y:nY
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13671
                            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13672
                        ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13673
                     ]) inspect.
1509
096ed5c04883 pixel processing
Claus Gittinger <cg@exept.de>
parents: 1496
diff changeset
 13674
    "
1510
8b56c96a9e9d pixel processing
Claus Gittinger <cg@exept.de>
parents: 1509
diff changeset
 13675
    "fisheye effect:
8b56c96a9e9d pixel processing
Claus Gittinger <cg@exept.de>
parents: 1509
diff changeset
 13676
8b56c96a9e9d pixel processing
Claus Gittinger <cg@exept.de>
parents: 1509
diff changeset
 13677
     |i w h w2 h2 R white|
8b56c96a9e9d pixel processing
Claus Gittinger <cg@exept.de>
parents: 1509
diff changeset
 13678
8497
2562e07421bb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8482
diff changeset
 13679
     i := Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif'.
1510
8b56c96a9e9d pixel processing
Claus Gittinger <cg@exept.de>
parents: 1509
diff changeset
 13680
     i inspect.
8b56c96a9e9d pixel processing
Claus Gittinger <cg@exept.de>
parents: 1509
diff changeset
 13681
     w := i width - 1.
8b56c96a9e9d pixel processing
Claus Gittinger <cg@exept.de>
parents: 1509
diff changeset
 13682
     h := i height - 1.
8b56c96a9e9d pixel processing
Claus Gittinger <cg@exept.de>
parents: 1509
diff changeset
 13683
     w2 := w // 2.
8b56c96a9e9d pixel processing
Claus Gittinger <cg@exept.de>
parents: 1509
diff changeset
 13684
     h2 := h // 2.
8b56c96a9e9d pixel processing
Claus Gittinger <cg@exept.de>
parents: 1509
diff changeset
 13685
     R := w2.
8b56c96a9e9d pixel processing
Claus Gittinger <cg@exept.de>
parents: 1509
diff changeset
 13686
     white := i valueFromColor:Color white.
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 13687
     (i withPixelFunctionAppliedToPixels:[:oldImage :oldPixel :x :y |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13688
                        |p r a nR nP nX nY|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13689
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13690
                        p := (x-w2)@(y-h2).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13691
                        r := p r.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13692
                        a := p theta.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13693
                        nR := r * r / R.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13694
                        nP := Point r:nR theta:a.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13695
                        nX := (nP x+w2) rounded.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13696
                        nY := (nP y+h2) rounded.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13697
                        (nX > w or:[nX < 0]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13698
                            white
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13699
                        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13700
                            (nY > h or:[nY < 0]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13701
                                white
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13702
                            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13703
                                oldImage pixelAtX:nX y:nY
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13704
                            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13705
                        ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13706
                     ]) inspect.
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 13707
    "
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 13708
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 13709
    "Created: 24.4.1997 / 18:37:17 / cg"
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 13710
    "Modified: 24.4.1997 / 18:40:02 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13711
! !
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13712
3870
8245e3f37feb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3868
diff changeset
 13713
!Image methodsFor:'initialization'!
8245e3f37feb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3868
diff changeset
 13714
3912
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
 13715
createPixelStore
8194
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 13716
    "instantiate the underlying pixel storage (a byteArray)"
fe51bde40cac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8190
diff changeset
 13717
3912
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
 13718
    |bytesPerRow|
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
 13719
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
 13720
    bytesPerRow := self bytesPerRow.
5643
bf38d077884a changed:
Claus Gittinger <cg@exept.de>
parents: 5533
diff changeset
 13721
    self bits:(ByteArray new:(bytesPerRow * self height)).
bf38d077884a changed:
Claus Gittinger <cg@exept.de>
parents: 5533
diff changeset
 13722
bf38d077884a changed:
Claus Gittinger <cg@exept.de>
parents: 5533
diff changeset
 13723
    "Modified: / 02-11-2010 / 20:57:11 / cg"
3912
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
 13724
!
a16c7edceb0a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3911
diff changeset
 13725
3871
a7867fb8d880 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3870
diff changeset
 13726
initialize
3870
8245e3f37feb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3868
diff changeset
 13727
    self photometric:(self class defaultPhotometric)
8245e3f37feb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3868
diff changeset
 13728
! !
8245e3f37feb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3868
diff changeset
 13729
5037
2e515c9ee849 changed #valueFromColor:
Claus Gittinger <cg@exept.de>
parents: 4998
diff changeset
 13730
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13731
!Image methodsFor:'instance release'!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13732
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 13733
close
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 13734
    "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
 13735
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 13736
    deviceForm notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13737
        deviceForm destroy.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13738
        deviceForm := nil.
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 13739
    ].
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 13740
    monoDeviceForm notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13741
        monoDeviceForm destroy.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13742
        monoDeviceForm := nil.
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 13743
    ].
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 13744
    fullColorDeviceForm notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13745
        fullColorDeviceForm destroy.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13746
        fullColorDeviceForm := nil.
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 13747
    ].
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 13748
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 13749
    device := nil.
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 13750
    mask notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13751
        mask close.
1650
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 13752
    ].
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 13753
    Lobby unregister:self.
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 13754
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 13755
    "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
 13756
    "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
 13757
!
eb56b36925fc skip leading empty space in hardRotated (10-20% speedup);
Claus Gittinger <cg@exept.de>
parents: 1646
diff changeset
 13758
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13759
release
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13760
    "release device resources"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13761
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13762
    device := nil.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13763
    deviceForm := nil.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13764
    monoDeviceForm := nil.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13765
    fullColorDeviceForm := nil.
901
6cacd0f4eef0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 896
diff changeset
 13766
    mask notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13767
        mask release.
901
6cacd0f4eef0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 896
diff changeset
 13768
    ].
6cacd0f4eef0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 896
diff changeset
 13769
    Lobby unregister:self.
1746
72a583dd30bd must not forget super release
Claus Gittinger <cg@exept.de>
parents: 1739
diff changeset
 13770
    super release.
72a583dd30bd must not forget super release
Claus Gittinger <cg@exept.de>
parents: 1739
diff changeset
 13771
72a583dd30bd must not forget super release
Claus Gittinger <cg@exept.de>
parents: 1739
diff changeset
 13772
    "Modified: 11.6.1997 / 13:20:04 / cg"
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
 13773
!
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
 13774
4226
dcd06fa84d2c *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4187
diff changeset
 13775
releaseFromDevice
dcd06fa84d2c *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4187
diff changeset
 13776
    "release device resources"
dcd06fa84d2c *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4187
diff changeset
 13777
dcd06fa84d2c *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4187
diff changeset
 13778
    device := nil.
dcd06fa84d2c *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4187
diff changeset
 13779
    deviceForm := nil.
dcd06fa84d2c *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4187
diff changeset
 13780
    monoDeviceForm := nil.
dcd06fa84d2c *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4187
diff changeset
 13781
    fullColorDeviceForm := nil.
dcd06fa84d2c *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4187
diff changeset
 13782
7573
656c59bc93ad #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7565
diff changeset
 13783
4226
dcd06fa84d2c *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4187
diff changeset
 13784
    "Modified: 16.1.1997 / 19:33:01 / cg"
dcd06fa84d2c *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4187
diff changeset
 13785
!
dcd06fa84d2c *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4187
diff changeset
 13786
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13787
restored
7895
cd3eef1d2398 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7887
diff changeset
 13788
    "flush device specifics after a snapin or binary restore.
cd3eef1d2398 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7887
diff changeset
 13789
     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
 13790
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13791
    self release
7895
cd3eef1d2398 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7887
diff changeset
 13792
cd3eef1d2398 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7887
diff changeset
 13793
    "Modified (comment): / 16-02-2017 / 12:36:26 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13794
! !
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13795
2227
7aa9e2a8d321 added #edit - to open an image editor.
Claus Gittinger <cg@exept.de>
parents: 2212
diff changeset
 13796
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
 13797
!Image methodsFor:'obsolete'!
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
 13798
3911
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13799
applyPixelValuesTo:pixelFunctionBlock into:newImage in:aRectangle
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13800
    "helper for withPixelFunctionAppliedToValues:
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13801
     enumerate pixelValues and evaluate the block for each.
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13802
     To be redefined by subclasses for better performance."
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13803
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 13804
    ^ self applyPixelValuesTo:pixelFunctionBlock in:aRectangle into:newImage
3911
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13805
!
a3c84de217fe pixel function application refactored
Claus Gittinger <cg@exept.de>
parents: 3908
diff changeset
 13806
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
 13807
magnifyBy:scale
5216
f7ec910cfce1 Mark obsolete methods
Stefan Vogel <sv@exept.de>
parents: 5200
diff changeset
 13808
    <resource: #obsolete>
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
 13809
    "obsolete: has been renamed to magnifiedBy: for ST-80 compatibility
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
 13810
     and name consistency ..."
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
 13811
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
 13812
    self obsoleteMethodWarning.
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
 13813
    ^ self magnifiedBy:scale
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
 13814
! !
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
 13815
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13816
!Image methodsFor:'pixel copying'!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13817
8301
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13818
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
 13819
    "operates on pixel values.
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13820
     Any mask is left unchanged.
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13821
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13822
     WARNING:
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13823
       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
 13824
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13825
       This implementation is a very slow fallback general algorithm
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13826
       (the loop over the source pixels is very slow).
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13827
       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
 13828
       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
 13829
       with the same depth & palette.
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13830
       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
 13831
       for other cases, rewriting the inner loops as inline C-code."
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13832
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13833
    |dX dY op|
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13834
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13835
    dX := srcX-dstX.
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13836
    dY := srcY-dstY.
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13837
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13838
    function == #copy ifTrue:[
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13839
        anImage 
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13840
            valuesFromX:srcX  y:srcY
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13841
            toX:srcX+w-1 y:srcY+h-1
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13842
            do:[:x :y :pixelValue |
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13843
                self pixelAtX:x-dX y:y-dY put:pixelValue.
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13844
            ].
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13845
        ^ self.
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13846
    ].
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13847
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13848
    function == #xor ifTrue:[
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13849
        op := [:a :b | a bitXor:b]
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13850
    ] ifFalse:[
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13851
        function == #and ifTrue:[
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13852
            op := [:a :b | a bitAnd:b]
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13853
        ] ifFalse:[
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13854
            function == #or ifTrue:[
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13855
                op := [:a :b | a bitOr:b]
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13856
            ] ifFalse:[
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13857
                self halt
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13858
            ].
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13859
        ].
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13860
    ].
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13861
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13862
    anImage 
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13863
        valuesFromX:srcX  y:srcY
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13864
        toX:srcX+w-1 y:srcY+h-1
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13865
        do:[:x :y :pixelValue1 |
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13866
            |pixelValue2|
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13867
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13868
            pixelValue2 := self pixelAtX:x-dX y:y-dY.
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13869
            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
 13870
        ]
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13871
!
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13872
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13873
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
 13874
    "replace a rectangular area by pixels from another image.
7552
6d862b1829d9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7551
diff changeset
 13875
     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
 13876
     colorMap - otherwise, an error will be reported.
4955
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13877
     Any mask is copied from the source.
1764
01101be8bd5c obsolete warning messages
Claus Gittinger <cg@exept.de>
parents: 1763
diff changeset
 13878
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13879
     WARNING:
1764
01101be8bd5c obsolete warning messages
Claus Gittinger <cg@exept.de>
parents: 1763
diff changeset
 13880
       This implementation is a very slow fallback general algorithm
01101be8bd5c obsolete warning messages
Claus Gittinger <cg@exept.de>
parents: 1763
diff changeset
 13881
       (the loop over the source pixels is very slow).
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 13882
       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
 13883
       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
 13884
       with the same depth & palette.
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 13885
       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
 13886
       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
 13887
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13888
    |dX dY|
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13889
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13890
    dX := srcX-dstX.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13891
    dY := srcY-dstY.
1248
6afcdec18986 commentary
Claus Gittinger <cg@exept.de>
parents: 1230
diff changeset
 13892
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13893
    ((photometric == anImage photometric)
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13894
     and:[self bitsPerPixel == anImage bitsPerPixel
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13895
     and:[colorMap = anImage colorMap]]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13896
        "/ can loop over values
8301
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13897
        anImage 
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13898
            valuesFromX:srcX  y:srcY
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13899
            toX:srcX+w-1 y:srcY+h-1
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13900
            do:[:x :y :pixelValue |
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13901
                |dstX dstY|
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
                dstX := x-dX.
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13904
                (dstX >= 0 and:[dstX < width]) ifTrue:[
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13905
                    dstY := y-dY.
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13906
                    (dstY >= 0 and:[dstY < height]) ifTrue:[
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13907
                        self pixelAtX:dstX y:dstY put:pixelValue.
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13908
                    ]
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13909
                ]
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13910
            ]
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13911
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13912
        "/ must loop over colors - horribly slow
8301
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13913
        anImage 
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13914
            colorsFromX:srcX  y:srcY
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13915
            toX:srcX+w-1 y:srcY+h-1
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13916
            do:[:x :y :clr |
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13917
                |dstX dstY|
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13918
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13919
                dstX := x-dX.
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13920
                (dstX >= 0 and:[dstX < width]) ifTrue:[
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13921
                    dstY := y-dY.
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13922
                    (dstY >= 0 and:[dstY < height]) ifTrue:[
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13923
                        self colorAtX:x-dX y:y-dY put:clr.
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13924
                    ]
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13925
                ]
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 13926
            ]
3457
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 13927
    ].
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 13928
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 13929
    (mask isNil and:[anImage mask notNil]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13930
        "/ I have no mask; copied image has
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13931
        self createMask.
3457
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 13932
    ].
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 13933
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 13934
    mask notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13935
        anImage mask notNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13936
            "/ both have a mask
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13937
            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
 13938
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13939
            "/ I have a mask - copied image has not
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13940
            mask fillRectangleX:dstX y:dstY width:w height:h withValue:1
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13941
        ]
3457
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 13942
"/    ] ifFalse:[
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 13943
"/        anImage mask notNil ifTrue:[
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 13944
"/            "/ I have no mask; copied image has (already handled)
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 13945
"/        ] ifFalse:[
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 13946
"/            "/ none has a mask - nothing to do.
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 13947
"/        ]
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 13948
    ].
9b8d928f53df *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3448
diff changeset
 13949
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13950
    "
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13951
     |i1 i8 i4|
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13952
7552
6d862b1829d9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7551
diff changeset
 13953
     i8 := Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif'.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13954
     i8 inspect.
7552
6d862b1829d9 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7551
diff changeset
 13955
     i1 := Image fromFile:'../../libtool/bitmaps/SBrowser.xbm'.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13956
     i1 inspect.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13957
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13958
     i4 := Depth4Image fromImage:i8.
1764
01101be8bd5c obsolete warning messages
Claus Gittinger <cg@exept.de>
parents: 1763
diff changeset
 13959
     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
 13960
     i4 inspect.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13961
    "
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13962
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13963
    "Created: 20.9.1995 / 10:14:01 / claus"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13964
    "Modified: 20.9.1995 / 10:25:31 / claus"
1764
01101be8bd5c obsolete warning messages
Claus Gittinger <cg@exept.de>
parents: 1763
diff changeset
 13965
    "Modified: 21.6.1997 / 13:15:31 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13966
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 13967
4955
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13968
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
 13969
    "replace a rectangular area by pixels from another image.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13970
     The sources colors must be present in the destinations
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13971
     colorMap - otherwise, an error will be reported.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13972
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13973
     WARNING:
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13974
       This implementation is a very slow fallback general algorithm
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13975
       (the loop over the source pixels is very slow).
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13976
       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
 13977
       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
 13978
       with the same depth & palette.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13979
       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
 13980
       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
 13981
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13982
    maskedCopy ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13983
        self
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13984
            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
 13985
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13986
        self
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 13987
            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
 13988
    ].
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13989
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13990
    "
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13991
     |i1 i8 i4|
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13992
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13993
     i8 := Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif'.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13994
     i8 inspect.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13995
     i1 := Image fromFile:'../../goodies/bitmaps/xbmBitmaps/TicTacToe.xbm'.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13996
     i1 inspect.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13997
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13998
     i4 := Depth4Image fromImage:i8.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 13999
     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
 14000
     i4 inspect.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14001
    "
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14002
!
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
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
 14005
    "replace a rectangular area by pixels from another image.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14006
     The sources colors must be present in the destinations
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14007
     colorMap - otherwise, an error will be reported.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14008
     Only unmasked pixels are copied from the source.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14009
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14010
     WARNING:
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14011
       This implementation is a very slow fallback general algorithm
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14012
       (the loop over the source pixels is very slow).
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14013
       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
 14014
       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
 14015
       with the same depth & palette.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14016
       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
 14017
       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
 14018
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14019
    |dX dY|
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
    dX := srcX-dstX.
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14022
    dY := srcY-dstY.
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
    ((photometric == anImage photometric)
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14025
     and:[self bitsPerPixel == anImage bitsPerPixel
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14026
     and:[colorMap = anImage colorMap]]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14027
        "/ can loop over values
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14028
        anImage valuesFromX:srcX  y:srcY
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14029
                        toX:srcX+w-1 y:srcY+h-1
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14030
                         do:[:x :y :pixelValue |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14031
            (anImage maskAtX:x y:y) ~~ 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14032
                self pixelAtX:x-dX y:y-dY put:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14033
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14034
        ]
4955
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14035
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14036
        "/ must loop over colors - horribly slow
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14037
        anImage colorsFromX:srcX  y:srcY
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14038
                        toX:srcX+w-1 y:srcY+h-1
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14039
                         do:[:x :y :clr |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14040
            (anImage maskAtX:x y:y) ~~ 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14041
                self colorAtX:x-dX y:y-dY put:clr.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14042
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14043
        ]
4955
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14044
    ].
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14045
!
663362ee10e4 line drawing, masked copying
Claus Gittinger <cg@exept.de>
parents: 4953
diff changeset
 14046
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14047
subImageIn:aRectangle
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14048
    "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
 14049
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14050
    ^ self class fromSubImage:self in:aRectangle
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14051
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14052
    "
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14053
     |i|
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14054
4168
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
 14055
     i := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14056
     i inspect.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14057
     (i subImageIn:(300@160 corner:340@200)) inspect
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14058
    "
7551
a58984867d2f #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7537
diff changeset
 14059
    "
a58984867d2f #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7537
diff changeset
 14060
     |i|
a58984867d2f #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7537
diff changeset
 14061
a58984867d2f #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7537
diff changeset
 14062
     i := Image fromFile:'/Volumes/tmp/fillimage.ok.png'.
a58984867d2f #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7537
diff changeset
 14063
     i inspect.
a58984867d2f #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7537
diff changeset
 14064
     (i subImageIn:(0@0 corner:i width@i height)) inspect
a58984867d2f #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7537
diff changeset
 14065
    "
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14066
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14067
    "Created: 20.9.1995 / 01:24:20 / claus"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14068
! !
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14069
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14070
!Image methodsFor:'pixel functions'!
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14071
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14072
computeBitsFromPixelFunction
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14073
    "compute the bits from the pixelfunction"
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14074
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 14075
    |bpr|
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14076
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14077
    bpr := self bytesPerRow.
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14078
    bytes := ByteArray new:(bpr * height).
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14079
    0 to:height-1 do:[:y |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14080
        0 to:width-1 do:[:x |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14081
            self pixelAtX:x y:y put:(pixelFunction value:x value:y).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14082
        ]
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14083
    ].
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 14084
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 14085
    "Modified: / 31-01-2017 / 14:39:26 / stefan"
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14086
!
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14087
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14088
pixelFunction
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14089
    ^ pixelFunction
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14090
!
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14091
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14092
pixelFunction:aTwoArgFunction
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14093
    "set the pixel function. This is used to define a functional image,
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14094
     where pixel values are computed via a function instead of coming
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14095
     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
 14096
     a pixel function).
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14097
     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
 14098
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14099
    pixelFunction := aTwoArgFunction.
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14100
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14101
    "
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14102
     |i|
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14103
     i := Depth1Image extent:256@256.
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14104
     i pixelFunction:[:x :y | ((x // 16) bitXor:(y // 16)) odd asInteger].
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14105
     i inspect.
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14106
    "
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
    "
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14109
     |i|
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14110
     i := Depth8Image extent:256@256.
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14111
     i photometric:#blackIs0.
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14112
     i pixelFunction:[:x :y | x  ].
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14113
     i inspect.
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14114
    "
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14115
!
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14116
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14117
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
 14118
    "set the pixel function and a viewport.
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14119
     This is used to define a functional image,
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14120
     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
 14121
     from a bits array.
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14122
     The pixelFunction will map (x E xInterval) x (y E yInterval) -> pixel"
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14123
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14124
    |sX sY tX tY|
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14125
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14126
    "/ intervals are typically 0..1
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14127
    sX := (xInterval stop - xInterval start) asFloat / width.
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14128
    sY := (yInterval stop - yInterval start) asFloat / height.
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14129
    tX := xInterval start.
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14130
    tY := yInterval start.
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14131
7373
61933c223183 added metaData instVar (for free use by image reader)
Claus Gittinger <cg@exept.de>
parents: 7363
diff changeset
 14132
    pixelFunction :=
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14133
        [:x :y |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14134
            aTwoArgFunction value:(x * sX + tX) value:(y * sY + tY)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14135
        ]
6305
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14136
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
     |i|
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14139
     i := Depth8Image extent:256@256.
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14140
     i photometric:#blackIs0.
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14141
     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
 14142
     i inspect.
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14143
    "
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14144
! !
f95708ed5bcb functional images
Claus Gittinger <cg@exept.de>
parents: 6284
diff changeset
 14145
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14146
!Image methodsFor:'printing & storing'!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14147
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14148
storeOn:aStream
592
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
 14149
    "append a printed representation of the receiver to aStream,
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
 14150
     from which a copy of it can be reconstructed."
7fdd92afbbce commentary
Claus Gittinger <cg@exept.de>
parents: 579
diff changeset
 14151
6900
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
 14152
    |colors usedValues colorMapArray needBPS needSemi|
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
 14153
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
 14154
    needSemi := false.
7373
61933c223183 added metaData instVar (for free use by image reader)
Claus Gittinger <cg@exept.de>
parents: 7363
diff changeset
 14155
    aStream nextPutAll:('(%1 width:%2 height:%3'
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14156
                            bindWith:self class name
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14157
                            with:width
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14158
                            with:height).
6311
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
 14159
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
 14160
    "/ 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
 14161
    "/ no need for the photometric, if it's the default anyway
6311
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
 14162
    photometric ~= self class defaultPhotometric ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14163
        (colorMap isNil or:[photometric ~~ #palette]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14164
            aStream nextPutAll:' photometric:('. photometric storeOn:aStream. aStream nextPut:$).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14165
        ].
6311
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
 14166
    ].
7349
361f96216120 #OTHER by stefan
Stefan Vogel <sv@exept.de>
parents: 7292
diff changeset
 14167
    aStream nextPut:$).
6311
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
 14168
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
 14169
    "/ no need to store bitPerSample/samplesPerPixel in all situations
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
 14170
    needBPS := true.
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
 14171
7373
61933c223183 added metaData instVar (for free use by image reader)
Claus Gittinger <cg@exept.de>
parents: 7363
diff changeset
 14172
    self depth == 1
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14173
        ifTrue:[ needBPS := false ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14174
        ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14175
            ((photometric == #palette)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14176
                and:[ (bitsPerSample size == 1)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14177
                and:[ ((bitsPerSample at:1) == self depth)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14178
                and:[ samplesPerPixel == 1 ]]])
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14179
            ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14180
                needBPS := false.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14181
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14182
        ].
6311
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
 14183
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
 14184
    needBPS ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14185
        needSemi ifTrue:[aStream nextPutAll:';'].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14186
        aStream nextPutAll:' bitsPerSample:('. bitsPerSample storeOn:aStream. aStream nextPutAll:')'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14187
        samplesPerPixel ~= bitsPerSample size ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14188
            aStream nextPutAll:'; samplesPerPixel:('. samplesPerPixel storeOn:aStream. aStream nextPutAll:')'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14189
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14190
        needSemi := true.
6311
0986d91407d9 class: Image
Claus Gittinger <cg@exept.de>
parents: 6308
diff changeset
 14191
    ].
5533
2e7c216c76cf comment/format in: #storeOn:
Claus Gittinger <cg@exept.de>
parents: 5508
diff changeset
 14192
2e7c216c76cf comment/format in: #storeOn:
Claus Gittinger <cg@exept.de>
parents: 5508
diff changeset
 14193
    "/ assert that all bits are there...
2e7c216c76cf comment/format in: #storeOn:
Claus Gittinger <cg@exept.de>
parents: 5508
diff changeset
 14194
    "/ self assert:(self bits size) >= (self bytesPerRow * height).
2e7c216c76cf comment/format in: #storeOn:
Claus Gittinger <cg@exept.de>
parents: 5508
diff changeset
 14195
    "/ 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
 14196
6900
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
 14197
    needSemi ifTrue:[aStream nextPutAll:';'].
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
 14198
    aStream nextPutAll:' bits:(ByteArray fromPackedString:'. self bits asPackedString storeOn:aStream.
ad20df4aec7a class: Image
Claus Gittinger <cg@exept.de>
parents: 6899
diff changeset
 14199
    aStream nextPutAll:')'.
2068
3bc8754883ae store on the color map in an array of rgb-byte values
tz
parents: 2059
diff changeset
 14200
4187
411b7b76a8bb fixedPalette has more functionality
Claus Gittinger <cg@exept.de>
parents: 4175
diff changeset
 14201
    colorMap notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14202
        self depth <= 8 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14203
            "/ cut off unused colors ...
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14204
            usedValues := self usedValues.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14205
            colors := colorMap copyFrom:1 to:((usedValues max+1) min:colorMap size).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14206
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14207
            colorMapArray := OrderedCollection new.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14208
            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
 14209
            aStream cr; spaces:12; nextPutAll:'colorMapFromArray:'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14210
            colorMapArray asByteArray storeOn:aStream.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14211
        ] ifFalse:[
7834
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
 14212
            false ifTrue:[
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
 14213
                aStream cr; spaces:12; nextPutAll:'colorMap:('.
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
 14214
                colorMap storeOn:aStream.
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
 14215
                aStream nextPutAll:')'
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
 14216
            ]
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14217
        ]
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 14218
    ].
4187
411b7b76a8bb fixedPalette has more functionality
Claus Gittinger <cg@exept.de>
parents: 4175
diff changeset
 14219
    mask notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14220
        aStream cr; spaces:12; nextPutAll:'mask:('.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14221
        mask storeOn:aStream.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14222
        aStream nextPutAll:')'.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14223
    ].
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14224
    aStream nextPutAll:'; yourself'
2266
72460683cc97 fixed maskedPixelsAre0 flag setting when copying images.
Claus Gittinger <cg@exept.de>
parents: 2249
diff changeset
 14225
7834
329ce8391689 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7824
diff changeset
 14226
    "Modified: / 03-02-2017 / 16:56:29 / cg"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
 14227
! !
48194c26a46c Initial revision
claus
parents:
diff changeset
 14228
48194c26a46c Initial revision
claus
parents:
diff changeset
 14229
!Image methodsFor:'private'!
48194c26a46c Initial revision
claus
parents:
diff changeset
 14230
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
 14231
bestSupportedImageFormatFor:aDevice
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
 14232
    "scan through the image formats as supported by aDevice,
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
 14233
     and return the best to use when the receiver is to be represented
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
 14234
     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
 14235
     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
 14236
2530
81b8ffe7662f use new supportedImageFormat query from Device
Claus Gittinger <cg@exept.de>
parents: 2527
diff changeset
 14237
    |bestDeviceDepth
81b8ffe7662f use new supportedImageFormat query from Device
Claus Gittinger <cg@exept.de>
parents: 2527
diff changeset
 14238
     bestDeviceBitsPerPixel "{ Class: SmallInteger }"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 14239
     "maxDepth"
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 14240
     bestInfo maxInfo
2530
81b8ffe7662f use new supportedImageFormat query from Device
Claus Gittinger <cg@exept.de>
parents: 2527
diff changeset
 14241
     myDepth                "{ Class: SmallInteger }"
81b8ffe7662f use new supportedImageFormat query from Device
Claus Gittinger <cg@exept.de>
parents: 2527
diff changeset
 14242
     maxBitsPerPixel        "{ Class: SmallInteger }"|
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
 14243
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
 14244
    myDepth := self bitsPerPixel.
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
 14245
    maxBitsPerPixel := 0.
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
 14246
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
 14247
    aDevice supportedImageFormats do:[:entry |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14248
        |deviceImageDepth        "{ Class: SmallInteger }"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14249
         deviceImageBitsPerPixel "{ Class: SmallInteger }" |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14250
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14251
        deviceImageDepth := entry at:#depth.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14252
        deviceImageBitsPerPixel := entry at:#bitsPerPixel.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14253
8141
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
 14254
        "/ 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
 14255
        "/ (actually, many devices can handle other pixMap formats,
8141
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
 14256
        "/  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
 14257
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14258
        ((deviceImageDepth == 1) or:[deviceImageDepth == aDevice depth]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14259
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14260
            deviceImageBitsPerPixel > maxBitsPerPixel ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14261
                maxInfo := entry.
8141
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
 14262
                "/ maxBitsPerPixel := deviceImageBitsPerPixel.
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
 14263
                "/ maxDepth := deviceImageDepth.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14264
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14265
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14266
            deviceImageDepth >= myDepth ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14267
                deviceImageDepth == myDepth ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14268
                    "/ take the better one ...
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14269
                    (bestDeviceDepth isNil
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14270
                     or:[(bestDeviceBitsPerPixel ~~ bestDeviceDepth)
8141
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
 14271
                        and:[deviceImageDepth == deviceImageBitsPerPixel]]
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
 14272
                    ) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14273
                        bestInfo := entry.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14274
                        bestDeviceDepth := deviceImageDepth.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14275
                        bestDeviceBitsPerPixel := deviceImageBitsPerPixel.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14276
                    ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14277
                ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14278
                    "/ take the next-larger depth
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14279
                    (bestDeviceDepth isNil
8141
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
 14280
                     or:[deviceImageBitsPerPixel < bestDeviceBitsPerPixel]
c4b680a69618 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8136
diff changeset
 14281
                    ) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14282
                        bestInfo := entry.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14283
                        bestDeviceDepth := deviceImageDepth.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14284
                        bestDeviceBitsPerPixel := deviceImageBitsPerPixel.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14285
                    ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14286
                ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14287
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14288
        ].
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
 14289
    ].
851
c9511f8945ce fixed bug in bestSupportedImageFormat (with 15-bit trueColor servers)
Claus Gittinger <cg@exept.de>
parents: 841
diff changeset
 14290
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
 14291
    bestDeviceDepth isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14292
        maxBitsPerPixel == 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14293
            "/
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14294
            "/ oops - nothing appropriate
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14295
            "/
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14296
            maxInfo notNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14297
                ^ maxInfo
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
            bestDeviceDepth := bestDeviceBitsPerPixel := aDevice depth.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14300
            bestInfo := IdentityDictionary new.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14301
            bestInfo at:#depth put:bestDeviceDepth.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14302
            bestInfo at:#bitsPerPixel put:bestDeviceBitsPerPixel.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14303
            bestInfo at:#padding put:32.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14304
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14305
            bestInfo := maxInfo.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14306
        ]
193
Claus Gittinger <cg@exept.de>
parents: 191
diff changeset
 14307
    ].
235
579f3f804a46 padding info in supportedFormats
Claus Gittinger <cg@exept.de>
parents: 230
diff changeset
 14308
    ^ bestInfo
579f3f804a46 padding info in supportedFormats
Claus Gittinger <cg@exept.de>
parents: 230
diff changeset
 14309
2050
d1f21c75b5eb when asking a device for its supported pixmap formats,
Claus Gittinger <cg@exept.de>
parents: 2043
diff changeset
 14310
    "Modified: / 7.2.1998 / 11:23:24 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14311
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14312
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14313
colormapFromImage:anImage
7242
bf3a75233d55 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 7230
diff changeset
 14314
    "setup the receiver's colormap from another image.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14315
     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
 14316
     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
 14317
     for fromImage:/fromSubImake:"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14318
3259
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
 14319
    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
 14320
!
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
 14321
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
 14322
colormapFromImage:anImage photometric:photometricOrNil
7242
bf3a75233d55 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 7230
diff changeset
 14323
    "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
 14324
     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
 14325
     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
 14326
     for fromImage:/fromSubImake:"
85e0044678b5 fixed conversion from rgb to palette image (for gif-saving)
Claus Gittinger <cg@exept.de>
parents: 3256
diff changeset
 14327
2447
5b3d802d602b allow Image fromImage with rgb source-image and palette receiver
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
 14328
    |usedColors|
5b3d802d602b allow Image fromImage with rgb source-image and palette receiver
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
 14329
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14330
    samplesPerPixel == 3 ifTrue:[
7916
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14331
        photometric := photometricOrNil ? #rgb.
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14332
        ^ self.
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14333
    ].
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14334
    samplesPerPixel == 4 ifTrue:[
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14335
        photometric := photometricOrNil ? #rgba.
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14336
        ^ self.
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14337
    ].
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14338
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14339
    photometricOrNil isNil ifTrue:[
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14340
        photometric := anImage photometric.
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14341
    ] ifFalse:[
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14342
        photometric := photometricOrNil.
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14343
    ].
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14344
    
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14345
    photometric == #palette ifTrue:[
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14346
        self setColorMap:(anImage colorMap copy).
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14347
        "
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14348
         must generate/compress the colormap, if source image has higher depth
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14349
         than myself.
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14350
        "
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14351
        (colorMap isNil
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14352
        or:[anImage bitsPerPixel > self bitsPerPixel]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14353
            "
7916
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14354
             get used colors are extracted into our colorMap
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14355
             (the at-put below will set the pixelValue according the
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14356
             new colorIndex
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14357
            "
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14358
            self setColorMap:(anImage usedColors asArray).
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14359
            colorMap size > (1 bitShift:self bitsPerPixel) ifTrue:[
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14360
                'Image [warning]: possibly too many colors in image' errorPrintCR
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14361
            ]
7916
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14362
        ].
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14363
        ^ self.
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14364
    ].
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14365
    
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14366
    (photometric == #blackIs0 or:[ photometric == #whiteIs0 ]) ifTrue:[
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14367
        ^ self. "/ nothing to do
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14368
    ].
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14369
    
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14370
    usedColors := anImage usedColors asArray.
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14371
    usedColors size > (1 bitShift:self bitsPerPixel) ifTrue:[
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14372
        'Image [warning]: possibly too many colors in image' errorPrintCR.
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14373
        usedColors := usedColors copyTo:(1 bitShift:self bitsPerPixel).
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14374
    ].
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14375
    self setColorMap:usedColors.
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14376
    photometric := #palette
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
    "Created: / 20-09-1995 / 00:58:42 / claus"
eb973a816455 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7915
diff changeset
 14379
    "Modified: / 20-02-2017 / 18:16:26 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14380
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14381
7637
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 14382
fromDeviceForm:aForm maskForm:aMaskFormOrNil
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 14383
    device := aForm device.
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 14384
    self assert:device notNil.
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 14385
    photometric := aForm photometric.
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 14386
    deviceForm := aForm.
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 14387
    width := aForm width.
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 14388
    height := aForm height.
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 14389
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 14390
    aMaskFormOrNil notNil ifTrue:[
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 14391
        mask := Image fromDeviceForm:aMaskFormOrNil maskForm:nil.
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 14392
    ].
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 14393
!
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 14394
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14395
greyByteMapForRange:range
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 14396
    "return a collection to map from pixelValues to greyLevels
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 14397
     in the range 0..range.
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14398
     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
 14399
     The values are rounded towards the nearest pixel."
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 14400
1403
4b132381579e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1386
diff changeset
 14401
    |d clr val greyMap r
4b132381579e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1386
diff changeset
 14402
     n "{ Class: SmallInteger }"|
808
f548a3c6ca8c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 804
diff changeset
 14403
f548a3c6ca8c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 804
diff changeset
 14404
    r := range.
f548a3c6ca8c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 804
diff changeset
 14405
    r == 256 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14406
        r := 255
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 14407
    ].
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 14408
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 14409
    photometric == #palette ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14410
        n := colorMap size.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14411
        greyMap := ByteArray new:n.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14412
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14413
        1 to:n do:[:i |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14414
            (clr := colorMap at:i) isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14415
                "/ an unused color
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14416
                val := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14417
            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14418
                val := (r * clr brightness) rounded
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14419
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14420
            greyMap at:i put:val
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14421
        ].
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 14422
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14423
        d := self bitsPerPixel.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14424
        n := 1 bitShift:d.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14425
        n >= 4096 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14426
            self error:'size not supported - too large'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14427
            ^ nil
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14428
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14429
        greyMap := ByteArray new:n.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14430
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14431
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14432
        photometric == #rgb ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14433
            1 to:n do:[:i |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14434
                greyMap at:i put:(r * (self colorFromValue:i-1) brightness) rounded
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14435
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14436
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14437
            1 to:n do:[:i |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14438
                greyMap at:i put:(r / (n-1) * (i-1)) rounded
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14439
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14440
            photometric == #blackIs0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14441
                "/ we are done
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14442
            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14443
                photometric == #whiteIs0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14444
                    greyMap reverse
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14445
                ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14446
                    self error:'invalid format'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14447
                    ^ nil
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14448
                ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14449
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14450
        ].
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14451
    ].
808
f548a3c6ca8c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 804
diff changeset
 14452
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14453
    ^ greyMap
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14454
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14455
    "
808
f548a3c6ca8c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 804
diff changeset
 14456
     Depth8Image new greyByteMapForRange:256
f548a3c6ca8c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 804
diff changeset
 14457
f548a3c6ca8c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 804
diff changeset
 14458
     Depth8Image new greyByteMapForRange:64
f548a3c6ca8c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 804
diff changeset
 14459
     Depth4Image new greyByteMapForRange:64
f548a3c6ca8c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 804
diff changeset
 14460
f548a3c6ca8c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 804
diff changeset
 14461
     Depth4Image new greyByteMapForRange:1
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14462
    "
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14463
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14464
    "Created: 8.6.1996 / 08:34:14 / cg"
1403
4b132381579e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1386
diff changeset
 14465
    "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
 14466
!
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14467
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14468
greyMapForRange:range
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14469
    "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
 14470
     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
 14471
1403
4b132381579e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1386
diff changeset
 14472
    |d r clr val
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
 14473
     n "{Class: SmallInteger }"
1927
d1bbdf03e5a1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1919
diff changeset
 14474
     n2 "{Class: SmallInteger }"
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
 14475
     greyArray|
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14476
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14477
    d := self bitsPerPixel.
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14478
    n := 1 bitShift:d.
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14479
    n >= 4096 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14480
        self error:'size not supported - too large'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14481
        ^ nil
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14482
    ].
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14483
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
 14484
    greyArray := Array new:n.
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14485
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14486
    photometric == #palette ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14487
        n2 := colorMap size.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14488
        1 to:n2 do:[:i |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14489
            (clr := colorMap at:i) isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14490
                "/ an unused color
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14491
                val := 0.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14492
            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14493
                val := range * clr brightness
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14494
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14495
            greyArray at:i put:val
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14496
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14497
        n2 < n ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14498
            greyArray from:n2+1 to:n put:0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14499
        ]
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14500
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14501
        photometric == #rgb ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14502
            1 to:n do:[:i |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14503
                greyArray at:i put:(range * (self colorFromValue:(i-1)) brightness)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14504
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14505
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14506
            r := range asFloat.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14507
            1 to:n do:[:i |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14508
                greyArray at:i put:(r / (n-1) * (i-1))
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14509
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14510
            photometric == #blackIs0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14511
                "/ we are done
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14512
            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14513
                photometric == #whiteIs0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14514
                    greyArray reverse
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14515
                ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14516
                    self error:'invalid format'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14517
                    ^ nil
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14518
                ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14519
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14520
        ]
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 14521
    ].
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
 14522
    ^ greyArray
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 14523
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 14524
    "
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 14525
     Depth8Image new greyMapForRange:64
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 14526
     Depth4Image new greyMapForRange:64
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 14527
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
 14528
     Depth16Image new greyMapForRange:1
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 14529
     Depth4Image new greyMapForRange:1
809
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
 14530
     Depth2Image new greyMapForRange:1
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
 14531
    "
f66955a8200e more dithering (multi-plane & monochrome floyd-steinberg)
Claus Gittinger <cg@exept.de>
parents: 808
diff changeset
 14532
1403
4b132381579e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1386
diff changeset
 14533
    "Modified: 1.3.1997 / 15:48:49 / cg"
798
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 14534
!
31ed4a1d4b4a better dither
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
 14535
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 14536
magnifyRowFrom:srcBytes offset:srcStart
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14537
          into:dstBytes offset:dstStart factor:mX
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14538
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14539
    "magnify a single pixel row - can only magnify by integer factors,
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14540
     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
 14541
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14542
    ^ self subclassResponsibility
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
 14543
!
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
 14544
816
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14545
makeDeviceGrayPixmapOn:aDevice depth:depth fromArray:bits
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14546
    "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
 14547
     pixels interpreted as greyValues, 0 is black,
816
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14548
     create a device form for it"
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14549
7755
75f5eba88e77 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 7689
diff changeset
 14550
    |f gcId|
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
 14551
4780
03c3e810a584 Change senders of obsolete messages Form>>...on: to ...onDevice:
Stefan Vogel <sv@exept.de>
parents: 4769
diff changeset
 14552
    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
 14553
    f isNil ifTrue:[^ nil].
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
 14554
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
 14555
    f bits:bits.
7755
75f5eba88e77 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 7689
diff changeset
 14556
    gcId := f initGC.
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
 14557
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
 14558
    (aDevice blackpixel ~~ 0) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14559
        "/ have to invert bits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14560
        f function:#copyInverted
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
 14561
    ].
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 14562
    aDevice
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14563
        drawBits:bits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14564
        depth:depth
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14565
        padding:8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14566
        width:width height:height
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14567
        x:0 y:0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14568
        into:(f id)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14569
        x:0 y:0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14570
        width:width height:height
7755
75f5eba88e77 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 7689
diff changeset
 14571
        with:gcId.
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
 14572
    ^ f
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
 14573
816
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14574
    "Created: 10.6.1996 / 20:10:31 / cg"
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14575
!
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14576
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14577
makeDeviceMonochromeBitmapOn:aDevice fromArray:monoBits
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14578
    "given the bits of a monochrome bitmap, 8-bit padded and
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14579
     0-bits as black, create a device form for it"
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14580
1608
edf60801e6c0 comments
Claus Gittinger <cg@exept.de>
parents: 1605
diff changeset
 14581
"/    monoBits invert.
4769
0cabcf1481a0 Use Form class>>#width:height:fromArray:onDevice: instead of obsolete
Stefan Vogel <sv@exept.de>
parents: 4762
diff changeset
 14582
    ^ (Form width:width height:height fromArray:monoBits onDevice:aDevice)
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14583
        colorMap:(Array with:Color black with:Color white).
816
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14584
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14585
    "Created: 10.6.1996 / 20:18:09 / cg"
1608
edf60801e6c0 comments
Claus Gittinger <cg@exept.de>
parents: 1605
diff changeset
 14586
    "Modified: 17.4.1997 / 01:07:38 / cg"
816
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14587
!
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14588
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14589
makeDevicePixmapOn:aDevice depth:depth fromArray:bits
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14590
    "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
 14591
     pixels interpreted as in the devices colormap,
816
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14592
     create a device form for it"
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14593
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14594
    |f|
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14595
4780
03c3e810a584 Change senders of obsolete messages Form>>...on: to ...onDevice:
Stefan Vogel <sv@exept.de>
parents: 4769
diff changeset
 14596
    f := Form width:width height:height depth:depth onDevice:aDevice.
816
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14597
    f isNil ifTrue:[^ nil].
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14598
    f bits:bits.
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14599
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 14600
    aDevice
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14601
        drawBits:bits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14602
        depth:depth
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14603
        padding:8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14604
        width:width height:height
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14605
        x:0 y:0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14606
        into:(f id)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14607
        x:0 y:0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14608
        width:width height:height
7755
75f5eba88e77 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 7689
diff changeset
 14609
        with:(f initGC).
816
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14610
    ^ f
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14611
813
8bc17dba7a02 removed obsolete comversion stuff
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
 14612
    "Created: 10.6.1996 / 17:56:08 / cg"
816
6576c8242e5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 813
diff changeset
 14613
    "Modified: 10.6.1996 / 20:11:27 / cg"
5237
e28aca881988 repairPhotometric
Claus Gittinger <cg@exept.de>
parents: 5235
diff changeset
 14614
!
e28aca881988 repairPhotometric
Claus Gittinger <cg@exept.de>
parents: 5235
diff changeset
 14615
e28aca881988 repairPhotometric
Claus Gittinger <cg@exept.de>
parents: 5235
diff changeset
 14616
repairPhotometric
e28aca881988 repairPhotometric
Claus Gittinger <cg@exept.de>
parents: 5235
diff changeset
 14617
    "/ kludge: repair a 'should not happen' situation...
e28aca881988 repairPhotometric
Claus Gittinger <cg@exept.de>
parents: 5235
diff changeset
 14618
    photometric isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14619
        (self depth == 24 and:[ bitsPerSample size == 3 ]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14620
            photometric := #rgb
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14621
        ].
5237
e28aca881988 repairPhotometric
Claus Gittinger <cg@exept.de>
parents: 5235
diff changeset
 14622
    ].
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
 14623
! !
0
48194c26a46c Initial revision
claus
parents:
diff changeset
 14624
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14625
!Image methodsFor:'queries'!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14626
3490
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14627
alphaBitsOf:pixel
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14628
    "if the receiver is an rgb-image:
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14629
     return the alpha component of a pixelValue as integer 0..maxAlphaValue.
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14630
     MaxAlphaValue is of course the largest integer representable by the number
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14631
     of alpha bits i.e. (1 bitShift:bitsAlpha)-1.
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14632
     This has to be redefined by subclasses."
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14633
8106
479e731381bd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8103
diff changeset
 14634
    |redBits greenBits blueBits alphaBits alphaMask|
3490
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14635
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14636
    samplesPerPixel >= 4 ifTrue:[
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14637
        photometric == #rgba ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14638
            "/ alpha in low bits
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14639
            alphaBits := bitsPerSample at:4.
8113
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
 14640
            alphaMask := (1 bitShift:alphaBits)-1.
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14641
8106
479e731381bd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8103
diff changeset
 14642
            ^ pixel bitAnd:alphaMask
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14643
        ].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14644
        photometric == #argb ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14645
            "/ alpha in high bits
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14646
            redBits := bitsPerSample at:1.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14647
            greenBits := bitsPerSample at:2.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14648
            blueBits := bitsPerSample at:3.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14649
            alphaBits := bitsPerSample at:4.
8113
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
 14650
            alphaMask := (1 bitShift:alphaBits)-1.
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14651
8106
479e731381bd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8103
diff changeset
 14652
            ^ (pixel rightShift:(redBits + greenBits + blueBits))
479e731381bd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8103
diff changeset
 14653
                    bitAnd:alphaMask
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14654
        ].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14655
        ^ 0
3490
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14656
    ].
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14657
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14658
    self subclassResponsibility
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14659
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14660
    "Created: / 08-06-1996 / 09:44:51 / cg"
8113
163bbebc807f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8111
diff changeset
 14661
    "Modified: / 27-08-2017 / 21:29:46 / cg"
3490
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14662
!
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14663
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14664
alphaMaskForPixelValue
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14665
    "return the mask used with translation from pixelValues to alphaBits"
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14666
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14667
    |alphaBits|
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 == #argb ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14671
            alphaBits := bitsPerSample at:1.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14672
            ^ (1 bitShift:alphaBits)-1
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14673
        ].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14674
        photometric == #rgba ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14675
            alphaBits := bitsPerSample at:4.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14676
            ^ (1 bitShift:alphaBits)-1
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14677
        ].
3490
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14678
    ].
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14679
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14680
    self subclassResponsibility
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14681
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14682
    "Modified: / 22-08-2017 / 17:29:22 / cg"
3490
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14683
!
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14684
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14685
alphaShiftForPixelValue
7921
4989d91f99ac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7918
diff changeset
 14686
    "return the shift amount used with translation from pixelValues to alphaBits.
4989d91f99ac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7918
diff changeset
 14687
     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
 14688
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14689
    |redBits greenBits blueBits|
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
    samplesPerPixel >= 3 ifTrue:[
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14692
        photometric == #argb ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14693
            redBits := bitsPerSample at:2.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14694
            greenBits := bitsPerSample at:3.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14695
            blueBits := bitsPerSample at:4.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14696
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14697
            ^ (greenBits + blueBits + redBits)
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14698
        ].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14699
        "/ rgba or rgb
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14700
        ^ 0
3490
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
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14703
    self subclassResponsibility
7921
4989d91f99ac #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7918
diff changeset
 14704
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14705
    "Modified (comment): / 22-08-2017 / 17:26:16 / cg"
3490
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14706
!
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14707
3813
662c6386828e ascentOn:
Claus Gittinger <cg@exept.de>
parents: 3811
diff changeset
 14708
ascentOn:aGC
662c6386828e ascentOn:
Claus Gittinger <cg@exept.de>
parents: 3811
diff changeset
 14709
    "I will not draw myself above the baseline"
662c6386828e ascentOn:
Claus Gittinger <cg@exept.de>
parents: 3811
diff changeset
 14710
662c6386828e ascentOn:
Claus Gittinger <cg@exept.de>
parents: 3811
diff changeset
 14711
    ^ 0
662c6386828e ascentOn:
Claus Gittinger <cg@exept.de>
parents: 3811
diff changeset
 14712
!
662c6386828e ascentOn:
Claus Gittinger <cg@exept.de>
parents: 3811
diff changeset
 14713
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14714
averageColor
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14715
    "return the average color of the image.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14716
     This usually only makes sense for textures and patterns
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14717
     (i.e. to compute shadow & light colors for viewBackgrounds).
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 14718
     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
 14719
     a subImage - i.e. use Image>>averageColorIn: on a smaller rectangle"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14720
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14721
    ^ self averageColorIn:(0@0 corner:(width-1)@(height-1))
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14722
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14723
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14724
averageColorIn:aRectangle
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14725
    "return the images average color in an area.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14726
     The implementation below is slow - so you may want to
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14727
     create tuned versions for DepthXImage if you plan to do
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 14728
     heavy image processing ...
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14729
     (also, creating tuned versions of the enumeration messages helps a lot)"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14730
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14731
    |x0 "{ Class:SmallInteger }"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14732
     y0 "{ Class:SmallInteger }"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14733
     x1 "{ Class:SmallInteger }"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14734
     y1 "{ Class:SmallInteger }"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14735
     sumRed sumGreen sumBlue n|
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14736
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 14737
    sumRed := sumGreen := sumBlue := 0.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14738
    y0 := aRectangle top.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14739
    y1 := aRectangle bottom.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14740
    x0 := aRectangle left.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14741
    x1 := aRectangle right.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14742
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 14743
    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
 14744
    mask isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14745
        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
 14746
            sumRed := sumRed + colorAtXY red.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14747
            sumGreen := sumGreen + colorAtXY green.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14748
            sumBlue := sumBlue + colorAtXY blue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14749
        ].
3761
44b96cd84bb8 ignore masked pixels when computing the average
Claus Gittinger <cg@exept.de>
parents: 3760
diff changeset
 14750
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14751
        "/ masked pixels are not counted.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14752
        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
 14753
            (mask pixelAtX:x y:y) == 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14754
                n := n - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14755
            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14756
                sumRed := sumRed + colorAtXY red.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14757
                sumGreen := sumGreen + colorAtXY green.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14758
                sumBlue := sumBlue + colorAtXY blue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14759
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14760
        ].
3761
44b96cd84bb8 ignore masked pixels when computing the average
Claus Gittinger <cg@exept.de>
parents: 3760
diff changeset
 14761
    ].
44b96cd84bb8 ignore masked pixels when computing the average
Claus Gittinger <cg@exept.de>
parents: 3760
diff changeset
 14762
    n == 0 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14763
        "/ all masked
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14764
        ^ Color black
3761
44b96cd84bb8 ignore masked pixels when computing the average
Claus Gittinger <cg@exept.de>
parents: 3760
diff changeset
 14765
    ].
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14766
    ^ Color red:(sumRed / n) green:(sumGreen / n) blue:(sumBlue / n)
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14767
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14768
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14769
bitsPerPixel
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14770
    "return the number of bits per pixel"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14771
5926
95dab34aeea2 changed: #bitsPerPixel
Stefan Vogel <sv@exept.de>
parents: 5919
diff changeset
 14772
    ^ bitsPerSample sum
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14773
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14774
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14775
bitsPerRow
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14776
    "return the number of bits in one scanline of the image"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14777
3868
e47cf114c824 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3867
diff changeset
 14778
    ^ width * (self bitsPerPixel).
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14779
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14780
2890
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14781
blackComponentOfCMYK:pixel
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14782
    "if the receiver is a cmyk-image:
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 14783
     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
 14784
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14785
    samplesPerPixel == 4 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14786
        "/ assume that the cyan bits are the leftMost bits (cmyk)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14787
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 14788
        (#[8 8 8 8] isSameSequenceAs:bitsPerSample) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14789
            ^ 100.0 / 255 * (pixel bitAnd:16rFF)
8130
3f89522ad9fb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8116
diff changeset
 14790
        ].
3f89522ad9fb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8116
diff changeset
 14791
        (#[16 16 16 16] isSameSequenceAs:bitsPerSample)ifTrue:[
3f89522ad9fb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8116
diff changeset
 14792
            ^ 100.0 / 16rFFFF * (pixel bitAnd:16rFFFF)
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14793
        ]
2890
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14794
    ].
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14795
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14796
    self subclassResponsibility
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14797
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 14798
    "Modified (format): / 31-01-2017 / 13:15:23 / stefan"
8130
3f89522ad9fb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8116
diff changeset
 14799
    "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
 14800
!
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 14801
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14802
blueBitsOf:pixel
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14803
    "if the receiver is an rgb-image:
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 14804
     return the blue bits of a pixelValue as integer 0..maxBlueValue.
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 14805
     MaxGreenValue is of course the largest integer representable by the number
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 14806
     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
 14807
     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
 14808
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14809
    |alphaBits blueBits blueMask|
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14810
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14811
    blueBits := self numBlueBits.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14812
    blueMask := (1 bitShift:blueBits)-1.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14813
    
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14814
    samplesPerPixel >= 3 ifTrue:[
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14815
        photometric == #rgba ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14816
            "/ alpha in low bits
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14817
            alphaBits := self numAlphaBits.
8106
479e731381bd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8103
diff changeset
 14818
            ^ (pixel rightShift:alphaBits) bitAnd:blueMask
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14819
        ].
8091
e3a77cae0843 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8088
diff changeset
 14820
        ^ pixel bitAnd:blueMask
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14821
    ].
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14822
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14823
    self subclassResponsibility
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14824
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 14825
    "Created: / 08-06-1996 / 09:44:21 / cg"
8106
479e731381bd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8103
diff changeset
 14826
    "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
 14827
!
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14828
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14829
blueComponentOf:pixel
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14830
    "if the receiver is an rgb-image:
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 14831
     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
 14832
     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
 14833
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
 14834
    |blueBits  "{ Class: SmallInteger }"
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
 14835
     s         "{ Class: SmallInteger }"|
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14836
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14837
    samplesPerPixel >= 3 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14838
        "/ assume that the red bits are the leftMost bits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14839
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14840
        blueBits := bitsPerSample at:3.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14841
        blueBits == 0 ifTrue:[^ 0].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14842
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14843
        s := (1 bitShift:blueBits) - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14844
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14845
        ^ 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
 14846
    ].
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14847
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14848
    self subclassResponsibility
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14849
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14850
    "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
 14851
    "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
 14852
!
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14853
3490
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14854
blueMaskForPixelValue
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14855
    "return the mask used with translation from pixelValues to blueBits"
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14856
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14857
    |blueBits|
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14858
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14859
    samplesPerPixel >= 3 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14860
        blueBits := bitsPerSample at:3.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14861
        ^ (1 bitShift:blueBits)-1
3490
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14862
    ].
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14863
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14864
    self subclassResponsibility
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14865
!
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14866
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14867
blueShiftForPixelValue
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14868
    "return the shift amount used with translation from pixelValues to blueBits"
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14869
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14870
    samplesPerPixel >= 3 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14871
        ^ 0
3490
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14872
    ].
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14873
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14874
    self subclassResponsibility
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14875
!
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 14876
680
a905d02dcb82 added #bounds (for VisualComponent protocol compatibility)
Claus Gittinger <cg@exept.de>
parents: 674
diff changeset
 14877
bounds
a905d02dcb82 added #bounds (for VisualComponent protocol compatibility)
Claus Gittinger <cg@exept.de>
parents: 674
diff changeset
 14878
    "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
 14879
a905d02dcb82 added #bounds (for VisualComponent protocol compatibility)
Claus Gittinger <cg@exept.de>
parents: 674
diff changeset
 14880
    ^ 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
 14881
a905d02dcb82 added #bounds (for VisualComponent protocol compatibility)
Claus Gittinger <cg@exept.de>
parents: 674
diff changeset
 14882
    "Created: 13.5.1996 / 10:27:06 / cg"
a905d02dcb82 added #bounds (for VisualComponent protocol compatibility)
Claus Gittinger <cg@exept.de>
parents: 674
diff changeset
 14883
!
a905d02dcb82 added #bounds (for VisualComponent protocol compatibility)
Claus Gittinger <cg@exept.de>
parents: 674
diff changeset
 14884
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14885
brightness
6755
cee1206f74db class: Image
Claus Gittinger <cg@exept.de>
parents: 6653
diff changeset
 14886
    "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
 14887
     This usually only makes sense for textures and patterns
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14888
     (i.e. to compute shadow & light colors for viewBackgrounds).
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 14889
     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
 14890
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14891
    ^ (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
 14892
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 14893
    "Modified: 8.6.1996 / 08:46:46 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14894
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14895
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14896
bytesPerRow
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14897
    "return the number of bytes in one scanline of the image"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14898
7898
05e286976596 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7895
diff changeset
 14899
    ^ self class bytesPerRowForWidth:width bitsPerPixel:(self bitsPerPixel)
05e286976596 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7895
diff changeset
 14900
05e286976596 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7895
diff changeset
 14901
    "Modified: / 16-02-2017 / 16:17:59 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14902
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 14903
1993
b3cf63f64e15 added query for padded bytesPerLine
Claus Gittinger <cg@exept.de>
parents: 1975
diff changeset
 14904
bytesPerRowPaddedTo:padding
b3cf63f64e15 added query for padded bytesPerLine
Claus Gittinger <cg@exept.de>
parents: 1975
diff changeset
 14905
    "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
 14906
     if scanlines are to be padded to padding-bits."
b3cf63f64e15 added query for padded bytesPerLine
Claus Gittinger <cg@exept.de>
parents: 1975
diff changeset
 14907
2005
525f712084b3 oops - padding stuff was wrong (16-bit display)
tz
parents: 2001
diff changeset
 14908
    ^ self class
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 14909
        bytesPerRowForWidth:width depth:(self bitsPerPixel) padding:padding
1993
b3cf63f64e15 added query for padded bytesPerLine
Claus Gittinger <cg@exept.de>
parents: 1975
diff changeset
 14910
!
b3cf63f64e15 added query for padded bytesPerLine
Claus Gittinger <cg@exept.de>
parents: 1975
diff changeset
 14911
1935
b71d2b3766b3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1932
diff changeset
 14912
center
b71d2b3766b3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1932
diff changeset
 14913
    "for compatibility with GC protocol - return the centerPoint"
b71d2b3766b3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1932
diff changeset
 14914
b71d2b3766b3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1932
diff changeset
 14915
    ^ (width // 2) @ (height // 2)
b71d2b3766b3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1932
diff changeset
 14916
b71d2b3766b3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1932
diff changeset
 14917
    "Created: 22.10.1997 / 23:52:40 / cg"
b71d2b3766b3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1932
diff changeset
 14918
!
b71d2b3766b3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1932
diff changeset
 14919
8111
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14920
chromaBlueOfYCbCr:pixel
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14921
    "if the receiver is an YCbCr-image:
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14922
     return the blue-chroma (Cb) component, scaled to (0 .. 1)"
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14923
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14924
    |cbBits "{ Class: SmallInteger }"
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14925
     crBits "{ Class: SmallInteger }"
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14926
     s      "{ Class: SmallInteger }"|
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14927
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14928
    photometric == #YCbCr ifTrue:[ 
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14929
        samplesPerPixel == 3 ifTrue:[
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14930
            "/ assume that the Y bits are the leftMost bits 
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14931
            cbBits := bitsPerSample at:2.
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14932
            cbBits == 0 ifTrue:[^ 0].
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14933
            crBits := bitsPerSample at:3.
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14934
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14935
            s := (1 bitShift:cbBits) - 1.
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14936
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14937
            ^ 1.0 / s * ((pixel rightShift:crBits) bitAnd:(1 bitShift:cbBits)-1)
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14938
        ].
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14939
    ].
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14940
    self subclassResponsibility
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14941
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14942
    "Created: / 26-08-2017 / 22:09:31 / cg"
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14943
!
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14944
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14945
chromaRedOfYCbCr:pixel
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14946
    "if the receiver is an YCbCr-image:
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14947
     return the red-chroma (Cr) component, scaled to (0 .. 1)"
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14948
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14949
    |crBits    "{ Class: SmallInteger }"
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14950
     s         "{ Class: SmallInteger }"|
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14951
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14952
    samplesPerPixel >= 3 ifTrue:[
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14953
        "/ assume that the red bits are the leftMost bits
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14954
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14955
        crBits := bitsPerSample at:3.
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14956
        crBits == 0 ifTrue:[^ 0].
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14957
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14958
        s := (1 bitShift:crBits) - 1.
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14959
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14960
        ^ 1.0 / s * (pixel bitAnd:(1 bitShift:crBits)-1)
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14961
    ].
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14962
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14963
    self subclassResponsibility
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14964
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14965
    "
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14966
     (self basicNew
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14967
        bitsPerSample:#(8 8 8);
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14968
        photometric:#YCbCr;
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14969
        samplesPerPixel:3;
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14970
        yourself
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14971
     ) chromaRedOfYCbCr: 16r10107F
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 basicNew
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14974
        bitsPerSample:#(8 8 8);
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14975
        photometric:#YCbCr;
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14976
        samplesPerPixel:3;
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14977
        yourself
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14978
     ) chromaRedOfYCbCr: 16r1010FF
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14979
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14980
     (self basicNew
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14981
        bitsPerSample:#(8 8 8);
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14982
        photometric:#YCbCr;
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14983
        samplesPerPixel:3;
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14984
        yourself
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14985
     ) chromaBlueOfYCbCr: 16r107F10
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14986
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14987
     (self basicNew
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14988
        bitsPerSample:#(8 8 8);
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14989
        photometric:#YCbCr;
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14990
        samplesPerPixel:3;
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14991
        yourself
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14992
     ) chromaBlueOfYCbCr: 16r10FF10
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14993
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14994
     (self basicNew
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14995
        bitsPerSample:#(8 8 8);
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14996
        photometric:#YCbCr;
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14997
        samplesPerPixel:3;
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14998
        yourself
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 14999
     ) lumaOfYCbCr: 16r7F1010
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15000
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15001
     (self basicNew
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15002
        bitsPerSample:#(8 8 8);
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15003
        photometric:#YCbCr;
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15004
        samplesPerPixel:3;
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15005
        yourself
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15006
     ) lumaOfYCbCr: 16rFF1010
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15007
    "
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15008
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15009
    "Created: / 26-08-2017 / 22:11:31 / cg"
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15010
!
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15011
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15012
colorFromValue:pixelValue
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15013
    "given a pixel value, return the corresponding color.
4117
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15014
     Pixel values start with 0.
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15015
     The implementation below is generic and slow
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15016
     - 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
 15017
8230
3eeacf3dcff3 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8222
diff changeset
 15018
    |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
 15019
bcce666a0f35 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1288
diff changeset
 15020
    p := photometric.
bcce666a0f35 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1288
diff changeset
 15021
    p isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15022
        colorMap notNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15023
            p := #palette
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15024
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15025
            "/ 'Image [warning]: no photometric - assume greyscale' infoPrintCR
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15026
            p := #blackIs0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15027
        ]
1289
bcce666a0f35 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1288
diff changeset
 15028
    ].
bcce666a0f35 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1288
diff changeset
 15029
bcce666a0f35 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1288
diff changeset
 15030
    p == #blackIs0 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15031
        maxPixel := (1 bitShift:self bitsPerPixel) - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15032
        ^ Color gray:(pixelValue * (100 / maxPixel)).
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15033
    ].
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15034
1289
bcce666a0f35 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1288
diff changeset
 15035
    p == #whiteIs0 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15036
        maxPixel := (1 bitShift:self bitsPerPixel) - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15037
        ^ 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
 15038
    ].
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15039
1289
bcce666a0f35 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1288
diff changeset
 15040
    p == #palette ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15041
        pixelValue >= colorMap size ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15042
            ^ Color black
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15043
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15044
        clr := colorMap at:(pixelValue + 1).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15045
        clr isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15046
            ^ Color black.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15047
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15048
        ^ clr.
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15049
    ].
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15050
1289
bcce666a0f35 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1288
diff changeset
 15051
    p == #rgb ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15052
        r := self redBitsOf:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15053
        g := self greenBitsOf:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15054
        b := self blueBitsOf:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15055
        "/ scale...
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15056
        numRedBits := bitsPerSample at:1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15057
        numGreenBits := bitsPerSample at:2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15058
        numBlueBits := bitsPerSample at:3.
7595
c77d718d3d94 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7573
diff changeset
 15059
        (r ~~ 0) ifTrue:[ r := 100 / ((1 bitShift:numRedBits) - 1) * r].
c77d718d3d94 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7573
diff changeset
 15060
        (g ~~ 0) ifTrue:[ g := 100 / ((1 bitShift:numGreenBits) - 1) * g].
c77d718d3d94 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7573
diff changeset
 15061
        (b ~~ 0) ifTrue:[ b := 100 / ((1 bitShift:numBlueBits) - 1) * b].
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15062
        ^ Color redPercent:r greenPercent:g bluePercent:b
4788
0d07247aee8b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4780
diff changeset
 15063
    ].
0d07247aee8b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4780
diff changeset
 15064
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15065
    (p == #rgba) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15066
        r := self redBitsOf:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15067
        g := self greenBitsOf:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15068
        b := self blueBitsOf:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15069
        a := self alphaBitsOf:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15070
        "/ scale...
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15071
        numRedBits := bitsPerSample at:1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15072
        numGreenBits := bitsPerSample at:2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15073
        numBlueBits := bitsPerSample at:3.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15074
        numAlphaBits := bitsPerSample at:4.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15075
        (r == 0) ifFalse:[ r := (100 / ((1 bitShift:numRedBits)-1) * r)].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15076
        (g == 0) ifFalse:[ g := (100 / ((1 bitShift:numGreenBits)-1) * g)].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15077
        (b == 0) ifFalse:[ b := (100 / ((1 bitShift:numBlueBits)-1) * b)].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15078
        (a == 0) ifFalse:[ a := (100 / ((1 bitShift:numAlphaBits)-1) * a)].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15079
        ^ 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
 15080
    ].
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15081
    (p == #argb) ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15082
        r := self redBitsOf:pixelValue.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15083
        g := self greenBitsOf:pixelValue.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15084
        b := self blueBitsOf:pixelValue.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15085
        a := self alphaBitsOf:pixelValue.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15086
        "/ scale...
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15087
        numAlphaBits := bitsPerSample at:1.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15088
        numRedBits := bitsPerSample at:2.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15089
        numGreenBits := bitsPerSample at:3.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15090
        numBlueBits := bitsPerSample at:4.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15091
        (r == 0) ifFalse:[ r := (100 / ((1 bitShift:numRedBits)-1) * r)].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15092
        (g == 0) ifFalse:[ g := (100 / ((1 bitShift:numGreenBits)-1) * g)].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15093
        (b == 0) ifFalse:[ b := (100 / ((1 bitShift:numBlueBits)-1) * b)].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15094
        (a == 0) ifFalse:[ a := (100 / ((1 bitShift:numAlphaBits)-1) * a)].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15095
        ^ Color redPercent:r greenPercent:g bluePercent:b alphaPercent:a
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15096
    ].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15097
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15098
2890
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15099
    p == #cmyk ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15100
        c := self cyanComponentOfCMYK:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15101
        m := self magentaComponentOfCMYK:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15102
        y := self yellowComponentOfCMYK:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15103
        k := self blackComponentOfCMYK:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15104
        ^ 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
 15105
    ].
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15106
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15107
    p == #cmy ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15108
        c := self cyanComponentOfCMY:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15109
        m := self magentaComponentOfCMY:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15110
        y := self yellowComponentOfCMY:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15111
        ^ Color cyan:c magenta:m yellow:y.
2890
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15112
    ].
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15113
8230
3eeacf3dcff3 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8222
diff changeset
 15114
"/    p == #YCbCr ifTrue:[
3eeacf3dcff3 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8222
diff changeset
 15115
"/        samplesPerPixel == 3 ifTrue:[
3eeacf3dcff3 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8222
diff changeset
 15116
"/            depth == 24 ifTrue:[
3eeacf3dcff3 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8222
diff changeset
 15117
"/                (#[8 8 8] isSameSequenceAs:bitsPerSample)ifTrue:[
3eeacf3dcff3 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8222
diff changeset
 15118
"/                    ^ Color yByte:((pixelValue rightShift:16) bitAnd:16rFF) 
3eeacf3dcff3 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8222
diff changeset
 15119
"/                            cbByte:((pixelValue rightShift:8) bitAnd:16rFF) 
3eeacf3dcff3 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8222
diff changeset
 15120
"/                            crByte:(pixelValue bitAnd:16rFF).
3eeacf3dcff3 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8222
diff changeset
 15121
"/                ].
3eeacf3dcff3 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8222
diff changeset
 15122
"/            ].
3eeacf3dcff3 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8222
diff changeset
 15123
"/        ].
3eeacf3dcff3 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8222
diff changeset
 15124
"/    ].
3eeacf3dcff3 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8222
diff changeset
 15125
2890
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15126
    self error:'invalid (unsupported) photometric'
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15127
4788
0d07247aee8b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4780
diff changeset
 15128
    "Created: / 08-06-1996 / 08:46:18 / cg"
8230
3eeacf3dcff3 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8222
diff changeset
 15129
    "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
 15130
!
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
cyanComponentOfCMY:pixel
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15133
    "if the receiver is a cmy-image:
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 15134
     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
 15135
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15136
    samplesPerPixel == 3 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15137
        "/ assume that the cyan bits are the leftMost bits (cmy)
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 15138
        (#[8 8 8] isSameSequenceAs:bitsPerSample)ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15139
            ^ 100.0 / 255 * ((pixel bitShift:-16) bitAnd:16rFF)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15140
        ]
2890
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15141
    ].
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15142
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15143
    self subclassResponsibility
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15144
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 15145
    "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
 15146
!
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15147
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15148
cyanComponentOfCMYK:pixel
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15149
    "if the receiver is a cmyk-image:
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 15150
     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
 15151
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15152
    samplesPerPixel == 4 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15153
        "/ assume that the cyan bits are the leftMost bits (cmyk)
8115
6b4a08f7e951 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8113
diff changeset
 15154
        pixel == 0 ifTrue:[^ 0].
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 15155
        (#[8 8 8 8] isSameSequenceAs:bitsPerSample)ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15156
            ^ 100.0 / 255 * ((pixel bitShift:-24) bitAnd:16rFF)
8130
3f89522ad9fb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8116
diff changeset
 15157
        ].
3f89522ad9fb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8116
diff changeset
 15158
        (#[16 16 16 16] isSameSequenceAs:bitsPerSample)ifTrue:[
3f89522ad9fb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8116
diff changeset
 15159
            ^ 100.0 / 16rFFFF * ((pixel bitShift:-48) bitAnd:16rFFFF)
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15160
        ]
2890
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15161
    ].
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15162
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15163
    self subclassResponsibility
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15164
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 15165
    "Modified: / 31-01-2017 / 13:16:14 / stefan"
8130
3f89522ad9fb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8116
diff changeset
 15166
    "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
 15167
!
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15168
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15169
greenBitsOf:pixel
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15170
    "if the receiver is an rgb-image:
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 15171
     return the green bits of a pixelValue as integer 0..maxGreenValue.
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 15172
     MaxGreenValue is of course the largest integer representable by the number
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 15173
     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
 15174
     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
 15175
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15176
    |blueBits greenBits greenMask alphaBits|
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15177
8087
24c87d7fdfdf #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8086
diff changeset
 15178
    blueBits := self numBlueBits.
24c87d7fdfdf #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8086
diff changeset
 15179
    greenBits := self numGreenBits.
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15180
    greenMask := (1 bitShift:greenBits)-1.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15181
    
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15182
    samplesPerPixel >= 3 ifTrue:[
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15183
        photometric == #rgba ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15184
            alphaBits := self numAlphaBits.
8106
479e731381bd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8103
diff changeset
 15185
            (pixel rightShift:(blueBits + alphaBits)) bitAnd:greenMask.   
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15186
        ].
8524
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
 15187
        ^ (pixel rightShift:blueBits) bitAnd:greenMask
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15188
    ].
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15189
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15190
    self subclassResponsibility
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15191
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15192
    "Created: / 08-06-1996 / 09:44:37 / cg"
8106
479e731381bd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8103
diff changeset
 15193
    "Modified: / 25-08-2017 / 12:23:29 / cg"
8524
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
 15194
    "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
 15195
!
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15196
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15197
greenComponentOf:pixel
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15198
    "if the receiver is an rgb-image:
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 15199
     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
 15200
     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
 15201
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
 15202
    |greenBits "{ Class: SmallInteger }"
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
 15203
     blueBits  "{ Class: SmallInteger }"
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
 15204
     s         "{ Class: SmallInteger }"|
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15205
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15206
    samplesPerPixel >= 3 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15207
        "/ assume that the red bits are the leftMost bits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15208
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15209
        greenBits := bitsPerSample at:2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15210
        greenBits == 0 ifTrue:[^ 0].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15211
        blueBits := bitsPerSample at:3.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15212
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15213
        s := (1 bitShift:greenBits) - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15214
8106
479e731381bd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8103
diff changeset
 15215
        ^ 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
 15216
    ].
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15217
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15218
    self subclassResponsibility
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15219
8106
479e731381bd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8103
diff changeset
 15220
    "Created: / 08-06-1996 / 08:45:34 / cg"
479e731381bd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8103
diff changeset
 15221
    "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
 15222
!
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15223
3490
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15224
greenMaskForPixelValue
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15225
    "return the mask used with translation from pixelValues to greenBits"
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15226
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15227
    |greenBits|
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15228
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15229
    samplesPerPixel >= 3 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15230
        greenBits := bitsPerSample at:2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15231
        ^ (1 bitShift:greenBits)-1
3490
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15232
    ].
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15233
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15234
    self subclassResponsibility
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15235
!
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15236
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15237
greenShiftForPixelValue
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15238
    "return the shift amount used with translation from pixelValues to greenBits"
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15239
4160
6d31e4e6a432 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4159
diff changeset
 15240
    |greenBits|
3490
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15241
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15242
    samplesPerPixel >= 3 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15243
        greenBits := bitsPerSample at:3.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15244
        ^ greenBits negated
3490
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15245
    ].
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15246
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15247
    self subclassResponsibility
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15248
!
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15249
674
e0f6bd36a99d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 672
diff changeset
 15250
heightOn:aGC
e0f6bd36a99d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 672
diff changeset
 15251
    "return my height, if displayed on aGC;
e0f6bd36a99d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 672
diff changeset
 15252
     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
 15253
     return the pixel-height"
e0f6bd36a99d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 672
diff changeset
 15254
680
a905d02dcb82 added #bounds (for VisualComponent protocol compatibility)
Claus Gittinger <cg@exept.de>
parents: 674
diff changeset
 15255
    ^ height
674
e0f6bd36a99d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 672
diff changeset
 15256
e0f6bd36a99d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 672
diff changeset
 15257
    "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
 15258
    "Modified: 13.5.1996 / 10:26:36 / cg"
674
e0f6bd36a99d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 672
diff changeset
 15259
!
e0f6bd36a99d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 672
diff changeset
 15260
3700
9b40f1e55270 dummy isDithered - for color compatibility
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
 15261
isDithered
9b40f1e55270 dummy isDithered - for color compatibility
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
 15262
    "for compatibility with color protocol"
9b40f1e55270 dummy isDithered - for color compatibility
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
 15263
9b40f1e55270 dummy isDithered - for color compatibility
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
 15264
    ^ false
9b40f1e55270 dummy isDithered - for color compatibility
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
 15265
!
9b40f1e55270 dummy isDithered - for color compatibility
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
 15266
3507
2edb2b607331 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3490
diff changeset
 15267
isGrayscaleImage
2edb2b607331 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3490
diff changeset
 15268
    ^ (photometric ~= #palette)
2edb2b607331 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3490
diff changeset
 15269
      and:[photometric ~= #rgb]
2edb2b607331 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3490
diff changeset
 15270
2edb2b607331 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3490
diff changeset
 15271
2edb2b607331 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3490
diff changeset
 15272
    "Created: 22.4.1997 / 14:12:02 / cg"
2edb2b607331 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3490
diff changeset
 15273
!
2edb2b607331 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3490
diff changeset
 15274
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15275
isImage
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15276
    "return true, if the receiver is some kind of image;
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15277
     true is returned here - the method is redefined from Object."
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15278
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15279
    ^ true
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15280
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15281
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15282
isImageOrForm
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15283
    "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
 15284
     true is returned here - the method is redefined from Object."
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15285
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15286
    ^ true
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15287
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15288
1630
e75c600b1c2a added #isMask query;
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
 15289
isMask
e75c600b1c2a added #isMask query;
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
 15290
    ^ false
e75c600b1c2a added #isMask query;
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
 15291
e75c600b1c2a added #isMask query;
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
 15292
    "Created: 22.4.1997 / 14:12:02 / cg"
e75c600b1c2a added #isMask query;
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
 15293
!
e75c600b1c2a added #isMask query;
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
 15294
8111
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15295
lumaOfYCbCr:pixel
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15296
    "if the receiver is an YCbCr-image:
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15297
     return the luma (Y) component, scaled to (0 .. 1)"
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15298
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15299
    photometric == #YCbCr ifTrue:[ 
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15300
        samplesPerPixel == 3 ifTrue:[
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15301
            "/ assume that the Y bits are the leftMost bits 
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15302
            (#[8 8 8] isSameSequenceAs:bitsPerSample)ifTrue:[
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15303
                ^ 1.0 / 255 * ((pixel bitShift:-16) bitAnd:16rFF)
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15304
            ]
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15305
        ].
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15306
    ].
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15307
    self subclassResponsibility
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15308
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15309
    "Created: / 26-08-2017 / 22:06:36 / cg"
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15310
!
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15311
2890
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15312
magentaComponentOfCMY:pixel
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15313
    "if the receiver is a cmy-image:
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 15314
     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
 15315
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15316
    samplesPerPixel == 3 ifTrue:[
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 15317
        (#[8 8 8] isSameSequenceAs:bitsPerSample)ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15318
            ^ 100.0 / 255 * ((pixel bitShift:-8) bitAnd:16rFF)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15319
        ]
2890
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15320
    ].
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15321
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15322
    self subclassResponsibility
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15323
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 15324
    "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
 15325
!
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15326
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15327
magentaComponentOfCMYK:pixel
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15328
    "if the receiver is a cmyk-image:
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 15329
     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
 15330
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15331
    samplesPerPixel == 4 ifTrue:[
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 15332
        (#[8 8 8 8] isSameSequenceAs:bitsPerSample)ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15333
            ^ 100.0 / 255 * ((pixel bitShift:-16) bitAnd:16rFF)
8130
3f89522ad9fb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8116
diff changeset
 15334
        ].
3f89522ad9fb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8116
diff changeset
 15335
        (#[16 16 16 16] isSameSequenceAs:bitsPerSample)ifTrue:[
3f89522ad9fb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8116
diff changeset
 15336
            ^ 100.0 / 16rFFFF * ((pixel bitShift:-32) bitAnd:16rFFFF)
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15337
        ]
2890
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15338
    ].
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15339
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15340
    self subclassResponsibility
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15341
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 15342
    "Modified (format): / 31-01-2017 / 13:19:11 / stefan"
8130
3f89522ad9fb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8116
diff changeset
 15343
    "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
 15344
!
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 15345
7596
9e63984bd73f #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7595
diff changeset
 15346
nColorsUsed
9e63984bd73f #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7595
diff changeset
 15347
    ^ self realUsedValues size
9e63984bd73f #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7595
diff changeset
 15348
!
9e63984bd73f #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7595
diff changeset
 15349
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15350
numAlphaBits
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15351
    photometric == #rgba ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15352
        "/ alpha in low bits
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15353
        ^ bitsPerSample at:4.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15354
    ].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15355
    photometric == #argb ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15356
        "/ alpha in high bits
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15357
        ^ bitsPerSample at:1.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15358
    ].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15359
    ^ 0.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15360
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15361
    "Created: / 22-08-2017 / 17:34:38 / cg"
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15362
!
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15363
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15364
numBlueBits
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15365
    photometric == #rgba ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15366
        "/ alpha in low bits
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15367
        ^ bitsPerSample at:3.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15368
    ].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15369
    photometric == #argb ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15370
        "/ alpha in high bits
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15371
        ^ bitsPerSample at:4.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15372
    ].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15373
    photometric == #rgb ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15374
        "/ no alpha
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15375
        ^ bitsPerSample at:3.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15376
    ].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15377
    self subclassResponsibility
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15378
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15379
    "Created: / 22-08-2017 / 17:35:24 / cg"
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15380
!
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15381
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15382
numGreenBits
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15383
    photometric == #rgba ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15384
        "/ alpha in low bits
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15385
        ^ bitsPerSample at:2.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15386
    ].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15387
    photometric == #argb ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15388
        "/ alpha in high bits
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15389
        ^ bitsPerSample at:3.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15390
    ].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15391
    photometric == #rgb ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15392
        "/ no alpha
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15393
        ^ bitsPerSample at:2.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15394
    ].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15395
    self subclassResponsibility
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
    "Created: / 22-08-2017 / 17:35:52 / cg"
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15398
!
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15399
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15400
numRedBits
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15401
    photometric == #rgba ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15402
        "/ alpha in low bits
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15403
        ^ bitsPerSample at:1.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15404
    ].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15405
    photometric == #argb ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15406
        "/ alpha in high bits
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15407
        ^ bitsPerSample at:2.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15408
    ].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15409
    photometric == #rgb ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15410
        "/ no alpha
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15411
        ^ bitsPerSample at:1.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15412
    ].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15413
    self subclassResponsibility
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
    "Created: / 22-08-2017 / 17:36:15 / cg"
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15416
!
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15417
1433
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
 15418
pixelArraySpecies
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
 15419
    "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
 15420
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 15421
    self depth <= 8 ifTrue:[^ ByteArray].
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 15422
    "/ (d := self depth) <= 8 ifTrue:[^ ByteArray].
6648
dc88bb5f9231 class: Image
Claus Gittinger <cg@exept.de>
parents: 6624
diff changeset
 15423
    "/ d <= 16 ifTrue:[^ WordArray].
dc88bb5f9231 class: Image
Claus Gittinger <cg@exept.de>
parents: 6624
diff changeset
 15424
    "/ ^ IntegerArray
dc88bb5f9231 class: Image
Claus Gittinger <cg@exept.de>
parents: 6624
diff changeset
 15425
    ^ Array
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 15426
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 15427
    "Modified: / 31-01-2017 / 14:52:42 / stefan"
1433
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
 15428
!
f243ebc8d043 more ST80 mimicri stuff
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
 15429
940
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15430
realColorMap
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15431
    "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
 15432
     For palette images, this is the internal colormap;
940
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15433
     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
 15434
     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
 15435
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15436
    |d nEntries "{ Class: SmallInteger }"
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15437
     colorArray|
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15438
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15439
    photometric == #palette ifTrue:[
8099
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
 15440
        "/ should not happen
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
 15441
        colorMap isNil ifTrue:[
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
 15442
            ^ Color vgaColors.
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
 15443
        ].    
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15444
        ^ colorMap asArray
940
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15445
    ].
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15446
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15447
    d := self depth.
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15448
    d > 12 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15449
        self error:'deep palette images not supported'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15450
        ^ nil.
940
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15451
    ].
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15452
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15453
    nEntries := 1 bitShift:d.
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15454
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15455
    colorArray := Array new:nEntries.
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15456
    1 to:nEntries do:[:idx |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15457
        colorArray at:idx put:(self colorFromValue:(idx-1)).
940
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15458
    ].
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15459
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15460
    ^ colorArray
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15461
8099
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
 15462
    "Created: / 11-07-1996 / 20:20:35 / cg"
e9c390f8675e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8096
diff changeset
 15463
    "Modified: / 24-08-2017 / 17:27:31 / cg"
940
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15464
!
3883a336b8be checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
 15465
3273
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15466
realUsedColors
3964
31e7b1921e24 comments
Claus Gittinger <cg@exept.de>
parents: 3940
diff changeset
 15467
    "return a collection of colors which are really used in the receiver.
31e7b1921e24 comments
Claus Gittinger <cg@exept.de>
parents: 3940
diff changeset
 15468
     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
 15469
     (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
 15470
6379
a8d53c1947f2 class: Image
Stefan Vogel <sv@exept.de>
parents: 6375
diff changeset
 15471
    ^ self realUsedValues collect:[:pixel | self colorFromValue:pixel] as:Set
3273
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15472
!
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15473
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15474
realUsedValues
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15475
    "return a collection of color values used in the receiver.
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 15476
     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
 15477
     of the image.
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15478
     This is a general and therefore slow implementation; subclasses
3964
31e7b1921e24 comments
Claus Gittinger <cg@exept.de>
parents: 3940
diff changeset
 15479
     may want to redefine this method for more performance.
31e7b1921e24 comments
Claus Gittinger <cg@exept.de>
parents: 3940
diff changeset
 15480
     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
 15481
     (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
 15482
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15483
    |set last|
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15484
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15485
    set := IdentitySet new.
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15486
    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
 15487
        pixel ~~ last ifTrue:[
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 15488
            set add:pixel.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 15489
            last := pixel.
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 15490
        ]
3273
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15491
    ].
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15492
    ^ set
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15493
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15494
    "
4168
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
 15495
     (Image fromFile:'goodies/bitmaps/gifImages/garfield.gif') usedValues
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
 15496
     (Image fromFile:'libtool/bitmaps/SBrowser.xbm') usedValues
3273
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15497
    "
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15498
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15499
    "Modified: / 29.7.1998 / 21:29:44 / cg"
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15500
!
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15501
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15502
redBitsOf:pixel
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15503
    "if the receiver is an rgb-image:
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 15504
     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
 15505
     MaxRedValue is the largest integer representable by the number
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 15506
     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
 15507
     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
 15508
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15509
    |redBits greenBits blueBits alphaBits redMask|
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15510
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15511
    redBits := self numRedBits.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15512
    greenBits := self numGreenBits.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15513
    blueBits := self numBlueBits.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15514
    redMask := (1 bitShift:redBits)-1.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15515
    
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15516
    samplesPerPixel >= 3 ifTrue:[
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15517
        photometric == #rgba ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15518
            alphaBits := self numAlphaBits.
8106
479e731381bd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8103
diff changeset
 15519
            ^ (pixel rightShift:(greenBits+blueBits+alphaBits)) bitAnd:redMask.
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15520
        ].
8524
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
 15521
        ^ (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
 15522
    ].
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15523
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15524
    self subclassResponsibility
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15525
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15526
    "Created: / 08-06-1996 / 09:44:51 / cg"
8106
479e731381bd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8103
diff changeset
 15527
    "Modified: / 25-08-2017 / 12:24:40 / cg"
8524
d5cb3cda12b2 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8523
diff changeset
 15528
    "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
 15529
!
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15530
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15531
redComponentOf:pixel
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15532
    "if the receiver is an rgb-image:
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 15533
     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
 15534
     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
 15535
854
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
 15536
    |redBits   "{ Class: SmallInteger }"
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
 15537
     greenBits "{ Class: SmallInteger }"
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
 15538
     blueBits  "{ Class: SmallInteger }"
36f47b36b463 support 8-bit rgb displays
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
 15539
     s         "{ Class: SmallInteger }"|
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15540
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15541
    samplesPerPixel >= 3 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15542
        "/ assume that the red bits are the leftMost bits
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15543
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15544
        redBits := bitsPerSample at:1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15545
        redBits == 0 ifTrue:[^ 0].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15546
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15547
        greenBits := bitsPerSample at:2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15548
        blueBits := bitsPerSample at:3.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15549
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15550
        s := (1 bitShift:redBits) - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15551
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15552
        ^ 100.0 / s *
8106
479e731381bd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8103
diff changeset
 15553
          ((pixel rightShift:(greenBits + blueBits))
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15554
           bitAnd:(1 bitShift:redBits)-1)
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
8106
479e731381bd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8103
diff changeset
 15559
    "Created: / 08-06-1996 / 08:45:30 / cg"
479e731381bd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 8103
diff changeset
 15560
    "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
 15561
!
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15562
3490
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15563
redMaskForPixelValue
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15564
    "return the mask used with translation from pixelValues to redBits"
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15565
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15566
    |redBits|
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15567
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15568
    samplesPerPixel >= 3 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15569
        redBits := bitsPerSample at:1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15570
        ^ (1 bitShift:redBits)-1
3490
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15571
    ].
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15572
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15573
    self subclassResponsibility
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15574
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15575
    "Created: 8.6.1996 / 09:44:51 / cg"
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15576
    "Modified: 10.6.1996 / 14:59:05 / cg"
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15577
!
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15578
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15579
redShiftForPixelValue
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15580
    "return the shift amount used with translation from pixelValues to redBits"
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15581
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15582
    |greenBits blueBits|
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15583
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15584
    samplesPerPixel >= 3 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15585
        greenBits := bitsPerSample at:2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15586
        blueBits := bitsPerSample at:3.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15587
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15588
        ^ (greenBits + blueBits) negated
3490
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15589
    ].
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15590
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15591
    self subclassResponsibility
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15592
!
7a560c566b72 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3477
diff changeset
 15593
4117
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15594
rgbFromValue:pixelValue
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15595
    "given a pixel value, return the corresponding 24bit rgbValue (rrggbb, red is MSB).
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15596
     Pixel value is in 0..2^depth - 1.
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15597
     The implementation below is generic and slow
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15598
     - this method is typically redefined in subclasses."
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15599
8111
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15600
    |p maxPixel clr r g b c m y k cb cr|
4117
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15601
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15602
    p := photometric.
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15603
    p isNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15604
        colorMap notNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15605
            p := #palette
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15606
        ] ifFalse:[
4117
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15607
"/            'Image [warning]: no photometric - assume greyscale' infoPrintCR
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15608
            p := #blackIs0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15609
        ]
4117
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15610
    ].
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15611
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15612
    p == #blackIs0 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15613
        maxPixel := (1 bitShift:self bitsPerPixel) - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15614
        b := pixelValue * 255 // maxPixel.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15615
        ^ (((b bitShift:8) bitOr:b) bitShift:8) bitOr:b
4117
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15616
    ].
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15617
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15618
    p == #whiteIs0 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15619
        maxPixel := (1 bitShift:self bitsPerPixel) - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15620
        b := 255 - (pixelValue * 255 // maxPixel).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15621
        ^ (((b bitShift:8) bitOr:b) bitShift:8) bitOr:b
4117
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15622
    ].
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15623
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15624
    p == #palette ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15625
        pixelValue >= colorMap size ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15626
            ^ 0 "/ black
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15627
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15628
        clr := colorMap at:(pixelValue + 1).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15629
        clr isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15630
            ^ 0 "/ black
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15631
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15632
        ^ clr rgbValue.
4117
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15633
    ].
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15634
8091
e3a77cae0843 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8088
diff changeset
 15635
    ((p == #rgb) or:[p == #rgba or:[p == #argb]]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15636
        r := self redBitsOf:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15637
        g := self greenBitsOf:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15638
        b := self blueBitsOf:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15639
        "/ must scale to byte value...
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15640
        r := r bitShift:(8 - (bitsPerSample at:1)).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15641
        g := g bitShift:(8 - (bitsPerSample at:2)).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15642
        b := b bitShift:(8 - (bitsPerSample at:3)).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15643
        ^ (((r bitShift:8) bitOr:g) bitShift:8) bitOr:b
4117
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15644
    ].
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15645
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15646
    p == #cmyk ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15647
        c := self cyanComponentOfCMYK:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15648
        m := self magentaComponentOfCMYK:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15649
        y := self yellowComponentOfCMYK:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15650
        k := self blackComponentOfCMYK:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15651
        ^ (Color cyan:c magenta:m yellow:y black:k) rgbValue.
4117
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15652
    ].
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15653
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15654
    p == #cmy ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15655
        c := self cyanComponentOfCMY:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15656
        m := self magentaComponentOfCMY:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15657
        y := self yellowComponentOfCMY:pixelValue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15658
        ^ (Color cyan:c magenta:m yellow:y) rgbValue.
4117
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15659
    ].
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15660
8111
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15661
    p == #YCbCr ifTrue:[
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15662
        y := self lumaOfYCbCr:pixelValue.
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15663
        cb := self chromaBlueOfYCbCr:pixelValue.
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15664
        cr := self chromaRedOfYCbCr:pixelValue.
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15665
        ^ (Color luma:y chromaBlue:cb chromaRed:cr) rgbValue. 
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15666
    ].
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15667
    
4117
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15668
    self error:'invalid (unsupported) photometric'
8091
e3a77cae0843 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8088
diff changeset
 15669
8111
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15670
    "
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15671
     (self basicNew
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15672
        bitsPerSample:#(8 8 8);
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15673
        photometric:#YCbCr;
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15674
        samplesPerPixel:3;
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15675
        yourself
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15676
     ) rgbFromValue: 16r7F1010
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15677
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15678
     (self basicNew
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15679
        bitsPerSample:#(8 8 8);
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15680
        photometric:#YCbCr;
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15681
        samplesPerPixel:3;
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15682
        yourself
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15683
     ) rgbFromValue: 16rFF1010
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15684
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15685
     (self basicNew
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15686
        bitsPerSample:#(8 8 8);
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15687
        photometric:#YCbCr;
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15688
        samplesPerPixel:3;
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15689
        yourself
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15690
     ) rgbFromValue: 16rFF0000
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15691
    "
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15692
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15693
    "Modified: / 26-08-2017 / 20:56:49 / cg"
c20fb44519e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8108
diff changeset
 15694
    "Modified (comment): / 26-08-2017 / 22:18:14 / cg"
4117
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15695
!
Claus Gittinger <cg@exept.de>
parents: 4115
diff changeset
 15696
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15697
usedColors
3964
31e7b1921e24 comments
Claus Gittinger <cg@exept.de>
parents: 3940
diff changeset
 15698
    "return a collection of colors used in the receiver.
31e7b1921e24 comments
Claus Gittinger <cg@exept.de>
parents: 3940
diff changeset
 15699
     This looks at the colorMap only if present.
6896
6dde273a9c0b class: Image
Claus Gittinger <cg@exept.de>
parents: 6894
diff changeset
 15700
     (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
 15701
2311
1c7e68532808 better #usedColors for rgb images.
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
 15702
    |colors|
1c7e68532808 better #usedColors for rgb images.
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
 15703
1c7e68532808 better #usedColors for rgb images.
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
 15704
    colors := self usedColorsMax:4096.
1c7e68532808 better #usedColors for rgb images.
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
 15705
    colors isNil ifTrue:[
8159
e24c82c679a0 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8152
diff changeset
 15706
        self error:'too many colors (> 4096) in image'.
2311
1c7e68532808 better #usedColors for rgb images.
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
 15707
    ].
1c7e68532808 better #usedColors for rgb images.
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
 15708
    ^ colors
1c7e68532808 better #usedColors for rgb images.
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
 15709
1c7e68532808 better #usedColors for rgb images.
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
 15710
    "
4168
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
 15711
     (Image fromFile:'goodies/bitmaps/gifImages/garfield.gif') usedColors
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
 15712
     (Image fromFile:'libtool/bitmaps/SBrowser.xbm') usedColors
2311
1c7e68532808 better #usedColors for rgb images.
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
 15713
    "
1c7e68532808 better #usedColors for rgb images.
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
 15714
8159
e24c82c679a0 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 8152
diff changeset
 15715
    "Modified: / 31-08-2017 / 14:37:37 / cg"
2311
1c7e68532808 better #usedColors for rgb images.
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
 15716
!
1c7e68532808 better #usedColors for rgb images.
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
 15717
1c7e68532808 better #usedColors for rgb images.
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
 15718
usedColorsMax:nMax
1c7e68532808 better #usedColors for rgb images.
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
 15719
    "return a collection of colors used in the receiver;
3964
31e7b1921e24 comments
Claus Gittinger <cg@exept.de>
parents: 3940
diff changeset
 15720
     This looks at the colorMap only if present
6896
6dde273a9c0b class: Image
Claus Gittinger <cg@exept.de>
parents: 6894
diff changeset
 15721
     (as opposed to #realUsedColors, which goes through the pixels of the bitmap).
3964
31e7b1921e24 comments
Claus Gittinger <cg@exept.de>
parents: 3940
diff changeset
 15722
     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
 15723
     (useful when searching rgb images)."
1c7e68532808 better #usedColors for rgb images.
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
 15724
2199
ac56b54c59a5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2185
diff changeset
 15725
    |usedValues max colors|
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15726
7915
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15727
    (photometric == #rgb or:[photometric == #rgba]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15728
        usedValues := IdentitySet new.
7915
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15729
        (photometric == #rgb) ifTrue:[
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15730
            self valuesFromX:0 y:0 toX:(width-1) y:(height-1)
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15731
              do:[:x :y :pixel |
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15732
                usedValues add:pixel.
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15733
                usedValues size > nMax ifTrue:[
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15734
                    "/ too many to be returned here (think of the mass of
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15735
                    "/ data to be returned by a 24bit image ... ;-)
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15736
                    ^ nil
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15737
                ]
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15738
            ].
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15739
        ] ifFalse:[
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15740
            self valuesFromX:0 y:0 toX:(width-1) y:(height-1)
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15741
              do:[:x :y :pixel |
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15742
                usedValues add:(pixel bitShift:-8).
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15743
                usedValues size > nMax ifTrue:[
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15744
                    "/ too many to be returned here (think of the mass of
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15745
                    "/ data to be returned by a 24bit image ... ;-)
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15746
                    ^ nil
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15747
                ]
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15748
            ].
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15749
        ].    
7595
c77d718d3d94 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7573
diff changeset
 15750
"/        colors := usedValues collect:[:pixel | self colorFromValue:pixel].
c77d718d3d94 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7573
diff changeset
 15751
        "/ this code is slightly faster (but wrong for 16-bit images)...
c77d718d3d94 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7573
diff changeset
 15752
        colors := usedValues collect:[:pixel | 
c77d718d3d94 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7573
diff changeset
 15753
                    |r g b|
c77d718d3d94 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7573
diff changeset
 15754
                    r := self redBitsOf:pixel.
c77d718d3d94 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7573
diff changeset
 15755
                    g := self greenBitsOf:pixel.
c77d718d3d94 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7573
diff changeset
 15756
                    b := self blueBitsOf:pixel.
c77d718d3d94 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7573
diff changeset
 15757
                    "/ must scale to byte value...
c77d718d3d94 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7573
diff changeset
 15758
                    r := r bitShift:(8 - (bitsPerSample at:1)).
c77d718d3d94 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7573
diff changeset
 15759
                    g := g bitShift:(8 - (bitsPerSample at:2)).
c77d718d3d94 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7573
diff changeset
 15760
                    b := b bitShift:(8 - (bitsPerSample at:3)).
c77d718d3d94 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7573
diff changeset
 15761
                    Color redByte:r greenByte:g blueByte:b
c77d718d3d94 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7573
diff changeset
 15762
                 ].
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15763
        ^ colors.
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15764
    ].
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15765
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15766
    usedValues := self usedValues asArray.
804
f1921926e324 better multiplane dither; support #rgb; specialized code relaxed
Claus Gittinger <cg@exept.de>
parents: 800
diff changeset
 15767
    photometric == #palette ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15768
        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
 15769
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15770
        "/ (photometric == #blackIs0 or:[photometric == #whiteIs0])
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15771
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15772
        max := (1 bitShift:self depth) - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15773
        colors :=  usedValues collect:[:val | (Color gray:(100 * val / max ))] as:Set.
6037
eea2343b0b1e Refactoring:
Stefan Vogel <sv@exept.de>
parents: 5956
diff changeset
 15774
    ].
eea2343b0b1e Refactoring:
Stefan Vogel <sv@exept.de>
parents: 5956
diff changeset
 15775
    ^ colors
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15776
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15777
    "
4168
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
 15778
     (Image fromFile:'goodies/bitmaps/gifImages/garfield.gif') usedColors
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
 15779
     (Image fromFile:'libtool/bitmaps/SBrowser.xbm') usedColors
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15780
    "
746
f5479d603f64 gray vs. grey
Claus Gittinger <cg@exept.de>
parents: 744
diff changeset
 15781
7915
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15782
    "Created: / 07-09-1998 / 17:54:17 / cg"
0d245ddb2030 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7913
diff changeset
 15783
    "Modified: / 20-02-2017 / 10:57:17 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15784
!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15785
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15786
usedValues
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15787
    "return a collection of color values used in the receiver.
7511
ce7b0b92416e #OTHER by mawalch
mawalch
parents: 7494
diff changeset
 15788
     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
 15789
     of the image.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15790
     This is a general and therefore slow implementation; subclasses
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15791
     may want to redefine this method for more performance."
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15792
3273
f4cb380e0ae9 usedValues vs. realUsedValues
Claus Gittinger <cg@exept.de>
parents: 3263
diff changeset
 15793
    ^ self realUsedValues
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15794
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15795
    "
4168
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
 15796
     (Image fromFile:'goodies/bitmaps/gifImages/garfield.gif') usedValues
4dc7af1c9538 Fix method-examples
Stefan Vogel <sv@exept.de>
parents: 4160
diff changeset
 15797
     (Image fromFile:'lib tool/bitmaps/SBrowser.xbm') usedValues
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 15798
    "
2206
8bf0549762b8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2205
diff changeset
 15799
8bf0549762b8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2205
diff changeset
 15800
    "Modified: / 29.7.1998 / 21:29:44 / cg"
674
e0f6bd36a99d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 672
diff changeset
 15801
!
e0f6bd36a99d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 672
diff changeset
 15802
861
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 15803
valueFromColor:color
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 15804
    "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
 15805
     Non-representable colors return nil."
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 15806
4788
0d07247aee8b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4780
diff changeset
 15807
    |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
 15808
8301
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 15809
    color isInteger ifTrue:[
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 15810
        self halt.
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 15811
        ^ color
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 15812
    ].
d4ba3e39cae1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8287
diff changeset
 15813
5051
492727d3e5f3 oops valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 5037
diff changeset
 15814
    color colorId notNil ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15815
        color == Color noColor ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15816
            ^ nil "/ mask
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15817
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15818
        color device isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15819
            ^ color colorId
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15820
        ]
5051
492727d3e5f3 oops valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 5037
diff changeset
 15821
    ].
5037
2e515c9ee849 changed #valueFromColor:
Claus Gittinger <cg@exept.de>
parents: 4998
diff changeset
 15822
861
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 15823
    photometric == #whiteIs0 ifTrue:[
7958
31380068cced #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 7930
diff changeset
 15824
        samplesPerPixel isNil ifTrue:[self breakPoint:#cg. samplesPerPixel := 1].
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15825
        maxPixel := (1 bitShift:self bitsPerPixel) - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15826
        ^ maxPixel - (color brightness * maxPixel) rounded.
861
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 15827
    ].
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 15828
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 15829
    photometric == #blackIs0 ifTrue:[
7958
31380068cced #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 7930
diff changeset
 15830
        samplesPerPixel isNil ifTrue:[self breakPoint:#cg. samplesPerPixel := 1].
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15831
        maxPixel := (1 bitShift:self bitsPerPixel) - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15832
        ^ (color brightness * maxPixel) rounded.
861
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 15833
    ].
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 15834
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 15835
    photometric == #palette ifTrue:[
7958
31380068cced #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 7930
diff changeset
 15836
        samplesPerPixel isNil ifTrue:[self breakPoint:#cg. samplesPerPixel := 1].
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15837
        colorMap isNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15838
            "/ same as blackIs0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15839
            maxPixel := (1 bitShift:self bitsPerPixel) - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15840
            ^ (color brightness * maxPixel) rounded.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15841
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15842
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15843
        pixel := colorMap indexOf:color.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15844
        pixel == 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15845
            "
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15846
             the color is not in the image's colormap
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15847
            "
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15848
            ^ nil
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15849
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15850
        ^ pixel - 1
861
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 15851
    ].
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 15852
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 15853
    photometric == #rgb ifTrue:[
7958
31380068cced #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 7930
diff changeset
 15854
        samplesPerPixel isNil ifTrue:[self breakPoint:#cg. samplesPerPixel := 3].
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15855
        samplesPerPixel >= 3 ifTrue:[
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15856
            redBits := self numRedBits.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15857
            greenBits := self numGreenBits.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15858
            blueBits := self numBlueBits.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15859
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15860
            "/ map r/g/b to 0..255
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15861
            r := (color red / 100.0 * ((1 bitShift:redBits)-1)) rounded.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15862
            g := (color green / 100.0 * ((1 bitShift:greenBits)-1)) rounded.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15863
            b := (color blue / 100.0 * ((1 bitShift:blueBits)-1)) rounded.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15864
            pixel := (((r bitShift:greenBits) + g) bitShift:blueBits) + b.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15865
            ^ pixel
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15866
        ]
861
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
4788
0d07247aee8b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4780
diff changeset
 15869
    photometric == #rgba ifTrue:[
7958
31380068cced #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 7930
diff changeset
 15870
        samplesPerPixel isNil ifTrue:[self breakPoint:#cg. samplesPerPixel := 4].
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15871
        samplesPerPixel >= 4 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15872
            redBits := bitsPerSample at:1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15873
            greenBits := bitsPerSample at:2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15874
            blueBits := bitsPerSample at:3.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15875
            alphaBits := bitsPerSample at:4.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15876
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15877
            "/ map r/g/b/a to 0..255
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15878
            r := (color red / 100.0 * ((1 bitShift:redBits)-1)) rounded.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15879
            g := (color green / 100.0 * ((1 bitShift:greenBits)-1)) rounded.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15880
            b := (color blue / 100.0 * ((1 bitShift:blueBits)-1)) rounded.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15881
            a := (color alpha * ((1 bitShift:alphaBits)-1)) rounded.
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15882
            pixel := (((((r bitShift:greenBits) + g) bitShift:blueBits) + b) bitShift:alphaBits) + a.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15883
            ^ pixel
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15884
        ]
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15885
    ].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15886
    photometric == #argb ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15887
        samplesPerPixel isNil ifTrue:[self breakPoint:#cg. samplesPerPixel := 4].
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15888
        samplesPerPixel >= 4 ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15889
            alphaBits := bitsPerSample at:1.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15890
            redBits := bitsPerSample at:2.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15891
            greenBits := bitsPerSample at:3.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15892
            blueBits := bitsPerSample at:4.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15893
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15894
            "/ map r/g/b/a to 0..255
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15895
            r := (color red / 100.0 * ((1 bitShift:redBits)-1)) rounded.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15896
            g := (color green / 100.0 * ((1 bitShift:greenBits)-1)) rounded.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15897
            b := (color blue / 100.0 * ((1 bitShift:blueBits)-1)) rounded.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15898
            a := (color alpha * ((1 bitShift:alphaBits)-1)) rounded.
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15899
            pixel := (((((a bitShift:redBits) + r) bitShift:greenBits) + g) bitShift:blueBits) + b.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15900
            ^ pixel
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15901
        ]
4788
0d07247aee8b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4780
diff changeset
 15902
    ].
2380
b9ac30f8e5ba made all my signals children of a common imageErrorSignal;
Claus Gittinger <cg@exept.de>
parents: 2350
diff changeset
 15903
    ImageErrorSignal raiseErrorString:'format not supported'.
861
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 15904
    ^ nil
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 15905
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15906
    "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
 15907
!
5d897dbd681a oops - leftover halt removed; added fill & valueFromColor.
Claus Gittinger <cg@exept.de>
parents: 858
diff changeset
 15908
4858
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
 15909
valueFromRGB:rgb
8108
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15910
    "given a color as rgb-value, with 8 bits per component, 
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15911
     return the corresponding pixel value.
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15912
     The red component is in the high 8 bits.
4858
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
 15913
     Non-representable colors return nil."
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
 15914
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15915
    |pixel redBits greenBits blueBits alphaBits r g b a|
4858
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
 15916
8108
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15917
    b := rgb bitAnd:16rFF.
4858
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
 15918
    g := (rgb bitShift:-8) bitAnd:16rFF.
8108
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15919
    r := (rgb bitShift:-16) bitAnd:16rFF.
7123
320a7ec771f3 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7101
diff changeset
 15920
    a := 255.
4858
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
 15921
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
 15922
    photometric == #rgb ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15923
        samplesPerPixel >= 3 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15924
            "/ r,g,b  b at low end
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15925
            redBits := bitsPerSample at:1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15926
            greenBits := bitsPerSample at:2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15927
            blueBits := bitsPerSample at:3.
8108
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15928
            ((redBits == 8) and:[(greenBits == 8) and:[(blueBits == 8) ]]) ifTrue:[
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15929
                pixel := (((r bitShift:greenBits) + g) bitShift:blueBits) + b.
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15930
                ^ pixel
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15931
            ]
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15932
        ]
4858
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
 15933
    ].
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
 15934
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15935
    photometric == #argb ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15936
        samplesPerPixel >= 4 ifTrue:[
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15937
            "/ a,r,g,b  b at low end
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15938
            "/ alphaBits := bitsPerSample at:1.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15939
            redBits := bitsPerSample at:2.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15940
            greenBits := bitsPerSample at:3.
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15941
            blueBits := bitsPerSample at:4.
8108
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15942
            ((redBits == 8) and:[(greenBits == 8) and:[(blueBits == 8) ]]) ifTrue:[
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15943
                pixel := (((((a bitShift:redBits) + r) bitShift:greenBits) + g) bitShift:blueBits) + b.
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15944
                ^ pixel
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15945
            ]
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15946
        ]
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15947
    ].
4858
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
 15948
    photometric == #rgba ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15949
        samplesPerPixel >= 4 ifTrue:[
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15950
            "/ r,g,b,a  a at low end
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15951
            redBits := bitsPerSample at:1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15952
            greenBits := bitsPerSample at:2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15953
            blueBits := bitsPerSample at:3.
8086
c2e7b74ac2d3 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8059
diff changeset
 15954
            alphaBits := bitsPerSample at:4.
8108
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15955
            ((redBits == 8) and:[(greenBits == 8) and:[(blueBits == 8) ]]) ifTrue:[
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15956
                pixel := (((((r bitShift:greenBits) + g) bitShift:blueBits) + b) bitShift:alphaBits) + a.
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15957
            ].
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15958
            ^ pixel
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15959
        ]
4858
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
 15960
    ].
8108
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15961
    
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15962
    photometric == #palette ifTrue:[
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15963
        colorMap notNil ifTrue:[
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15964
            pixel := colorMap indexOf:(Color rgbValue:rgb).
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15965
            pixel == 0 ifTrue:[
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15966
                "/ the color is not in the image's colormap
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15967
                ^ nil
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15968
            ].    
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15969
            ^ pixel - 1
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15970
        ].
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15971
    ].
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15972
4858
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
 15973
    ImageErrorSignal raiseErrorString:'format not supported'.
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
 15974
    ^ nil
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
 15975
8108
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15976
    "
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15977
     |img|
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15978
     img := Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif'.
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15979
     img valueFromRGB:16r55AAFF.
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15980
    "
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15981
4858
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
 15982
    "Created: / 15-01-2008 / 15:55:08 / cg"
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 15983
    "Modified: / 31-01-2017 / 14:45:00 / stefan"
8108
273966fa18c8 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 8106
diff changeset
 15984
    "Modified (comment): / 26-08-2017 / 13:07:56 / cg"
4858
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
 15985
!
bb9e88541077 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4843
diff changeset
 15986
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 15987
valueFromRedBits:redBits greenBits:greenBits blueBits:blueBits
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 15988
    "given a rgb bits, each in 0..maxXXXValue (i.e. according to
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 15989
     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
 15990
     For now, only useful with RGB images"
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 15991
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 15992
    |pixel numGreenBits numBlueBits|
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 15993
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 15994
    photometric == #rgb ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15995
        samplesPerPixel >= 3 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15996
            numGreenBits := bitsPerSample at:2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15997
            numBlueBits := bitsPerSample at:3.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15998
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 15999
            pixel := (((redBits bitShift:numGreenBits) + greenBits) bitShift:numBlueBits) + blueBits.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16000
            ^ pixel
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16001
        ]
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 16002
    ].
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 16003
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 16004
    ImageErrorSignal raiseErrorString:'format not supported'.
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 16005
    ^ nil
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 16006
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 16007
    "Modified: / 30.9.1998 / 22:03:50 / cg"
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 16008
!
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 16009
674
e0f6bd36a99d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 672
diff changeset
 16010
widthOn:aGC
e0f6bd36a99d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 672
diff changeset
 16011
    "return my width, if displayed on aGC;
e0f6bd36a99d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 672
diff changeset
 16012
     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
 16013
     return the pixel-width"
e0f6bd36a99d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 672
diff changeset
 16014
680
a905d02dcb82 added #bounds (for VisualComponent protocol compatibility)
Claus Gittinger <cg@exept.de>
parents: 674
diff changeset
 16015
    ^ width
674
e0f6bd36a99d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 672
diff changeset
 16016
e0f6bd36a99d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 672
diff changeset
 16017
    "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
 16018
    "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
 16019
!
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 16020
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 16021
yellowComponentOfCMY:pixel
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 16022
    "if the receiver is a cmy-image:
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 16023
     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
 16024
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 16025
    samplesPerPixel == 3 ifTrue:[
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 16026
        (#[8 8 8] isSameSequenceAs:bitsPerSample)ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16027
            ^ 100.0 / 255 * (pixel bitAnd:16rFF)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16028
        ]
2890
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 16029
    ].
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 16030
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 16031
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 16032
    self subclassResponsibility
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 16033
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 16034
    "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
 16035
!
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 16036
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 16037
yellowComponentOfCMYK:pixel
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 16038
    "if the receiver is a cmyk-image:
2916
79eedd2e05ac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2913
diff changeset
 16039
     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
 16040
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 16041
    samplesPerPixel == 4 ifTrue:[
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 16042
        (#[8 8 8 8] isSameSequenceAs:bitsPerSample)ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16043
            ^ 100.0 / 255 * ((pixel bitShift:-8) bitAnd:16rFF)
8130
3f89522ad9fb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8116
diff changeset
 16044
        ].
3f89522ad9fb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8116
diff changeset
 16045
        (#[16 16 16 16] isSameSequenceAs:bitsPerSample)ifTrue:[
3f89522ad9fb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8116
diff changeset
 16046
            ^ 100.0 / 16rFFFF * ((pixel bitShift:-16) bitAnd:16rFFFF)
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16047
        ]
2890
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 16048
    ].
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 16049
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 16050
    self subclassResponsibility
50b8c2e70c14 support cmyk and cmy separated images
Claus Gittinger <cg@exept.de>
parents: 2864
diff changeset
 16051
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 16052
    "Modified: / 31-01-2017 / 13:19:00 / stefan"
8130
3f89522ad9fb #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8116
diff changeset
 16053
    "Modified: / 29-08-2017 / 22:56:17 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16054
! !
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16055
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16056
!Image methodsFor:'saving on file'!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16057
8482
cf5849dd8be7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8441
diff changeset
 16058
bytesForFileUsing:readerClass
cf5849dd8be7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8441
diff changeset
 16059
    "return the contents of a file if saved by readerClass.
cf5849dd8be7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8441
diff changeset
 16060
     That is: an imageWriter is created to generate the bytes
cf5849dd8be7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8441
diff changeset
 16061
     as if written to a file.
cf5849dd8be7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8441
diff changeset
 16062
     No actual file is created, but the bytes are returned"
cf5849dd8be7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8441
diff changeset
 16063
cf5849dd8be7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8441
diff changeset
 16064
    ^ ByteArray streamContents:[:s |
cf5849dd8be7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8441
diff changeset
 16065
        readerClass save:self onStream:s quality:nil
cf5849dd8be7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8441
diff changeset
 16066
    ].
cf5849dd8be7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8441
diff changeset
 16067
    
cf5849dd8be7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8441
diff changeset
 16068
    "
cf5849dd8be7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8441
diff changeset
 16069
     |anImage|
cf5849dd8be7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8441
diff changeset
 16070
cf5849dd8be7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8441
diff changeset
 16071
     anImage := Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif'.
cf5849dd8be7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8441
diff changeset
 16072
     anImage bytesForFileUsing:TIFFReader.
cf5849dd8be7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8441
diff changeset
 16073
     anImage bytesForFileUsing:PNGReader.
cf5849dd8be7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8441
diff changeset
 16074
    "
cf5849dd8be7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8441
diff changeset
 16075
cf5849dd8be7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8441
diff changeset
 16076
    "Created: / 24-09-2018 / 10:27:20 / Claus Gittinger"
cf5849dd8be7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8441
diff changeset
 16077
!
cf5849dd8be7 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 8441
diff changeset
 16078
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16079
saveOn:aFileName
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 16080
    "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
 16081
     Currently, not all formats may be supported
1573
61046386f41f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1572
diff changeset
 16082
     (see ImageReader subclasses implementing save:onFile:).
3913
25e103c84773 comments
Claus Gittinger <cg@exept.de>
parents: 3912
diff changeset
 16083
     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
 16084
7173
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16085
    ^ self saveOn:aFileName quality:nil
1175
5595569cfbd3 newStyle info & error messages
Claus Gittinger <cg@exept.de>
parents: 1170
diff changeset
 16086
1385
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
 16087
    "
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
 16088
     |image|
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
 16089
3476
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 16090
     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
 16091
     image saveOn:'myImage.tiff'.
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
 16092
     image saveOn:'myImage.xbm'.
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
 16093
     image saveOn:'myImage.xpm'.
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
 16094
     image saveOn:'myImage.xwd'.
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
 16095
    "
461b3901950e more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 1374
diff changeset
 16096
1799
054302440308 moved all mime-knowledge to MIMETypes
Claus Gittinger <cg@exept.de>
parents: 1786
diff changeset
 16097
    "Modified: 30.6.1997 / 22:06:34 / cg"
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
 16098
!
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
 16099
7173
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16100
saveOn:aFileName quality:qualityPercentOrNil
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16101
    "save the image in aFileName. The suffix of the filename controls the format.
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16102
     Currently, not all formats may be supported
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16103
     (see ImageReader subclasses implementing save:onFile:).
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16104
     May raise a signal, if the image cannot be written by the reader."
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16105
8504
2d8f21131bb3 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8497
diff changeset
 16106
    |readerClass|
7173
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16107
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16108
    "/
8504
2d8f21131bb3 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8497
diff changeset
 16109
    "/ from the filename extension, get the imageReader class
7173
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16110
    "/ (which should know how to write images as well)
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16111
    "/
8504
2d8f21131bb3 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8497
diff changeset
 16112
    readerClass := [
2d8f21131bb3 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8497
diff changeset
 16113
        ImageReader readerClassForFilename:aFileName.
2d8f21131bb3 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8497
diff changeset
 16114
    ] on:ConversionError do:[ 
2d8f21131bb3 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8497
diff changeset
 16115
        |default|
2d8f21131bb3 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8497
diff changeset
 16116
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16117
        "/
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16118
        "/ no known extension - could ask user for the format here.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16119
        "/ currently default to tiff format.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16120
        "/
8504
2d8f21131bb3 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8497
diff changeset
 16121
        default := self class defaultImageFileWriter.
2d8f21131bb3 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8497
diff changeset
 16122
        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
 16123
        default.
7173
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16124
    ].
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16125
    ^ self saveOn:aFileName quality:qualityPercentOrNil using:readerClass
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16126
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16127
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16128
    "
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16129
     |image|
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16130
8504
2d8f21131bb3 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8497
diff changeset
 16131
     image := Image fromFile:'banner1.xpm'.
7173
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16132
     image saveOn:'myImage.tiff'.
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16133
     image saveOn:'myImage.xpm'.
8504
2d8f21131bb3 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 8497
diff changeset
 16134
     (image asImageWithDepth:1) saveOn:'myImage.xbm'.
7173
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16135
     image saveOn:'myImage.xwd'.
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16136
    "
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16137
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16138
    "Modified: 30.6.1997 / 22:06:34 / cg"
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16139
!
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16140
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16141
saveOn:aFileName quality:qualityPercentOrNil using:readerClass
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 16142
    "save the receiver using the representation class
3476
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 16143
     (which is usually a concrete subclasses of ImageReader).
3913
25e103c84773 comments
Claus Gittinger <cg@exept.de>
parents: 3912
diff changeset
 16144
     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
 16145
7173
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16146
    ^ readerClass save:self onFile:aFileName quality:qualityPercentOrNil
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16147
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16148
    "
1573
61046386f41f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1572
diff changeset
 16149
     |anImage|
61046386f41f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1572
diff changeset
 16150
3476
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 16151
     anImage := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
1573
61046386f41f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1572
diff changeset
 16152
     anImage saveOn:'myImage.tiff' using:TIFFReader.
1575
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 16153
    "
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 16154
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 16155
    "
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 16156
     |anImage|
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 16157
3476
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 16158
     anImage := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
1573
61046386f41f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1572
diff changeset
 16159
     anImage saveOn:'myImage.xbm' using:XBMReader.
1575
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 16160
    "
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 16161
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 16162
    "
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 16163
     |anImage|
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 16164
3476
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 16165
     anImage := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
1575
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 16166
     Image cannotRepresentImageSignal handle:[:ex |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16167
        self warn:'cannot save the image in this format'
1575
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 16168
     ] do:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16169
        anImage saveOn:'myImage.xbm' using:XBMReader.
7173
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
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16173
    "
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16174
     |anImage|
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16175
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16176
     anImage := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16177
     anImage saveOn:'myImage.xpm' using:XPMReader.
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16178
    "
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16179
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16180
    "
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16181
     |anImage|
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16182
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16183
     anImage := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16184
     anImage saveOn:'myImage.gif' using:GIFReader.
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16185
    "
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16186
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16187
    "Modified: 10.4.1997 / 17:49:26 / cg"
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16188
!
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16189
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16190
saveOn:aFileName using:readerClass
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16191
    "save the receiver using the representation class
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16192
     (which is usually a concrete subclasses of ImageReader).
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16193
     May raise a signal, if the image cannot be written by the reader."
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16194
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16195
    ^ readerClass save:self onFile:aFileName quality:nil
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16196
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16197
    "
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16198
     |anImage|
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16199
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16200
     anImage := Image fromFile:'../../goodies/bitmaps/gifImages/garfield.gif'.
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16201
     anImage saveOn:'myImage.tiff' using:TIFFReader.
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16202
     (Depth24Image fromImage:anImage) saveOn:'myImage.jpg' using:JPEGReader.
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16203
     anImage saveOn:'myImage50.tiff' quality:50 using:TIFFReader.
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16204
     (Depth24Image fromImage:anImage) saveOn:'myImage50.jpg' quality:50 using:JPEGReader.
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.xbm' using:XBMReader.
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
     Image cannotRepresentImageSignal handle:[:ex |
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16219
        self warn:'cannot save the image in this format'
7173
075306bcac68 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7156
diff changeset
 16220
     ] do:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16221
        anImage saveOn:'myImage.xbm' using:XBMReader.
1575
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 16222
     ]
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 16223
    "
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 16224
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 16225
    "
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 16226
     |anImage|
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 16227
3476
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 16228
     anImage := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
1573
61046386f41f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1572
diff changeset
 16229
     anImage saveOn:'myImage.xpm' using:XPMReader.
1575
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 16230
    "
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 16231
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 16232
    "
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 16233
     |anImage|
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 16234
3476
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 16235
     anImage := Image fromFile:'goodies/bitmaps/gifImages/garfield.gif'.
1573
61046386f41f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1572
diff changeset
 16236
     anImage saveOn:'myImage.gif' using:GIFReader.
61046386f41f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1572
diff changeset
 16237
    "
61046386f41f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1572
diff changeset
 16238
1575
d93e15f64146 comments
Claus Gittinger <cg@exept.de>
parents: 1573
diff changeset
 16239
    "Modified: 10.4.1997 / 17:49:26 / cg"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
 16240
! !
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16241
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16242
!Image methodsFor:'screen capture'!
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16243
924
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 16244
from:aDrawable in:aRectangle
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 16245
    "read an image from aDrawable.
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 16246
     This may be a device Form, a view or the rootView.
7227
3aaeb922a454 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 7224
diff changeset
 16247
     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
 16248
     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
 16249
     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
 16250
     and to read hardcopy images from the screen."
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16251
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 16252
    | visType
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16253
     x        "{ Class: SmallInteger }"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16254
     y        "{ Class: SmallInteger }"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16255
     w        "{ Class: SmallInteger }"
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16256
     h        "{ Class: SmallInteger }"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 16257
     dstIndex "{ Class: SmallInteger }"
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 16258
     srcIndex "{ Class: SmallInteger }"
399
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
 16259
     srcRow   "{ Class: SmallInteger }"
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
 16260
     dstRow   "{ Class: SmallInteger }"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 16261
     inData tmpData usedPixels mapSize
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 16262
     map bytesPerLine
2534
35d91dcc4604 removed unused local
Claus Gittinger <cg@exept.de>
parents: 2533
diff changeset
 16263
     bitOrder spaceBitsPerPixel
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 16264
     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
 16265
     bitsR "{ Class: SmallInteger }"
e2c3f84ff31f fixed pixmap readout for win32, where red and green are exchanged
Claus Gittinger <cg@exept.de>
parents: 3518
diff changeset
 16266
     bitsG "{ Class: SmallInteger }"
e2c3f84ff31f fixed pixmap readout for win32, where red and green are exchanged
Claus Gittinger <cg@exept.de>
parents: 3518
diff changeset
 16267
     bitsB "{ Class: SmallInteger }"
399
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
 16268
     maskR "{ Class: SmallInteger }"
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
 16269
     maskG "{ Class: SmallInteger }"
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
 16270
     maskB "{ Class: SmallInteger }"
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
 16271
     shR "{ Class: SmallInteger }"
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
 16272
     shG "{ Class: SmallInteger }"
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
 16273
     shB "{ Class: SmallInteger }"
401
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
 16274
     shR2 "{ Class: SmallInteger }"
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
 16275
     shG2 "{ Class: SmallInteger }"
f163a93a0987 grab image as 24bit rgb on 15/16bit trueColor servers
Claus Gittinger <cg@exept.de>
parents: 399
diff changeset
 16276
     shB2 "{ Class: SmallInteger }"
399
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
 16277
     r "{ Class: SmallInteger }"
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
 16278
     g "{ Class: SmallInteger }"
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
 16279
     b "{ Class: SmallInteger }"
2019
0de58c8e3262 fixed screen-capture (for 16bit)
Claus Gittinger <cg@exept.de>
parents: 2008
diff changeset
 16280
     word "{ Class: SmallInteger }"
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 16281
     lword
7180
40dcb4638d93 #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 7176
diff changeset
 16282
     device ddepth isMSB bpp|
2019
0de58c8e3262 fixed screen-capture (for 16bit)
Claus Gittinger <cg@exept.de>
parents: 2008
diff changeset
 16283
0de58c8e3262 fixed screen-capture (for 16bit)
Claus Gittinger <cg@exept.de>
parents: 2008
diff changeset
 16284
    depth := self depth.
7180
40dcb4638d93 #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 7176
diff changeset
 16285
    bpp := "bitsPerPixel :=" self bitsPerPixel.
924
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 16286
927
c4bc2a7ff733 use #graphicsDevice instead of #device.
Claus Gittinger <cg@exept.de>
parents: 924
diff changeset
 16287
    device := aDrawable graphicsDevice.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16288
7637
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 16289
    aDrawable isForm ifTrue:[
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 16290
        aDrawable depth == 1 ifTrue:[
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 16291
            "/ a monochrome bitmap ?
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 16292
            visType := #StaticGray.
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 16293
            ddepth := 1.
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 16294
        ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16295
            visType := aDrawable photometric.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16296
            ddepth := aDrawable depth.
7637
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 16297
        ]. 
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16298
        photometric := aDrawable photometric.
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 16299
        samplesPerPixel := ddepth == 24 ifTrue:[3] ifFalse:[1].
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 16300
        bitsPerSample := ddepth == 24 ifTrue:[#[8 8 8]] ifFalse:[ByteArray with:bpp].
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16301
    ] ifFalse:[
7637
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 16302
        "get some attributes of the display device"
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 16303
        visType := device visualType.
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 16304
        ddepth := device depth.
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 16305
        "/ kludge for 15bit XFree server
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 16306
        ddepth == 15 ifTrue:[
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 16307
            ddepth := 16
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 16308
        ].
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16309
        (visType == #StaticGray) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16310
            (device blackpixel == 0) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16311
                photometric := #blackIs0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16312
            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16313
                photometric := #whiteIs0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16314
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16315
            samplesPerPixel := 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16316
            bpp := "bitsPerPixel :=" ddepth.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16317
            bitsPerSample := ByteArray with:bpp.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16318
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16319
            ((visType == #PseudoColor) or:[(visType == #StaticColor) or:[visType == #GrayScale]]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16320
                photometric := #palette.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16321
                samplesPerPixel := 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16322
                bpp := "bitsPerPixel :=" ddepth.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16323
                bitsPerSample := ByteArray with:bpp.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16324
            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16325
                ((visType == #TrueColor) or:[visType == #DirectColor]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16326
                    photometric := #rgb.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16327
                    samplesPerPixel := 3.
7180
40dcb4638d93 #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 7176
diff changeset
 16328
    "/                bpp := "bitsPerPixel :=" depth.
4421
bcc5886c989c form -> image conversion fixes
james
parents: 4420
diff changeset
 16329
    "/                bitsPerSample := ByteArray with:device bitsRed
bcc5886c989c form -> image conversion fixes
james
parents: 4420
diff changeset
 16330
    "/                                       with:device bitsGreen
bcc5886c989c form -> image conversion fixes
james
parents: 4420
diff changeset
 16331
    "/                                       with:device bitsBlue
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16332
                    bpp := "bitsPerPixel :=" 24.
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 16333
                    bitsPerSample := #[8 8 8].
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16334
                ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16335
                    self error:'screen visual not supported'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16336
                    ^ nil
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16337
                ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16338
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16339
        ].
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 16340
    ].
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 16341
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 16342
    "
7227
3aaeb922a454 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 7224
diff changeset
 16343
     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
 16344
     offering enough space for 32 bit padding
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16345
    "
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16346
    w := width := aRectangle width.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16347
    h := height := aRectangle height.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16348
    x := aRectangle left.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16349
    y := aRectangle top.
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16350
399
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
 16351
    "
7180
40dcb4638d93 #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 7176
diff changeset
 16352
     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
 16353
     (its too late when info is present ...)
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
 16354
    "
7180
40dcb4638d93 #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 7176
diff changeset
 16355
    spaceBitsPerPixel := bpp.
40dcb4638d93 #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 7176
diff changeset
 16356
    (bpp > 8) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16357
        spaceBitsPerPixel := 16.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16358
        (bpp > 16) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16359
            spaceBitsPerPixel := 32.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16360
            (bpp > 32) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16361
                spaceBitsPerPixel := bpp.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16362
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16363
        ]
399
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
 16364
    ].
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
 16365
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
 16366
    bytesPerLine := (w * spaceBitsPerPixel + 31) // 32 * 4.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16367
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16368
    "
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16369
     get the pixels
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16370
    "
1459
84e80b355553 splitted getBitsFrom into getBitsFromPixmap
Claus Gittinger <cg@exept.de>
parents: 1446
diff changeset
 16371
    aDrawable isForm ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16372
        (aDrawable id isNil and:[aDrawable bits notNil]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16373
            info := Dictionary new
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16374
                        at:#bitsPerPixel put:(aDrawable depth);
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16375
                        at:#byteOrder put:#msbFirst;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16376
                        at:#bitOrder put:#msbFirst;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16377
                        at:#bytesPerLine put:(aDrawable width * aDrawable depth + 7)//8;
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16378
                        yourself.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16379
            inData := aDrawable bits.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16380
        ] ifFalse:[
7637
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 16381
            inData := ByteArray new:(bytesPerLine * height).
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16382
            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
 16383
        ]
1459
84e80b355553 splitted getBitsFrom into getBitsFromPixmap
Claus Gittinger <cg@exept.de>
parents: 1446
diff changeset
 16384
    ] ifFalse:[
7637
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 16385
        inData := ByteArray new:(bytesPerLine * height).
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16386
        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
 16387
    ].
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16388
399
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
 16389
    bitsPerPixelIn := info at:#bitsPerPixel.
2533
3af95252b1b3 oops - ISMSB was not assigned
Claus Gittinger <cg@exept.de>
parents: 2532
diff changeset
 16390
7637
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 16391
    isMSB := (info at:#byteOrder) == #msbFirst.
2533
3af95252b1b3 oops - ISMSB was not assigned
Claus Gittinger <cg@exept.de>
parents: 2532
diff changeset
 16392
2029
99961ce13c2a oops - must care for bitOrder, if depth is <= 8
ca
parents: 2023
diff changeset
 16393
    "/
99961ce13c2a oops - must care for bitOrder, if depth is <= 8
ca
parents: 2023
diff changeset
 16394
    "/ check if bitorder is what I like (msbFirst)
99961ce13c2a oops - must care for bitOrder, if depth is <= 8
ca
parents: 2023
diff changeset
 16395
    "/
7206
Claus Gittinger <cg@exept.de>
parents: 7191
diff changeset
 16396
    "/ mhmh - that's not needed
2029
99961ce13c2a oops - must care for bitOrder, if depth is <= 8
ca
parents: 2023
diff changeset
 16397
99961ce13c2a oops - must care for bitOrder, if depth is <= 8
ca
parents: 2023
diff changeset
 16398
    bitsPerPixelIn < 8 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16399
        bitOrder := info at:#bitOrder.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16400
        bitOrder ~~ #msbFirst ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16401
            inData
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16402
                expandPixels:8
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16403
                width:(inData size)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16404
                height:1
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16405
                into:inData
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16406
                mapping:(ImageReader reverseBits "TODO: reverseBitsForDepth:bitsPerPixelIn").
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16407
        ].
2029
99961ce13c2a oops - must care for bitOrder, if depth is <= 8
ca
parents: 2023
diff changeset
 16408
    ].
99961ce13c2a oops - must care for bitOrder, if depth is <= 8
ca
parents: 2023
diff changeset
 16409
396
d088e672be8a handle screen image grabbing with depth 16/24 and different byteOrder
Claus Gittinger <cg@exept.de>
parents: 394
diff changeset
 16410
    "
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16411
     check, if the devices padding is different ..
399
0b6e43843204 handle 24 truecolor displays in fromScreen
Claus Gittinger <cg@exept.de>
parents: 396
diff changeset
 16412
     or if the bitsPerPixels are different
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16413
    "
7180
40dcb4638d93 #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 7176
diff changeset
 16414
    bytesPerLineIn := (info at:#bytesPerLine).           "what I got"
40dcb4638d93 #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 7176
diff changeset
 16415
    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
 16416
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 16417
    maskR := info at:#redMask ifAbsent:[0].
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 16418
    maskG := info at:#greenMask ifAbsent:[0].
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 16419
    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
 16420
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 16421
    ((bytesPerLine ~~ bytesPerLineIn)
7637
a809c69a2cf4 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7621
diff changeset
 16422
     or:[bitsPerPixelIn ~~ bpp]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16423
        tmpData := inData.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16424
        inData := ByteArray uninitializedNew:(bytesPerLine * height).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16425
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16426
        srcRow := 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16427
        dstRow := 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16428
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16429
        bitsPerPixelIn ~~ bpp ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16430
            "/ for now, only 32 -> 24 is supported
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16431
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16432
            maskR == 0 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16433
                bitsR := device bitsRed.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16434
                bitsG := device bitsGreen.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16435
                bitsB := device bitsBlue.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16436
                maskR := (1 bitShift:bitsR) - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16437
                maskG := (1 bitShift:bitsG) - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16438
                maskB := (1 bitShift:bitsB) - 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16439
                shR := device shiftRed negated.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16440
                shG := device shiftGreen negated.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16441
                shB := device shiftBlue negated.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16442
            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16443
                shR := (maskR lowBit - 1) negated.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16444
                bitsR := maskR highBit - maskR lowBit + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16445
                maskR := maskR bitShift:shR.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16446
                shG := (maskG lowBit - 1) negated.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16447
                bitsG := maskG highBit - maskG lowBit + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16448
                maskG := maskG bitShift:shG.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16449
                shB := (maskB lowBit - 1) negated.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16450
                bitsB := maskB highBit - maskB lowBit + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16451
                maskB := maskB bitShift:shB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16452
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16453
            shR2 := (8 - bitsR).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16454
            shG2 := (8 - bitsG).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16455
            shB2 := (8 - bitsB).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16456
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16457
            ((bitsPerPixelIn == 32) and:[bpp == 24]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16458
                "/ 'reformatting 32->24...' printNL.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16459
                1 to:h do:[:hi |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16460
                    srcIndex := srcRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16461
                    dstIndex := dstRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16462
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16463
                    1 to:w do:[:wi |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16464
                        lword := tmpData unsignedInt32At:srcIndex MSB:isMSB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16465
                        r := (lword bitShift:shR) bitAnd:maskR.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16466
                        g := (lword bitShift:shG) bitAnd:maskG.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16467
                        b := (lword bitShift:shB) bitAnd:maskB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16468
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16469
                        inData at:dstIndex   put:r.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16470
                        inData at:dstIndex+1 put:g.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16471
                        inData at:dstIndex+2 put:b.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16472
                        srcIndex := srcIndex + 4.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16473
                        dstIndex := dstIndex + 3.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16474
                    ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16475
                    dstRow := dstRow + bytesPerLine.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16476
                    srcRow := srcRow + bytesPerLineIn
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16477
                ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16478
            ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16479
                ((bitsPerPixelIn == 16) and:[bpp == 24]) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16480
                    "/ 'reformatting 16->24...' printNL.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16481
                    1 to:h do:[:hi |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16482
                        srcIndex := srcRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16483
                        dstIndex := dstRow.
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
                        1 to:w do:[:wi |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16486
                            word := tmpData unsignedInt16At:srcIndex MSB:isMSB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16487
                            r := (word bitShift:shR) bitAnd:maskR.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16488
                            g := (word bitShift:shG) bitAnd:maskG.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16489
                            b := (word bitShift:shB) bitAnd:maskB.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16490
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16491
                            inData at:dstIndex   put:(r bitShift:shR2).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16492
                            inData at:dstIndex+1 put:(g bitShift:shG2).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16493
                            inData at:dstIndex+2 put:(b bitShift:shB2).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16494
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16495
                            srcIndex := srcIndex + 2.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16496
                            dstIndex := dstIndex + 3.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16497
                        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16498
                        dstRow := dstRow + bytesPerLine.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16499
                        srcRow := srcRow + bytesPerLineIn
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16500
                    ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16501
                ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16502
                    ('Image [warning]: unsupported depth combination: ' , bitsPerPixelIn printString , ' -> ' ,
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16503
                                                        bpp printString) errorPrintCR.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16504
                    self shouldImplement.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16505
                    ^ nil
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16506
                ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16507
            ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16508
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16509
            "/
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16510
            "/ repad in the buffer
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16511
            "/
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16512
            1 to:h do:[:hi |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16513
                inData replaceFrom:dstRow to:(dstRow + bytesPerLine - 1)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16514
                              with:tmpData startingAt:srcRow.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16515
                dstRow := dstRow + bytesPerLine.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16516
                srcRow := srcRow + bytesPerLineIn
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16517
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16518
        ]
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16519
    ] ifFalse:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16520
        (bytesPerLine * height) ~~ inData size ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16521
            tmpData := inData.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16522
            inData := ByteArray uninitializedNew:(bytesPerLine * height).
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16523
            inData replaceFrom:1 to:bytesPerLine * height with:tmpData startingAt:1
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16524
        ]
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16525
    ].
3866
c01473a90934 eliminated most references to bytes
Claus Gittinger <cg@exept.de>
parents: 3865
diff changeset
 16526
    self bits:inData.
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16527
3864
b04f2f0c5eae *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3863
diff changeset
 16528
    "/
b04f2f0c5eae *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3863
diff changeset
 16529
    "/  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
 16530
    "/
1975
5b1a7d5e0b6a Fix #from:in: (screen capture) for palette (8 bit) displays.
Stefan Vogel <sv@exept.de>
parents: 1972
diff changeset
 16531
    photometric == #palette ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16532
        "/
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16533
        "/ 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
 16534
        "/ find out, which colors are in the picture
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16535
        "/
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16536
        usedPixels := inData usedValues.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16537
        mapSize := usedPixels max + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16538
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16539
        "get the palette"
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16540
        map := Array new:mapSize.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16541
        usedPixels do:[:colorIndex |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16542
            |i|
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16543
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16544
            i := colorIndex + 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16545
            device
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16546
                getRGBFrom:colorIndex
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16547
                into:[:r :g :b |
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16548
                    map at:i put:(Color red:r green:g blue:b)
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16549
                ]
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
        self setColorMap:map.
1644
e06e1c7869fc care for bitOrder, when reading out device bits.
Claus Gittinger <cg@exept.de>
parents: 1642
diff changeset
 16552
    ].
e06e1c7869fc care for bitOrder, when reading out device bits.
Claus Gittinger <cg@exept.de>
parents: 1642
diff changeset
 16553
7814
aa4d64730bca #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7795
diff changeset
 16554
    "Modified: / 07-02-1998 / 18:23:07 / cg"
7824
1ecfb677d8d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7814
diff changeset
 16555
    "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
 16556
!
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 16557
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 16558
fromScreen:aRectangle
1488
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
 16559
    "read an image from the display screen.
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
 16560
     WARNING: this temporarily grabs the display
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16561
              it may not work from within a buttonMotion
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16562
              (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
 16563
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 16564
    ^ self
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16565
        fromScreen:aRectangle
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16566
        on:Screen current
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16567
        grab:true
1487
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
 16568
1488
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
 16569
    "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
 16570
!
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 16571
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 16572
fromScreen:aRectangle on:aDevice
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 16573
    "read an image from aDevices display screen.
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 16574
     Since I have no other displays, only the MonoChrome, StaticGrey
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 16575
     and PseudoColor cases have been tested ...
924
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 16576
     (especially True- and DirectColor may be wrong).
1488
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
 16577
     Late note: 24bit rgb now also works.
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
 16578
     WARNING: this temporarily grabs the display
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16579
              it may not work from within a buttonMotion
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16580
              (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
 16581
1487
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
 16582
    ^ self
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16583
        fromScreen:aRectangle
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16584
        on:aDevice
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16585
        grab:true
1662
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 16586
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 16587
    "
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 16588
     Image fromScreen:((0 @ 0) corner:(100 @ 100)) on:Display
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 16589
     Image fromScreen:((0 @ 0) corner:(500 @ 500)) on:Display
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 16590
    "
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 16591
93de4bcdca85 commentary
Claus Gittinger <cg@exept.de>
parents: 1660
diff changeset
 16592
    "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
 16593
!
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
 16594
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
 16595
fromScreen:aRectangle on:aDevice grab:doGrab
7227
3aaeb922a454 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 7224
diff changeset
 16596
    "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
 16597
     If the doGrab argument is true, the display
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
 16598
     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
 16599
     shown while the readout is done.
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 16600
     Since I have no other displays, only the MonoChrome, StaticGrey
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 16601
     and PseudoColor cases have been tested ...
1487
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
 16602
     (especially True- and DirectColor may be wrong).
1488
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
 16603
     Late note: 24bit rgb now also works.
436e5944129b comments warning about grab & buttonMotion
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
 16604
     WARNING: with doGrab true, this temporarily grabs the display
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16605
              and it may not work from within a buttonMotion
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16606
              (use with a false grabArg then)."
4160
6d31e4e6a432 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4159
diff changeset
 16607
6d31e4e6a432 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4159
diff changeset
 16608
    |curs rootView prevGrab|
6d31e4e6a432 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4159
diff changeset
 16609
6613
3b0f0fb40c2c class: Image
Claus Gittinger <cg@exept.de>
parents: 6592
diff changeset
 16610
    curs := nil.
4160
6d31e4e6a432 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 4159
diff changeset
 16611
"/    doGrab ifTrue:[ |cid|
3476
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 16612
"/        curs := Cursor sourceForm:(Image fromFile:'bitmaps/Camera.xbm')
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 16613
"/                         maskForm:(Image fromFile:'bitmaps/Camera_m.xbm')
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 16614
"/                          hotSpot:16@16.
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 16615
"/        curs notNil ifTrue:[
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 16616
"/            cid := (curs onDevice:aDevice) id
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 16617
"/        ].
55a239ccd829 examples fixed
Claus Gittinger <cg@exept.de>
parents: 3475
diff changeset
 16618
"/    ].
924
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 16619
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 16620
    "
7227
3aaeb922a454 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 7224
diff changeset
 16621
     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
 16622
    "
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 16623
    rootView := aDevice rootView.
1487
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
 16624
    doGrab ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16625
        prevGrab := aDevice activePointerGrab.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16626
        aDevice grabPointerInView:rootView withCursor:curs.
1487
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
 16627
    ].
924
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 16628
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 16629
    "
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 16630
     get the pixels
d6d5d427b176 fixed conversion from deep device forms
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
 16631
    "
1487
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
 16632
    [
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16633
        self from:rootView in:aRectangle.
3605
b5c70808fc8c #valueNowOrOnUnwindDo: -> #ensure:
Claus Gittinger <cg@exept.de>
parents: 3563
diff changeset
 16634
    ] ensure:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16635
        doGrab ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16636
            aDevice ungrabPointer.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16637
            prevGrab notNil ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16638
                 aDevice grabPointerInView:prevGrab.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16639
            ]
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16640
        ]
1487
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
 16641
    ]
1d8efd4d85c3 allow screen capture without a grab
Claus Gittinger <cg@exept.de>
parents: 1469
diff changeset
 16642
3092
0f1a9ec64574 restore grab after #imageFromUser
ca
parents: 3059
diff changeset
 16643
    "
0f1a9ec64574 restore grab after #imageFromUser
ca
parents: 3059
diff changeset
 16644
     Image fromScreen:((100@100) corner:(200@200)) on:Display grab:false
0f1a9ec64574 restore grab after #imageFromUser
ca
parents: 3059
diff changeset
 16645
     Image fromScreen:((100@100) corner:(200@200)) on:Display grab:true
0f1a9ec64574 restore grab after #imageFromUser
ca
parents: 3059
diff changeset
 16646
    "
936
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16647
!
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16648
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16649
photometricFromScreen:aDevice
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16650
    "read aDevices display photometric and set my colormap for it.
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16651
     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
 16652
     or from an offScreen bitmap, for correct pixel interpretation."
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16653
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16654
    |depth visType bitsPerPixel|
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16655
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16656
    "
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16657
     get some attributes of the display device
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16658
    "
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16659
    visType := aDevice visualType.
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16660
    depth := aDevice depth.
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16661
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16662
    "/ kludge for 15bit XFree server
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16663
    depth == 15 ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16664
        depth := 16
936
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16665
    ].
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16666
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16667
    (visType == #StaticGray) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16668
        (aDevice blackpixel == 0) ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16669
            photometric := #blackIs0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16670
        ] ifFalse:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16671
            photometric := #whiteIs0
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16672
        ].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16673
        samplesPerPixel := 1.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16674
        bitsPerPixel := depth.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16675
        bitsPerSample := ByteArray with:bitsPerPixel.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16676
        "
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16677
         were done, the pixel values are the grey values
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16678
        "
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16679
        ^ self
936
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16680
    ].
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16681
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16682
    ((visType == #TrueColor) or:[visType == #DirectColor]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16683
        photometric := #rgb.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16684
        samplesPerPixel := 3.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16685
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16686
        "/ for now - only support 24bit TrueColor
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16687
        depth ~~ 24 ifTrue:[
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16688
            'IMAGE: unsupported display depth' errorPrintCR.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16689
        ].
936
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16690
"/                bitsPerPixel := depth.
4115
0e783379a6b0 Use ByteArray for bitsPerSample (255 should be enough ;-)
Stefan Vogel <sv@exept.de>
parents: 4109
diff changeset
 16691
"/                bitsPerSample := ByteArray with:aDevice bitsRed
936
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16692
"/                                       with:aDevice bitsGreen
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16693
"/                                       with:aDevice bitsBlue
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16694
        bitsPerPixel := 24.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16695
        bitsPerSample := #[8 8 8].
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16696
        "
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16697
         were done, the pixel values are the rgb values
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
        ^ self
4717
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 16700
    ].
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 16701
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 16702
    ((visType ~~ #PseudoColor)
c25149336a26 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4620
diff changeset
 16703
    and:[(visType ~~ #StaticColor)
936
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16704
    and:[visType ~~ #GrayScale]]) ifTrue:[
7522
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16705
        self error:'screen visual not supported'.
b9cefa848775 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7519
diff changeset
 16706
        ^ nil
936
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16707
    ].
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
    photometric := #palette.
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16710
    samplesPerPixel := 1.
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16711
    bitsPerPixel := depth.
4115
0e783379a6b0 Use ByteArray for bitsPerSample (255 should be enough ;-)
Stefan Vogel <sv@exept.de>
parents: 4109
diff changeset
 16712
    bitsPerSample := ByteArray with:bitsPerPixel.
936
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16713
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
     still need the pixels r/g/b values ...
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16716
    "
3863
b7ba8a04be25 always ensure colorMap is a real colorMap
Claus Gittinger <cg@exept.de>
parents: 3861
diff changeset
 16717
    self setColorMap:aDevice colorMap
936
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16718
e30ea164ccbf fromForm: fixes
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
 16719
    "Modified: 11.7.1996 / 11:11:34 / cg"
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16720
! !
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16721
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16722
!Image methodsFor:'virtual anti-aliased'!
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16723
7905
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 16724
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
 16725
    |isBottom isLeft additionalY workPoint startX endX pixels pixelPos percent distance nearestKey tmp|
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16726
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16727
    isBottom := bottomOrTop sameAs:#bottom.
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16728
    isBottom ifTrue:[
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16729
        additionalY := -1.
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16730
    ] ifFalse:[
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16731
        additionalY := 1.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16732
    ].
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16733
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16734
    isLeft := leftOrRight sameAs:#left.
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16735
    isLeft ifTrue:[
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16736
        workPoint := (xRun - 1)@yRun.
7640
25640118d11f #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7637
diff changeset
 16737
        [
25640118d11f #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7637
diff changeset
 16738
            ((tempForm pixelAtX:workPoint x y:workPoint y) == 0)
25640118d11f #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7637
diff changeset
 16739
            and:[ ((tempForm pixelAtX:workPoint x y:workPoint y + additionalY) == 1) 
25640118d11f #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7637
diff changeset
 16740
            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
 16741
        ] whileTrue:[
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16742
            startX := workPoint x.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16743
            endX isNil ifTrue:[endX := workPoint x].
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16744
            workPoint := (workPoint x - 1)@yRun.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16745
        ].
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16746
    ] ifFalse:[
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16747
        workPoint := (xRun + 1)@yRun.
7640
25640118d11f #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7637
diff changeset
 16748
        [
25640118d11f #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7637
diff changeset
 16749
            ((tempForm pixelAtX:workPoint x y:workPoint y) == 0)
25640118d11f #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7637
diff changeset
 16750
            and:[ ((tempForm pixelAtX:workPoint x y:workPoint y + additionalY) == 1) 
25640118d11f #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7637
diff changeset
 16751
            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
 16752
        ] whileTrue:[
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16753
            endX := workPoint x.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16754
            startX isNil ifTrue:[startX := workPoint x].
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16755
            workPoint := (workPoint x + 1)@yRun.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16756
        ].
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16757
    ].
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16758
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16759
    (startX notNil and:[endX notNil]) ifTrue:[
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16760
        startX = endX ifTrue:[
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16761
            self atImageAndMask:startX@yRun putValue:((colorDictionary at:aColor) at:blendStart).
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16762
        ] ifFalse:[
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16763
            pixels := (endX - startX) + 1.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16764
            startX to:endX do:[:x |
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16765
                isLeft ifTrue:[
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16766
                    pixelPos := (x - startX) + 1.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16767
                ] ifFalse:[
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16768
                    pixelPos := (endX - x) + 1.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16769
                ].
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16770
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16771
                percent := (100 / (pixels / pixelPos)) asFloat / 100.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16772
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16773
                (colorDictionary at:aColor) keys do:[:aKey |
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16774
                    nearestKey isNil ifTrue:[
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16775
                        distance := percent dist:aKey.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16776
                        nearestKey := aKey.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16777
                    ] ifFalse:[
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16778
                        tmp := percent dist:aKey.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16779
                        distance > tmp ifTrue:[
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16780
                            distance := tmp.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16781
                            nearestKey := aKey.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16782
                        ].
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16783
                    ].
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16784
                ].
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16785
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16786
                self atImageAndMask:x@yRun putValue:((colorDictionary at:aColor) at:nearestKey).
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16787
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16788
                distance := nil.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16789
                nearestKey := nil.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16790
            ].
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16791
        ].
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16792
    ].
7905
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 16793
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 16794
    "Created: / 16-02-2017 / 20:02:54 / cg"
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 16795
!
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 16796
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 16797
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
 16798
    |isLeft isBottom additionalX workPoint startY endY pixels pixelPos percent distance nearestKey tmp|
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16799
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16800
    isLeft := leftOrRight sameAs:#left.
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16801
    isLeft ifTrue:[
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16802
        additionalX := 1.
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16803
    ] ifFalse:[
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16804
        additionalX := -1.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16805
    ].
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16806
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16807
    isBottom := bottomOrTop sameAs:#bottom.
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16808
    isBottom ifTrue:[
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16809
        workPoint := xRun@(yRun + 1).
7640
25640118d11f #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7637
diff changeset
 16810
        [
25640118d11f #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7637
diff changeset
 16811
            ((tempForm pixelAtX:workPoint x y:workPoint y) == 0) 
25640118d11f #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7637
diff changeset
 16812
            and:[ ((tempForm pixelAtX:workPoint x + additionalX y:workPoint y) == 1) 
25640118d11f #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7637
diff changeset
 16813
            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
 16814
        ] whileTrue:[
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16815
            endY := workPoint y.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16816
            startY isNil ifTrue:[startY := workPoint y].
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16817
            workPoint := xRun@(workPoint y + 1).
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16818
        ].
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16819
    ] ifFalse:[
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16820
        workPoint := xRun@(yRun - 1).
7640
25640118d11f #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7637
diff changeset
 16821
        [
25640118d11f #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7637
diff changeset
 16822
            ((tempForm pixelAtX:workPoint x y:workPoint y) == 0) 
25640118d11f #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7637
diff changeset
 16823
            and:[ ((tempForm pixelAtX:workPoint x + additionalX y:workPoint y) == 1) 
25640118d11f #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7637
diff changeset
 16824
            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
 16825
        ] whileTrue:[
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16826
            startY := workPoint y.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16827
            endY isNil ifTrue:[endY := workPoint y].
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16828
            workPoint := xRun@(workPoint y - 1).
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16829
        ].
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16830
    ].
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16831
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16832
    (startY notNil and:[endY notNil]) ifTrue:[
7481
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16833
        startY = endY ifTrue:[
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16834
            self atImageAndMask:xRun@startY putValue:((colorDictionary at:aColor) at:blendStart).
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16835
        ] ifFalse:[
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16836
            pixels := (endY - startY) + 1.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16837
            startY to:endY do:[:y |
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16838
                isBottom ifTrue:[
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16839
                    pixelPos := (endY - y) + 1.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16840
                ] ifFalse:[
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16841
                    pixelPos := (y - startY) + 1.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16842
                ].
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
                percent := (100 / (pixels / pixelPos)) asFloat / 100.
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
                (colorDictionary at:aColor) keys do:[:aKey |
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16847
                    nearestKey isNil ifTrue:[
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16848
                        distance := percent dist:aKey.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16849
                        nearestKey := aKey.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16850
                    ] ifFalse:[
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16851
                        tmp := percent dist:aKey.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16852
                        distance > tmp ifTrue:[
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16853
                            distance := tmp.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16854
                            nearestKey := aKey.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16855
                        ].
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16856
                    ].
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16857
                ].
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16858
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16859
                self atImageAndMask:xRun@y putValue:((colorDictionary at:aColor) at:nearestKey).
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16860
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16861
                distance := nil.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16862
                nearestKey := nil.
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16863
            ].
47aede177c3a #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 7480
diff changeset
 16864
        ].
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16865
    ].
7905
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 16866
3b70f3c5f995 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7904
diff changeset
 16867
    "Created: / 16-02-2017 / 20:02:41 / cg"
4998
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16868
! !
2ed2f4e7931e *** empty log message ***
sr
parents: 4997
diff changeset
 16869
1086
269243c32f69 added displayOpaque, for protocol completeness
Claus Gittinger <cg@exept.de>
parents: 1070
diff changeset
 16870
!Image class methodsFor:'documentation'!
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16871
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16872
version
6894
0fc111a48edf class: Image
Claus Gittinger <cg@exept.de>
parents: 6862
diff changeset
 16873
    ^ '$Header$'
5476
06e08505bc6f __isByteArray() to __isByteArrayLike() in primitive code
Stefan Vogel <sv@exept.de>
parents: 5352
diff changeset
 16874
!
06e08505bc6f __isByteArray() to __isByteArrayLike() in primitive code
Stefan Vogel <sv@exept.de>
parents: 5352
diff changeset
 16875
06e08505bc6f __isByteArray() to __isByteArrayLike() in primitive code
Stefan Vogel <sv@exept.de>
parents: 5352
diff changeset
 16876
version_CVS
6894
0fc111a48edf class: Image
Claus Gittinger <cg@exept.de>
parents: 6862
diff changeset
 16877
    ^ '$Header$'
650
14fc51fc3a4e comments
Claus Gittinger <cg@exept.de>
parents: 649
diff changeset
 16878
! !
3759
5b083b0ad909 fixed stupid flood-fill algorithm
Claus Gittinger <cg@exept.de>
parents: 3729
diff changeset
 16879
6037
eea2343b0b1e Refactoring:
Stefan Vogel <sv@exept.de>
parents: 5956
diff changeset
 16880
283
c4ff5f26ff44 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
 16881
Image initialize!