应用隐写技术后,图像的大小增加

时间:2014-01-17 16:34:39

标签: c#

我的图像隐写代码有问题,因为它在嵌入文本后增加了图像的大小.....例如,如果我加载10 kb pic作为输入并嵌入1 kb的文本文件然后结果文件大小将是150 kb aprox ....提前感谢

这段代码出了什么问题???

public static Bitmap embedText(string text, Bitmap bmp)
{
    State s = State.hiding;

    int charIndex = 0;
    int charValue = 0;
    long colorUnitIndex = 0;

    int zeros = 0;

    int R = 0, G = 0, B = 0;

    for (int i = 0; i < bmp.Height; i++)
    {
        for (int j = 0; j < bmp.Width; j++)
        {
            Color pixel = bmp.GetPixel(j, i);

            pixel = Color.FromArgb(pixel.R - pixel.R % 2,
                pixel.G - pixel.G % 2, pixel.B - pixel.B % 2);

            R = pixel.R; G = pixel.G; B = pixel.B;

            for (int n = 0; n < 3; n++)
            {
                if (colorUnitIndex % 8 == 0)
                {
                    if (zeros == 8)
                    {
                        if ((colorUnitIndex - 1) % 3 < 2)
                        {
                            bmp.SetPixel(j, i, Color.FromArgb(R, G, B));
                        }

                        return bmp;
                    }

                    if (charIndex >= text.Length)
                    {
                        s = State.filling_with_zeros;
                    }
                    else
                    {
                        charValue = text[charIndex++];
                    }
                }

                switch (colorUnitIndex % 3)
                {
                    case 0:
                        {
                            if (s == State.hiding)
                            {
                                R += charValue % 2;

                                charValue /= 2;
                            }
                        } break;
                    case 1:
                        {
                            if (s == State.hiding)
                            {
                                G += charValue % 2;

                                charValue /= 2;
                            }
                        } break;
                    case 2:
                        {
                            if (s == State.hiding)
                            {
                                B += charValue % 2;

                                charValue /= 2;
                            }

                            bmp.SetPixel(j, i, Color.FromArgb(R, G, B));
                        } break;
                }

                colorUnitIndex++;

                if (s == State.filling_with_zeros)
                {
                    zeros++;
                }
            }
        }
    }

    return bmp;
}

1 个答案:

答案 0 :(得分:0)

无论输入类型扩展名如何,图像都会转换为RGB以进行像素处理。由于您直接更改像素,您想要的是使用无损类型保存图像,例如位图或png。位图是未压缩的,因此占用更多空间。