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

Subversion Repositories openrisc

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

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 771 jeremybenn
/* Copyright (C) 2000, 2001, 2002, 2005, 2006,  Free Software Foundation
2
 
3
This file is part of GNU Classpath.
4
 
5
GNU Classpath is free software; you can redistribute it and/or modify
6
it under the terms of the GNU General Public License as published by
7
the Free Software Foundation; either version 2, or (at your option)
8
any later version.
9
 
10
GNU Classpath is distributed in the hope that it will be useful, but
11
WITHOUT ANY WARRANTY; without even the implied warranty of
12
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13
General Public License for more details.
14
 
15
You should have received a copy of the GNU General Public License
16
along with GNU Classpath; see the file COPYING.  If not, write to the
17
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18
02110-1301 USA.
19
 
20
Linking this library statically or dynamically with other modules is
21
making a combined work based on this library.  Thus, the terms and
22
conditions of the GNU General Public License cover the whole
23
combination.
24
 
25
As a special exception, the copyright holders of this library give you
26
permission to link this library with independent modules to produce an
27
executable, regardless of the license terms of these independent
28
modules, and to copy and distribute the resulting executable under
29
terms of your choice, provided that you also meet, for each linked
30
independent module, the terms and conditions of the license of that
31
module.  An independent module is a module which is not derived from
32
or based on this library.  If you modify this library, you may extend
33
this exception to your version of the library, but you are not
34
obligated to do so.  If you do not wish to do so, delete this
35
exception statement from your version. */
36
 
37
package java.awt.image;
38
 
39
/**
40
 * A <code>SampleModel</code> is used to access pixel data from a
41
 * {@link DataBuffer}.  This is used by the {@link Raster} class.
42
 *
43
 * @author Rolf W. Rasmussen (rolfwr@ii.uib.no)
44
 */
45
public abstract class SampleModel
46
{
47
  /** Width of image described. */
48
  protected int width;
49
 
50
  /** Height of image described. */
51
  protected int height;
52
 
53
  /** Number of bands in the image described.  Package-private here,
54
      shadowed by ComponentSampleModel. */
55
  protected int numBands;
56
 
57
  /**
58
   * The DataBuffer type that is used to store the data of the image
59
   * described.
60
   */
61
  protected int dataType;
62
 
63
  /**
64
   * Creates a new sample model with the specified attributes.
65
   *
66
   * @param dataType  the data type (one of {@link DataBuffer#TYPE_BYTE},
67
   *   {@link DataBuffer#TYPE_USHORT}, {@link DataBuffer#TYPE_SHORT},
68
   *   {@link DataBuffer#TYPE_INT}, {@link DataBuffer#TYPE_FLOAT},
69
   *   {@link DataBuffer#TYPE_DOUBLE} or {@link DataBuffer#TYPE_UNDEFINED}).
70
   * @param w  the width in pixels (must be greater than zero).
71
   * @param h  the height in pixels (must be greater than zero).
72
   * @param numBands  the number of bands (must be greater than zero).
73
   *
74
   * @throws IllegalArgumentException if <code>dataType</code> is not one of
75
   *   the listed values.
76
   * @throws IllegalArgumentException if <code>w</code> is less than or equal
77
   *   to zero.
78
   * @throws IllegalArgumentException if <code>h</code> is less than or equal
79
   *   to zero.
80
   * @throws IllegalArgumentException if <code>w * h</code> is greater than
81
   *   {@link Integer#MAX_VALUE}.
82
   */
83
  public SampleModel(int dataType, int w, int h, int numBands)
84
  {
85
    if (dataType != DataBuffer.TYPE_UNDEFINED)
86
      if (dataType < DataBuffer.TYPE_BYTE || dataType > DataBuffer.TYPE_DOUBLE)
87
        throw new IllegalArgumentException("Unrecognised 'dataType' argument.");
88
 
89
    if ((w <= 0) || (h <= 0))
90
      throw new IllegalArgumentException((w <= 0 ? " width<=0" : " width is ok")
91
          + (h <= 0 ? " height<=0" : " height is ok"));
92
 
93
    long area = (long) w * (long) h;
94
    if (area > Integer.MAX_VALUE)
95
      throw new IllegalArgumentException("w * h exceeds Integer.MAX_VALUE.");
96
 
97
    if (numBands <= 0)
98
      throw new IllegalArgumentException("Requires numBands > 0.");
99
 
100
    this.dataType = dataType;
101
    this.width = w;
102
    this.height = h;
103
    this.numBands = numBands;
104
  }
105
 
106
  /**
107
   * Returns the width of the pixel data accessible via this
108
   * <code>SampleModel</code>.
109
   *
110
   * @return The width.
111
   *
112
   * @see #getHeight()
113
   */
114
  public final int getWidth()
115
  {
116
    return width;
117
  }
118
 
119
  /**
120
   * Returns the height of the pixel data accessible via this
121
   * <code>SampleModel</code>.
122
   *
123
   * @return The height.
124
   *
125
   * @see #getWidth()
126
   */
127
  public final int getHeight()
128
  {
129
    return height;
130
  }
131
 
132
  /**
133
   * Returns the number of bands for this <code>SampleModel</code>.
134
   *
135
   * @return The number of bands.
136
   */
137
  public final int getNumBands()
138
  {
139
    return numBands;
140
  }
141
 
142
  public abstract int getNumDataElements();
143
 
144
  /**
145
   * Returns the type of the {@link DataBuffer} that this
146
   * <code>SampleModel</code> accesses.
147
   *
148
   * @return The data buffer type.
149
   */
150
  public final int getDataType()
151
  {
152
    return dataType;
153
  }
154
 
155
  public int getTransferType()
156
  {
157
    // FIXME: Is this a reasonable default implementation?
158
    return dataType;
159
  }
160
 
161
  /**
162
   * Returns an array containing the samples for the pixel at (x, y) in the
163
   * specified data buffer.  If <code>iArray</code> is not <code>null</code>,
164
   * it will be populated with the sample values and returned as the result of
165
   * this function (this avoids allocating a new array instance).
166
   *
167
   * @param x  the x-coordinate of the pixel.
168
   * @param y  the y-coordinate of the pixel.
169
   * @param iArray  an array to populate with the sample values and return as
170
   *     the result (if <code>null</code>, a new array will be allocated).
171
   * @param data  the data buffer (<code>null</code> not permitted).
172
   *
173
   * @return The pixel sample values.
174
   *
175
   * @throws NullPointerException if <code>data</code> is <code>null</code>.
176
   */
177
  public int[] getPixel(int x, int y, int[] iArray, DataBuffer data)
178
  {
179
    if (iArray == null)
180
      iArray = new int[numBands];
181
    for (int b = 0; b < numBands; b++)
182
      iArray[b] = getSample(x, y, b, data);
183
    return iArray;
184
  }
185
 
186
  /**
187
   *
188
   * This method is provided as a faster alternative to getPixel(),
189
   * that can be used when there is no need to decode the pixel into
190
   * separate sample values.
191
   *
192
   * @param obj An array to return the pixel data in. If null, an
193
   * array of the right type and size will be created.
194
   *
195
   * @return A single pixel as an array object of a primitive type,
196
   * based on the transfer type. Eg. if transfer type is
197
   * DataBuffer.TYPE_USHORT, then a short[] object is returned.
198
   */
199
  public abstract Object getDataElements(int x, int y, Object obj,
200
                                         DataBuffer data);
201
 
202
 
203
  public Object getDataElements(int x, int y, int w, int h, Object obj,
204
                                DataBuffer data)
205
  {
206
    int size = w * h;
207
    int numDataElements = getNumDataElements();
208
    int dataSize = numDataElements * size;
209
 
210
    if (obj == null)
211
      {
212
        switch (getTransferType())
213
          {
214
          case DataBuffer.TYPE_BYTE:
215
            obj = new byte[dataSize];
216
            break;
217
          case DataBuffer.TYPE_USHORT:
218
            obj = new short[dataSize];
219
            break;
220
          case DataBuffer.TYPE_INT:
221
            obj = new int[dataSize];
222
            break;
223
          default:
224
            // Seems like the only sensible thing to do.
225
            throw new ClassCastException();
226
          }
227
      }
228
    Object pixelData = null;
229
    int outOffset = 0;
230
    for (int yy = y; yy < (y + h); yy++)
231
      {
232
        for (int xx = x; xx < (x + w); xx++)
233
          {
234
            pixelData = getDataElements(xx, yy, pixelData, data);
235
            System.arraycopy(pixelData, 0, obj, outOffset,
236
                             numDataElements);
237
            outOffset += numDataElements;
238
          }
239
      }
240
    return obj;
241
  }
242
 
243
  public abstract void setDataElements(int x, int y, Object obj,
244
                                       DataBuffer data);
245
 
246
  public void setDataElements(int x, int y, int w, int h,
247
                              Object obj, DataBuffer data)
248
  {
249
    int numDataElements = getNumDataElements();
250
 
251
    Object pixelData;
252
    switch (getTransferType())
253
      {
254
      case DataBuffer.TYPE_BYTE:
255
        pixelData = new byte[numDataElements];
256
        break;
257
      case DataBuffer.TYPE_USHORT:
258
      case DataBuffer.TYPE_SHORT:
259
        pixelData = new short[numDataElements];
260
        break;
261
      case DataBuffer.TYPE_INT:
262
        pixelData = new int[numDataElements];
263
        break;
264
      case DataBuffer.TYPE_FLOAT:
265
        pixelData = new float[numDataElements];
266
        break;
267
      case DataBuffer.TYPE_DOUBLE:
268
        pixelData = new double[numDataElements];
269
        break;
270
      default:
271
        // The RI silently igores invalid types.
272
        pixelData = null;
273
      }
274
 
275
    int inOffset = 0;
276
    if (pixelData != null)
277
      {
278
        for (int yy=y; yy<(y+h); yy++)
279
          {
280
            for (int xx=x; xx<(x+w); xx++)
281
              {
282
                System.arraycopy(obj, inOffset, pixelData, 0, numDataElements);
283
                setDataElements(xx, yy, pixelData, data);
284
                inOffset += numDataElements;
285
              }
286
          }
287
      }
288
  }
289
 
290
  /**
291
   * Returns an array containing the samples for the pixel at (x, y) in the
292
   * specified data buffer.  If <code>fArray</code> is not <code>null</code>,
293
   * it will be populated with the sample values and returned as the result of
294
   * this function (this avoids allocating a new array instance).
295
   *
296
   * @param x  the x-coordinate of the pixel.
297
   * @param y  the y-coordinate of the pixel.
298
   * @param fArray  an array to populate with the sample values and return as
299
   *     the result (if <code>null</code>, a new array will be allocated).
300
   * @param data  the data buffer (<code>null</code> not permitted).
301
   *
302
   * @return The pixel sample values.
303
   *
304
   * @throws NullPointerException if <code>data</code> is <code>null</code>.
305
   */
306
  public float[] getPixel(int x, int y, float[] fArray, DataBuffer data)
307
  {
308
    if (fArray == null)
309
      fArray = new float[numBands];
310
 
311
    for (int b = 0; b < numBands; b++)
312
      {
313
        fArray[b] = getSampleFloat(x, y, b, data);
314
      }
315
    return fArray;
316
  }
317
 
318
  /**
319
   * Returns an array containing the samples for the pixel at (x, y) in the
320
   * specified data buffer.  If <code>dArray</code> is not <code>null</code>,
321
   * it will be populated with the sample values and returned as the result of
322
   * this function (this avoids allocating a new array instance).
323
   *
324
   * @param x  the x-coordinate of the pixel.
325
   * @param y  the y-coordinate of the pixel.
326
   * @param dArray  an array to populate with the sample values and return as
327
   *     the result (if <code>null</code>, a new array will be allocated).
328
   * @param data  the data buffer (<code>null</code> not permitted).
329
   *
330
   * @return The pixel sample values.
331
   *
332
   * @throws NullPointerException if <code>data</code> is <code>null</code>.
333
   */
334
  public double[] getPixel(int x, int y, double[] dArray, DataBuffer data) {
335
    if (dArray == null)
336
      dArray = new double[numBands];
337
    for (int b = 0; b < numBands; b++)
338
      {
339
        dArray[b] = getSampleDouble(x, y, b, data);
340
      }
341
    return dArray;
342
  }
343
 
344
  /**
345
   * Returns an array containing the samples for the pixels in the region
346
   * specified by (x, y, w, h) in the specified data buffer.  The array is
347
   * ordered by pixels (that is, all the samples for the first pixel are
348
   * grouped together, followed by all the samples for the second pixel, and so
349
   * on).  If <code>iArray</code> is not <code>null</code>, it will be
350
   * populated with the sample values and returned as the result of this
351
   * function (this avoids allocating a new array instance).
352
   *
353
   * @param x  the x-coordinate of the top-left pixel.
354
   * @param y  the y-coordinate of the top-left pixel.
355
   * @param w  the width of the region of pixels.
356
   * @param h  the height of the region of pixels.
357
   * @param iArray  an array to populate with the sample values and return as
358
   *     the result (if <code>null</code>, a new array will be allocated).
359
   * @param data  the data buffer (<code>null</code> not permitted).
360
   *
361
   * @return The pixel sample values.
362
   *
363
   * @throws NullPointerException if <code>data</code> is <code>null</code>.
364
   */
365
  public int[] getPixels(int x, int y, int w, int h, int[] iArray,
366
                         DataBuffer data)
367
  {
368
    int size = w * h;
369
    int outOffset = 0;
370
    int[] pixel = null;
371
    if (iArray == null)
372
      iArray = new int[w * h * numBands];
373
    for (int yy = y; yy < (y + h); yy++)
374
      {
375
        for (int xx = x; xx < (x + w); xx++)
376
          {
377
            pixel = getPixel(xx, yy, pixel, data);
378
            System.arraycopy(pixel, 0, iArray, outOffset, numBands);
379
            outOffset += numBands;
380
          }
381
      }
382
    return iArray;
383
  }
384
 
385
  /**
386
   * Returns an array containing the samples for the pixels in the region
387
   * specified by (x, y, w, h) in the specified data buffer.  The array is
388
   * ordered by pixels (that is, all the samples for the first pixel are
389
   * grouped together, followed by all the samples for the second pixel, and so
390
   * on).  If <code>fArray</code> is not <code>null</code>, it will be
391
   * populated with the sample values and returned as the result of this
392
   * function (this avoids allocating a new array instance).
393
   *
394
   * @param x  the x-coordinate of the top-left pixel.
395
   * @param y  the y-coordinate of the top-left pixel.
396
   * @param w  the width of the region of pixels.
397
   * @param h  the height of the region of pixels.
398
   * @param fArray  an array to populate with the sample values and return as
399
   *     the result (if <code>null</code>, a new array will be allocated).
400
   * @param data  the data buffer (<code>null</code> not permitted).
401
   *
402
   * @return The pixel sample values.
403
   *
404
   * @throws NullPointerException if <code>data</code> is <code>null</code>.
405
   */
406
  public float[] getPixels(int x, int y, int w, int h, float[] fArray,
407
                           DataBuffer data)
408
  {
409
    int size = w * h;
410
    int outOffset = 0;
411
    float[] pixel = null;
412
    if (fArray == null) fArray = new float[w * h * numBands];
413
    for (int yy = y; yy < (y + h); yy++)
414
      {
415
        for (int xx = x; xx < (x + w); xx++)
416
          {
417
            pixel = getPixel(xx, yy, pixel, data);
418
            System.arraycopy(pixel, 0, fArray, outOffset, numBands);
419
            outOffset += numBands;
420
          }
421
      }
422
    return fArray;
423
  }
424
 
425
  /**
426
   * Returns an array containing the samples for the pixels in the region
427
   * specified by (x, y, w, h) in the specified data buffer.  The array is
428
   * ordered by pixels (that is, all the samples for the first pixel are
429
   * grouped together, followed by all the samples for the second pixel, and so
430
   * on).  If <code>dArray</code> is not <code>null</code>, it will be
431
   * populated with the sample values and returned as the result of this
432
   * function (this avoids allocating a new array instance).
433
   *
434
   * @param x  the x-coordinate of the top-left pixel.
435
   * @param y  the y-coordinate of the top-left pixel.
436
   * @param w  the width of the region of pixels.
437
   * @param h  the height of the region of pixels.
438
   * @param dArray  an array to populate with the sample values and return as
439
   *     the result (if <code>null</code>, a new array will be allocated).
440
   * @param data  the data buffer (<code>null</code> not permitted).
441
   *
442
   * @return The pixel sample values.
443
   *
444
   * @throws NullPointerException if <code>data</code> is <code>null</code>.
445
   */
446
  public double[] getPixels(int x, int y, int w, int h, double[] dArray,
447
                            DataBuffer data)
448
  {
449
    int size = w * h;
450
    int outOffset = 0;
451
    double[] pixel = null;
452
    if (dArray == null)
453
      dArray = new double[w * h * numBands];
454
    for (int yy = y; yy < (y + h); yy++)
455
      {
456
        for (int xx = x; xx < (x + w); xx++)
457
          {
458
            pixel = getPixel(xx, yy, pixel, data);
459
            System.arraycopy(pixel, 0, dArray, outOffset, numBands);
460
            outOffset += numBands;
461
          }
462
      }
463
    return dArray;
464
  }
465
 
466
  /**
467
   * Returns the sample value for the pixel at (x, y) in the specified data
468
   * buffer.
469
   *
470
   * @param x  the x-coordinate of the pixel.
471
   * @param y  the y-coordinate of the pixel.
472
   * @param b  the band (in the range <code>0</code> to
473
   *     <code>getNumBands() - 1</code>).
474
   * @param data  the data buffer (<code>null</code> not permitted).
475
   *
476
   * @return The sample value.
477
   *
478
   * @throws NullPointerException if <code>data</code> is <code>null</code>.
479
   */
480
  public abstract int getSample(int x, int y, int b, DataBuffer data);
481
 
482
  /**
483
   * Returns the sample value for the pixel at (x, y) in the specified data
484
   * buffer.
485
   *
486
   * @param x  the x-coordinate of the pixel.
487
   * @param y  the y-coordinate of the pixel.
488
   * @param b  the band (in the range <code>0</code> to
489
   *     <code>getNumBands() - 1</code>).
490
   * @param data  the data buffer (<code>null</code> not permitted).
491
   *
492
   * @return The sample value.
493
   *
494
   * @throws NullPointerException if <code>data</code> is <code>null</code>.
495
   *
496
   * @see #getSample(int, int, int, DataBuffer)
497
   */
498
  public float getSampleFloat(int x, int y, int b, DataBuffer data)
499
  {
500
    return getSample(x, y, b, data);
501
  }
502
 
503
  /**
504
   * Returns the sample value for the pixel at (x, y) in the specified data
505
   * buffer.
506
   *
507
   * @param x  the x-coordinate of the pixel.
508
   * @param y  the y-coordinate of the pixel.
509
   * @param b  the band (in the range <code>0</code> to
510
   *     <code>getNumBands() - 1</code>).
511
   * @param data  the data buffer (<code>null</code> not permitted).
512
   *
513
   * @return The sample value.
514
   *
515
   * @throws NullPointerException if <code>data</code> is <code>null</code>.
516
   *
517
   * @see #getSample(int, int, int, DataBuffer)
518
   */
519
  public double getSampleDouble(int x, int y, int b, DataBuffer data)
520
  {
521
    return getSampleFloat(x, y, b, data);
522
  }
523
 
524
  /**
525
   * Returns an array containing the samples from one band for the pixels in
526
   * the region specified by (x, y, w, h) in the specified data buffer.  If
527
   * <code>iArray</code> is not <code>null</code>, it will be
528
   * populated with the sample values and returned as the result of this
529
   * function (this avoids allocating a new array instance).
530
   *
531
   * @param x  the x-coordinate of the top-left pixel.
532
   * @param y  the y-coordinate of the top-left pixel.
533
   * @param w  the width of the region of pixels.
534
   * @param h  the height of the region of pixels.
535
   * @param b  the band (in the range <code>0</code> to
536
   *     </code>getNumBands() - 1</code>).
537
   * @param iArray  an array to populate with the sample values and return as
538
   *     the result (if <code>null</code>, a new array will be allocated).
539
   * @param data  the data buffer (<code>null</code> not permitted).
540
   *
541
   * @return The sample values.
542
   *
543
   * @throws NullPointerException if <code>data</code> is <code>null</code>.
544
   */
545
  public int[] getSamples(int x, int y, int w, int h, int b,
546
                          int[] iArray, DataBuffer data)
547
  {
548
    int size = w * h;
549
    int outOffset = 0;
550
    if (iArray == null)
551
      iArray = new int[size];
552
    for (int yy = y; yy < (y + h); yy++)
553
      {
554
        for (int xx = x; xx < (x + w); xx++)
555
          {
556
            iArray[outOffset++] = getSample(xx, yy, b, data);
557
          }
558
      }
559
    return iArray;
560
  }
561
 
562
  /**
563
   * Returns an array containing the samples from one band for the pixels in
564
   * the region specified by (x, y, w, h) in the specified data buffer.  If
565
   * <code>fArray</code> is not <code>null</code>, it will be
566
   * populated with the sample values and returned as the result of this
567
   * function (this avoids allocating a new array instance).
568
   *
569
   * @param x  the x-coordinate of the top-left pixel.
570
   * @param y  the y-coordinate of the top-left pixel.
571
   * @param w  the width of the region of pixels.
572
   * @param h  the height of the region of pixels.
573
   * @param b  the band (in the range <code>0</code> to
574
   *     </code>getNumBands() - 1</code>).
575
   * @param fArray  an array to populate with the sample values and return as
576
   *     the result (if <code>null</code>, a new array will be allocated).
577
   * @param data  the data buffer (<code>null</code> not permitted).
578
   *
579
   * @return The sample values.
580
   *
581
   * @throws NullPointerException if <code>data</code> is <code>null</code>.
582
   */
583
  public float[] getSamples(int x, int y, int w, int h, int b,
584
                            float[] fArray, DataBuffer data)
585
  {
586
    int size = w * h;
587
    int outOffset = 0;
588
    if (fArray == null)
589
      fArray = new float[size];
590
    for (int yy = y; yy < (y + h); yy++)
591
      {
592
        for (int xx = x; xx < (x + w); xx++)
593
          {
594
            fArray[outOffset++] = getSampleFloat(xx, yy, b, data);
595
          }
596
      }
597
    return fArray;
598
  }
599
 
600
  /**
601
   * Returns an array containing the samples from one band for the pixels in
602
   * the region specified by (x, y, w, h) in the specified data buffer.  If
603
   * <code>dArray</code> is not <code>null</code>, it will be
604
   * populated with the sample values and returned as the result of this
605
   * function (this avoids allocating a new array instance).
606
   *
607
   * @param x  the x-coordinate of the top-left pixel.
608
   * @param y  the y-coordinate of the top-left pixel.
609
   * @param w  the width of the region of pixels.
610
   * @param h  the height of the region of pixels.
611
   * @param b  the band (in the range <code>0</code> to
612
   *     </code>getNumBands() - 1</code>).
613
   * @param dArray  an array to populate with the sample values and return as
614
   *     the result (if <code>null</code>, a new array will be allocated).
615
   * @param data  the data buffer (<code>null</code> not permitted).
616
   *
617
   * @return The sample values.
618
   *
619
   * @throws NullPointerException if <code>data</code> is <code>null</code>.
620
   */
621
  public double[] getSamples(int x, int y, int w, int h, int b,
622
                             double[] dArray, DataBuffer data)
623
  {
624
    int size = w * h;
625
    int outOffset = 0;
626
    if (dArray == null)
627
      dArray = new double[size];
628
    for (int yy = y; yy < (y + h); yy++)
629
      {
630
        for (int xx = x; xx < (x + w); xx++)
631
          {
632
            dArray[outOffset++] = getSampleDouble(xx, yy, b, data);
633
          }
634
      }
635
    return dArray;
636
  }
637
 
638
  /**
639
   * Sets the samples for the pixel at (x, y) in the specified data buffer to
640
   * the specified values.
641
   *
642
   * @param x  the x-coordinate of the pixel.
643
   * @param y  the y-coordinate of the pixel.
644
   * @param iArray  the sample values (<code>null</code> not permitted).
645
   * @param data  the data buffer (<code>null</code> not permitted).
646
   *
647
   * @throws NullPointerException if either <code>iArray</code> or
648
   *     <code>data</code> is <code>null</code>.
649
   */
650
  public void setPixel(int x, int y, int[] iArray, DataBuffer data)
651
  {
652
    for (int b = 0; b < numBands; b++)
653
      setSample(x, y, b, iArray[b], data);
654
  }
655
 
656
  /**
657
   * Sets the samples for the pixel at (x, y) in the specified data buffer to
658
   * the specified values.
659
   *
660
   * @param x  the x-coordinate of the pixel.
661
   * @param y  the y-coordinate of the pixel.
662
   * @param fArray  the sample values (<code>null</code> not permitted).
663
   * @param data  the data buffer (<code>null</code> not permitted).
664
   *
665
   * @throws NullPointerException if either <code>fArray</code> or
666
   *     <code>data</code> is <code>null</code>.
667
   */
668
  public void setPixel(int x, int y, float[] fArray, DataBuffer data)
669
  {
670
    for (int b = 0; b < numBands; b++)
671
      setSample(x, y, b, fArray[b], data);
672
  }
673
 
674
  /**
675
   * Sets the samples for the pixel at (x, y) in the specified data buffer to
676
   * the specified values.
677
   *
678
   * @param x  the x-coordinate of the pixel.
679
   * @param y  the y-coordinate of the pixel.
680
   * @param dArray  the sample values (<code>null</code> not permitted).
681
   * @param data  the data buffer (<code>null</code> not permitted).
682
   *
683
   * @throws NullPointerException if either <code>dArray</code> or
684
   *     <code>data</code> is <code>null</code>.
685
   */
686
  public void setPixel(int x, int y, double[] dArray, DataBuffer data)
687
  {
688
    for (int b = 0; b < numBands; b++)
689
      setSample(x, y, b, dArray[b], data);
690
  }
691
 
692
  /**
693
   * Sets the sample values for the pixels in the region specified by
694
   * (x, y, w, h) in the specified data buffer.  The array is
695
   * ordered by pixels (that is, all the samples for the first pixel are
696
   * grouped together, followed by all the samples for the second pixel, and so
697
   * on).
698
   *
699
   * @param x  the x-coordinate of the top-left pixel.
700
   * @param y  the y-coordinate of the top-left pixel.
701
   * @param w  the width of the region of pixels.
702
   * @param h  the height of the region of pixels.
703
   * @param iArray  the pixel sample values (<code>null</code> not permitted).
704
   * @param data  the data buffer (<code>null</code> not permitted).
705
   *
706
   * @throws NullPointerException if either <code>iArray</code> or
707
   *     <code>data</code> is <code>null</code>.
708
   */
709
  public void setPixels(int x, int y, int w, int h, int[] iArray,
710
                        DataBuffer data)
711
  {
712
    int inOffset = 0;
713
    int[] pixel = new int[numBands];
714
    for (int yy = y; yy < (y + h); yy++)
715
      {
716
        for (int xx = x; xx < (x + w); xx++)
717
          {
718
            System.arraycopy(iArray, inOffset, pixel, 0, numBands);
719
            setPixel(xx, yy, pixel, data);
720
            inOffset += numBands;
721
          }
722
      }
723
  }
724
 
725
  /**
726
   * Sets the sample values for the pixels in the region specified by
727
   * (x, y, w, h) in the specified data buffer.  The array is
728
   * ordered by pixels (that is, all the samples for the first pixel are
729
   * grouped together, followed by all the samples for the second pixel, and so
730
   * on).
731
   *
732
   * @param x  the x-coordinate of the top-left pixel.
733
   * @param y  the y-coordinate of the top-left pixel.
734
   * @param w  the width of the region of pixels.
735
   * @param h  the height of the region of pixels.
736
   * @param fArray  the pixel sample values (<code>null</code> not permitted).
737
   * @param data  the data buffer (<code>null</code> not permitted).
738
   *
739
   * @throws NullPointerException if either <code>fArray</code> or
740
   *     <code>data</code> is <code>null</code>.
741
   */
742
  public void setPixels(int x, int y, int w, int h, float[] fArray,
743
                        DataBuffer data)
744
  {
745
    int inOffset = 0;
746
    float[] pixel = new float[numBands];
747
    for (int yy = y; yy < (y + h); yy++)
748
      {
749
        for (int xx = x; xx < (x + w); xx++)
750
          {
751
            System.arraycopy(fArray, inOffset, pixel, 0, numBands);
752
            setPixel(xx, yy, pixel, data);
753
            inOffset += numBands;
754
          }
755
      }
756
  }
757
 
758
  /**
759
   * Sets the sample values for the pixels in the region specified by
760
   * (x, y, w, h) in the specified data buffer.  The array is
761
   * ordered by pixels (that is, all the samples for the first pixel are
762
   * grouped together, followed by all the samples for the second pixel, and so
763
   * on).
764
   *
765
   * @param x  the x-coordinate of the top-left pixel.
766
   * @param y  the y-coordinate of the top-left pixel.
767
   * @param w  the width of the region of pixels.
768
   * @param h  the height of the region of pixels.
769
   * @param dArray  the pixel sample values (<code>null</code> not permitted).
770
   * @param data  the data buffer (<code>null</code> not permitted).
771
   *
772
   * @throws NullPointerException if either <code>dArray</code> or
773
   *     <code>data</code> is <code>null</code>.
774
   */
775
  public void setPixels(int x, int y, int w, int h, double[] dArray,
776
                        DataBuffer data)
777
  {
778
    int inOffset = 0;
779
    double[] pixel = new double[numBands];
780
    for (int yy = y; yy < (y + h); yy++)
781
      {
782
        for (int xx = x; xx < (x + w); xx++)
783
          {
784
            System.arraycopy(dArray, inOffset, pixel, 0, numBands);
785
            setPixel(xx, yy, pixel, data);
786
            inOffset += numBands;
787
          }
788
      }
789
  }
790
 
791
  /**
792
   * Sets the sample value for a band for the pixel at (x, y) in the
793
   * specified data buffer.
794
   *
795
   * @param x  the x-coordinate of the pixel.
796
   * @param y  the y-coordinate of the pixel.
797
   * @param b  the band (in the range <code>0</code> to
798
   *     <code>getNumBands() - 1</code>).
799
   * @param s  the sample value.
800
   * @param data  the data buffer (<code>null</code> not permitted).
801
   *
802
   * @throws NullPointerException if <code>data</code> is <code>null</code>.
803
   */
804
  public abstract void setSample(int x, int y, int b, int s,
805
                                 DataBuffer data);
806
 
807
  /**
808
   * Sets the sample value for a band for the pixel at (x, y) in the
809
   * specified data buffer.
810
   *
811
   * @param x  the x-coordinate of the pixel.
812
   * @param y  the y-coordinate of the pixel.
813
   * @param b  the band (in the range <code>0</code> to
814
   *     <code>getNumBands() - 1</code>).
815
   * @param s  the sample value.
816
   * @param data  the data buffer (<code>null</code> not permitted).
817
   *
818
   * @throws NullPointerException if <code>data</code> is <code>null</code>.
819
   */
820
  public void setSample(int x, int y, int b, float s,
821
                        DataBuffer data)
822
  {
823
    setSample(x, y, b, (int) s, data);
824
  }
825
 
826
  /**
827
   * Sets the sample value for a band for the pixel at (x, y) in the
828
   * specified data buffer.
829
   *
830
   * @param x  the x-coordinate of the pixel.
831
   * @param y  the y-coordinate of the pixel.
832
   * @param b  the band (in the range <code>0</code> to
833
   *     <code>getNumBands() - 1</code>).
834
   * @param s  the sample value.
835
   * @param data  the data buffer (<code>null</code> not permitted).
836
   *
837
   * @throws NullPointerException if <code>data</code> is <code>null</code>.
838
   */
839
  public void setSample(int x, int y, int b, double s,
840
                        DataBuffer data)
841
  {
842
    setSample(x, y, b, (float) s, data);
843
  }
844
 
845
  /**
846
   * Sets the sample values for one band for the pixels in the region
847
   * specified by (x, y, w, h) in the specified data buffer.
848
   *
849
   * @param x  the x-coordinate of the top-left pixel.
850
   * @param y  the y-coordinate of the top-left pixel.
851
   * @param w  the width of the region of pixels.
852
   * @param h  the height of the region of pixels.
853
   * @param b  the band (in the range <code>0</code> to
854
   *     </code>getNumBands() - 1</code>).
855
   * @param iArray  the sample values (<code>null</code> not permitted).
856
   * @param data  the data buffer (<code>null</code> not permitted).
857
   *
858
   * @throws NullPointerException if either <code>iArray</code> or
859
   *     <code>data</code> is <code>null</code>.
860
   */
861
  public void setSamples(int x, int y, int w, int h, int b,
862
                         int[] iArray, DataBuffer data)
863
  {
864
    int size = w * h;
865
    int inOffset = 0;
866
    for (int yy = y; yy < (y + h); yy++)
867
      for (int xx = x; xx < (x + w); xx++)
868
        setSample(xx, yy, b, iArray[inOffset++], data);
869
  }
870
 
871
  /**
872
   * Sets the sample values for one band for the pixels in the region
873
   * specified by (x, y, w, h) in the specified data buffer.
874
   *
875
   * @param x  the x-coordinate of the top-left pixel.
876
   * @param y  the y-coordinate of the top-left pixel.
877
   * @param w  the width of the region of pixels.
878
   * @param h  the height of the region of pixels.
879
   * @param b  the band (in the range <code>0</code> to
880
   *     </code>getNumBands() - 1</code>).
881
   * @param fArray  the sample values (<code>null</code> not permitted).
882
   * @param data  the data buffer (<code>null</code> not permitted).
883
   *
884
   * @throws NullPointerException if either <code>iArray</code> or
885
   *     <code>data</code> is <code>null</code>.
886
   */
887
  public void setSamples(int x, int y, int w, int h, int b,
888
                         float[] fArray, DataBuffer data)
889
  {
890
    int size = w * h;
891
    int inOffset = 0;
892
    for (int yy = y; yy < (y + h); yy++)
893
      for (int xx = x; xx < (x + w); xx++)
894
        setSample(xx, yy, b, fArray[inOffset++], data);
895
 
896
  }
897
 
898
  /**
899
   * Sets the sample values for one band for the pixels in the region
900
   * specified by (x, y, w, h) in the specified data buffer.
901
   *
902
   * @param x  the x-coordinate of the top-left pixel.
903
   * @param y  the y-coordinate of the top-left pixel.
904
   * @param w  the width of the region of pixels.
905
   * @param h  the height of the region of pixels.
906
   * @param b  the band (in the range <code>0</code> to
907
   *     </code>getNumBands() - 1</code>).
908
   * @param dArray  the sample values (<code>null</code> not permitted).
909
   * @param data  the data buffer (<code>null</code> not permitted).
910
   *
911
   * @throws NullPointerException if either <code>iArray</code> or
912
   *     <code>data</code> is <code>null</code>.
913
   */
914
  public void setSamples(int x, int y, int w, int h, int b,
915
                         double[] dArray, DataBuffer data) {
916
    int size = w * h;
917
    int inOffset = 0;
918
    for (int yy = y; yy < (y + h); yy++)
919
      for (int xx = x; xx < (x + w); xx++)
920
        setSample(xx, yy, b, dArray[inOffset++], data);
921
  }
922
 
923
  /**
924
   * Creates a new <code>SampleModel</code> that is compatible with this
925
   * model and has the specified width and height.
926
   *
927
   * @param w  the width (in pixels).
928
   * @param h  the height (in pixels).
929
   *
930
   * @return The new sample model.
931
   */
932
  public abstract SampleModel createCompatibleSampleModel(int w, int h);
933
 
934
  /**
935
   * Return a SampleModel with a subset of the bands in this model.
936
   *
937
   * Selects bands.length bands from this sample model.  The bands chosen
938
   * are specified in the indices of bands[].  This also permits permuting
939
   * the bands as well as taking a subset.  Thus, giving an array with
940
   * 1, 2, 3, ..., numbands, will give an identical sample model.
941
   *
942
   * @param bands Array with band indices to include.
943
   * @return A new sample model
944
   */
945
  public abstract SampleModel createSubsetSampleModel(int[] bands);
946
 
947
  /**
948
   * Creates a new {@link DataBuffer} of the correct type and size for this
949
   * <code>SampleModel</code>.
950
   *
951
   * @return The data buffer.
952
   */
953
  public abstract DataBuffer createDataBuffer();
954
 
955
  /**
956
   * Returns an array containing the size (in bits) for each band accessed by
957
   * the <code>SampleModel</code>.
958
   *
959
   * @return An array.
960
   *
961
   * @see #getSampleSize(int)
962
   */
963
  public abstract int[] getSampleSize();
964
 
965
  /**
966
   * Returns the size (in bits) of the samples for the specified band.
967
   *
968
   * @param band  the band (in the range <code>0</code> to
969
   *     <code>getNumBands() - 1</code>).
970
   *
971
   * @return The sample size (in bits).
972
   */
973
  public abstract int getSampleSize(int band);
974
}

powered by: WebSVN 2.1.0

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