gpt4 book ai didi

C# 位图不按原样保存

转载 作者:行者123 更新时间:2023-12-01 23:18:29 25 4
gpt4 key购买 nike

大家好,我正在大学从事一个基本的隐写术项目。我操纵了我的位图,但某个地方有一个错误。我放置一个断点只是为了检查 .save() 方法之前的值,并且像素看起来很好,但是当我保存它并打开新图像时,某些像素与预期的状态相比为 +-1 位。这是代码:

public class EncryptController
{
public void EncryptMessage(Bitmap oldImage,string imagePath, DataSteg dataSteg)
{
Bitmap newImage = new Bitmap(oldImage.Width, oldImage.Height);
ImageFormat imageFormat = ImageCheck.GetFormat(oldImage);
string data = dataSteg.EncryptData();
int keyLength = data.Length;
int bitmapPos = 0;

for (int i = 0, n = oldImage.Size.Width; i < n; i++)
{
for (int j = 0, z = oldImage.Size.Height; j < z; j++)
{ //data = "010010110110000101101100011000110110100001101111"
if ((Convert.ToInt32(data[bitmapPos].ToString()) != CheckPixelVale(newImage.GetPixel(i, j)))&&keyLength>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 < data.Length-1)
{
keyLength--;
bitmapPos++;
}
}
}

string pt = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + @"\fl\roseEnc.jpg";
oldImage.Dispose();
newImage.Save(pt, imageFormat);
}

private Color ChangeMaxRate(Color color)
{
int red = color.R;
int blue = color.B;
int green = color.G;

if (red + blue + green < 255 * 3)
{
if ((red >= 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--;
}

return Color.FromArgb(red, green, blue);
}

private int CheckPixelVale(Color color)
{
return (color.R + color.B + color.G) % 2;
}
}

最佳答案

我怀疑问题可能出在您使用的文件类型上。这可能是一个骗局,但代码中的文件名是 JPG,这是一种“有损”格式。该图像对于人类来说看起来是一样的,但可能不包含您保存的确切位。尝试使用 PNG 图像格式。

通过传入“字符串数据”而不是“DataSteg k”,您可以更好地分离关注点。这将使其更接近 MCVE。无需通过 ref 传递第一个参数。我认为这种方法处理给定参数的设计很糟糕。另外,除非我错过了一些字符串 t 未使用的内容。

关于C# 位图不按原样保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49228797/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com