2010-03-14 47 views
2

任何人都可以告訴我,如果你知道是WM 6的位圖和隱寫問題嗎?Bitmap.Save問題

我正在開發一個項目,我必須在位圖中隱藏數字簽名。該算法工作完美,直到我有內存中的圖像位圖包含修改後的字節。 但我保存圖像(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"); 
      } 
     } 

}

+2

張貼一些代碼 - 你確定你已經更新了原始圖像並保存了該圖像嗎?或者你是否在創建一個新的圖像並最終保存原始圖像? – Oded 2010-03-14 21:13:10

+4

但是,更改字節的代碼在哪裏?我敢打賭,你不是在保存你認爲你正在保存的東西。 – ctacke 2010-03-14 22:59:07

+0

我確定我正在保存我需要保存的東西....如果你在Save meth code中查看,我會刪除以查看圖像的字節並且它是正確的數據。 我只是修改LSB。 如果我錯了,請糾正我的錯誤:但如果bmp根本沒有壓縮比任何修改應保持正確? – user284026 2010-03-15 05:04:05

回答

0

您在留言中提到,你只修改LSB。如果有這樣的事情,我假設你的意思是最不重要的字節(並且不是最不重要的)。

.Net中的標準Bitmap是每像素32位,R,G和B分量各爲1個字節,alpha通道爲1個字節,通常將其解釋爲設備中的透明度支持透明度。

您可能只修改Alpha通道值,並且由於Compact Framework圖片框不支持透明度(我認爲),因此Bitmap看起來與原來完全相同。

嘗試修改一些不同的字節,你應該看到一個區別。

0

首先,「最低有效位」實際上是正確的。最低有效位是每個R,G,B和A通道中的最低有效位,每個通道在32位位圖中包含一個字節。其次,您發佈了「保存」和「打開」代碼 - 您可以發佈實際更改位圖數據的代碼嗎?如果您沒有修改pictureBox對象中的位,那麼您確實只是保存原始圖像,因爲這是open方法放置數據的位置。