イメージ内にテキストを隠すことができます。しかし、私のイメージからテキストを抽出しようとすると、私は常に最初の文字だけを取得することができます。どこが間違っているのか分かりません。ステガノグラフィー抽出の問題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に同じです。私が何を試しても、私はまだ埋め込まれたテキストの最初の文字を取得しています。私は各操作を印刷してコードをチェックしようとしましたが、すべての問題は発生せず、埋め込み操作が期待どおりに機能するはずです。
デバッガを使用し、実行時にすべての変数がいつでも期待値を持つことを確認します。 – zerkms
@zerkmsデバッグの提案をありがとう! R G Bの変数を印刷しようとしましたが、私のバージョンは間違いなく期待どおりに機能していません。間違いなく私の埋め込み部分に間違っています。 –