gpt4 book ai didi

c# - 创建图像蒙版

转载 作者:行者123 更新时间:2023-12-02 21:56:10 26 4
gpt4 key购买 nike

用户向我的应用程序提供了一张图像,应用程序需要从中制作一个 mask :

蒙版包含原始图像中每个透明像素的红色像素。

我尝试了以下方法:

Bitmap OrgImg = Image.FromFile(FilePath);
Bitmap NewImg = new Bitmap(OrgImg.Width, OrgImg.Height);
for (int y = 0; y <= OrgImg.Height - 1; y++) {
for (int x = 0; x <= OrgImg.Width - 1; x++) {
if (OrgImg.GetPixel(x, y).A != 255) {
NewImg.SetPixel(x, y, Color.FromArgb(255 - OrgImg.GetPixel(x, y).A, 255, 0, 0));
}
}
}
OrgImg.Dispose();
PictureBox1.Image = NewImg;

我担心慢速电脑上的性能。有没有更好的方法来做到这一点?

最佳答案

如果只是偶尔使用,例如,使用 GetPixel() 是完全可以接受的。加载一张图像时。不过,如果你想做更严肃的图像处理,最好直接使用 BitmapData 。 。一个小例子:

//Load the bitmap
Bitmap image = (Bitmap)Image.FromFile("image.png");

//Get the bitmap data
var bitmapData = image.LockBits (
new Rectangle (0, 0, image.Width, image.Height),
ImageLockMode.ReadWrite,
image.PixelFormat
);

//Initialize an array for all the image data
byte[] imageBytes = new byte[bitmapData.Stride * image.Height];

//Copy the bitmap data to the local array
Marshal.Copy(bitmapData.Scan0,imageBytes,0,imageBytes.Length);

//Unlock the bitmap
image.UnlockBits(bitmapData);

//Find pixelsize
int pixelSize = Image.GetPixelFormatSize(image.PixelFormat);

// An example on how to use the pixels, lets make a copy
int x = 0;
int y = 0;
var bitmap = new Bitmap (image.Width, image.Height);

//Loop pixels
for(int i=0;i<imageBytes.Length;i+=pixelSize/8)
{
//Copy the bits into a local array
var pixelData = new byte[3];
Array.Copy(imageBytes,i,pixelData,0,3);

//Get the color of a pixel
var color = Color.FromArgb (pixelData [0], pixelData [1], pixelData [2]);

//Set the color of a pixel
bitmap.SetPixel (x,y,color);

//Map the 1D array to (x,y)
x++;
if( x >= bitmap.Width)
{
x=0;
y++;
}

}

//Save the duplicate
bitmap.Save ("image_copy.png");

关于c# - 创建图像蒙版,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17772991/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com