そのため、画像をピクセル化するために使用されるこのプログラムにはいくつかの問題があります。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;
}
}
}