앱돌이 님이 쓰신 글 :
: Observer 님이 쓰신 글 :
: : 앱돌이 님이 쓰신 글 :
: : : TIMAGE에 bitmap파일을 불러와 원을 그렸습니다.
: : :
: : : 그리고 밖의 이미지는 버리고 안의 이미지만 저장하고 싶은대
: : :
: : : 조언 부탁드립니다.
: : :
: : :
: :
: : 아마도 마스크 크롭핑을 말씀하시는거 같은데,
: : graphics32 컴포넌트 쓰시면 코드 단 몇줄이면 끝납니다.
:
: 아 그렇군요 사용을 안해봐서 한번 사용해봐야 할거 같아요!!
답변:
컴포넌트에 의존하지 말고, Windows OS가 제공하는 Region API 사용하면 간단하게 처리할 수 있습니다.
변환전
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TBitmap *pBmp = new TBitmap;
pBmp->LoadFromFile("bg.bmp");
HRGN rgnRect = CreateRectRgn(0, 0, pBmp->Width - 1, pBmp->Height - 1);
HRGN rgnCircle = CreateEllipticRgn(pBmp->Width / 4, 10, pBmp->Width - (pBmp->Width /4), pBmp->Height - 10);
HRGN rgnExcluded = CreateRectRgn(0,0,0,0);
CombineRgn(rgnExcluded, rgnRect, rgnCircle, RGN_XOR);
assert(rgnRect && rgnCircle && rgnExcluded);
pBmp->Canvas->Brush->Color = clWhite;
PaintRgn(pBmp->Canvas->Handle, rgnExcluded);
DeleteObject(rgnRect);
DeleteObject(rgnCircle);
DeleteObject(rgnExcluded);
pBmp->SaveToFile("bg2.bmp");
delete pBmp;
}
변환후
이미지를 투명하게 처리하는 것도 Windows OS가 제공하는 Region API를 이용해서
영역을 특정한 후에 알파채널을 라이트 해주면 간단하게 처리 할 수 있지요.
컴포넌트에 의존하면 발전이 없어요.
|