BitmapData.Strideプロパティ
コメント欄にて情報を頂きましたので、追記しておきます。
1行のバイト数を取得するBitmapData.Strideプロパティという便利なものがあるということで、早速使ってみました。
int width = this.bitmap.Width; int height = this.bitmap.Height; int strideIn = dataRgb.Stride; int strideOut = dataGray.Stride; byte* currentData = datas24bppRgb - 1; for (int y = 0; y < height; ++y) { int widthY = y * strideOut; for (int x = 0; x < strideOut; ++x) { if (x < strideIn / 3) { *(datas8bppGray + widthY + x) = (byte)(((int)*++currentData + (int)*++currentData + (int)*++currentData) / 3); } else { ++currentData; } } }