Ce message est assez long. Pour les courageux qui sont cales en image j'ai besoin de leur aide. Mes connaissances sont vraiment limites mais j'estime avoir quand meme a peu pres compris.
Merci pour celui qui m'aideras !
Dans mon programme int c = pixels[width*y+x]; represente chaque pixels de mon image.int count=0;
byte[] pixelBytes = new byte[width*height];
for (int y=0 ; y < height ; ++y)
{
for (int x=0 ; x < width ;++x)
{
int c = pixels[width*y+x];//bImage.getRGB(x,y);
if (samplesPerPixel == 1)
{
// Monochrome image...all three colour planes will have the same value
pixelBytes[(y*width+x)] = (byte)((c & 0xff) - 128);
}
else
{
// Colour image...need to send Red, Green and Blue separately
pixelBytes[(y*width+x)*3+0] = (byte)(((c >> 16) & 0xff) - 128);
pixelBytes[(y*width+x)*3+1] = (byte)(((c >> 8) & 0xff) - 128);
pixelBytes[(y*width+x)*3+2] = (byte)((c & 0xff) - 128 );
//System.out.println("GetImage3D_Request::Go() end for x");
//count++;
// System.out.println("GetImage3D_Request::Go() count="+count);
//}
}
}
Je peux choisir samplesPerPixel=1 pour une image monochrome. Cela veut dire que chaque pixel c est represente par seulement une couleur monochrome.
Mon programme marche parfaitement pour sampleperpixels mais malheureusement la qualite de l'image laisse a desirer.
Je voudrais pouvoire retirer les 3 couleurs rgb de chaque pixel car je sais que l'image en question definie par c=pixels[width*y+x]; a ete cree en rgb . Pour preuve voici la creation de pixels :
ce qui est important est surligne en gras. l'image en question est une image 3dfor (int y = yMin; y <= yMax; y++)
{
v1[1] = v2[1] = y;
int percent = 100 * (y - yMin) / (yMax - yMin);
for (int x = xMin; x <= xMax; x++)
{
if (cube.isInside(x, y))
{
int pos = (int)(vol.widthX*y+x);
if(pos<pixels.length)
{
v1[0] = v2[0] = x;
int alpha = 255;
int V = 0;
tr.invxyzPosf(v1);
float x1 = tr.xf;
float y1 = tr.yf;
float z1 = tr.zf;
tr.invxyzPosf(v2);
dx = (tr.xf - x1) * nd1;
dy = (tr.yf - y1) * nd1;
dz = (tr.zf - z1) * nd1;
int k = 0;
for (int n = nd; n >= 0; n--)
{
if (x1 >= 0 && x1 < width && y1 >= 0 && y1 < height && z1 >= 0 && z1 < depth)
{
int val = trilinear(z1, y1, x1);
if (val >= var.thresh)
{
int f = (val - var.thresh) + 50;
if (f > 255)
f = 255;
alpha += f;
V += f * val;
if (++k >= renderDepth)
break;
}
}
x1 += dx;
y1 += dy;
z1 += dz;
}
int val = (int) (scaleLum * V / alpha);
if (val > 255)
val = 255;
int int_hex = 0xff000000 | (val & 0x000000ff) << 16 | (val & 0x000000ff) << 8 | (val & 0x000000ff);
pixels[pos] = int_hex;
}
}
}
mais cette ligne montre bien que c'estr une image rgb :
int int_hex = 0xff000000 | (val & 0x000000ff) << 16 | (val & 0x000000ff) << 8 | (val & 0x000000ff);
Lorsque je precise a mon programme que sampleperpixel=1 ce programme marche mais avec un affichage d'image de mauvaise qualite. Si je mets
sampleperpixels=3 j'obtiens une exception handling. D'apres mes tests l'exception survient entre ces lignes (voir la premiere ligne de code en haut)
Desole pour les fautes si il y en as ! Je n'ai pas d'accents sur mon clavier .pixelBytes[(y*width+x)*3+0] = (byte)(((c >> 16) & 0xff) - 128);
pixelBytes[(y*width+x)*3+1] = (byte)(((c >> 8) & 0xff) - 128);
pixelBytes[(y*width+x)*3+2] = (byte)((c & 0xff) - 128 );
Partager