1

我想在不丢失颜色的情况下在位图上应用浮雕和素描效果。我已经应用了颜色效果,但还没有使用浮雕的运气。

任何机构有解决方案吗?请帮忙

4

3 回答 3

0

将其视为两个操作。首先,生成灰色浮雕图像(你说你已经实现了)然后制作彩色浮雕图像,你在原始图像和浮雕图像之间执行混合操作。对于使用何种操作形式,没有唯一正确的选择。这取决于您希望达到的效果。

如果您假设您有一个彩色图像(R,G,B)和一个灰色浮雕图像(E),每个组件都是一个字节。这为您(对于每个像素)提供了 0..255 范围内的 4 个值;

由于您可能希望浮雕的黑暗区域显示更暗,而明亮区域显示更亮,因此具有居中的灰度级很有用。

w=(E/128)-1; // convert 0..255 range to -1..1

现在 w 为负值的地方应该变得更暗,而 w 为正的地方 w 应该变得更亮。

outputR = R + (R*w);
outputG = G + (G*w);
outputB = B + (B*w);

这将为您提供黑色,其中 w 为 - 1。当 w 为 1 时,亮度加倍(R*2,G*2,B*2)。这将产生彩色浮雕效果。不要忘记将结果限制为 0..255。如果它的上限更高。如果 (x>255) x=255;

那应该可以很好地保留颜色,但可能不完全是您所追求的。如果您希望浮雕图像中的白色不仅仅是翻倍,那么您可以尝试不同的配方。

outputR = R * (10**w);   // w==0 has no effect
outputG = G * (10**w);   // w==1 is 10 times brighter
outputB = B * (10**w);   // w==-1 is 0.1 brightness

还有很多很多的可能性。您可以将 RGB 转换为YUV,然后将浮雕更改直接应用于 Y 组件。然后转换回RGB。

正确的选择更多的是口味问题,而不是最佳正确的配方。

于 2013-02-25T00:53:20.933 回答
0

完成灰色浮雕后,您可以根据浮雕的结果设置图像像素的 alpha 值。

于 2013-02-24T10:39:29.773 回答
0

您可以在图像上应用高通滤波器。这意味着将一个像素的值替换为该像素与下一个像素之间的绝对差。

像这样的东西:

Bitmap img = new Bitmap(100, 100); //your image
        Bitmap embossed = new Bitmap(img); //create a clone
        for (int i = 0; i < img.Width; i++)
        {
            for (int j = 0; j < img.Height; j++)
            {
                Color c = img.GetPixel(i, j);
                Color newColor;
                if ((i == img.Width - 1))
                {
                    newColor = Color.FromArgb(0, 0, 0);
                }
                else
                {
                    Color next = img.GetPixel(x + 1, y);

                    newColor = Color.FromArgb(
                        Math.Abs((byte)((int)c.R - (int) next.R)),
                        Math.Abs((byte)((int)c.G - (int) next.G)),
                        Math.Abs((byte)((int)c.B - (int) next.B)));

                }
                embossed.SetPixel(i, j, newColor);
            }
        }
于 2013-02-18T12:36:18.960 回答