我想用"透明白色"替换位图的矩形区域中的所有像素 - 即,a = 0,b = 255,r = 255,g = 255.
FillRectangle不这样做 - 给定透明画笔,现有像素不变.
我是否需要为矩形中的每个像素单独使用SetPixel?
Han*_*ant 13
你必须设置Graphics.CompositingMode属性.例如:
protected override void OnPaint(PaintEventArgs e) {
var img = Properties.Resources.Chrysanthemum;
e.Graphics.DrawImage(img, 0, 0);
e.Graphics.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceCopy;
using (var br = new SolidBrush(Color.FromArgb(0, 255, 255, 255))) {
e.Graphics.FillRectangle(br, new Rectangle(50, 50, 100, 100));
}
}
Run Code Online (Sandbox Code Playgroud)
您使用的实际颜色无关紧要,您将获得一个alpha为0的黑色矩形.
我相信您需要使用 SetPixel (或直接设置颜色值的等效方法)使像素成为“透明白色”。
您可以使用该Graphics.Clear方法设置颜色或像素,但不能使用它将它们设置为透明和颜色。我试过这个来设置位图的一部分中的像素:
using (Graphics g = Graphics.FromImage(theBitmap)) {
g.Clip = new Region(new Rectangle(10, 10, 80, 80));
g.Clear(Color.FromArgb(0, Color.White));
}
Run Code Online (Sandbox Code Playgroud)
该区域中的像素最终为“透明黑色”:0,0,0,0。即使在清除之前绘制一个纯白色矩形也无济于事。当一种颜色的 alpha 为零时,其他颜色分量也为零。
使用像 1 这样的几乎透明的 alpha 效果很好,像素最终会变成“几乎透明的白色”:1,255,255,255。