Array
(
)

Poderiam me ajudar?

Drayton
   - 06 nov 2012

Pessoal, boa tarde!
Estou desenvolvendo um trabalho para a faculdade de um aplicativo em VB net em que leio os bits de uma imagem e através da técnica LSB (Least significant bit) oculto uma mensagem ou palavra desejada pelo usuário.
Os passos para a ocultação consegui fazer com êxito, cito alguns passos utilizados abaixo:
- leio a mensagem a ser oculta e a transformo em binário;
- leio os bits da imagem escolhida pelo usuário através de um laço de repetição, onde consigo os valores de RGB.
- Com esses valores lidos e armazenados em uma matriz faço a conversão para binário
- Pego os valores binários do texto lido e altero o ultimo bit de RGB para o valor correspondente do texto.
- Remonto a imagem com esses valores já com a mensagem oculta.
Ex:
Suponham que queira esconder a palavra "MARIA"... Maria em binário = 0100110101100001011100100110100101100001

A imagem escolhida pelo usuário, um bmp de 100X100 tem os seguintes valores:
R G B
168 140 120
163 140 115
160 140 112
. . .
. . .
. . .
Convertidos para binário:

10101000 10001100 01111000
10100011 10001100 01110011
10100000 10001100 01110000
. . .
. . .
. . .
Inicio a alteração do bit menos significativo, o ultimo, para os valores do texto lido:

168 EM binário = 10101000; alterando o ultimo bit para 0 (primeiro da palavra MARIA) = 10101000
140 EM binário = 10001100; alterando o ultimo bit para 1 (segundo da palavra MARIA) = 10001101
120 EM binário = 01111000; alterando o ultimo bit para 0 (terceiro da palavra MARIA) = 01111000
163 EM binário = 10100011; alterando o ultimo bit para 0 (quarto da palavra MARIA) = 10100010
140 EM binário = 10001100; alterando o ultimo bit para 1 (quinto da palavra MARIA) = 10001101
115 EM binário = 01110011; alterando o ultimo bit para 1 (sexto da palavra MARIA) = 01110011
160 EM binário = 10100000; alterando o ultimo bit para 0 (setimo da palavra MARIA) = 10100000
140 EM binário = 10001100; alterando o ultimo bit para 1 (oitavo da palavra MARIA) = 10001101
112 EM binário = 01110000; alterando o ultimo bit para 0 (nono da palavra MARIA) = 01110000
e assim sucessivamente...

A rotina de ocultação consegui realizar, porém a de descobrir, revelar qual palavra foi oculta não consigo e peço a ajuda de vocês.
O que está tornando difícil a resolução, é que quando leio esses valores de volta e pego o ultimo bit
RGB
ex: 010
011
010 <<
ele está levando um digito a mais, ou seja o 0, ficando com 9 dígitos e não 8 o que deveria ser o correto. Sei que devo fazer a leitura até o número 1 do 010 e esse 0 que ele leva a mais, devo fazer com que seja o primeiro digito da próxima letra, que no caso seria o A de (MA)RIA e assim sucessivamente, mas não consegui uma rotina de solução. Por favor, alguém poderia me ajudar?

Robson Robsonalves.net
   - 06 nov 2012

Cara, você praticamente terminou seu trabalho!

Posta o seu laço que está com problema, assim possamos atacar direto no ponto!

Drayton
   - 06 nov 2012

Oi Robson, obrigado pela atenção....

Segue o trecho que utilizei até o momento nessa rotina:

'FUNÇÃO QUE VAI EFETUAR A LEITURA DA IMAGEM
For i = 0 To img.Height - 1
For j = 0 To img.Width - 1

'LÊ OS PIXELS
c = img.GetPixel(i, j)

'PEGA OS VALORES DE R,G,B E OS CONVERTE PARA BINÁRIO
Dim r As String = DecToBin(c.R)
Dim g As String = DecToBin(c.G)
Dim b As String = DecToBin(c.B)

'SEPARA ESSES VALORES
For jj = 0 To 8 - 1
r1(i, j) = r(jj)
g1(i, j) = g(jj)
b1(i, j) = b(jj)

'JUNTA OS 8 BITS DA MATRIZ PARA PEGAR O PRIMEIRO DIGITO DA INFORMAÇÃO ARMAZENADA(ultimo bit)
If jj = 7 Then
r2(i, j) = r2(i, j) + r1(i, j)
g2(i, j) = g2(i, j) + g1(i, j)
b2(i, j) = b2(i, j) + b1(i, j)

If aux < 9 Then
binario = binario + r2(i, j)
aux = aux + 1
End If

If aux < 9 Then
binario = binario + g2(i, j)
aux = aux + 1
End If

If aux < 9 Then
binario = binario + b2(i, j)
aux = aux + 1
End If

A partir desse ponto não consegui mais...

Drayton
   - 13 nov 2012

E aí pessoal? Alguma ideia?

Drayton
   - 13 nov 2012

E aí pessoal? Alguma ideia?

Robson Robsonalves.net
   - 13 nov 2012

Cara eu não consegui pensar em nada, fora que levei um tempo pra entender a sintaxe do VB, onde fecha e começa o outro for...

Espero que alguem consiga de ter uma força.

Drayton
   - 18 nov 2012

Valeu pela tentativa Robson... vou continuar tentando aqui.

Alisson
|
MVP
Pontos: 3400
    18 nov 2012

Amigo conseguiu sanar sua duvida??