我一直有成噸的麻煩讓我的算法成功讀取PPM圖像... 它與一些圖像完美的作品,但與其他人失敗,導致半灰色(RGB 205,205 ,205)圖像。閱讀PPM圖像問題
我已經試過了我可以找到並研究了幾個小時的所有東西。我一直堅持一個星期了...
我希望你們能幫忙。
Image* pnm_read(char* filePath)
{
FILE* file;
char token[20];
int imageWidth, imageHeight, maximumColorValue;
Image* image;
/* Abre arquivo PNM. */
file = fopen(filePath, "r");
if (file == NULL)
{
fprintf(stderr, "Não foi possível localizar o arquivo de imagem %s.\n", filePath);
return 0;
}
/* Lê Magic Number do cabecalho e vê se é P6*/
pnm_get_token(file, token, sizeof token);
if (strcmp(token, "P6"))
{
fprintf(stderr, "%s não é um arquivo PPM válido.\n", filePath);
fclose(file);
return 0;
}
//Lê widht, height e valor máximo rgb
if (sscanf(pnm_get_token(file, token, sizeof token), "%d", &imageWidth) != 1 ||
sscanf(pnm_get_token(file, token, sizeof token), "%d", &imageHeight) != 1 ||
sscanf(pnm_get_token(file, token, sizeof token), "%d", &maximumColorValue) != 1)
{
fprintf(stderr, "%s não é um arquivo PNM válido.\n", filePath);
fclose(file);
return 0;
}
//Se não for RGB com componentes de 8 bits (0-255) dá erro
if (maximumColorValue != 255)
{
fprintf(stderr, "%s does not have 8-bit components: maximumColorValue=%d\n", filePath, maximumColorValue);
fclose(file);
return 0;
}
image = new Image(imageWidth, imageHeight);
unsigned char* pixelComponents = new unsigned char[imageWidth * imageHeight * 3];
fread(pixelComponents, sizeof(unsigned char), imageWidth * imageHeight * 3, file);
fclose(file);
int r, g, b, pixel;
for(int i = 3; i <= imageWidth * imageHeight * 3; i += 3)
{
r = pixelComponents[i-3] & 0xff;
g = pixelComponents[i-2] & 0xff;
b = pixelComponents[i-1] & 0xff;
/*fread(&r, sizeof(char), sizeof(char), file);
fread(&g, sizeof(char), sizeof(char), file);
fread(&b, sizeof(char), sizeof(char), file);
r = r & 0xff;
g = g & 0xff;
b = b & 0xff;*/
pixel = (255 << 24) | (r << 16) | (g << 8) | b;
// Atribuindo os pixels e virando imagem de cabeca para baixo
image->pixels[ (imageWidth * imageHeight) - (i/3) - 1] = pixel;
}
printf("Lido arquivo PNM (%s): %dx%d pixels.\n", filePath, image->width, image->height);
return image;
}
你的代碼失敗了哪種圖像? – 2013-04-26 00:33:44
隨機,下載的PPM圖像。但它工作(或工作,在我改變它一千次以使它工作100%之前)至少有一個例子是我在這裏下載的。 它工作(或工作):https://dl.dropboxusercontent.com/u/11352921/exempla1b.ppm 它從來沒有與: https://dl.dropboxusercontent.com/u/11352921/exempla2b.ppm – user1422133 2013-04-26 00:36:21
您可以發佈打印屏幕和/或錯誤消息嗎?這將有很大的幫助... – 2013-04-26 02:33:56