Mega Code Archive

 
Categories / Java / 2D Graphics GUI
 

Javax media

//-----------------------------------------------------------------------// //                                                                       // //                           T e s t I m a g e 3                         // //                                                                       // //  Copyright (C) Herve Bitteur 2000-2007. All rights reserved.          // //  This software is released under the terms of the GNU General Public  // //  License. Please contact the author at herve.bitteur@laposte.net      // //  to report bugs & suggestions.                                        // //-----------------------------------------------------------------------// package omr.jai; import omr.jai.ImageInfo; import java.awt.BorderLayout; import java.awt.Container; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.color.ColorSpace; import java.awt.geom.AffineTransform; import java.awt.image.BufferedImage; import java.awt.image.ColorModel; import java.awt.image.DataBuffer; import java.awt.image.Raster; import java.awt.image.RenderedImage; import java.awt.image.renderable.ParameterBlock; import javax.media.jai.JAI; import javax.media.jai.PlanarImage; import javax.swing.JFrame; import javax.swing.JPanel; import java.util.Arrays; import javax.media.jai.InterpolationNearest; import javax.media.jai.InterpolationBilinear; public class TestImage3     extends JPanel {     //RenderedImage image;     PlanarImage image;     // Affine tranform     final float ratio = 4f;     AffineTransform scaleXform = AffineTransform.getScaleInstance(ratio, ratio);     private static char WHITE = '-';    // And transparent     private static char[] charTable = new char[]     {         '#',  // 0 Black         '$',  // 1         '*',  // 2         '0',  // 3         'o',  // 4         '+',  // 5         '.',  // 6         WHITE // 7     };     //------------//     // TestImage3 //     //------------//     public TestImage3()     {         JFrame frame = new JFrame(getClass().getName());         Container pane = frame.getContentPane();         pane.setLayout(new BorderLayout());         pane.add(this);         image = decodeImage(new String[] {                 "#-###############",                 "-----------------",                 "#################",                 "-----------------",                 "#################",                 "-----------------",                 "#################",                 "-----------------",                 "#################",                 "-----------------",                 "#################",                 "-----------------",                 "-----------------",                 "-----------------",                 "---####----------",                 "-------##--------",                 "---------####----",                 "-------------#---",                 "-------------#---",                 "-----------------",                 "--#############--",                 "--#############--",                 "--#############--",                 "--#############--",                 "--#############--",                 "--#############--",                 "--#############--",                 "--#############--",                 "--#############--",                 "--#############--",                 "--#############--",                 "-----------------",                 "-----------------",                 "---####----------",                 "-------##--------",                 "---------####----",                 "-------------#---",                 "-------------#---",                 "-----------------",                 "--#############--",                 "--#############--",                 "-----------------",                 "-----------------"         });         //        checkImageFormat();         ImageInfo.print(image);         // Scaling         final float scale = 1f;         ParameterBlock pb = new ParameterBlock()             .addSource(image)             .add(scale)             .add(scale)             .add(0f)             .add(0f)             .add(new InterpolationNearest());         image = JAI.create("scale", pb);         dumpPixels(0, 0, 5, 7);         if (false) {             System.out.println("\nBand Selection");             image = JAI.create("bandselect",image,new int[] {0, 1, 2});             ImageInfo.print(image);             dumpPixels(0, 0, 5, 7);         }         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);         frame.setLocation(100, 100);         frame.pack();         frame.setSize(100, 250);         frame.setVisible(true);     }     private void dumpPixels (int x0,                              int y0,                              int w,                              int h)     {         Raster raster = image.getData();         int[] pixel = null;         System.out.print("pixels=");         for (int y = y0; y < y0+h; y++) {             System.out.println();             for (int x = x0; x <= x0+w; x++) {                 pixel = raster.getPixel(x, y, pixel);                 System.out.print(" [");                 for (int i = 0; i < pixel.length; i++) {                     System.out.print(String.format("%3x", pixel[i]));                 }                 System.out.print("]");             }         }         System.out.println();     }     //------//     // main //     //------//     public static void main(String... args)     {         new TestImage3();     }     //----------------//     // paintComponent //     //----------------//     public void paintComponent(Graphics g)     {         // For background         super.paintComponent(g);         // Meant for visual check         if (image != null) {             Graphics2D g2 = (Graphics2D) g;             g2.drawRenderedImage (image, scaleXform);             //g2.drawImage (image, 1, 1, this);         }     }     //-------------//     // decodeImage //     //-------------//     public static PlanarImage decodeImage (String[] rows)     {         // Create the DataBuffer to hold the pixel samples         final int width = rows[0].length();         final int height = rows.length;         // Create Raster         Raster raster;         if (true) {             raster = Raster.createPackedRaster             (DataBuffer.TYPE_INT, width, height,              new int[] {0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000},// bandMasks RGBA              null);         } else {             raster = Raster.createInterleavedRaster                 (DataBuffer.TYPE_BYTE, width, height,                  4,// num of bands                  null);         }         // Populate the data buffer         DataBuffer dataBuffer = raster.getDataBuffer();         int index = 0;         for (String row : rows) {             for (int x = 0; x < width; x++) {                 int argb = toARGB(row.charAt(x));                 dataBuffer.setElem(index, argb);                 index++;             }         }         // Dump //         final int size = width * height; //         System.out.println("DataBuffer :"); //         for (int i = 0; i < size; i++) { //             if (i % width == 0) { //                 System.out.println(); //             } //             System.out.print(String.format("%8x ", dataBuffer.getElem(i))); //         } //         System.out.println();         // Create the image         BufferedImage bufferedImage = new BufferedImage                 (width, height, BufferedImage.TYPE_INT_ARGB);         bufferedImage.setData(raster);         // Dump //         System.out.println("BufferedImage :"); //         for (int y = 0; y < height; y++) { //             System.out.println(); //             for (int x = 0; x < width; x++) { //                 System.out.print(String.format("%8x ", bufferedImage.getRGB(x, y))); //             } //         } //         System.out.println();         return PlanarImage.wrapRenderedImage(bufferedImage);     }     //--------//     // toARGB //     //--------//     /**      * Compute the ARGB pixel that corresponds to the given char      *      * @param c the char      * @return the corresponding pixel value (ARGB format)      */     private static int toARGB (char c)     {         // Check the char         if (c == WHITE) {             return 0x00ffffff;      // Totally transparent / white         } else {             for (int i = charTable.length -1; i >= 0; i--) {                 if (charTable[i] == c) {                     int level = 3 + i * 36; // Range 3 .. 255 (not too bad)                     return                         255   << 24 |      // Alpha (opaque)                         level << 16 |      // R                         level <<  8 |      // G                         level;             // B                 }             }         }         return 0x00ffffff;      // Totally transparent / white     }     //------------------//     // checkImageFormat //     //------------------//     /**      * Check if the image format (and especially its color model) is      * properly handled by Audiveris.      *      * @throws ImageFormatException is the format is not supported      */     private void checkImageFormat()     {         // Check nb of bands         int numBands = image.getSampleModel().getNumBands();         if (numBands != 1) {             if (numBands == 3) {                 image = colorToGray(image);             } else {                 throw new RuntimeException                     ("Unsupported sample model" +                      " numBands=" + numBands);             }         }         // Check pixel size         ColorModel colorModel = image.getColorModel();         int pixelSize = colorModel.getPixelSize();         if (pixelSize != 8) {             System.out.println("pixelSize=" + pixelSize +                     " colorModel=" + colorModel);             image = grayToGray256(image);         }     }     //--------//     // invert //     //--------//     private static PlanarImage invert (PlanarImage image)     {         return JAI.create("Invert",                           new ParameterBlock()                           .addSource(image)                           .add(null)                           .add(null)                           .add(null)                           .add(null)                           .add(null),                           null);     }     //-------------//     // colorToGray //     //-------------//     private static PlanarImage colorToGray (PlanarImage image)     {         System.out.println("Converting color image to gray ...");         double[][] matrix = { {0.114d, 0.587d, 0.299d, 0.0d} };         return JAI.create("bandcombine",                           new ParameterBlock()                           .addSource(image)                           .add(matrix),                           null);     }     //---------------//     // grayToGray256 //     //---------------//     private static PlanarImage grayToGray256 (PlanarImage image)     {         System.out.println("Converting gray image to gray-256 ...");         ColorSpace colorSpace = ColorSpace.getInstance             (java.awt.color.ColorSpace.CS_GRAY); //        int[] bits = new int[]{8}; //        int opaque = Transparency.OPAQUE; //        int dataType = DataBuffer.TYPE_BYTE; //        ColorModel colorModel = new ComponentColorModel //            (colorSpace, bits, false, false, opaque, dataType);         return JAI.create("colorConvert", image, colorSpace, null);     } } //-----------------------------------------------------------------------// //// //I m a g e I n f o                           // //// //Copyright (C) Herve Bitteur 2000-2007. All rights reserved.          // //This software is released under the terms of the GNU General Public  // //License. Please contact the author at herve.bitteur@laposte.net      // //to report bugs & suggestions.                                        // //-----------------------------------------------------------------------// import java.awt.Transparency; import java.awt.image.*; import java.io.File; import javax.media.jai.*; public class ImageInfo { public static void main(String[] args) { // Open the image (using the name passed as a command line parameter) PlanarImage pi = JAI.create("fileload", args[0]); // Get the image file size (non-JAI related). File image = new File(args[0]); System.out.println("Image file size: "+image.length()+" bytes."); print(pi); } public static void print (PlanarImage pi) { // Show the image dimensions and coordinates. System.out.print("Image Dimensions: "); System.out.print(pi.getWidth()+"x"+pi.getHeight()+" pixels"); // Remember getMaxX and getMaxY return the coordinate of the next point! System.out.println(" (from "+pi.getMinX()+","+pi.getMinY()+" to " + (pi.getMaxX()-1)+","+(pi.getMaxY()-1)+")"); if ((pi.getNumXTiles() != 1)||(pi.getNumYTiles() != 1)) { // Is it tiled? // Tiles number, dimensions and coordinates. System.out.print("Tiles: "); System.out.print(pi.getTileWidth()+"x"+pi.getTileHeight()+" pixels"+ " ("+pi.getNumXTiles()+"x"+pi.getNumYTiles()+" tiles)"); System.out.print(" (from "+pi.getMinTileX()+","+pi.getMinTileY()+ " to "+pi.getMaxTileX()+","+pi.getMaxTileY()+")"); System.out.println(" offset: "+pi.getTileGridXOffset()+","+ pi.getTileGridXOffset()); } // Display info about the SampleModel of the image. SampleModel sm = pi.getSampleModel(); System.out.println("Number of bands: "+sm.getNumBands()); System.out.print("Data type: "); switch(sm.getDataType()) { case DataBuffer.TYPE_BYTE: System.out.println("byte"); break; case DataBuffer.TYPE_SHORT: System.out.println("short"); break; case DataBuffer.TYPE_USHORT: System.out.println("ushort"); break; case DataBuffer.TYPE_INT: System.out.println("int"); break; case DataBuffer.TYPE_FLOAT: System.out.println("float"); break; case DataBuffer.TYPE_DOUBLE: System.out.println("double"); break; case DataBuffer.TYPE_UNDEFINED:System.out.println("undefined"); break; } // Display info about the ColorModel of the image. ColorModel cm = pi.getColorModel(); if (cm != null) { System.out.println("Number of color components: "+ cm.getNumComponents()); System.out.println("Bits per pixel: "+cm.getPixelSize()); System.out.print("Image Transparency: "); switch(cm.getTransparency()) { case Transparency.OPAQUE: System.out.println("opaque"); break; case Transparency.BITMASK: System.out.println("bitmask"); break; case Transparency.TRANSLUCENT: System.out.println("translucent"); break; } } else System.out.println("No color model."); } }