1

所以我有一个int **. 它包含像素值。我想要做的是改变一组像素值的值;假设值为 90,我想将其更改为它必须创建 x 像素量的黑色边缘的最大级别。过去一个小时我一直在搞乱它,似乎无法弄清楚如何更改 ** 中的实际值

这是我到目前为止所拥有的:

int pgmDrawEdge( int **pixels, int numRows, int numCols, int edgeWidth, char **header ){
    int i=0, j=0, count=0;

    int intensity=atoi(header[2]);

    while(count<edgeWidth){
        for(; i<numRows; i++){
            for(; j<numCols; j++){
                pixels[i][j]=intensity;
            }
        }
        count++;
    }

    return 0;
}

这是主函数调用: pgmDrawCircle(pixel, rows, cols, circleCenterRow, circleCenterCol, radius, header);

我认为我的想法是正确的,但就像我上面提到的那样,我似乎无法弄清楚如何让价值发生变化。

我不认为我这样做,但我需要分配内存吗?它是从主系统传入的,所以我认为我不需要,因为它已经满了......对吗?

根据要求,这里是 pgmRead:

int ** pgmRead( char **header, int *numRows, int *numCols, FILE *in  ){
    int i, j, temp, intensity;

    fgets(header[0], maxSizeHeadRow, in);
    fgets(header[1], maxSizeHeadRow, in);

    fscanf(in, "%d %d", numCols, numRows);
    fscanf(in, "%d", &intensity);
    sprintf(header[2], "%d", intensity);

    int **ptr=(int **)malloc(*numRows*sizeof(int *));
    for(i=0; i<*numRows; i++){
        ptr[i]=(int *)malloc(*numCols*sizeof(int));
    }

    for(i=0; i<*numRows; i++){
        for(j=0; j<*numCols; j++){
            fscanf(in, "%d", &temp);
            ptr[i][j]=temp; 
        }
    }

    fclose(in);
    return ptr;
}

在主函数中:

    int **pixel=NULL;
    pixel=pgmRead(header, &rows, &cols, in);

if(strcmp(argv[1],"-e")==0){
    printf("Edge Drawing\n");
    pgmDrawEdge(pixel, rows, cols, edgeWidth, header);
}
4

1 回答 1

1

正如这个测试所示,你的 pgmDrawEdge 几乎可以工作。所以问题在别处

#include <stdio.h>
#include <stdlib.h>
int pgmDrawEdge( int **pixels, int numRows, int numCols, int edgeWidth, char **header ){
    int i=0, j=0, count=0;

    int intensity=atoi(header[2]);

    while(count<edgeWidth){
        for(; i<numRows; i++){
            for(; j<numCols; j++){
                pixels[i][j]=intensity;
            }
        }
        count++;
    }

    return 0;
}

int main() {
 char *header[]={"abc","def","90"};
 int *x[2];
 int l1[]={1,2,3,4};
 int l2[]={5,6,7,8};
 x[0]=l1;
 x[1]=l2;
pgmDrawEdge(x,2,4,99,header);
printf("result is %d should be %s", x[0][0], header[2] );
    return(0) ;
}
于 2014-03-10T17:34:05.960 回答