문제

쉽게 알 수 있지만이 솔루션을 찾을 수 없었습니다.

현재 비트 맵의 모든 비트 맵을 사용한 후에 비트 맵의 다음 행을 가져와야합니다. 이미지 내부 텍스트 파일을 숨기고있는 Starography 프로그램을 만들고 있습니다. 각 문자는 8 개의 다른 바이트에 저장됩니다. 그래서 첫 번째 열에 텍스트를 숨기고 다음 열 등을 가져와야합니다. 나는 이것에 매우 약하다.나는 이것을 첫 번째 행에서 시도했지만 텍스트 길이에 따라 다른 행을 모르겠다.

private void HIDE(){
                if (textBox1.Text != "")
                {
                    Bitmap bitmap = (Bitmap)pictureBox1.Image;
                    int next,width=0;
                    for (int t = 0; t < textBox1.Text.Length; t++)
                    {
                        next = 8 * t;
                            for (int i = 0; i < 8; i++)
                            {
                                if (i * t <= bitmap.Width/8)
                                {
                                     //hiding code for 1st row
                                }
                                else 
                                {
                                    //hiding code for 2nd row
                                }
                            }

                    }
                }}
.

도움이 되었습니까?

해결책

어때?

private void HIDE(){
              if (textBox1.Text != "")
              {
                  Bitmap bitmap = (Bitmap)pictureBox1.Image;
                  // Starting point for embedding secret
                  int x0=0, y0=0;
                  // Error checking, to see if text can fit in image
                  int imageSize = bitmap.Width * bitmap.Height;
                  if (imageSize - x0 * bitmap.Width - y0 < 8 * textBox1.Text.Length)
                  {
                      // Deal with error
                  }
                  // Ready to embed
                  for (int t = 0; t < textBox1.Text.Length; t++)
                  {
                      for (int i = 0; i < 8; i++)
                      {
                          // Check if y0 has exceeded image width
                          // so to wrap around to the new row
                          if (y0 == bitmap.Width)
                          {
                              x0++;
                              y0=0;
                          }
                          // x0, y0 are now the current pixel coordinates
                          //
                          // EMBED MESSAGE HERE
                          //
                          y0++;  // Move to the next pixel for the next bit
                      }
                  }
              }}
.

예를 들어 폭이 10 인 경우 텍스트의 처음 두 글자의 좌표가되어야합니다.

문자 1 :

(0, 0)

...

(0, 7)

문자 2 :

(0, 8)

(0, 9)

(1, 0)

...


중요 참고 : 텍스트의 길이를 숨기지 않고 디코딩 프로세스가 메시지를 검색하기 위해 읽을 수있는 픽셀 수를 알지 못합니다.

다른 곳으로 처리했거나 디코더가 항상 길이를 알고 있습니다. 그렇지 않으면 고정 된 위치 (일반적으로 처음 32)에서 설정된 픽셀 수를 사용하여 텍스트의 길이를 바이너리로 인코딩하려고합니다. 예를 들어

int secretLength = 8 * textBox1.Text.Length;
string binary = Convert.ToString(secretLength, 2);
.

"Hello World"텍스트의 경우 바이너리는 00000000000000000000000001011000이 될 것입니다. 이제이 다음 32 명의 특정 픽셀과 실제 비밀 메시지를 나중에 삽입 할 수 있습니다. 이 경우 이미지가 전체 비밀을 수용 할 수있는 픽셀의 최소한 PergenaCodiceTag 코드 수를 가져야합니다.

텍스트의 길이에 대해 4 바이트를 사용하면 모든 이미지 크기 제한을 고려하여 overkill입니다. 항상 텍스트 크기가 특정 길이를 초과하지 않거나

참조 : 에서 빌린 이진 문자열 변환에 대한 정수 .

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top