mam taki programik ciekawy... koduje tekst w mapie bitowej... mógłby ktoś "rzucic okiem" i pomóc mi chociaż trochę skrócić ten kod? próbuj ę cały czas ale jak skracam, to źle działa jakby sie komus chcialo...
Kod:
//----------------------------------------------------------------
TColor TForm1::zakoduj(bool b1,bool b2, bool b3, TColor c)
{
long rob=1;
rob=rob<<8;
rob+=1;
rob=rob<<8;
rob+=1;
c = c | rob; //pierwszy, dziewiąty i siedemnasty bit w c jest jedynką
rob = 0xFE;
rob+=b3;
rob=rob<<8;
rob+=0xFE;
rob+=b2;
rob=rob<<8;
rob+=0xFE;
rob+=b1;
c = c & rob;
return c;
}
//-----------------------Kodowanie----------------------------------------
void __fastcall TForm1::Koduj1Click(TObject *Sender)
{
long dl_wiad = Memo1->Lines->Text.Length();
Label5->Caption=IntToStr(dl_wiad);
if(dl_wiad<=dl_max)
{
//ukrywanie informacji w obrazku
long i=0,j=0; //współrzędne bieżącego piksela
char znak;
int bp=0; // ilosc bitow przeniesionych (niezakodowanych) z poprzedniego znaku
long szer=i1->Picture->Bitmap->Width;
long wys=i1->Picture->Bitmap->Height;
TColor piksel;
bool b1,b2,b3;
for(int k=1;k<=dl_wiad;k++)
{
piksel=i1->Picture->Bitmap->Canvas->Pixels[i][j];
znak=Memo1->Lines->Text[k];
if(bp==0) //o bitów przeniesionych
{
b1=znak%2;
znak/=2;
b2=znak%2;
znak/=2;
b3=znak%2;
znak/=2;
i1->Picture->Bitmap->Canvas->Pixels[i][j]=zakoduj(b1,b2,b3,i1->Picture->Bitmap->Canvas->Pixels[i][j]);
i++;
if (i>szer) {i=0; j++;}
b1=znak%2;
znak/=2;
b2=znak%2;
znak/=2;
b3=znak%2;
znak/=2;
i1->Picture->Bitmap->Canvas->Pixels[i][j]=zakoduj(b1,b2,b3,i1->Picture->Bitmap->Canvas->Pixels[i][j]);
i++;
if (i>szer) {i=0; j++;}
b1=znak%2;
znak/=2;
b2=znak%2;
bp=2;
}
else if(bp==1)
{
b2=znak%2;
znak/=2;
b3=znak%2;
znak/=2;
i1->Picture->Bitmap->Canvas->Pixels[i][j]=zakoduj(b1,b2,b3,i1->Picture->Bitmap->Canvas->Pixels[i][j]);
i++;
if (i>szer) {i=0; j++;}
b1=znak%2;
znak/=2;
b2=znak%2;
znak/=2;
b3=znak%2;
znak/=2;
i1->Picture->Bitmap->Canvas->Pixels[i][j]=zakoduj(b1,b2,b3,i1->Picture->Bitmap->Canvas->Pixels[i][j]);
i++;
if (i>szer) {i=0; j++;}
b1=znak%2;
znak/=2;
b2=znak%2;
znak/=2;
b3=znak%2;
znak/=2;
i1->Picture->Bitmap->Canvas->Pixels[i][j]=zakoduj(b1,b2,b3,i1->Picture->Bitmap->Canvas->Pixels[i][j]);
i++;
if (i>szer) {i=0; j++;}
bp=0;
}
else //bp=2
{
b3=znak%2;
znak/=2;
i1->Picture->Bitmap->Canvas->Pixels[i][j]=zakoduj(b1,b2,b3,i1->Picture->Bitmap->Canvas->Pixels[i][j]);
i++;
if (i>szer) {i=0; j++;}
b1=znak%2;
znak/=2;
b2=znak%2;
znak/=2;
b3=znak%2;
znak/=2;
i1->Picture->Bitmap->Canvas->Pixels[i][j]=zakoduj(b1,b2,b3,i1->Picture->Bitmap->Canvas->Pixels[i][j]);
i++;
if (i>szer) {i=0; j++;}
b1=znak%2;
znak/=2;
b2=znak%2;
znak/=2;
b3=znak%2;
znak/=2;
i1->Picture->Bitmap->Canvas->Pixels[i][j]=zakoduj(b1,b2,b3,i1->Picture->Bitmap->Canvas->Pixels[i][j]);
i++;
if (i>szer) {i=0; j++;}
b1=znak%2;
bp=1;
}
}
i1->Picture->Bitmap->Canvas->Refresh();
}
else
MessageDlg("Za długa wiadomość!",mtError,TMsgDlgButtons()<<mbYes,0);
}
//-------------------------------------------------------------------------