Revision 6288 org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.fmap.dal.file.jimi/src/main/java/org/gvsig/fmap/dal/file/jimi/MemoryImage.java
MemoryImage.java | ||
---|---|---|
23 | 23 |
package org.gvsig.fmap.dal.file.jimi; |
24 | 24 |
|
25 | 25 |
import java.awt.image.ColorModel; |
26 |
import java.awt.image.ImageConsumer; |
|
27 |
import java.util.Hashtable; |
|
26 |
import java.awt.image.ComponentColorModel; |
|
27 |
import java.awt.image.IndexColorModel; |
|
28 |
import java.nio.ByteBuffer; |
|
28 | 29 |
|
30 |
import org.gvsig.raster.lib.buffer.api.BufferLocator; |
|
29 | 31 |
import org.gvsig.raster.lib.buffer.api.BufferManager; |
30 | 32 |
|
31 | 33 |
import com.sun.jimi.core.ImageAccessException; |
... | ... | |
51 | 53 |
this.jimiRasterImage=jimiRasterImage; |
52 | 54 |
rows=jimiRasterImage.getHeight(); |
53 | 55 |
columns=jimiRasterImage.getWidth(); |
54 |
bands=3; |
|
55 |
if ( jimiRasterImage.getColorModel().hasAlpha() ){ |
|
56 |
bands=4; |
|
57 |
} |
|
58 |
buffer = new byte[bands][columns*rows]; |
|
59 | 56 |
|
60 |
for( int band=0; band<bands; band++) { |
|
61 |
switch (band) { |
|
62 |
case 0: |
|
63 |
jimiRasterImage.getChannelRectangle(JimiRasterImage.CHANNEL_RED, 0, 0, columns, rows, buffer[band], 0, columns); |
|
64 |
break; |
|
65 |
case 1: |
|
66 |
jimiRasterImage.getChannelRectangle(JimiRasterImage.CHANNEL_GREEN, 0, 0, columns, rows, buffer[band], 0, columns); |
|
67 |
break; |
|
68 |
case 2: |
|
69 |
jimiRasterImage.getChannelRectangle(JimiRasterImage.CHANNEL_BLUE, 0, 0, columns, rows, buffer[band], 0, columns); |
|
70 |
break; |
|
71 |
case 3: |
|
72 |
jimiRasterImage.getChannelRectangle(JimiRasterImage.CHANNEL_ALPHA, 0, 0, columns, rows, buffer[band], 0, columns); |
|
73 |
break; |
|
74 |
default: |
|
75 |
break; |
|
57 |
ColorModel colorModel = jimiRasterImage.getColorModel(); |
|
58 |
|
|
59 |
if (colorModel instanceof ComponentColorModel){ |
|
60 |
if( jimiRasterImage instanceof IntRasterImage ) { |
|
61 |
dataType = BufferManager.TYPE_INT; |
|
62 |
} else if( jimiRasterImage instanceof ByteRasterImage ) { |
|
63 |
dataType = BufferManager.TYPE_BYTE; |
|
64 |
} else { |
|
65 |
dataType = BufferManager.TYPE_INT; |
|
76 | 66 |
} |
67 |
|
|
68 |
bands=3; |
|
69 |
if ( jimiRasterImage.getColorModel().hasAlpha() ){ |
|
70 |
bands=4; |
|
71 |
} |
|
72 |
buffer = new byte[bands][columns*rows]; |
|
73 |
|
|
74 |
for( int band=0; band<bands; band++) { |
|
75 |
switch (band) { |
|
76 |
case 0: |
|
77 |
jimiRasterImage.getChannelRectangle(JimiRasterImage.CHANNEL_RED, 0, 0, columns, rows, buffer[band], 0, columns); |
|
78 |
break; |
|
79 |
case 1: |
|
80 |
jimiRasterImage.getChannelRectangle(JimiRasterImage.CHANNEL_GREEN, 0, 0, columns, rows, buffer[band], 0, columns); |
|
81 |
break; |
|
82 |
case 2: |
|
83 |
jimiRasterImage.getChannelRectangle(JimiRasterImage.CHANNEL_BLUE, 0, 0, columns, rows, buffer[band], 0, columns); |
|
84 |
break; |
|
85 |
case 3: |
|
86 |
jimiRasterImage.getChannelRectangle(JimiRasterImage.CHANNEL_ALPHA, 0, 0, columns, rows, buffer[band], 0, columns); |
|
87 |
break; |
|
88 |
default: |
|
89 |
break; |
|
90 |
} |
|
91 |
} |
|
92 |
}else if (colorModel instanceof IndexColorModel){ |
|
93 |
bands=1; |
|
94 |
IndexColorModel indexColorModel = (IndexColorModel)colorModel; |
|
95 |
BufferManager bufferManager = BufferLocator.getBufferManager(); |
|
96 |
int dataTypeSize = bufferManager.getDataTypeSize(dataType); |
|
97 |
buffer = new byte[bands][columns*rows* dataTypeSize]; |
|
98 |
|
|
99 |
if( jimiRasterImage instanceof ByteRasterImage ) { |
|
100 |
dataType = BufferManager.TYPE_BYTE; |
|
101 |
ByteRasterImage byteRasterImage = ( ByteRasterImage )jimiRasterImage; |
|
102 |
byteRasterImage.getRectangle(0, 0, columns, rows, buffer[0], 0, columns); |
|
103 |
} else { |
|
104 |
dataType = BufferManager.TYPE_INT; |
|
105 |
IntRasterImage intRasterImage = ( IntRasterImage )jimiRasterImage; |
|
106 |
int[] intAuxArray=new int[columns*rows]; |
|
107 |
intRasterImage.getRectangle(0, 0, columns, rows, intAuxArray, 0, columns); |
|
108 |
|
|
109 |
ByteBuffer byteBuffer=ByteBuffer.wrap(buffer[0]); |
|
110 |
for(int i=0;i<=intAuxArray.length;i=i){ |
|
111 |
byteBuffer.putInt(intAuxArray[i]); |
|
112 |
} |
|
113 |
} |
|
114 |
|
|
77 | 115 |
} |
78 |
if( jimiRasterImage instanceof IntRasterImage ) { |
|
79 |
dataType = BufferManager.TYPE_INT; |
|
80 |
} else if( jimiRasterImage instanceof ByteRasterImage ) { |
|
81 |
dataType = BufferManager.TYPE_BYTE; |
|
82 |
} else { |
|
83 |
dataType = BufferManager.TYPE_INT; |
|
84 |
} |
|
116 |
|
|
117 |
|
|
118 |
|
|
119 |
|
|
85 | 120 |
} |
86 | 121 |
|
87 | 122 |
public byte getValue(int row, int column, int band) { |
Also available in: Unified diff