簡體   English   中英

在C中訪問數組的變量元素

[英]access variable element of array in C

我是編程新手,所以這可能有一個簡單的解決方案。 我正在嘗試做的繼承人。

我的程序加載一個.bmp圖像,然后獲取其寬度和高度以找出圖像具有多少像素。 然后,它使用calloc()為每個像素的RGB值創建三個數組,分別是RED,BLUE和GREEN。 我使用了while()循環來獲取第一個像素,並將RGB值放入其各自數組的第一個元素中。 然后它繼續前進,並對第二個像素(第三,第四個像素)執行相同的操作...這就是我的問題所在,它似乎不想將值放在數組中。 我是這樣做的

while(temp=fgetc(fp) != NULL)
{
BLUE[current_pixel]=temp;

temp=fgetc(fp);
GREEN[current_pixel]=temp;

temp=fgetc(fp);
RED[current_pixel]=temp;

current_pixel++;
}

current_pixel是一個變量,可以跟蹤Im現在正在看的像素。

所以我想我真正想知道的是為什么我不能做BLUE [current_pixel] = temp; 編譯時我沒有收到任何錯誤,我使用了printf()語句檢查問題出在哪里。

我已經嘗試過BLUE [1] = temp,它可以正常工作,但是那對我的程序沒有好處,因為我不能繼續到下一個像素來保存值。

預先感謝您的任何幫助!

編輯:我仍然無法使其正常工作,所以我只是要在這里發布整個程序。

#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE*fp;
int current_pixel=0;
int temp=0;
int paddingremoved=0;
int cycle=0;
int *RED;
int *BLUE;
int *GREEN;
int imgstrt=0;
int width=0;
int height=0;
int padding=0;

fp=fopen("C:\\Users\\Jason\\Documents\\test.bmp","rb");

if(fp==NULL)
{
printf("Error: File could not be opened");
getchar();
return(0);
}


fseek(fp,10,SEEK_SET);
fread(&imgstrt,1,1,fp);
printf("Image Starts At:%d\n",imgstrt);

fseek(fp,18,SEEK_SET);
fread(&width,4,1,fp);
printf("Image Width:%d\n",width);

fseek(fp,22,SEEK_SET);
fread(&height,4,1,fp);  
printf("Image Height:%d\n",height);

padding=(4 -(width*3)%4)%4;
printf("Padding:%d\n",padding);
getchar();

RED = (int*)calloc(height*width+1,sizeof(int));
GREEN = (int*)calloc(height*width+1,sizeof(int));
BLUE = (int*)calloc(height*width+1,sizeof(int));

if(RED == NULL)
{printf("Red Allocation Faliure\n");}
else{printf("Red Allocation Successful\n");}

if(GREEN == NULL)
{printf(" Green Allocation Faliure\n");}
else{printf("Green Allocation Successful\n");}

if(BLUE == NULL)
{printf("Blue Allocation Faliure\n");}
else{printf("Blue Allocation Successful\n");}

fseek(fp,54,SEEK_SET);
/*---------------------Main Loop--------------------------------*/
while((temp = fgetc(fp)) != EOF)
{
    BLUE[current_pixel]=temp;
    temp=fgetc(fp);
    GREEN[current_pixel]=temp;
    temp=fgetc(fp);
    RED[current_pixel]=temp;
    cycle++;
    current_pixel++;

    printf("[%d,%d,%d::%d] ",RED[current_pixel],GREEN[current_pixel],BLUE[current_pixel],current_pixel);
/*------------------------------------------------------------------*/

    /*---------------------Padding Remover-----------------------*/
    if(cycle==width)
    {printf("\n");
    while (paddingremoved!=padding)
    {fgetc(fp); 
                paddingremoved++;}
    cycle=0;
    paddingremoved=0;}
    /*-----------------------------------------------------------*/
}

getchar();
free(RED);
free(BLUE);
free(GREEN);
return(0);
}

由於C運算符的優越性,您的while條件讀取為:

temp=(fgetc(fp) != NULL)

並不是

(temp=fgetc(fp)) != NULL

使用括號。 同樣, fgetc在錯誤/完成時返回EOF ,而不是NULL

由於運算符的優先級,您的代碼總是將每個BLUE像素設置為1。 while()循環條件將fgetc(fp)的結果與NULL進行比較,然后將temp設置為該比較的結果(0或1)。 因此,每個BLUE像素將設置為1。

嘗試以下方法:

while((temp = fgetc(fp)) != EOF)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM