이미지 변환에 관한 자료는 너무 많아서 딱히 어디서 펌해왔다고 하기는 멋하구...
그래도 CBuilder로 된 자료는 잘 안보이는것 같아 올려봅니다.
TImage 와 Graphics::TBitmap을 이용합니다.
//---------------------<>--------------------------------------------
void __fastcall iSwap(int *a,int *b) //데이타 바꿔치키
{
int tmp;
tmp=*a;
*a=*b;
*b=tmp;
}
//-------------------<<좌우대칭>>------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Graphics::TBitmap *bmp=new Graphics::TBitmap;
bmp->Width=Image1->Width;
bmp->Height=Image1->Height;
bmp->Assign(Image1->Picture->Bitmap);
bmp->PixelFormat=pf32bit;
int *pt1;
int *pt2;
for(int h=0;hHeight;h++)
{
pt1=(int *)bmp->ScanLine[h];
pt2=pt1+bmp->Width-1;
while(pt1Width=bmp->Width;
Image2->Height=bmp->Height;
Image2->Picture->Bitmap->Assign(bmp);
delete bmp;
}
//---------------------<<상하대칭>>-------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Graphics::TBitmap *bmp=new Graphics::TBitmap;
bmp->Width=Image1->Width;
bmp->Height=Image1->Height;
bmp->Assign(Image1->Picture->Bitmap);
bmp->PixelFormat=pf32bit;
int *pt1;
int *pt2;
for(int h=0;hHeight/2;h++)
{
pt1=(int *)bmp->ScanLine[h];
pt2=(int *)bmp->ScanLine[bmp->Height-h-1];
for(int w=0;wWidth;w++)
{
iSwap(pt1,pt2);
pt1++;
pt2++;
}
}
Image2->Width=bmp->Width;
Image2->Height=bmp->Height;
Image2->Picture->Bitmap->Assign(bmp);
delete bmp;
}
//---------------------<<대각대칭>>-------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
Graphics::TBitmap *bmp=new Graphics::TBitmap;
bmp->Width=Image1->Width;
bmp->Height=Image1->Height;
bmp->Assign(Image1->Picture->Bitmap);
bmp->PixelFormat=pf32bit;
int *pt1;
int *pt2;
for(int h=0;hHeight/2;h++)
{
pt1=(int *)bmp->ScanLine[h];
pt2=(int *)bmp->ScanLine[bmp->Height-h-1];
pt2=pt2+bmp->Width-1;
for(int w=0;wWidth;w++)
{
iSwap(pt1,pt2);
pt1++;
pt2--;
}
}
Image2->Width=bmp->Width;
Image2->Height=bmp->Height;
Image2->Picture->Bitmap->Assign(bmp);
delete bmp;
}
//---------------------<>-----------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
Graphics::TBitmap *bmp=new Graphics::TBitmap;
bmp->Width=Image1->Width;
bmp->Height=Image1->Height;
bmp->Assign(Image1->Picture->Bitmap);
bmp->PixelFormat=pf32bit;
unsigned char *cpt;
unsigned char tmp;
for(int h=0;hHeight;h++)
{
cpt=(unsigned char *)bmp->ScanLine[h];
for(int w=0;wWidth;w++)
{
//방법1
//tmp=(cpt[0]+cpt[1]+cpt[2])/3;
//방법2 ==> 이방법이 쬐금더 빠름
tmp=(cpt[0]+cpt[1]*4+cpt[2]*3)>>3;
cpt[0]=tmp;
cpt[1]=tmp;
cpt[2]=tmp;
cpt+=4;
}
}
Image2->Width=bmp->Width;
Image2->Height=bmp->Height;
Image2->Picture->Bitmap->Assign(bmp);
delete bmp;
}
//---------------------------------------------------------------------------
누구게 도움이 될진 모르겠지만..
만약 제가 CBuilder를 처음시작하때 이런 자료를 볼수있었다면 제게는 도움이 되었을것 같아서..
|
>>3 는 3비트 옮겨서 /8의 효과가 나지 않나요? 같은 값은 아닌거 같은데...상관없는 것인지요