正如标题所说,我试图制作一个变暗的效果(就像在Photoshop中一样)。到目前为止,我有2个图片框,每张图片一个,然后是输出的第三个图片框。输出应该是前两个的位图,并且应用了暗化效果。看起来像这样 - http://i.imgur.com/zlpUD2D.png
if (pixelA <= pixelB) {pixelC = pixelA}
if (pixelA > pixelB) {pixelC = pixelB}
这是变暗效果的主要逻辑,但我不知道如何在我的程序中实现它。 这是我的Form1类
public void applyEffect(string Method)
{
imgData3 = new imgData(imgData1.img.GetLength(0), imgData1.img.GetLength(1));
for (int x = 0; x < imgData1.img.GetLength(0); x++)
{
for (int y = 0; y < imgData1.img.GetLength(1); y++)
{
imgData3.img[x, y] = new rgbiPixels();
switch(Method)
{
case "Darken":
{
imgData3.img[x, y].effectDarken(imgData1.img[x, y], imgData2.img[x, y]);
break;
}
}
}
}
pictureBox3.Image = imgData3.drawImage();
}
这是我的rgbiPixels类,我应该只将一个像素变暗,因为其余部分在Form1类中都要小心。
public class rgbiPixels
{
public byte R;
public byte G;
public byte B;
public byte I;
public rgbiPixels()
{
R = 0;
G = 0;
B = 0;
I = 0;
}
public rgbiPixels(byte r, byte g, byte b)
{
R = r;
G = g;
B = b;
I = (byte)Math.Round(0.0722f * b + 0.7152f * g + 0.2126f * r);
}
//--------------------------------------------------
public void effectDarken(rgbiPixels a, rgbiPixels b)
{
R = Convert.ToByte(a.R + b.R);
G = Convert.ToByte(a.G + b.G);
B = Convert.ToByte(a.B + b.B);
}
//--------------------------------------------------
}
所以我的问题是如何将我的逻辑实现到rgbiPixels类中?
答案 0 :(得分:0)
根据您的伪代码规范,effectDarken
应该是一个函数,应该比较像素强度,并且可以像这样实现:
public rgbiPixels effectDarken(rgbiPixels a, rgbiPixels b)
{
return (a.I <= b.I) ? a : b;
}
如果你保留void方法,结果颜色将没有I
的正确值,因为它只在构造函数中计算(你可能不在乎,只是作为预防措施)。