本系列第七篇,實作「光照效果」:以圖像中心為光源,半徑 R 範圍內像素亮度隨距離衰減,模擬聚光燈/暈光效果。
Center = (W/2, H/2),半徑 R = min(W,H)/2。dist = sqrt((x-Cx)² + (y-Cy)²)。dist < R,亮度增量 Δ = 220 * (1 - dist/R),線性衰減至邊緣為 0。Δ,限制在 [0,255]。
private void btnLight_Click(object sender, EventArgs e)
{
using (var g = pictureBox1.CreateGraphics())
{
g.Clear(Color.White);
using (var src = new Bitmap(pictureBox1.Image, pictureBox1.Width, pictureBox1.Height))
using (var img = src.Clone(new RectangleF(0, 0, src.Width, src.Height), PixelFormat.DontCare))
{
int w = img.Width, h = img.Height;
var center = new Point(w / 2, h / 2);
int R = Math.Min(w, h) / 2;
for (int x = w - 1; x >= 1; x--)
for (int y = h - 1; y >= 1; y--)
{
float dist = (float)Math.Sqrt(Math.Pow(x - center.X, 2) + Math.Pow(y - center.Y, 2));
if (dist < R)
{
Color c = img.GetPixel(x, y);
float delta = 220f * (1f - dist / R);
int r = Clamp(c.R + (int)delta);
int g_ = Clamp(c.G + (int)delta);
int b = Clamp(c.B + (int)delta);
img.SetPixel(x, y, Color.FromArgb(255, r, g_, b));
}
}
g.DrawImage(img, new Rectangle(0, 0, w, h));
}
}
}
int Clamp(int v) => v < 0 ? 0 : (v > 255 ? 255 : v);

Center,即時重繪。光照效果展示距離衰減亮度調整核心邏輯。結合高效像素存取與參數化光源模型,可構建豐富的 2D 光照渲染系統。