一張24位元的圖取出256色的浮水印 |
尚未結案
|
mikemagic
一般會員 發表:1 回覆:0 積分:0 註冊:2005-09-05 發送簡訊給我 |
將256色(8Bit)的圖做浮水印嵌入一張24Bit的圖 我是使用取代24Bit的RGB三色的LSB
如: R(8Bit) G(8Bit) B(8Bit)
8Bit的圖分3Bit嵌入R,分3Bit嵌入G,分3Bit嵌入B
到這裡都沒問題,問題是在取出的時候,有正確的取出那8Bit的數值,但那個數值應該是要256色才對,不過卻把它當作24Bit方式
如:取出156 取出的浮水印RGB(156,0,0) 可以請問高手如何設定呢? 我的取出程式碼 int j, k, x, MoveBit;
TColor ProcessColor;
byte SourceRGB, TotalWaterMark; Graphics::TBitmap *BitImage=new Graphics::TBitmap;
BitImage->Height=ImageProcess->Height;
BitImage->Width=ImageProcess->Width;
BitImage->PixelFormat=pf8bit;
BitImage->Canvas->FillRect(Rect(0,0,BitImage->Width,BitImage->Height)); for (j=0; j<=ImageProcess->Width; j )
{
for (k=0; k<=ImageProcess->Height; k )
{
ProcessColor=ImageProcess->Canvas->Pixels[j][k];
TotalWaterMark=0;
//---------------------------------------------------------------------------
SourceRGB=GetRValue(ProcessColor);
for (MoveBit=0; MoveBit<=2; MoveBit )
{
x=(SourceRGB>>MoveBit) & 1;
TotalWaterMark =x*pow(2,MoveBit);
}
//---------------------------------------------------------------------------
SourceRGB=GetGValue(ProcessColor);
for (MoveBit=0; MoveBit<=2; MoveBit )
{
x=(SourceRGB>>MoveBit) & 1;
MoveBit =3;
TotalWaterMark =x*pow(2,MoveBit);
MoveBit-=3;
}
//---------------------------------------------------------------------------
SourceRGB=GetBValue(ProcessColor);
for (MoveBit=0; MoveBit<=1; MoveBit )
{
x=(SourceRGB>>MoveBit) & 1;
MoveBit =6;
TotalWaterMark =x*pow(2,MoveBit);
MoveBit-=6;
}
//---------------------------------------------------------------------------
BitImage->Canvas->Pixels[j][k]=TotalWaterMark;
}
}
ImageWaterMark->Picture->Bitmap->Assign(BitImage);
ImageWaterMark->Height=ImageProcess->Picture->Height;
ImageWaterMark->Width=ImageProcess->Picture->Width;
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |