2017-06-17 3 views
0

イメージ内にテキストを隠すことができます。しかし、私のイメージからテキストを抽出しようとすると、私は常に最初の文字だけを取得することができます。どこが間違っているのか分かりません。ステガノグラフィー抽出の問題C#

マイ埋め込みオペレーションコード:私は例の正確な抽出符号を用いる抽出のよう

public static Bitmap embedMessage(string hiddenText, Bitmap oriImage) 
     { 
      Color currentPixel; 
      int[] colorRGB = new int[3]; 
      List<int> messageValue = new List<int>(); 
      messageValue = ConvertMessage(messageValue, hiddenText); 
      int messageIndex = messageValue.Count; 
      int binaryCount = 0; 
      int zeroAdded = 0; 


      for(int row = 0; row < oriImage.Height; row++) 
      { 
       for(int col = 0; col < oriImage.Width; col++) 
       { 
        currentPixel = oriImage.GetPixel(col, row); 

        colorRGB[0] = ConvertEven(currentPixel.R); 
        colorRGB[1] = ConvertEven(currentPixel.G); 
        colorRGB[2] = ConvertEven(currentPixel.B); 

        for(int rgbIndex = 0; rgbIndex < colorRGB.Length; rgbIndex++) 
        { 
         if(messageIndex > 0) 
         { 
          colorRGB[rgbIndex] += messageValue[messageValue.Count - messageIndex] % 2; 
          messageValue[messageValue.Count - messageIndex] /= 2; 
         } 
        } 

        if (messageIndex == 0 && zeroAdded < 8) 
        { 
         oriImage.SetPixel(col, row, Color.FromArgb(colorRGB[0], colorRGB[1], colorRGB[2])); 
         zeroAdded++; 
         Console.WriteLine("Adding zero number: " + zeroAdded); 
        } 
        else 
        { 
         Console.WriteLine("Set Pixel"); 
         oriImage.SetPixel(col, row, Color.FromArgb(colorRGB[0], colorRGB[1], colorRGB[2])); 
        } 

        if (zeroAdded == 8) 
        { 
         Console.WriteLine("Final Pixel Add"); 
         oriImage.SetPixel(col, row, Color.FromArgb(colorRGB[0], colorRGB[1], colorRGB[2])); 
         return oriImage; 
        } 

        binaryCount++; 
        if (binaryCount % 8 == 0) { messageIndex--; Console.WriteLine("Message Index deducted"); } 

       } 
      } 
      return oriImage; 
     } 

マイ埋め込み実装このexampleに同じです。私が何を試しても、私はまだ埋め込まれたテキストの最初の文字を取得しています。私は各操作を印刷してコードをチェックしようとしましたが、すべての問題は発生せず、埋め込み操作が期待どおりに機能するはずです。

+2

デバッガを使用し、実行時にすべての変数がいつでも期待値を持つことを確認します。 – zerkms

+0

@zerkmsデバッグの提案をありがとう! R G Bの変数を印刷しようとしましたが、私のバージョンは間違いなく期待どおりに機能していません。間違いなく私の埋め込み部分に間違っています。 –

答えて

0

私の問題が見つかりました。私の埋め込み方法のすべては、R G B forループ内になければなりません。

+0

それは、遅いと知られている '.SetPixel'メソッドを使っているのが分かります。(https://stackoverflow.com/questions/7768711/setpixel-is-too-slow-is-there -a-way-to-draw-to-bitmap)私は実際にGitHubイメージを共有するために、圧縮されたファイルをイメージの中に保存するために、似たようなプログラムを書いていました。 https://github.com/ckpearson/Pack/blob/1.1/Pak/Packer.cs#L139 < - この部分は、データをピクセル単位で高速に書き込む方法を示しています。 – Clint