C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[74886] Re:Re: Windows API로 간단하게 처리하는 방법
앱돌이 [] 3280 읽음    2018-04-16 10:16
빌더(TWx) 님이 쓰신 글 :
: 앱돌이 님이 쓰신 글 :
: : 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를 이용해서
: 영역을 특정한 후에 알파채널을 라이트 해주면 간단하게 처리 할 수 있지요.
: 컴포넌트에 의존하면 발전이 없어요.
:
:
:

정말 도움많이 됬습니다. 감사합니다.

HRGN rgnRect = CreateRectRgn(0, 0, ImgSetup->Width - 1, ImgSetup->Height - 1);   //사각 영역 생성(x1,y1,x2,y2)
HRGN rgnCircle = CreateEllipticRgn(newx1[1],newy1[1],newx2[1],newy2[1]);  //원형 영역 생성(x1,y1,x2,y2)
HRGN rgnExcluded = CreateRectRgn(0,0,0,0); //저장영역?
                              //1    //2
CombineRgn(rgnExcluded, rgnRect, rgnCircle, RGN_XOR); /// 합집합(1||2) - 교집합(1&&2)
assert(rgnRect && rgnCircle && rgnExcluded);

ImgSetup->Canvas->Brush->Color = clWhite;
PaintRgn(ImgSetup->Canvas->Handle, rgnExcluded);

DeleteObject(rgnRect);
DeleteObject(rgnCircle);
DeleteObject(rgnExcluded);


+ -

관련 글 리스트
74872 이미지 원형 저장관련하여 질문이있어요 앱돌이 3091 2018/04/12
74880     Re:이미지 원형 저장관련하여 질문이있어요 Observer 3123 2018/04/13
74882         Re:Re:이미지 원형 저장관련하여 질문이있어요 앱돌이 3121 2018/04/13
74884             Re: Windows API로 간단하게 처리하는 방법 빌더(TWx) 3323 2018/04/14
74887                 Re:Re: Windows API로 간단하게 처리하는 방법 앱돌이 3295 2018/04/16
74886                 Re:Re: Windows API로 간단하게 처리하는 방법 앱돌이 3280 2018/04/16
74873     Re:이미지 원형 저장관련하여 질문이있어요 그 아이 3022 2018/04/12
74883         Re:Re:이미지 원형 저장관련하여 질문이있어요 3211 2018/04/13
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.