Pergunta

eu sei que pode ser fácil, mas não consegui encontrar uma solução para isso.

Preciso obter a próxima linha do bitmap depois de usar todo o bitmap do bitmap atual, estou fazendo um programa de estenografia onde estou escondendo um arquivo de texto dentro da imagem.Cada caractere é armazenado em 8 bytes diferentes.então, depois de ocultar o texto dentro da primeira coluna, preciso obter a próxima coluna e assim por diante.Sou muito fraco nisso.Tentei isso para a primeira linha, mas não sei para outras linhas de acordo com o comprimento do texto.

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
                                }
                            }

                    }
                }}
Foi útil?

Solução

Que tal agora?

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
                      }
                  }
              }}

Por exemplo, se você tiver uma largura de 10, estas deverão ser as coordenadas das duas primeiras letras do seu texto:

Carta 1:

(0, 0)

...

(0, 7)

Carta 2:

(0, 8)

(0, 9)

(1, 0)

...


NOTA IMPORTANTE:Parece que você não esconde o comprimento do texto e o processo de decodificação não saberá quantos pixels ler para recuperar a mensagem.

Se você já lidou com isso em outro lugar, ou se o decodificador sempre sabe a duração, tudo bem.Caso contrário, você deseja usar um determinado número de pixels em um local fixo (geralmente os primeiros 32) para codificar em binário o comprimento do seu texto.Por exemplo,

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

Para o texto "Hello World", o binário será 0000000000000000000000001011000.Agora você pode incorporá-los em seus 32 pixels específicos e depois na mensagem secreta real.Lembre-se que neste caso sua imagem deve ter pelo menos 8 * TextBox1.Text.Length + 32 número de pixels para acomodar todo o segredo.

Usar 4 bytes para o comprimento do texto é um exagero, considerando, acima de tudo, as limitações de tamanho da imagem.Você pode usar menos bytes se sempre puder garantir que o tamanho do texto nunca excederá um comprimento específico ou uma abordagem mais dinâmica, como esse

Referência:Conversão de string inteira para binária emprestada de aqui.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top