GetPixel/SetPixel を使用して、以下を使用して、赤と紫を強調する画像フィルターを強化しました。
for (int y = 0; y < bmpMain.Height; y++)
for (int x = 0; x < bmpMain.Width; x++)
{
bmpMain.GetPixel(x, y);
Color c = bmpMain.GetPixel(x, y);
int myRed = c.R, myGreen = c.G, myBlue = c.B;
myGreen -= 128;
if (myGreen < 0) myGreen = 0;
bmpMain.SetPixel(x, y, Color.FromArgb(255, myRed, myGreen, myBlue));
}
LockBits を使用して、次のものに置き換えました。
for (int counter = 1; counter < rgbValues.Length; counter += 3)
{
rgbValues[counter] -= 128;
if (rgbValues[counter] < 0) rgbValues[counter] = 0;
}
ただし、緑のピクセル値が 128 減算される代わりに、128 が緑の値に加算されます。
私がこれを行う場合:
for (int counter = 1; counter < rgbValues.Length; counter += 3)
{
rgbValues[counter] += 128;
if (rgbValues[counter] < 0) rgbValues[counter] = 0;
}
緑の値にも 128 が加算されます。結果の画像は、128 を引いた画像と同じです。
では、LockBits 内で適切に機能する単純な数学を取得するにはどうすればよいでしょうか?