1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski package convwatch;
25*b1cdbd2cSJim Jagielski 
26*b1cdbd2cSJim Jagielski import java.awt.Image;
27*b1cdbd2cSJim Jagielski import java.awt.image.PixelGrabber;
28*b1cdbd2cSJim Jagielski import java.awt.image.ImageObserver;
29*b1cdbd2cSJim Jagielski import java.io.File;
30*b1cdbd2cSJim Jagielski //import javax.imageio.ImageIO;
31*b1cdbd2cSJim Jagielski import java.lang.reflect.Method;
32*b1cdbd2cSJim Jagielski 
33*b1cdbd2cSJim Jagielski class ImageHelper
34*b1cdbd2cSJim Jagielski {
35*b1cdbd2cSJim Jagielski     Image m_aImage;
36*b1cdbd2cSJim Jagielski     int[] m_aPixels;
37*b1cdbd2cSJim Jagielski     int m_w = 0;
38*b1cdbd2cSJim Jagielski     int m_h = 0;
39*b1cdbd2cSJim Jagielski     boolean m_bGrabbed = false;
40*b1cdbd2cSJim Jagielski 
ImageHelper(Image _aImage)41*b1cdbd2cSJim Jagielski     public ImageHelper(Image _aImage)
42*b1cdbd2cSJim Jagielski     {
43*b1cdbd2cSJim Jagielski          m_aImage = _aImage;
44*b1cdbd2cSJim Jagielski 
45*b1cdbd2cSJim Jagielski          // grab all (consume much memory)
46*b1cdbd2cSJim Jagielski          m_w = getWidth();
47*b1cdbd2cSJim Jagielski          m_h = getHeight();
48*b1cdbd2cSJim Jagielski 		 int x = 0;
49*b1cdbd2cSJim Jagielski 		 int y = 0;
50*b1cdbd2cSJim Jagielski          m_aPixels = new int[m_w * m_h];
51*b1cdbd2cSJim Jagielski          PixelGrabber pg = new PixelGrabber(m_aImage, x, y, m_w, m_h, m_aPixels, 0, m_w);
52*b1cdbd2cSJim Jagielski          try {
53*b1cdbd2cSJim Jagielski              pg.grabPixels();
54*b1cdbd2cSJim Jagielski          } catch (InterruptedException e) {
55*b1cdbd2cSJim Jagielski              System.err.println("interrupted waiting for pixels!");
56*b1cdbd2cSJim Jagielski              return;
57*b1cdbd2cSJim Jagielski          }
58*b1cdbd2cSJim Jagielski          if ((pg.getStatus() & ImageObserver.ABORT) != 0) {
59*b1cdbd2cSJim Jagielski              System.err.println("image fetch aborted or errored");
60*b1cdbd2cSJim Jagielski              return;
61*b1cdbd2cSJim Jagielski          }
62*b1cdbd2cSJim Jagielski          m_bGrabbed = true;
63*b1cdbd2cSJim Jagielski     }
getWidth()64*b1cdbd2cSJim Jagielski     public int getWidth() {return m_aImage.getWidth(null);}
getHeight()65*b1cdbd2cSJim Jagielski     public int getHeight() {return m_aImage.getHeight(null);}
66*b1cdbd2cSJim Jagielski     // direct access to a pixel
getPixel(int x, int y)67*b1cdbd2cSJim Jagielski     public int getPixel(int x, int y)
68*b1cdbd2cSJim Jagielski         {
69*b1cdbd2cSJim Jagielski             return m_aPixels[y * m_w + x];
70*b1cdbd2cSJim Jagielski         }
71*b1cdbd2cSJim Jagielski 
72*b1cdbd2cSJim Jagielski     // Write down the current image to a file.
73*b1cdbd2cSJim Jagielski     // public void storeImage(String _sFilename)
74*b1cdbd2cSJim Jagielski     //    {
75*b1cdbd2cSJim Jagielski     //    }
76*b1cdbd2cSJim Jagielski 
createImageHelper(String _sFilename)77*b1cdbd2cSJim Jagielski     public static ImageHelper createImageHelper(String _sFilename)
78*b1cdbd2cSJim Jagielski         throws java.io.IOException
79*b1cdbd2cSJim Jagielski         {
80*b1cdbd2cSJim Jagielski             Image aImage = null;
81*b1cdbd2cSJim Jagielski             File aFile = new File(_sFilename);
82*b1cdbd2cSJim Jagielski             Exception ex = null;
83*b1cdbd2cSJim Jagielski             try {
84*b1cdbd2cSJim Jagielski                 Class imageIOClass = Class.forName("javax.imageio.ImageIO");
85*b1cdbd2cSJim Jagielski                 Method readMethod = imageIOClass.getDeclaredMethod("read", new Class[]{java.io.File.class});
86*b1cdbd2cSJim Jagielski                 Object retValue = readMethod.invoke(imageIOClass, new Object[]{aFile});
87*b1cdbd2cSJim Jagielski                 aImage = (Image)retValue;
88*b1cdbd2cSJim Jagielski             }
89*b1cdbd2cSJim Jagielski             catch(java.lang.ClassNotFoundException e) {
90*b1cdbd2cSJim Jagielski                 ex = e;
91*b1cdbd2cSJim Jagielski             }
92*b1cdbd2cSJim Jagielski             catch(java.lang.NoSuchMethodException e) {
93*b1cdbd2cSJim Jagielski                 ex = e;
94*b1cdbd2cSJim Jagielski             }
95*b1cdbd2cSJim Jagielski             catch(java.lang.IllegalAccessException e) {
96*b1cdbd2cSJim Jagielski                 ex = e;
97*b1cdbd2cSJim Jagielski             }
98*b1cdbd2cSJim Jagielski             catch(java.lang.reflect.InvocationTargetException e) {
99*b1cdbd2cSJim Jagielski                 ex = e;
100*b1cdbd2cSJim Jagielski             }
101*b1cdbd2cSJim Jagielski 
102*b1cdbd2cSJim Jagielski             if (ex != null) {
103*b1cdbd2cSJim Jagielski                 // get Java version:
104*b1cdbd2cSJim Jagielski                 String javaVersion = System.getProperty("java.version");
105*b1cdbd2cSJim Jagielski                 throw new java.io.IOException(
106*b1cdbd2cSJim Jagielski                     "Cannot construct object with current Java version " +
107*b1cdbd2cSJim Jagielski                     javaVersion + ": " + ex.getMessage());
108*b1cdbd2cSJim Jagielski             }
109*b1cdbd2cSJim Jagielski //            aImage = ImageIO.read(aFile);
110*b1cdbd2cSJim Jagielski             return new ImageHelper(aImage);
111*b1cdbd2cSJim Jagielski         }
112*b1cdbd2cSJim Jagielski }
113