我想要背景是白色的,我畫的形狀是黑色。
要做到這一點,您avg
(灰度)值轉換成0/1,255。
//find white-black value
int bw = (r + g + b)/384; // or /3/128 if you prefer
//set new pixel value
bmp.SetPixel(x, y, System.Drawing.Color.FromArgb(a, bw*255, bw*255, bw*255));
它給你一個純粹的黑色和白色圖像乘:
即使我在黃色背景上畫一個棕色形狀,最後的 結果應該是黑色在白色背景上的形狀。
我建議的方法涵蓋了這個要求,但某些「threshold」(例如在Photoshop中)對於某些色調是必需的。
int threshold = 128; // [1-254]
//find avg value [0-255]
int wb = (r + g + b)/3;
//transform avg to [0-1] using threshold
wb = (wb >= threshold) ? 1 : 0;
//set new pixel value
bmp.SetPixel(x, y, System.Drawing.Color.FromArgb(a, wb*255, wb * 255, wb * 255));
如果閾值太小,您的結果將全部爲白色,或者如果閾值爲0大全黑色。在邊界情況下,您也可能會變形形狀/背景(如在圖像編輯器中)。值128將顏色空間均勻分開(如我的原始算法一樣)。
答:使用閾值70與黃色輸入棕色。 B:使用閾值60,輸入黃色的輸入爲褐色。
完整的源代碼:
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Windows.Forms;
namespace BwImgSO
{
class Program
{
static void Main(string[] args)
{
Bitmap bitmap = new Bitmap(@"C: \Users\me\Desktop\color.jpg");
Bitmap grayScaleBitmap = GrayScale(bitmap);
string outputFileName = @"C: \Users\me\Desktop\bw.jpg";
using (MemoryStream memory = new MemoryStream())
{
using (FileStream fs = new FileStream(outputFileName, FileMode.Create, FileAccess.ReadWrite))
{
grayScaleBitmap.Save(memory, ImageFormat.Jpeg);
byte[] bytes = memory.ToArray();
fs.Write(bytes, 0, bytes.Length);
}
}
}
private static Bitmap GrayScale(Bitmap bmp)
{
//get image dimension
int width = bmp.Width;
int height = bmp.Height;
int threshold = 128;
//color of pixel
System.Drawing.Color p;
//grayscale
for (int y = 0; y < height; y++)
{
for (int x = 0; x < width; x++)
{
//get pixel value
p = bmp.GetPixel(x, y);
//extract pixel component ARGB
int a = p.A;
int r = p.R;
int g = p.G;
int b = p.B;
//find average, transform to b/w value
//int bw = (r + g + b)/3/128; // or 384 if you prefer
int wb = (r + g + b)/3; // avg: [0-255]
//transform avg to [0-1] using threshold
wb = (wb >= threshold) ? 1 : 0;
//set new pixel value
bmp.SetPixel(x, y, System.Drawing.Color.FromArgb(a, bw*255, bw*255, bw*255));
}
}
return bmp;
}
}
}
這個問題是移動,幾乎不挽救目標。 – wp78de