請問資料隱藏之問題 |
尚未結案
|
jeff6518
一般會員 發表:4 回覆:4 積分:1 註冊:2003-07-02 發送簡訊給我 |
有2章相同大小的圖片(bitmat),一張為灰階圖,另一張為binary圖,我要把運用最低位元嵌入法(LSB),將binary圖嵌入在該灰階圖,可是我嵌入之後整張圖卻有問題,會變成紅色的,請問我該怎麼做?
以下為我的部分程式碼: oid __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
char a[128][128];
char b[128][128];
char c[128][128];
for (int i=0;i<=127;i ){
for (int j=0;j<=127;j )
{
a[i][j]=Image1->Picture->Bitmap->Canvas->Pixels[i][j];
b[i][j]=((Image2->Picture->Bitmap->Canvas->Pixels[i][j/8])>>(7-j%8))&0x01;
c[i][j]=a[i][j] & 11111110;
c[i][j]=c[i][j] | b[i][j];
Image3->Picture->Bitmap->Canvas->Pixels[i][j]=c[i][j];
}
} } 另外我還有一個問題:有2張皆為灰階的BITMAP圖,A大小為256*256,B大小為256*128,而將B圖的第一個pixel中的8-bit分為2部分,每個部分皆為4-bit,運用LSB法,第一個4-bit將嵌入到A圖的第一個pixel最低之4-bit,第二個4-bit將嵌入到A圖的第二個pixel最低之4-bit,而B圖的第二個pixel將嵌入到A圖之第3、4個pixel,以此類推..請問我該如何延續第一個問題的做法?還希望不吝賜教^^
|
JerryKuo
版主 發表:42 回覆:571 積分:322 註冊:2003-03-10 發送簡訊給我 |
引言: 有2章相同大小的圖片(bitmat),一張為灰階圖,另一張為binary圖,我要把運用最低位元嵌入法(LSB),將binary圖嵌入在該灰階圖,可是我嵌入之後整張圖卻有問題,會變成紅色的,請問我該怎麼做? 以下為我的部分程式碼: oid __fastcall TForm1::BitBtn1Click(TObject *Sender) { char a[128][128]; char b[128][128]; char c[128][128]; for (int i=0;i<=127;i ){ for (int j=0;j<=127;j ) { a[i][j]=Image1->Picture->Bitmap->Canvas->Pixels[i][j]; b[i][j]=((Image2->Picture->Bitmap->Canvas->Pixels[i][j/8])>>(7-j%8))&0x01; c[i][j]=a[i][j] & 11111110; c[i][j]=c[i][j] | b[i][j]; Image3->Picture->Bitmap->Canvas->Pixels[i][j]=c[i][j]; bitmap一個像素有三個元素,你的寫法他只顯示紅色的部分,請改成下面 Image3->Picture->Bitmap->Canvas->Pixels[i][j]=(TColor)RGB(c[i][j],c[i][j],c[i][j]); } } } 另外我還有一個問題:有2張皆為灰階的BITMAP圖,A大小為256*256,B大小為256*128,而將B圖的第一個pixel中的8-bit分為2部分,每個部分皆為4-bit,運用LSB法,第一個4-bit將嵌入到A圖的第一個pixel最低之4-bit,第二個4-bit將嵌入到A圖的第二個pixel最低之4-bit,而B圖的第二個pixel將嵌入到A圖之第3、4個pixel,以此類推..請問我該如何延續第一個問題的做法?還希望不吝賜教^^ |
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 有2章相同大小的圖片(bitmat),一張為灰階圖,另一張為binary圖,我要把運用最低位元嵌入法(LSB),將binary圖嵌入在該灰階圖,可是我嵌入之後整張圖卻有問題,會變成紅色的,請問我該怎麼做? 以下為我的部分程式碼: oid __fastcall TForm1::BitBtn1Click(TObject *Sender) { char a[128][128]; char b[128][128]; char c[128][128]; for (int i=0;i<=127;i ){ for (int j=0;j<=127;j ) { a[i][j]=Image1->Picture->Bitmap->Canvas->Pixels[i][j]; b[i][j]=((Image2->Picture->Bitmap->Canvas->Pixels[i][j/8])>>(7-j%8))&0x01; c[i][j]=a[i][j] & 11111110; c[i][j]=c[i][j] | b[i][j]; Image3->Picture->Bitmap->Canvas->Pixels[i][j]=c[i][j]; } } } 另外我還有一個問題:有2張皆為灰階的BITMAP圖,A大小為256*256,B大小為256*128,而將B圖的第一個pixel中的8-bit分為2部分,每個部分皆為4-bit,運用LSB法,第一個4-bit將嵌入到A圖的第一個pixel最低之4-bit,第二個4-bit將嵌入到A圖的第二個pixel最低之4-bit,而B圖的第二個pixel將嵌入到A圖之第3、4個pixel,以此類推..請問我該如何延續第一個問題的做法?還希望不吝賜教^^jeff6518 你好: 請先參考以下這篇文章的做法(範例程式碼)
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
JerryKuo
版主 發表:42 回覆:571 積分:322 註冊:2003-03-10 發送簡訊給我 |
引言:jeff6518你好: 小弟對浮水印不太會,只能幫你改改... 隱藏的位置是a圖上下兩個像素(x,2y),(x,2y 1),各用b圖(x,y)像素前四個位元和後四個位元存入。 參考看看..... 發表人 -char a1,a2,b,b1,b2; char c[256][256]; for (int i=0;i<256;i ){ for (int j=0;j<128;j ) { a1 = GetRValue(Image1->Picture->Bitmap->Canvas->Pixels[i][2*j 1]); a2 = GetRValue(Image1->Picture->Bitmap->Canvas->Pixels[i][2*j 1]); b = GetGValue(Image2->Picture->Bitmap->Canvas->Pixels[i][j]); b1 = b & 00001111; b2 = b & 11110000; a1 = a1 & 11110000; c[i][j] = a1 | b1; a2 = a2 & 11110000; c[2*i 1][j] = a2 | b2; Image3->Picture->Bitmap->Canvas->Pixels[i][2*j] = (TColor)RGB(c[i][2*j],c[i][2*j],c[i][2*j]); Image3->Picture->Bitmap->Canvas->Pixels[i][2*j 1] = (TColor)RGB(c[i][2*j 1],c[i][2*j 1],c[i][2*j 1]); } } |
jeff6518
一般會員 發表:4 回覆:4 積分:1 註冊:2003-07-02 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
jeff6518
一般會員 發表:4 回覆:4 積分:1 註冊:2003-07-02 發送簡訊給我 |
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
char a[512][512];
char b[515][256];
char b1[512][256];
char b2[512][256];
char c[512][512];
for (int i=0;i<=511;i++){
for (int j=0;j<=511;j++){
a[i][j]=Image1->Canvas->Pixels[i][j];
c[i][j]=a[i][j] & 0xf0;
}
}
for (int i=0;i<=511;i++){
for (int j=0;j<=255;j++){
b[i][j]=Image2->Canvas->Pixels[i][j];
b1[i][j]=(b[i][j] & 0xf0)>>4;
b2[i][j]=b[i][j] & 0xf;
}
}
for (int i=0;i<=511;i++){
for (int j=0;j<=255;j++){
c[i][j]=c[i][j] | b1[i][j];
}
}
for (int i=0;i<=511;i++){
for (int j=256;j<=511;j++){
c[i][j]=c[i][j] | b2[i][j];
}
}
for (int i=0;i<=511;i++){
for (int j=0;j<=511;j++){
Image3->Canvas->Pixels[i][j]=(TColor)RGB(c[i][j],c[i][j],c[i][j]);
}
}
}
/* 以上為小弟寫的程式,方法為將b圖的前4個bit藏入在a圖的上半部分,而將b圖的後4個bit藏入在a圖的下半部分 */
void __fastcall TForm1::BitBtn2Click(TObject *Sender)
{
char a[512][512];
char b[512][256];
char b1[512][256];
char b2[512][256];
char c[512][512];
for (int i=0;i<=511;i++){
for (int j=0;j<=255;j++){
a[i][j]=Image3->Canvas->Pixels[i][j];
b1[i][j]=(a[i][j] & 0xf)<<4 ;
}
}
for (int i=0;i<=511;i++){
for (int j=255;j<=511;j++){
b[i][j]=Image3->Canvas->Pixels[i][j];
b2[i][j]=b[i][j] & 0xf;
}
}
for (int i=0;i<=511;i++){
for (int j=0;j<=255;j++){
c[i][j]=b1[i][j] | b2[i][j];
}
}
for (int i=0;i<=511;i++){
for (int j=0;j<=255;j++){
Image4->Canvas->Pixels[i][j]=(TColor)RGB(c[i][j],c[i][j],c[i][j]);
}
}
} 在將藏入的圖片取出還原時,在圖片的左邊會有一條黑線從上到下,可以幫我糾正一下其中的錯誤嗎?謝謝^^
|
jeff6518
一般會員 發表:4 回覆:4 積分:1 註冊:2003-07-02 發送簡訊給我 |
|
JerryKuo
版主 發表:42 回覆:571 積分:322 註冊:2003-03-10 發送簡訊給我 |
|
jeff6518
一般會員 發表:4 回覆:4 積分:1 註冊:2003-07-02 發送簡訊給我 |
|
JerryKuo
版主 發表:42 回覆:571 積分:322 註冊:2003-03-10 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |