每个像素的位置是恒定的(每个像素只有一个 x 和一个 y 坐标),因此保存每个像素的位置的要求是模糊的。
我猜您尝试做的是:将图像中的 300 个像素变为黑色,但保存以前的颜色以便恢复单个像素?
你可以试试这个:
class PixelHelper
{
public Point Coordinate;
public Color PixelColor;
}
PixelHelper[] pixelBackup = new PixelHelper[300];
Random r = new Random();
for (int i = 0; i < 300; i++)
{
int xRandom = r.Next(bmp.Width);
int yRandom = r.Next(bmp.Height);
Color c = bmp.GetPixel(xRandom, yRandom);
PixelHelper[i] = new PixelHelper() { Point = new Point(xRandom, yRandom), PixelColor = c };
}
之后,pixelBackup 数组包含 300 个对象,其中包含一个坐标和之前的颜色。
编辑:我从评论中猜想您想将 300 个随机黑色像素变为白色,然后再次将结果另存为图像?
Random r = new Random();
int n = 0;
while (n < 300)
{
int xRandom = r.Next(bmp.Width);
int yRandom = r.Next(bmp.Height);
if (bmp.GetPixel(xRandom, yRandom) == Color.Black)
{
bmp.SetPixel(xRandom, yRandom, Color.White);
n++;
}
}
bmp.Save(<filename>);
这会将图像中的 300 个不同像素从黑色变为白色。使用了while 循环,所以我可以增加n,只有当黑色像素被击中时。如果随机坐标碰到一个白色像素,则选取另一个像素。
请注意,如果图像中的总像素少于 300 个像素,此代码将永远循环。