J'ai un probleme lors de lire les pixels car quand j'essaie de lire les pixels d'une image puis j'essaie de l'affiche de nouveau mais en utilisant le pixel j'aurai pas la meme chose mais un truc proche..
Voila mon code si quelqu'un peut m'aider.
SourceImage img = new SourceImage(list);
BufferedImage iBuff = img.getBufferedImage();
int val;
int signBit = 0;
int signMask = 0;
int valMask = 0;
int bitpix = Attribute.getSingleIntegerValueOrDefault(list,TagFromName.BitsStored,16);
boolean signed = img.isSigned();
if(signed){
if(img.getBufferedImage().getSampleModel().getDataType()== java.awt.image.DataBuffer.TYPE_BYTE){
signBit = 0x0080;
signMask = 0xffffff80;
}else{
signBit = 0x8000;
signMask = 0xffff8000;
}
}else{
valMask = 0;
int stored = bitpix; // bits stored
while (stored-- > 0) {
valMask = (valMask << 1) | 1;
}
}
width = iBuff.getWidth();
height = iBuff.getHeight();
depth = sliceMap.size();
data = new int[height][width][depth];
double slope = Attribute.getSingleDoubleValueOrDefault(list, TagFromName.RescaleSlope,1.0);
double intercept = Attribute.getSingleDoubleValueOrDefault(list, TagFromName.RescaleIntercept,-1024.0);
for(int k= 0; k < depth; k++){
file = new File((String) sliceMap.get(k*1.0));
list.read(new DicomInputStream(file));
img = new SourceImage(list);
signed = img.isSigned();
iBuff = img.getBufferedImage();
for(int i=0; i<height; i++){
for(int j=0; j<width; j++){
val = iBuff.getSampleModel().getSample(j, i, 0, iBuff.getRaster().getDataBuffer());
val = (signed ? val: (val & valMask));
if ((signed && ((val & signBit) != 0)))
val |= signMask;
val = (int)Math.round((slope * val)+intercept);
data[i][j][k] = val;
}
}
}
Partager