Square root will give you a non-linear translation into the destination space. Also, adding 32768 will mean that 32767 or 0x7fff will map to full intensity, 0 will map to half intensity, and -32768 will map to blackness - is that the mapping you want? If you want to convert a signed short directly to its "unsigned short" equivalent value then the way to do this is by using:
short s = /* some number */; int si = s; int ui = s & 0xffff; In that case ui will represent the bits of s interpreted as an unsigned value and si will represent the same numeric value as s. If you want to reduce this value then to 8 bits in a linear way, a simple shift would work best: int ui = (s & 0xffff) >> 8; Is that the conversion you wanted? ...jim --On Wednesday, November 6, 2002 5:09 AM +0900 Kevin Kim <[EMAIL PROTECTED]> wrote:
Hi, all. I have 224 matrixes each of which is consisted of h by w Short, 16 Signed bit pixel loaded into memory. Among these 224 matrix, I am selecting three matrixes to map into RGB value. My understanding was that since I have a range from -32767 to 32767 for each R, G, B, I presumed, I would have to sqaure root to fit into 8 bit red representation ranging 0 to 255, green, and blue. This is shown below. I created the bufferedImage class and am using the defaultToolKit. I ran into some odd problems. The image is supposed to vary in color, depending on what I have selected for red, green, and blue. However, the rendered image always seems dim. Was I supposed to normalize each three matrix instead of just algebraicly square root? Or is is possible to create ColorModel and SampleModel in 48 bit representation for RGB? (=16 bit Short * 3 for RGB) Here is code snipet. /*********************************************************** * Create dataBuffer for BufferedImage before invoke paint() */ public void createDataForBufferedImage(SingleBandDataMatrix[] sbdm) { //This defindes the image size int width = this.getPassedHeader().getSamples(); int height = this.getPassedHeader().getLines(); // This is the band index I choosed to load among 224 different matrix int redBandMatrixIndex = this.getPassedSelectedRedBandNumber(); int greenBandMatrixIndex= this.getPassedSelectedGreenBandNumber(); int blueBandMatrixIndex = this.getPassedSelectedBlueBandNumber(); //Declare temporary matrix to copy the original matrixs selected for Red, green, and blue int[][] redTempMatrix = new int[width][height]; int[][] blueTempMatrix = new int[width][height]; int[][] greenTempMatrix = new int[width][height]; //Copy over the selected matrix to temporary matrix for red, green, and blue redTempMatrix = (int[][])sbdm[redBandMatrixIndex-1].getMatrix(); greenTempMatrix = (int[][])sbdm[greenBandMatrixIndex-1].getMatrix(); blueTempMatrix = (int[][])sbdm[blueBandMatrixIndex-1].getMatrix(); //Below is the actual DataBuffer going into BufferedImage int[] data = new int[width*height]; //Pack the ARGB into 32 bit(4 byte) int i=0; int z=0; //int[] red= new int[height*width]; for (int y=0; y<height ;y++ ) { for (int x=0; x<width ;x++ ) { /******************************************************* * Need to pack the 2 byte of signed integer into 1 byte *******************************************************/ // I am just adding 32768 to convert from Signed Short to UnSigned Short // And squre root to convert current 0-65536 to 0-255 value for integer. int red = (int)Math.sqrt((double) redTempMatrix[x][y] +32768 ) ; int green = (int)Math.sqrt((double) greenTempMatrix[x][y]+32768 ) ; int blue = (int)Math.sqrt((double) blueTempMatrix[x][y]+32768 ) ; //Then pack into one RGB integer type pixel data[i++] = (red<<16)|(green<<8)|(blue); } } image = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB); image.setRGB(0,0,width, height,data,0,width); } public void paint(Graphics g) { g.drawImage(image,0,0,this); } Thanks in advance.. Kevin
=========================================================================== To unsubscribe, send email to [EMAIL PROTECTED] and include in the body of the message "signoff JAVA2D-INTEREST". For general help, send email to [EMAIL PROTECTED] and include in the body of the message "help".