summaryrefslogtreecommitdiffstats
path: root/awt/javax/imageio/ImageReader.java
blob: 780de266a3718afa563140c166522e2b2fcad146 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
/*
 *  Licensed to the Apache Software Foundation (ASF) under one or more
 *  contributor license agreements.  See the NOTICE file distributed with
 *  this work for additional information regarding copyright ownership.
 *  The ASF licenses this file to You under the Apache License, Version 2.0
 *  (the "License"); you may not use this file except in compliance with
 *  the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */
/**
 * @author Rustem V. Rafikov
 * @version $Revision: 1.3 $
 */
package javax.imageio;

import javax.imageio.spi.ImageReaderSpi;
import javax.imageio.stream.ImageInputStream;
import javax.imageio.metadata.IIOMetadata;
import javax.imageio.event.IIOReadWarningListener;
import javax.imageio.event.IIOReadProgressListener;
import javax.imageio.event.IIOReadUpdateListener;
import java.util.Locale;
import java.util.List;
import java.util.Iterator;
import java.util.Set;
import java.io.IOException;
import java.awt.image.BufferedImage;
import java.awt.image.Raster;
import java.awt.image.RenderedImage;
import java.awt.*;

/**
 * The ImageReader class is an abstract class for decoding images.
 * ImageReader objects are instantiated by the service provider 
 * interface, ImageReaderSpi class, for the specific format. 
 * ImageReaderSpi class should be registered with the IIORegistry, 
 * which uses them for format recognition and presentation of available 
 * format readers and writers.
 */
public abstract class ImageReader {

    /** The originating provider. */
    protected ImageReaderSpi originatingProvider;

    /** The input object such as ImageInputStream. */
    protected Object input;

    /** The seek forward only. */
    protected boolean seekForwardOnly;

    /** 
     * The ignore metadata flag indicates whether current input source 
     * has been marked as metadata is allowed to be ignored by setInput. 
     */
    protected boolean ignoreMetadata;

    /** The minimum index. */
    protected int minIndex;

    /** The available locales. */
    protected Locale[] availableLocales;

    /** The locale. */
    protected Locale locale;

    /** The list of warning listeners. */
    protected List<IIOReadWarningListener> warningListeners;

    /** The list of warning locales. */
    protected List<Locale> warningLocales;

    /** The list of progress listeners. */
    protected List<IIOReadProgressListener> progressListeners;

    /** The list of update listeners. */
    protected List<IIOReadUpdateListener> updateListeners;

    /**
     * Instantiates a new ImageReader.
     * 
     * @param originatingProvider the ImageReaderSpi which 
     * instanties this ImageReader.
     */
    protected ImageReader(ImageReaderSpi originatingProvider) {
        this.originatingProvider = originatingProvider;
    }

    /**
     * Gets the format name of this input source.
     * 
     * @return the format name of this input source.
     * 
     * @throws IOException Signals that an I/O exception has occurred.
     */
    public String getFormatName() throws IOException {
        return originatingProvider.getFormatNames()[0];
    }

    /**
     * Gets the ImageReaderSpi which instantiated this ImageReader. 
     * 
     * @return the ImageReaderSpi.
     */
    public ImageReaderSpi getOriginatingProvider() {
        return originatingProvider;
    }

    /**
     * Sets the specified Object as the input source of this ImageReader. 
     * 
     * @param input the input source, it can 
     * be an ImageInputStream or other supported objects.
     * @param seekForwardOnly indicates whether the stream must
     * be read sequentially from its current starting point.
     * @param ignoreMetadata parameter which indicates
     * if metadata may be ignored during reads or not.
     */
    public void setInput(Object input, boolean seekForwardOnly, boolean ignoreMetadata) {
        if (input != null) {
            if (!isSupported(input) && !(input instanceof ImageInputStream)) {
                throw new IllegalArgumentException("input " + input + " is not supported");
            }
        }
        this.minIndex = 0;
        this.seekForwardOnly = seekForwardOnly;
        this.ignoreMetadata = ignoreMetadata;
        this.input = input;
    }

    /**
     * Checks if is supported.
     * 
     * @param input the input
     * 
     * @return true, if is supported
     */
    private boolean isSupported(Object input) {
        ImageReaderSpi spi = getOriginatingProvider();
        if (null != spi) {
            Class[] outTypes = spi.getInputTypes();
            for (Class<?> element : outTypes) {
                if (element.isInstance(input)) {
                    return true;
                }
            }
        }
        return false;
    }

    /**
     * Sets the specified Object as the input source of this ImageReader.
     * Metadata is not ignored.
     * 
     * @param input the input source, it can 
     * be an ImageInputStream or other supported objects.
     * @param seekForwardOnly indicates whether the stream must
     * be read sequentially from its current starting point.
     */
    public void setInput(Object input, boolean seekForwardOnly) {
        setInput(input, seekForwardOnly, false);
    }

    /**
     * Sets the specified Object as the input source of this ImageReader.
     * Metadata is not ignored and forward seeking is not required.
     * 
     * @param input the input source, it can 
     * be ImageInputStream or other objects.
     */
    public void setInput(Object input) {
        setInput(input, false, false);
    }

    /**
     * Gets the input source object of this ImageReader, or returns null.
     * 
     * @return the the input source object such as ImageInputStream,
     * or null.
     */
    public Object getInput() {
        return input;
    }

    /**
     * Checks if the input source supports only forward reading, or not.
     * 
     * @return true, if the input source supports only forward reading, 
     * false otherwise.
     */
    public boolean isSeekForwardOnly() {
        return seekForwardOnly;
    }

    /**
     * Returns true if the current input source allows 
     * to metadata to be ignored by passing true as 
     * the ignoreMetadata argument to the setInput method.
     * 
     * @return true, if true if the current input source allows 
     * to metadata to be ignored by passing true as 
     * the ignoreMetadata argument to the setInput method.
     */
    public boolean isIgnoringMetadata() {
        return ignoreMetadata;
    }

    /**
     * Gets the minimum valid index for reading an image, thumbnail, 
     * or image metadata. 
     * 
     * @return the minimum valid index for reading an image, thumbnail, 
     * or image metadata.
     */
    public int getMinIndex() {
        return minIndex;
    }

    /**
     * Gets the available locales.
     * 
     * @return an array of the available locales.
     */
    public Locale[] getAvailableLocales() {
        return availableLocales;
    }

    /**
     * Sets the locale to this ImageReader.
     * 
     * @param locale the Locale.
     */
    public void setLocale(Locale locale) {
        throw new UnsupportedOperationException("Not implemented yet");
    }

    /**
     * Gets the locale of this ImageReader.
     * 
     * @return the locale of this ImageReader.
     */
    public Locale getLocale() {
        return locale;
    }

    /**
     * Gets the number of images available in the current input source.
     * 
     * @param allowSearch the parameter which indicates what
     * a search is required; if false, the reader may return -1  
     * without searching.
     * 
     * @return the number of images.
     * 
     * @throws IOException Signals that an I/O exception has occurred.
     */
    public abstract int getNumImages(boolean allowSearch) throws IOException;

    /**
     * Gets the width of the specified image in input source.
     * 
     * @param imageIndex the image index.
     * 
     * @return the width in pixels.
     * 
     * @throws IOException Signals that an I/O exception has occurred.
     */
    public abstract int getWidth(int imageIndex) throws IOException;

    /**
     * Gets the height of the specified image in input source.
     * 
     * @param imageIndex the image index.
     * 
     * @return the height in pixels.
     * 
     * @throws IOException Signals that an I/O exception has occurred.
     */
    public abstract int getHeight(int imageIndex) throws IOException;

    /**
     * Checks if the storage format of the specified image places 
     * an impediment on random pixels access or not. 
     * 
     * @param imageIndex the image's index.
     * 
     * @return true, if the storage format of the specified image places 
     * an impediment on random pixels access, false otherwise.
     * 
     * @throws IOException Signals that an I/O exception has occurred.
     */
    public boolean isRandomAccessEasy(int imageIndex) throws IOException {
        return false; //def
    }

    /**
     * Gets the aspect ratio (width devided by height) of the image.
     * 
     * @param imageIndex the image index.
     * 
     * @return the aspect ratio of the image.
     * 
     * @throws IOException Signals that an I/O exception has occurred.
     */
    public float getAspectRatio(int imageIndex) throws IOException {
        return (float) getWidth(imageIndex) / getHeight(imageIndex);
    }

    /**
     * Gets an ImageTypeSpecifier which indicates the type of the 
     * specified image.
     * 
     * @param imageIndex the image's index.
     * 
     * @return the ImageTypeSpecifier.
     * 
     * @throws IOException Signals that an I/O exception has occurred.
     */
    public ImageTypeSpecifier getRawImageType(int imageIndex) throws IOException {
        throw new UnsupportedOperationException("Not implemented yet");
    }

    /**
     * Gets an Iterator of ImageTypeSpecifier objects which are associated
     * with image types that may be used when decoding specified image.
     * 
     * @param imageIndex the image index.
     * 
     * @return an Iterator of ImageTypeSpecifier objects.
     * 
     * @throws IOException Signals that an I/O exception has occurred.
     */
    public abstract Iterator<ImageTypeSpecifier> getImageTypes(int imageIndex) throws IOException;

    /**
     * Gets the default ImageReadParam object.
     * 
     * @return the ImageReadParam object.
     */
    public ImageReadParam getDefaultReadParam() {
        throw new UnsupportedOperationException("Not implemented yet");
    }

    /**
     * Gets an IIOMetadata object for this input source.
     * 
     * @return the IIOMetadata.
     * 
     * @throws IOException Signals that an I/O exception has occurred.
     */
    public abstract IIOMetadata getStreamMetadata() throws IOException;

    /**
     * Gets an IIOMetadata object for this input source.
     * 
     * @param formatName the desired metadata format to be used in the 
     * returned IIOMetadata object.
     * @param nodeNames the node names of the document.
     * 
     * @return the IIOMetadata.
     * 
     * @throws IOException Signals that an I/O exception has occurred.
     */
    public IIOMetadata getStreamMetadata(String formatName, Set<String> nodeNames)
            throws IOException {
        throw new UnsupportedOperationException("Not implemented yet");
    }

    /**
     * Gets the image metadata of the specified image in input source.
     * 
     * @param imageIndex the image index.
     * 
     * @return the IIOMetadata.
     * 
     * @throws IOException Signals that an I/O exception has occurred.
     */
    public abstract IIOMetadata getImageMetadata(int imageIndex) throws IOException;

    /**
     * Gets the image metadata of the specified image input source.
     * 
     * @param imageIndex the image index.
     * @param formatName the desired metadata format to be used in the 
     * returned IIOMetadata object.
     * @param nodeNames the node names which can be contained in
     * the document.
     * 
     * @return the IIOMetadata.
     * 
     * @throws IOException Signals that an I/O exception has occurred.
     */
    public IIOMetadata getImageMetadata(int imageIndex, String formatName,
                                        Set<String> nodeNames) throws IOException {
        throw new UnsupportedOperationException("Not implemented yet");
    }

    /**
     * Reads the specified image and returns it as a BufferedImage
     * using the default ImageReadParam.
     *  
     * @param imageIndex the image index.
     * 
     * @return the BufferedImage.
     * 
     * @throws IOException Signals that an I/O exception has occurred.
     */
    public BufferedImage read(int imageIndex) throws IOException {
        return read(imageIndex, null);
    }

    /**
     * Reads the specified image and returns it as a BufferedImage
     * using the specified ImageReadParam.
     * 
     * @param imageIndex the image index.
     * @param param the ImageReadParam.
     * 
     * @return the BufferedImage.
     * 
     * @throws IOException Signals that an I/O exception has occurred.
     */
    public abstract BufferedImage read(int imageIndex, ImageReadParam param) throws IOException;

    /**
     * Reads the specified image and returns an IIOImage with this image,
     * thumbnails, and metadata for this image, using 
     * the specified ImageReadParam.
     * 
     * @param imageIndex the image index.
     * @param param the ImageReadParam.
     * 
     * @return the IIOImage.
     * 
     * @throws IOException Signals that an I/O exception has occurred.
     */
    public IIOImage readAll(int imageIndex, ImageReadParam param) throws IOException {
        throw new UnsupportedOperationException("Not implemented yet");
    }

    /**
     * Returns an Iterator of IIOImages from the input source. 
     * 
     * @param params the Iterator of ImageReadParam objects.
     * 
     * @return the iterator of IIOImages.
     * 
     * @throws IOException Signals that an I/O exception has occurred.
     */
    public Iterator<IIOImage> readAll(Iterator<? extends ImageReadParam> params) throws IOException {
        throw new UnsupportedOperationException("Not implemented yet");
    }

    /**
     * Checks whether or not this plug-in supports reading a Raster.
     * 
     * @return true, if this plug-in supports reading a Raster,
     * false otherwise.
     */
    public boolean canReadRaster() {
        return false; //def
    }

    /**
     * Reads a new Raster object which contains the raw pixel data from 
     * the image. 
     * 
     * @param imageIndex the image index.
     * @param param the ImageReadParam.
     * 
     * @return the Raster.
     * 
     * @throws IOException Signals that an I/O exception has occurred.
     */
    public Raster readRaster(int imageIndex, ImageReadParam param) throws IOException {
        throw new UnsupportedOperationException("Unsupported");
    }

    /**
     * Checks if the specified image has tiles or not.
     * 
     * @param imageIndex the image's index.
     * 
     * @return true, if the specified image has tiles,
     * false otherwise.
     * 
     * @throws IOException Signals that an I/O exception has occurred.
     */
    public boolean isImageTiled(int imageIndex) throws IOException {
        return false; //def
    }

    /**
     * Gets the tile width in the specified image.
     * 
     * @param imageIndex the image's index.
     * 
     * @return the tile width.
     * 
     * @throws IOException Signals that an I/O exception has occurred.
     */
    public int getTileWidth(int imageIndex) throws IOException {
        return getWidth(imageIndex); //def
    }

    /**
     * Gets the tile height in the specified image.
     * 
     * @param imageIndex the image's index.
     * 
     * @return the tile height.
     * 
     * @throws IOException Signals that an I/O exception has occurred.
     */
    public int getTileHeight(int imageIndex) throws IOException {
        return getHeight(imageIndex); //def
    }

    /**
     * Gets the X coordinate of the upper left corner of the tile grid in the 
     * specified image.
     * 
     * @param imageIndex the image's index.
     * 
     * @return the X coordinate of the upper left corner of the tile grid.
     * 
     * @throws IOException Signals that an I/O exception has occurred.
     */
    public int getTileGridXOffset(int imageIndex) throws IOException {
        return 0; //def
    }

    /**
     * Gets the Y coordinate of the upper left corner of the tile grid in the 
     * specified image.
     * 
     * @param imageIndex the image's index.
     * 
     * @return the Y coordinate of the upper left corner of the tile grid.
     * 
     * @throws IOException Signals that an I/O exception has occurred.
     */
    public int getTileGridYOffset(int imageIndex) throws IOException {
        return 0; //def
    }

    /**
     * Reads the tile specified by the tileX and tileY parameters
     * of the specified image and returns it as a BufferedImage. 
     * 
     * @param imageIndex the image index.
     * @param tileX the X index of tile.
     * @param tileY the Y index of tile.
     * 
     * @return the BufferedImage.
     * 
     * @throws IOException Signals that an I/O exception has occurred.
     */
    public BufferedImage readTile(int imageIndex, int tileX, int tileY) throws IOException {
        throw new UnsupportedOperationException("Not implemented yet");
    }

    /**
     * Reads the tile specified by the tileX and tileY parameters
     * of the specified image and returns it as a Raster. 
     * 
     * @param imageIndex the image index.
     * @param tileX the X index of tile.
     * @param tileY the Y index of tile.
     * 
     * @return the Raster.
     * 
     * @throws IOException Signals that an I/O exception has occurred.
     */
    public Raster readTileRaster(int imageIndex, int tileX, int tileY) throws IOException {
        throw new UnsupportedOperationException("Not implemented yet");
    }

    /**
     * Reads the specified image using the specified 
     * ImageReadParam and returns it as a RenderedImage.
     * 
     * @param imageIndex the image index.
     * @param param the ImageReadParam.
     * 
     * @return the RenderedImage.
     * 
     * @throws IOException Signals that an I/O exception has occurred.
     */
    public RenderedImage readAsRenderedImage(int imageIndex, ImageReadParam param) throws IOException {
        return read(imageIndex, param);
    }

    /**
     * Returns true if the image format supported by this reader 
     * supports thumbnail preview images.
     * 
     * @return true if the image format supported by this reader 
     * supports thumbnail preview images, false otherwise.
     */
    public boolean readerSupportsThumbnails() {
        return false; //def
    }

    /**
     * Checks if the specified image has thumbnails or not.
     * 
     * @param imageIndex the image's index.
     * 
     * @return true, if the specified image has thumbnails,
     * false otherwise.
     * 
     * @throws IOException Signals that an I/O exception has occurred.
     */
    public boolean hasThumbnails(int imageIndex) throws IOException {
        return getNumThumbnails(imageIndex) > 0; //def
    }

    /**
     * Gets the number of thumbnails for the specified image.
     * 
     * @param imageIndex the image's index.
     * 
     * @return the number of thumbnails.
     * 
     * @throws IOException Signals that an I/O exception has occurred.
     */
    public int getNumThumbnails(int imageIndex) throws IOException {
        return 0; //def
    }

    /**
     * Gets the width of the specified thumbnail for the specified image.
     * 
     * @param imageIndex the image's index.
     * @param thumbnailIndex the thumbnail's index.
     * 
     * @return the thumbnail width.
     * 
     * @throws IOException Signals that an I/O exception has occurred.
     */
    public int getThumbnailWidth(int imageIndex, int thumbnailIndex) throws IOException {
        return readThumbnail(imageIndex, thumbnailIndex).getWidth();  //def
    }

    /**
     * Gets the height of the specified thumbnail for the specified image.
     * 
     * @param imageIndex the image's index.
     * @param thumbnailIndex the thumbnail's index.
     * 
     * @return the thumbnail height.
     * 
     * @throws IOException Signals that an I/O exception has occurred.
     */
    public int getThumbnailHeight(int imageIndex, int thumbnailIndex) throws IOException {
        return readThumbnail(imageIndex, thumbnailIndex).getHeight();  //def
    }

    /**
     * Reads the thumbnail image for the specified image
     * as a BufferedImage.
     *  
     * @param imageIndex the image index.
     * @param thumbnailIndex the thumbnail index.
     * 
     * @return the BufferedImage.
     * 
     * @throws IOException Signals that an I/O exception has occurred.
     */
    public BufferedImage readThumbnail(int imageIndex, int thumbnailIndex) throws IOException {
        throw new UnsupportedOperationException("Unsupported"); //def
    }

    /**
     * Requests an abort operation for current reading operation. 
     */
    public void abort() {
        throw new UnsupportedOperationException("Not implemented yet");
    }

    /**
     * Checks whether or not a request to abort the current read operation 
     * has been made successfully.
     * 
     * @return true, if the request to abort the current read operation 
     * has been made successfully, false otherwise.
     */
    protected boolean abortRequested() {
        throw new UnsupportedOperationException("Not implemented yet");
    }

    /**
     * Clears all previous abort request, and abortRequested returns false
     * after calling this method.
     */
    protected void clearAbortRequest() {
        throw new UnsupportedOperationException("Not implemented yet");
    }

    /**
     * Adds the IIOReadWarningListener.
     * 
     * @param listener the IIOReadWarningListener.
     */
    public void addIIOReadWarningListener(IIOReadWarningListener listener) {
        throw new UnsupportedOperationException("Not implemented yet");
    }

    /**
     * Removes the specified IIOReadWarningListener.
     * 
     * @param listener the IIOReadWarningListener to be removed.
     */
    public void removeIIOReadWarningListener(IIOReadWarningListener listener) {
        throw new UnsupportedOperationException("Not implemented yet");
    }

    /**
     * Removes all registered IIOReadWarningListeners.
     */
    public void removeAllIIOReadWarningListeners() {
        throw new UnsupportedOperationException("Not implemented yet");
    }

    /**
     * Adds the IIOReadProgressListener.
     * 
     * @param listener the IIOReadProgressListener.
     */
    public void addIIOReadProgressListener(IIOReadProgressListener listener) {
        throw new UnsupportedOperationException("Not implemented yet");
    }

    /**
     * Removes the specified IIOReadProgressListener.
     * 
     * @param listener the IIOReadProgressListener to be removed.
     */
    public void removeIIOReadProgressListener(IIOReadProgressListener listener) {
        throw new UnsupportedOperationException("Not implemented yet");
    }

    /**
     * Removes registered IIOReadProgressListeners.
     */
    public void removeAllIIOReadProgressListeners() {
        throw new UnsupportedOperationException("Not implemented yet");
    }

    /**
     * Adds the IIOReadUpdateListener.
     * 
     * @param listener the IIOReadUpdateListener.
     */
    public void addIIOReadUpdateListener(IIOReadUpdateListener listener) {
        throw new UnsupportedOperationException("Not implemented yet");
    }

    /**
     * Removes the specified IIOReadUpdateListener.
     * 
     * @param listener the IIOReadUpdateListener to be removed.
     */
    public void removeIIOReadUpdateListener(IIOReadUpdateListener listener) {
        throw new UnsupportedOperationException("Not implemented yet");
    }

    /**
     * Removes registered IIOReadUpdateListeners.
     */
    public void removeAllIIOReadUpdateListeners() {
        throw new UnsupportedOperationException("Not implemented yet");
    }

    /**
     * Processes the start of an sequence of image reads
     * by calling the sequenceStarted method on all registered 
     * IIOReadProgressListeners. 
     * 
     * @param minIndex the minimum index.
     */
    protected void processSequenceStarted(int minIndex) {
        throw new UnsupportedOperationException("Not implemented yet");
    }

    /**
     * Processes the completion of an sequence of image reads
     * by calling sequenceComplete method on all registered 
     * IIOReadProgressListeners. 
     */
    protected void processSequenceComplete() {
        throw new UnsupportedOperationException("Not implemented yet");
    }

    /**
     * Processes the start of an image read by calling the imageStarted
     * method on all registered IIOReadProgressListeners.
     * 
     * @param imageIndex the image index.
     */
    protected void processImageStarted(int imageIndex) {
        throw new UnsupportedOperationException("Not implemented yet");
    }

    /**
     * Processes the current percentage of image completion by calling 
     * the imageProgress method on all registered IIOReadProgressListeners.
     * 
     * @param percentageDone the percentage done.
     */
    protected void processImageProgress(float percentageDone) {
        throw new UnsupportedOperationException("Not implemented yet");
    }

    /**
     * Processes image completion by calling the imageComplete method
     * on all registered IIOReadProgressListeners. 
     */
    protected void processImageComplete() {
        throw new UnsupportedOperationException("Not implemented yet");
    }

    /**
     * Processes the start of a thumbnail read by calling the
     * thumbnailStarted method on all registered IIOReadProgressListeners. 
     * 
     * @param imageIndex the image index.
     * @param thumbnailIndex the thumbnail index.
     */
    protected void processThumbnailStarted(int imageIndex, int thumbnailIndex) {
        throw new UnsupportedOperationException("Not implemented yet");
    }

    /**
     * Processes the current percentage of thumbnail completion 
     * by calling the thumbnailProgress method on all registered 
     * IIOReadProgressListeners.
     * 
     * @param percentageDone the percentage done.
     */
    protected void processThumbnailProgress(float percentageDone) {
        throw new UnsupportedOperationException("Not implemented yet");
    }

    /**
     * Processes the completion of a thumbnail read 
     * by calling the thumbnailComplete method 
     * on all registered IIOReadProgressListeners. 
     */
    protected void processThumbnailComplete() {
        throw new UnsupportedOperationException("Not implemented yet");
    }

    /**
     * Processes a read aborted event by calling the readAborted 
     * method on all registered IIOReadProgressListeners.
     */
    protected void processReadAborted() {
        throw new UnsupportedOperationException("Not implemented yet");
    }

    /**
     * Processes the beginning of a progressive pass by calling 
     * the passStarted method on all registered IIOReadUpdateListeners.
     * 
     * @param theImage the image to be updated.
     * @param pass the current pass index.
     * @param minPass the minimum pass index.
     * @param maxPass the maximum pass index.
     * @param minX the X coordinate of of the upper left pixel. 
     * @param minY the Y coordinate of of the upper left pixel.
     * @param periodX the horizontal separation between pixels.
     * @param periodY the vertical separation between pixels.
     * @param bands the number of affected bands.
     */
    protected void processPassStarted(BufferedImage theImage,
                                  int pass,
                                  int minPass,
                                  int maxPass,
                                  int minX,
                                  int minY,
                                  int periodX,
                                  int periodY,
                                  int[] bands) {
        throw new UnsupportedOperationException("Not implemented yet");
    }

    /**
     * Processes the update of a set of samples by calling 
     * the imageUpdate method on all registered IIOReadUpdateListeners.  
     * 
     * @param theImage the image to be updated.
     * @param minX the X coordinate of the upper left pixel.
     * @param minY the Y coordinate of the upper left pixel.
     * @param width the width of updated area.
     * @param height the height of updated area.
     * @param periodX the horizontal separation between pixels.
     * @param periodY the vertical separation between pixels.
     * @param bands the number of affected bands.
     */
    protected void processImageUpdate(BufferedImage theImage,
                                  int minX,
                                  int minY,
                                  int width,
                                  int height,
                                  int periodX,
                                  int periodY,
                                  int[] bands) {
        throw new UnsupportedOperationException("Not implemented yet");
    }

    /**
     * Processes the end of a progressive pass by calling passComplete
     * method of registered IIOReadUpdateListeners.
     * 
     * @param theImage the image to be updated.
     */
    protected void processPassComplete(BufferedImage theImage) {
        throw new UnsupportedOperationException("Not implemented yet");
    }

    /**
     * Processes the beginning of a thumbnail progressive pass
     * by calling the thumbnailPassStarted method on all 
     * registered IIOReadUpdateListeners.
     * 
     * @param theThumbnail the the thumbnail to be updated.
     * @param pass the current pass index.
     * @param minPass the minimum pass index.
     * @param maxPass the maximum pass index.
     * @param minX the X coordinate of the upper left pixel. 
     * @param minY the Y coordinate of the upper left pixel.
     * @param periodX the horizontal separation between pixels.
     * @param periodY the vertical separation between pixels.
     * @param bands the number of affected bands.
     */
    protected void processThumbnailPassStarted(BufferedImage theThumbnail,
                                           int pass,
                                           int minPass,
                                           int maxPass,
                                           int minX,
                                           int minY,
                                           int periodX,
                                           int periodY,
                                           int[] bands) {
        throw new UnsupportedOperationException("Not implemented yet");
    }

    /**
     * Processes the update of a set of samples in a thumbnail 
     * image by calling the thumbnailUpdate method on all
     * registered IIOReadUpdateListeners. 
     * 
     * @param theThumbnail the the thumbnail to be updated.
     * @param minX the X coordinate of the upper left pixel. 
     * @param minY the Y coordinate of the upper left pixel.
     * @param periodX the horizontal separation between pixels.
     * @param periodY the vertical separation between pixels.
     * @param bands the number of affected bands.
     */
    protected void processThumbnailUpdate(BufferedImage theThumbnail,
                                      int minX,
                                      int minY,
                                      int width,
                                      int height,
                                      int periodX,
                                      int periodY,
                                       int[] bands) {
        throw new UnsupportedOperationException("Not implemented yet");
    }

    /**
     * Processes the end of a thumbnail progressive pass 
     * by calling the thumbnailPassComplete method
     * on all registered IIOReadUpdateListeners. 
     * 
     * @param theThumbnail the thumbnail to be updated.
     */
    protected void processThumbnailPassComplete(BufferedImage theThumbnail) {
        throw new UnsupportedOperationException("Not implemented yet");
    }

    /**
     * Processes a warning message by calling warningOccurred method
     * of registered IIOReadWarningListeners.
     * 
     * @param warning the warning.
     */
    protected void processWarningOccurred(String warning) {
        throw new UnsupportedOperationException("Not implemented yet");
    }

    /**
     * Processes a warning by calling the warningOccurred method 
     * of on all registered IIOReadWarningListeners.
     * 
     * @param baseName the base name of ResourceBundles.
     * @param keyword the keyword to index the warning among ResourceBundles.
     */
    protected void processWarningOccurred(String baseName, String keyword) {
        throw new UnsupportedOperationException("Not implemented yet");
    }

    /**
     * Resets this ImageReader.
     */
    public void reset() {
        // def
        setInput(null, false);
        setLocale(null);
        removeAllIIOReadUpdateListeners();
        removeAllIIOReadWarningListeners();
        removeAllIIOReadProgressListeners();
        clearAbortRequest();
    }

    /**
     * Disposes of any resources.
     */
    public void dispose() {
        // do nothing by def
    }

    /**
     * Gets the region of source image that should be read with the 
     * specified width, height and ImageReadParam. 
     * 
     * @param param the ImageReadParam object, or null.
     * @param srcWidth the source image's width.
     * @param srcHeight the source image's  height.
     * 
     * @return the Rectangle of source region.
     */
    protected static Rectangle getSourceRegion(ImageReadParam param, int srcWidth, int srcHeight) {
        throw new UnsupportedOperationException("Not implemented yet");
    }

    /**
     * Computes the specified source region and the specified destination 
     * region with the specified the width and height of the source image,
     * an optional destination image, and an ImageReadParam. 
     * 
     * @param param the an ImageReadParam object, or null.
     * @param srcWidth the source image's width.
     * @param srcHeight the source image's height.
     * @param image the destination image.
     * @param srcRegion the source region.
     * @param destRegion the destination region.
     */
    protected static void computeRegions(ImageReadParam param,
                                     int srcWidth,
                                     int srcHeight,
                                     BufferedImage image,
                                     Rectangle srcRegion,
                                     Rectangle destRegion) {
        throw new UnsupportedOperationException("Not implemented yet");
    }

    /**
     * Checks the validity of the source and destination band and is called
     * when the reader knows the number of bands of the source image and 
     * the number of bands of the destination image. 
     * 
     * @param param the ImageReadParam for reading the Image.
     * @param numSrcBands the number of bands in the source.
     * @param numDstBands the number of bands in the destination.
     */
    protected static void checkReadParamBandSettings(ImageReadParam param,
                                                 int numSrcBands,
                                                 int numDstBands) {
        throw new UnsupportedOperationException("Not implemented yet");
    }

    /**
     * Gets the destination image where the decoded data is written. 
     * 
     * @param param the ImageReadParam.
     * @param imageTypes the iterator of ImageTypeSpecifier objects.
     * @param width the width of the image being decoded.
     * @param height the height of the image being decoded.
     * 
     * @return the BufferedImage where decoded pixels should be written.
     * 
     * @throws IIOException the IIOException is thrown if 
     * there is no suitable ImageTypeSpecifier.
     */
    protected static BufferedImage getDestination(ImageReadParam param, Iterator<ImageTypeSpecifier> imageTypes,
                                              int width,
                                              int height)
                                       throws IIOException {
        throw new UnsupportedOperationException("Not implemented yet");
    }
}