001/* 002 * $RCSfile: DataBlkInt.java,v $ 003 * $Revision: 1.1 $ 004 * $Date: 2005/02/11 05:02:12 $ 005 * $State: Exp $ 006 * 007 * Interface: DataBlkInt 008 * 009 * Description: A signed int implementation of DataBlk 010 * 011 * 012 * 013 * COPYRIGHT: 014 * 015 * This software module was originally developed by Raphaël Grosbois and 016 * Diego Santa Cruz (Swiss Federal Institute of Technology-EPFL); Joel 017 * Askelöf (Ericsson Radio Systems AB); and Bertrand Berthelot, David 018 * Bouchard, Félix Henry, Gerard Mozelle and Patrice Onno (Canon Research 019 * Centre France S.A) in the course of development of the JPEG2000 020 * standard as specified by ISO/IEC 15444 (JPEG 2000 Standard). This 021 * software module is an implementation of a part of the JPEG 2000 022 * Standard. Swiss Federal Institute of Technology-EPFL, Ericsson Radio 023 * Systems AB and Canon Research Centre France S.A (collectively JJ2000 024 * Partners) agree not to assert against ISO/IEC and users of the JPEG 025 * 2000 Standard (Users) any of their rights under the copyright, not 026 * including other intellectual property rights, for this software module 027 * with respect to the usage by ISO/IEC and Users of this software module 028 * or modifications thereof for use in hardware or software products 029 * claiming conformance to the JPEG 2000 Standard. Those intending to use 030 * this software module in hardware or software products are advised that 031 * their use may infringe existing patents. The original developers of 032 * this software module, JJ2000 Partners and ISO/IEC assume no liability 033 * for use of this software module or modifications thereof. No license 034 * or right to this software module is granted for non JPEG 2000 Standard 035 * conforming products. JJ2000 Partners have full right to use this 036 * software module for his/her own purpose, assign or donate this 037 * software module to any third party and to inhibit third parties from 038 * using this software module for non JPEG 2000 Standard conforming 039 * products. This copyright notice must be included in all copies or 040 * derivative works of this software module. 041 * 042 * Copyright (c) 1999/2000 JJ2000 Partners. 043 * 044 * 045 * 046 */ 047 048package jj2000.j2k.image; 049 050/** 051 * This is an implementation of the <tt>DataBlk</tt> interface for 052 * signed 32 bit integral data. 053 * 054 * <P>The methods in this class are declared final, so that they can 055 * be inlined by inlining compilers. 056 * 057 * @see DataBlk 058 * */ 059public class DataBlkInt extends DataBlk { 060 /** The array where the data is stored */ 061 public int[] data; 062 063 /** 064 * Creates a DataBlkInt with 0 dimensions and no data array 065 * (i.e. data is null). 066 * 067 * 068 * 069 */ 070 public DataBlkInt() { 071 } 072 073 /** 074 * Creates a DataBlkInt with the specified dimensions and 075 * position. The data array is initialized to an array of size 076 * w*h. 077 * 078 * @param ulx The horizontal coordinate of the upper-left corner 079 * of the block 080 * 081 * @param uly The vertical coordinate of the upper-left corner 082 * of the block 083 * 084 * @param w The width of the block (in pixels) 085 * 086 * @param h The height of the block (in pixels) 087 * 088 * 089 * */ 090 public DataBlkInt(int ulx, int uly, int w, int h) { 091 this.ulx = ulx; 092 this.uly = uly; 093 this.w = w; 094 this.h = h; 095 offset = 0; 096 scanw = w; 097 data = new int[w*h]; 098 } 099 100 /** 101 * Copy constructor. 102 * Creates a DataBlkInt which is the copy of the DataBlkInt 103 * given as paramter. 104 * 105 * @param DataBlkInt the object to be copied. 106 * 107 * 108 * */ 109 public DataBlkInt(DataBlkInt src) { 110 this.ulx = src.ulx; 111 this.uly = src.uly; 112 this.w = src.w; 113 this.h = src.h; 114 this.offset = 0; 115 this.scanw = this.w; 116 this.data = new int[this.w*this.h]; 117 for ( int i=0 ; i<this.h ; i++ ) 118 System.arraycopy(src.data, i*src.scanw, 119 this.data, i*this.scanw, this.w); 120 } 121 122 /** 123 * Returns the identifier of this data type, <tt>TYPE_INT</tt>, 124 * as defined in <tt>DataBlk</tt>. 125 * 126 * @return The type of data stored. Always 127 * <tt>DataBlk.TYPE_INT</tt> 128 * 129 * @see DataBlk#TYPE_INT 130 * 131 * 132 * */ 133 public final int getDataType() { 134 return TYPE_INT; 135 } 136 137 /** 138 * Returns the array containing the data, or null if there is no 139 * data array. The returned array is a int array. 140 * 141 * @return The array of data (a int[]) or null if there is no 142 * data. 143 * 144 * 145 * 146 */ 147 public final Object getData() { 148 return data; 149 } 150 151 /** 152 * Returns the array containing the data, or null if there is no 153 * data array. 154 * 155 * @return The array of data or null if there is no data. 156 * 157 * 158 * */ 159 public final int[] getDataInt() { 160 return data; 161 } 162 163 /** 164 * Sets the data array to the specified one. The provided array 165 * must be a int array, otherwise a ClassCastException is 166 * thrown. The size of the array is not checked for consistency 167 * with the block's dimensions. 168 * 169 * @param arr The data array to use. Must be a int array. 170 * 171 * 172 * */ 173 public final void setData(Object arr) { 174 data = (int[]) arr; 175 } 176 177 /** 178 * Sets the data array to the specified one. The size of the array 179 * is not checked for consistency with the block's dimensions. This 180 * method is more efficient than setData 181 * 182 * @param arr The data array to use. 183 * 184 * 185 * */ 186 public final void setDataInt(int[] arr) { 187 data = arr; 188 } 189 190 /** 191 * Returns a string of informations about the DataBlkInt. 192 * */ 193 public String toString(){ 194 String str = super.toString(); 195 if(data!=null) { 196 str += ",data="+data.length+" bytes"; 197 } 198 return str; 199 } 200}