-
manipuler les pixels
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;
}
}
}
-
Juste pour dire comment je lis l'image apres.
En effet je prends un tableau bi dimesion de mon tableau initial par example data[0] puis je tansforme ce tableau en byte et j'utilise ensuite la classe ByteArrayInputStream pour afficher cette image