【问题标题】:Bitmap.Save problems位图.保存问题
【发布时间】:2011-01-27 11:29:48
【问题描述】:

如果您知道 WM 6 的位图和隐写术存在问题,谁能告诉我?

我正在处理一个项目,我必须在位图中隐藏数字签名。该算法完美无缺,因为直到我将图像放在内存中,位图才包含修改后的字节。 但是在我保存图像(Bitmap.Save())并重新打开图像之后,这些字节就会丢失。当我说丢失时,我的意思是它们是拍摄照片时的原始字节。

谢谢。

这里是保存方法:

    {
        if (miSave.Enabled == false)
        {
            MessageBox.Show("Error, no image is opened. ", "Save Error");
        }
        else
        {
            SaveFileDialog sfd = new SaveFileDialog();

            sfd.Filter = "Bitmap|*.bmp|JPEG|*.jpg";

            if (sfd.ShowDialog() == DialogResult.OK)
            {

                if (sfd.FileName != "")
                {
                    Bitmap origImage = pictureBox.GetBitmap();
                    ///just a test to see that the bytes are the modified ones..and they are
                    byte[] origImageByte = ImageProcessing.ConvertBitmapToByteArray(origImage, origImage.Height * origImage.Width +54); 
                    origImage.Save(sfd.FileName, formatOfImage);
                    MessageBox.Show("Succesfully ", "Image Saved");

                }

            }
        }
    }

和打开方法

    {
        if (pictureBox.Visible == false)
        {
            try
            {
                OpenFileDialog dlg = new OpenFileDialog();

                dlg.Filter = "Bitmap|*.bmp|JPEG|*.jpg";

                if (dlg.ShowDialog() == DialogResult.OK)
                {
                    Bitmap img = new Bitmap(dlg.FileName);


                    initialSize.Width = img.Width;
                    initialSize.Height = img.Height;

                    imageOpened();//this just does does some enabling buttons nothing more

                    pictureBox.SetBitmap(img, pixelSize);
                    pictureBox.ShowImage(img);

                    trackBar.TrackBarPosition(lblMinVal, lblMaxVal, this.Size);
                }
            }
            catch
            {
                DialogResult res = MessageBox.Show("Failed loading image");
            }
        }

}

【问题讨论】:

  • 发布一些代码 - 你确定你已经更新了原始图像并正在保存它吗?还是您正在创建新图像并最终保存原始图像?
  • 但是改变字节的代码在哪里呢?我敢打赌,你没有保存你认为你正在保存的东西。
  • 我确定我正在保存我需要保存的内容....如果您在保存方法代码中查找那里,我重新检查了图像的字节并且它是正确的数据。我只是在修改 LSB。如果我错了,请纠正我:但是如果 bmp 根本没有压缩,那么任何修改都应该保持正确?
  • 您使用的是什么颜色深度?鉴于您正在从控件中保存图像,如果在 15 位颜色模式下运行(例如),可能是数据已被裁剪

标签: .net compact-framework bitmap save steganography


【解决方案1】:

您在评论中提到您只是在修改 LSB。我假设你的意思是最低有效字节(而不是最低有效),如果有这样的话。

.Net 中的标准Bitmap 是每像素 32 位,R、G 和 B 分量各占 1 个字节,alpha 通道占 1 个字节,这通常被解释为设备中的透明度支持透明度。

您可能只是在修改 alpha 通道值,并且由于 Compact Framework 图片框不支持透明度(我认为),Bitmap 看起来与最初完全相同。

尝试修改一些不同的字节,你应该会看到不同。

【讨论】:

    【解决方案2】:

    首先,“最低有效位”实际上是正确的。最低有效位是每个 R、G、B 和可能 A 通道中的最低有效位,每个通道都包含 32 位位图中的一个字节。

    其次,您发布了“保存”和“打开”代码 - 您能否发布实际更改位图数据的代码?如果您没有修改 pictureBox 对象中的位,那么您确实只是保存了原始图像,因为 open 方法将数据放在此处。

    【讨论】:

      猜你喜欢
      • 2015-12-28
      • 2010-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-28
      • 2010-12-29
      • 1970-01-01
      相关资源
      最近更新 更多