4

そのため、画像をピクセル化するために使用されるこのプログラムにはいくつかの問題があります。1 つの問題は、「変数 'pixArray' の周りのスタックが壊れています」というメッセージが表示され、ブレーク後に [続行] をクリックすると、タイトルにエラーが表示されることです。

Pastebin を使用してもよいかどうかはわかりませんが、「短い」投稿のために使用します。

コード

使用されている画像

また、通り抜けると、すべてのピクセル化された正方形が、正方形の左側と上部で 1 ピクセル短すぎます。outFile への書き込み時に元のデータを使用しているだけです。なぜこれが起こっているのかを理解しようとすることができれば、ボーナスポイントが得られます.

最後に、プログラムを実行した後、画像の一番右側の四角形でわかるように、平均が正しく平均化されていないようです。

これらの問題のいずれかの助けをいただければ幸いです。前もって感謝します!

編集:コードを並べ替え、使用するセクションをpixArrayコメントアウトし、コメントアウトすると問題を修正するセクションは関数の下部にあり、getAveragesForRGB

start = 0;//reset start number
for(int row = 0; row < squareSize; row++) {
    if(row != 0)
        start = ((square * MAXROWS) / (MAXCOLS / squareSize)) + 1;
    stop = (((square + 1) * MAXROWS) / (MAXCOLS / squareSize));
    for (int col = start; col < stop; col++) {
        //write each average into each piece of the array
        pixArray[row][col].red = redAvg;
        pixArray[row][col].green = greenAvg;
        pixArray[row][col].blue = blueAvg;
    }
}

編集 2:すべてがスムーズに実行されるようになりました。何らかの理由で誰かがこの正確な問題に遭遇した場合に備えて、ここgetAveragesForRGBにすべての問題があった新しい場所があります.

void getAveragesForRGB(Pixel pixArray[][MAXCOLS], int squareSize, int square, int numSquaresPerStripe) {

    //initialize variables needed for function
    int start, stop;
    int redAvg, greenAvg, blueAvg;

    //reset averages for current square's usage
    redAvg = 0;
    greenAvg = 0;
    blueAvg = 0;

    start = 0; //reset start number
    for (int row=0; row < squareSize; row++) {
        if (row != 0)
            start = ((square * MAXROWS) / (MAXCOLS / squareSize)) - 1;  //starting point for loop over the columns
        stop = start + squareSize;//stopping point for   ^^^
        for (int col = start; col < stop - 1; col++) {
            //add each rgb value to the sum to be divided later
            redAvg += pixArray[row][col].red;
            greenAvg += pixArray[row][col].green;
            blueAvg += pixArray[row][col].blue;
        }
    }

    //divide by number of pixels in square for average
    redAvg /= (squareSize * squareSize);
    greenAvg /= (squareSize * squareSize);
    blueAvg /= (squareSize * squareSize);


    start = 0;//reset start number
    for (int row = 0; row < squareSize; row++) {
        if (row != 0)
            start = ((square * MAXROWS) / (MAXCOLS / squareSize)) - 1;  //starting point for loop over the columns
        stop = (((square + 1) * MAXROWS) / (MAXCOLS / squareSize));  //stopping point for   ^^^
        for (int col = start; col < stop - 1; col++) {
            //write each average into each piece of the array
            pixArray[row][col].red = redAvg;
            pixArray[row][col].green = greenAvg;
            pixArray[row][col].blue = blueAvg;
        }
    }
}
4

0 に答える 0