History

My first initial commit with all of mine experimental changes.

Dmitry Kabak (userdima committed 13 years ago

Commit d37b88d1 parent 3f5b46618352 files · +2598093 −-8690Browse files

Showing the changes to java/pkg2/sun/awt/image/JPEGImageDecoder.java (1 of 18352 files). Show all

Unified · Split

java/pkg2/sun/awt/image/JPEGImageDecoder.java+160−0
@@ -0,0 +1,160 @@
1/*
2 * @(#)JPEGImageDecoder.java 1.7 97/02/23 Jim Graham
3 *
4 * Copyright (c) 1994 Sun Microsystems, Inc. All Rights Reserved.
5 *
6 * Permission to use, copy, modify, and distribute this software
7 * and its documentation for NON-COMMERCIAL purposes and without
8 * fee is hereby granted provided that this copyright notice
9 * appears in all copies. Please refer to the file "copyright.html"
10 * for further important copyright and licensing information.
11 *
12 * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
13 * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
14 * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
15 * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
16 * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
17 * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
18 */
19
20/*-
21 * Reads JPEG images from an InputStream and reports the
22 * image data to an InputStreamImageSource object.
23 *
24 * The native implementation of the JPEG image decoder was adapted from
25 * release 6 of the free JPEG software from the Independent JPEG Group.
26 */
27package sun.awt.image;
28
29import java.util.Vector;
30import java.util.Hashtable;
31import java.io.InputStream;
32import java.io.IOException;
33import java.awt.image.*;
34
35/**
36 * JPEG Image converter
37 *
38 * @version 1.7 02/23/97
39 * @author Jim Graham
40 */
41public class JPEGImageDecoder extends ImageDecoder {
42 private static ColorModel RGBcolormodel;
43 private static ColorModel Graycolormodel;
44
45 static {
46 System.loadLibrary("jpeg");
47 RGBcolormodel = new DirectColorModel(24, 0xff0000, 0xff00, 0xff);
48 byte g[] = new byte[256];
49 for (int i = 0; i < 256; i++) {
50 g[i] = (byte) i;
51 }
52 Graycolormodel = new IndexColorModel(8, 256, g, g, g);
53 }
54
55 private native void readImage(InputStream is, byte buf[])
56 throws ImageFormatException, IOException;
57
58 PixelStore store;
59 Hashtable props = new Hashtable();
60
61 public JPEGImageDecoder(InputStreamImageSource src, InputStream is) {
62 super(src, is);
63 }
64
65 public synchronized boolean catchupConsumer(InputStreamImageSource src,
66 ImageConsumer ic)
67 {
68 return ((store == null) || store.replay(src, ic));
69 }
70
71 public synchronized void makeStore(int width, int height, boolean gray) {
72 if (gray) {
73 store = new PixelStore8(width, height);
74 } else {
75 store = new PixelStore32(width, height);
76 }
77 }
78
79 /**
80 * An error has occurred. Throw an exception.
81 */
82 private static void error(String s1) throws ImageFormatException {
83 throw new ImageFormatException(s1);
84 }
85
86 public boolean sendHeaderInfo(int width, int height,
87 boolean gray, boolean multipass) {
88 setDimensions(width, height);
89 makeStore(width, height, gray);
90
91 setProperties(props);
92 store.setProperties(props);
93
94 ColorModel colormodel = gray ? Graycolormodel : RGBcolormodel;
95 setColorModel(colormodel);
96 store.setColorModel(colormodel);
97
98 int flags = hintflags;
99 if (!multipass) {
100 flags |= ImageConsumer.SINGLEPASS;
101 }
102 setHints(hintflags);
103 store.setHints(hintflags);
104
105 headerComplete();
106
107 return true;
108 }
109
110 public boolean sendPixels(int pixels[], int y) {
111 int count = setPixels(0, y, pixels.length, 1, RGBcolormodel,
112 pixels, 0, pixels.length);
113 if (count > 0) {
114 store.setPixels(0, y, pixels.length, 1, pixels, 0, pixels.length);
115 } else {
116 aborted = true;
117 }
118 return !aborted;
119 }
120
121 public boolean sendPixels(byte pixels[], int y) {
122 int count = setPixels(0, y, pixels.length, 1, Graycolormodel,
123 pixels, 0, pixels.length);
124 if (count > 0) {
125 store.setPixels(0, y, pixels.length, 1, pixels, 0, pixels.length);
126 } else {
127 aborted = true;
128 }
129 return !aborted;
130 }
131
132 /**
133 * produce an image from the stream.
134 */
135 public void produceImage() throws IOException, ImageFormatException {
136 try {
137 readImage(input, new byte[1024]);
138 if (!aborted) {
139 store.imageComplete();
140 if (store.getBitState() != PixelStore.BITS_LOST) {
141 source.setPixelStore(this, store);
142 }
143 imageComplete(ImageConsumer.STATICIMAGEDONE, true);
144 }
145 } catch (IOException e) {
146 if (!aborted) {
147 throw e;
148 }
149 } finally {
150 close();
151 }
152 }
153
154 /**
155 * The ImageConsumer hints flag for a JPEG image.
156 */
157 private static final int hintflags =
158 ImageConsumer.TOPDOWNLEFTRIGHT | ImageConsumer.COMPLETESCANLINES |
159 ImageConsumer.SINGLEFRAME;
160}