作者:陈小超Sum | 来源:互联网 | 2022-12-24 18:17
嗨,大家好,我正在大学从事基本的隐写术项目.我操纵我的位图,但某处有一个错误.我设置一个断点只是为了检查.save()方法之前的值和像素看起来很好但是当我保存它并打开新图像时,一些像素是预期的+ -1位实例.这是代码:
public static class EncryptController
{
public static void EncryptMessage(Bitmap oldImage,string imagePath, DataSteg k, string t)
{
Bitmap newImage = new Bitmap(oldImage.Width, oldImage.Height);
ImageFormat imageFormat = ImageCheck.GetFormat(oldImage);
string data = k.EncryptData();
int keyLength = data.Length;
int bitmapPos = 0;
for (int i = 0, n = oldImage.Size.Width; i 0)
{
Color newColor = ChangeMaxRate(oldImage.GetPixel(i, j));
newImage.SetPixel(i, j, newColor);
}
else
{
Color newColor = oldImage.GetPixel(i, j);
newImage.SetPixel(i, j, newColor);
}
if (bitmapPos = blue && red >= green) && red<255)
{
red++;
}
else if ((blue >= red && blue >= green) & blue <255)
{
blue++;
}
else if ((green >= blue && green >= red) && green <255)
{
green++;
}
}
else
{
red--;
}
result = Color.FromArgb(red, green, blue);
return result;
}
private static int CheckPixelVale(Color color)
{
return (color.R + color.B + color.G) % 2;
}
Richardissim..
5
我怀疑问题可能是您正在使用的文件类型.这可能是一种欺骗,但代码中的文件名是JPG,这是一种"有损"格式.图像看起来与人类相同,但可能不包含您保存的确切位.尝试使用PNG图像格式.
通过传入"字符串数据"而不是"DataSteg k",您可以更好地分离关注点.这将使它更接近成为MCVE.无需通过ref传递第一个参数.我建议这个方法的一个糟糕的设计是处理它已经给出的参数.此外,除非我错过了一些字符串t未使用.
1> Richardissim..:
我怀疑问题可能是您正在使用的文件类型.这可能是一种欺骗,但代码中的文件名是JPG,这是一种"有损"格式.图像看起来与人类相同,但可能不包含您保存的确切位.尝试使用PNG图像格式.
通过传入"字符串数据"而不是"DataSteg k",您可以更好地分离关注点.这将使它更接近成为MCVE.无需通过ref传递第一个参数.我建议这个方法的一个糟糕的设计是处理它已经给出的参数.此外,除非我错过了一些字符串t未使用.