2017-05-17 5 views
0

Je rencontre un comportement très étrange dans cpp. Je fais un traitement d'image en parallèle en utilisant le framework MPI, et j'ai besoin de convertir un tableau 2D de JSAMPLE en un tableau plat de caractères non signés. Je suis capable de faire ceci, cependant quand j'essaye d'écrire l'image de la rangée plate dans un fichier JPEG la sortie est floue, cependant si je règle la valeur de la sortie de la rangée plate au même point je l'ai lue le tableau 2d fonctionne très bien.Comment manipuler JPEG dans cpp en utilisant des caractères?

C'est très étrange pour moi. Je suis un développeur cpp assez expérimenté mais je n'ai pas beaucoup travaillé avec la bibliothèque JPEG. Je pense que cela pourrait avoir quelque chose à voir avec l'allocation de mémoire.

// create a flat array of unsigned chars from image 
char* flat_image_array = new char[span*Input.Width*Input.Components]; 
for(int j = 0; j < span; ++j) { 
    for (int k = 0; k < Input.Width * Input.Components; ++k) { 
     flat_image_array[j*k+k] = imageSegment[j][k]; 
     // if I set output here it works fine 

     //Output.Rows[j][k] =flat_image_array[j*k+k]; 
    } 
} 

for(int j = 0; j < span; ++j) { 
    for (int k = 0; k < Input.Width * Input.Components; ++k) { 
     //but if I set output here the image comes out very fuzzy 
     Output.Rows[j][k] = flat_image_array[j*k+k]; 
    } 
} 

std::stringstream file; 
file << "Data/segment_" << (i) <<".jpg"; 
if(!Output.Write(file.str().c_str())){ 
    printf("Cannot write image\n"); 
    return; 
} 

Répondre

0

Au lieu de flat_image_array[j*k+k] vous voulez flat_image_array[j*Input.Width+k]. En indexant incorrectement flat_image_array, vous laissez des trous et écrasez les valeurs précédentes.