OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [libjava/] [classpath/] [java/] [awt/] [image/] [ReplicateScaleFilter.java] - Blame information for rev 771

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 771 jeremybenn
/* ReplicateScaleFilter.java -- Java class for filtering images
2
   Copyright (C) 1999 Free Software Foundation, Inc.
3
 
4
This file is part of GNU Classpath.
5
 
6
GNU Classpath is free software; you can redistribute it and/or modify
7
it under the terms of the GNU General Public License as published by
8
the Free Software Foundation; either version 2, or (at your option)
9
any later version.
10
 
11
GNU Classpath is distributed in the hope that it will be useful, but
12
WITHOUT ANY WARRANTY; without even the implied warranty of
13
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14
General Public License for more details.
15
 
16
You should have received a copy of the GNU General Public License
17
along with GNU Classpath; see the file COPYING.  If not, write to the
18
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19
02110-1301 USA.
20
 
21
Linking this library statically or dynamically with other modules is
22
making a combined work based on this library.  Thus, the terms and
23
conditions of the GNU General Public License cover the whole
24
combination.
25
 
26
As a special exception, the copyright holders of this library give you
27
permission to link this library with independent modules to produce an
28
executable, regardless of the license terms of these independent
29
modules, and to copy and distribute the resulting executable under
30
terms of your choice, provided that you also meet, for each linked
31
independent module, the terms and conditions of the license of that
32
module.  An independent module is a module which is not derived from
33
or based on this library.  If you modify this library, you may extend
34
this exception to your version of the library, but you are not
35
obligated to do so.  If you do not wish to do so, delete this
36
exception statement from your version. */
37
 
38
 
39
package java.awt.image;
40
 
41
import java.util.Hashtable;
42
 
43
/**
44
 * This filter should be used for fast scaling of images where the result
45
 * does not need to ensure straight lines are still straight, etc.  The
46
 * exact method is not defined by Sun but some sort of fast Box filter should
47
 * probably be correct.
48
 * <br>
49
 * Currently this filter does nothing and needs to be implemented.
50
 *
51
 * @author C. Brian Jones (cbj@gnu.org)
52
 */
53
public class ReplicateScaleFilter extends ImageFilter
54
{
55
    public ReplicateScaleFilter(int width, int height) {
56
        destHeight = height;
57
        destWidth = width;
58
    }
59
 
60
    /**
61
     * The height of the destination image.
62
     */
63
    protected int destHeight;
64
 
65
    /**
66
     * The width of the destination image.
67
     */
68
    protected int destWidth;
69
 
70
    /**
71
     * The height of the source image.
72
     */
73
    protected int srcHeight;
74
 
75
    /**
76
     * The width of the source image.
77
     */
78
    protected int srcWidth;
79
 
80
    /**
81
     *
82
     */
83
    protected int srcrows[];
84
 
85
    /**
86
     *
87
     */
88
    protected int srccols[];
89
 
90
    /**
91
     *
92
     */
93
    protected Object outpixbuf;
94
 
95
    /**
96
     * An <code>ImageProducer</code> indicates the size of the image
97
     * being produced using this method.  A filter can override this
98
     * method to intercept these calls from the producer in order to
99
     * change either the width or the height before in turn calling
100
     * the consumer's <code>setDimensions</code> method.
101
     *
102
     * @param width the width of the image
103
     * @param height the height of the image
104
     */
105
    public void setDimensions(int width, int height)
106
    {
107
        srcWidth = width;
108
        srcHeight = height;
109
 
110
        /* If either destHeight or destWidth is < 0, the image should
111
           maintain its original aspect ratio.  When both are < 0,
112
           just maintain the original width and height. */
113
        if (destWidth < 0 && destHeight < 0)
114
        {
115
            destWidth = width;
116
            destHeight = height;
117
        }
118
        else if (destWidth < 0)
119
        {
120
            destWidth = width * destHeight / srcHeight;
121
        }
122
        else if (destHeight < 0)
123
        {
124
            destHeight = height * destWidth / srcWidth;
125
        }
126
 
127
        if (consumer != null)
128
          consumer.setDimensions(destWidth, destHeight);
129
    }
130
 
131
    /**
132
     * An <code>ImageProducer</code> can set a list of properties
133
     * associated with this image by using this method.
134
     *
135
     * @param props the list of properties associated with this image
136
     */
137
    public void setProperties(Hashtable<?, ?> props)
138
    {
139
      Hashtable<Object, Object> prop2 = (Hashtable<Object, Object>) props;
140
      prop2.put("filters", "ReplicateScaleFilter");
141
      if (consumer != null)
142
        consumer.setProperties(prop2);
143
    }
144
 
145
    /**
146
     * This function delivers a rectangle of pixels where any
147
     * pixel(m,n) is stored in the array as a <code>byte</code> at
148
     * index (n * scansize + m + offset).
149
     *
150
     * @param x the x coordinate of the rectangle
151
     * @param y the y coordinate of the rectangle
152
     * @param w the width of the rectangle
153
     * @param h the height of the rectangle
154
     * @param model the <code>ColorModel</code> used to translate the pixels
155
     * @param pixels the array of pixel values
156
     * @param offset the index of the first pixels in the <code>pixels</code> array
157
     * @param scansize the width to use in extracting pixels from the <code>pixels</code> array
158
     */
159
    public void setPixels(int x, int y, int w, int h,
160
           ColorModel model, byte[] pixels, int offset, int scansize)
161
    {
162
      if (srcrows == null || srccols == null)
163
        setupSources();
164
      int dx1 = (2 * x * destWidth + srcWidth - 1) / (2 * destWidth);
165
      int dy1 = (2 * y * destHeight + srcHeight - 1) / (2 * destHeight);
166
      byte[] pix;
167
      if (outpixbuf != null && outpixbuf instanceof byte[])
168
        {
169
          pix = (byte[]) outpixbuf;
170
        }
171
      else
172
        {
173
          pix = new byte[destWidth];
174
          outpixbuf = pix;
175
        }
176
      int sy, sx;
177
      for (int yy = dy1; (sy = srcrows[yy]) < y + h; yy++)
178
        {
179
          int offs = offset + scansize * (sy - y);
180
          int xx;
181
          for (xx = dx1; (sx = srccols[xx]) < x + w; xx++)
182
            {
183
              pix[xx] = pixels[offs + sx - x];
184
            }
185
          if (xx > dx1)
186
            {
187
              consumer.setPixels(dx1, yy, xx - dx1, 1, model, pix, dx1,
188
                                 destWidth);
189
            }
190
        }
191
    }
192
 
193
    /**
194
     * This function delivers a rectangle of pixels where any
195
     * pixel(m,n) is stored in the array as an <code>int</code> at
196
     * index (n * scansize + m + offset).
197
     *
198
     * @param x the x coordinate of the rectangle
199
     * @param y the y coordinate of the rectangle
200
     * @param w the width of the rectangle
201
     * @param h the height of the rectangle
202
     * @param model the <code>ColorModel</code> used to translate the pixels
203
     * @param pixels the array of pixel values
204
     * @param offset the index of the first pixels in the <code>pixels</code> array
205
     * @param scansize the width to use in extracting pixels from the <code>pixels</code> array
206
     */
207
    public void setPixels(int x, int y, int w, int h,
208
           ColorModel model, int[] pixels, int offset, int scansize)
209
    {
210
      if (srcrows == null || srccols == null)
211
        setupSources();
212
      int dx1 = (2 * x * destWidth + srcWidth - 1) / (2 * destWidth);
213
      int dy1 = (2 * y * destHeight + srcHeight - 1) / (2 * destHeight);
214
      int[] pix;
215
      if (outpixbuf != null && outpixbuf instanceof int[])
216
        {
217
          pix = (int[]) outpixbuf;
218
        }
219
      else
220
        {
221
          pix = new int[destWidth];
222
          outpixbuf = pix;
223
        }
224
      int sy, sx;
225
      for (int yy = dy1; (sy = srcrows[yy]) < y + h; yy++)
226
        {
227
          int offs = offset + scansize * (sy - y);
228
          int xx;
229
          for (xx = dx1; (sx = srccols[xx]) < x + w; xx++)
230
            {
231
              pix[xx] = pixels[offs + sx - x];
232
            }
233
          if (xx > dx1)
234
            {
235
              consumer.setPixels(dx1, yy, xx - dx1, 1, model, pix, dx1,
236
                                 destWidth);
237
            }
238
        }
239
    }
240
 
241
  /**
242
   * Sets up the srcrows and srccols arrays.
243
   */
244
  private void setupSources()
245
  {
246
    srcrows = new int[destHeight + 1];
247
    for (int y = 0; y <= destHeight; y++)
248
      {
249
        srcrows[y] = (2 * y * srcHeight + srcHeight) / (2 * destHeight);
250
      }
251
    srccols = new int[destWidth + 1];
252
    for (int x = 0; x <= destWidth; x++)
253
      {
254
        srccols[x] = (2 * x * srcWidth + srcWidth) / (2 * destWidth);
255
      }
256
  }
257
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.