Q&A
HOME
Tips & Tech
Q&A
Discuss
Download
자유게시판
홍보 / 광고
구인 / 구직
LOGIN
회원가입
[wlfans]두개의 이미지합성에 관하여?급합니다.
이미지가 두개 있습니다.
이미지1은 배경
이미지2는 사진(인물은외에는 일정한 색(파랑이나 검정)
두이미지를 합성하고 싶은데 쉽지가 않네요.
배경이미지에 이미지2를(인물부분만)합성해서
새이미지를 만들어 저장해야하거든요.
부탁합니다.
질문만 올려서 죄송....^^;
1
COMMENTS
이정욱
•
1999.04.04 04:55
하이텔서 퍼왔습니다.
번 호 : 2827
게시자 : 민성기 (오랑캐꽃)
등록일 : 1999-02-27 23:55
제 목 : [응모] 델파이 퀴즈...
안녕하세요... 민성기 입니다.
항상 퀴즈를 내 주시는 지훈님께 감사 드리며... ^^;
음... 예전엔 복잡하고 희안하게 했다가... 요즘엔 RX의 소스를
고대로 배껴서 쓰고 있습니다. 빠르고 좋길래... 흐흐흐...
퀴즈 응모 입니당...
procedure StretchBltTransparent(DstDC: HDC; DstX, DstY, DstW, DstH: Integer;
SrcDC: HDC; SrcX, SrcY, SrcW, SrcH: Integer; Palette: HPalette;
TransparentColor: TColorRef);
const
PaletteMask = $02000000;
var
Color: TColorRef;
bmAndBack, bmAndObject, bmAndMem, bmSave:HBitmap;
bmBackOld, bmObjectOld, bmMemOld, bmSaveOld: HBitmap;
MemDC, BackDC, ObjectDC, SaveDC: HDC;
palDst, palMem, palSave, palObj: HPalette;
function PaletteColor(Color: TColor): Longint;
begin
Result := ColorToRGB(Color) or PaletteMask;
end;
begin
{ Create some DCs to hold temporary data }
BackDC := CreateCompatibleDC(DstDC);
ObjectDC := CreateCompatibleDC(DstDC);
MemDC := CreateCompatibleDC(DstDC);
SaveDC := CreateCompatibleDC(DstDC);
{ Create a bitmap for each DC }
bmAndObject := CreateBitmap(SrcW, SrcH, 1, 1, nil);
bmAndBack := CreateBitmap(SrcW, SrcH, 1, 1, nil);
bmAndMem := CreateCompatibleBitmap(DstDC, DstW, DstH);
bmSave := CreateCompatibleBitmap(DstDC, SrcW, SrcH);
{ Each DC must select a bitmap object to store pixel data }
bmBackOld := SelectObject(BackDC, bmAndBack);
bmObjectOld := SelectObject(ObjectDC, bmAndObject);
bmMemOld := SelectObject(MemDC, bmAndMem);
bmSaveOld := SelectObject(SaveDC, bmSave);
{ Select palette }
palDst := 0; palMem := 0; palSave := 0; palObj := 0;
if Palette <> 0 then begin
palDst := SelectPalette(DstDC, Palette, True);
RealizePalette(DstDC);
palSave := SelectPalette(SaveDC, Palette, False);
RealizePalette(SaveDC);
palObj := SelectPalette(ObjectDC, Palette, False);
RealizePalette(ObjectDC);
palMem := SelectPalette(MemDC, Palette, True);
RealizePalette(MemDC);
end;
{ Set proper mapping mode }
SetMapMode(SrcDC, GetMapMode(DstDC));
SetMapMode(SaveDC, GetMapMode(DstDC));
{ Save the bitmap sent here }
BitBlt(SaveDC, 0, 0, SrcW, SrcH, SrcDC, SrcX, SrcY, SRCCOPY);
{ Set the background color of the source DC to the color, }
{ contained in the parts of the bitmap that should be transparent }
Color := SetBkColor(SaveDC, PaletteColor(TransparentColor));
{ Create the object mask for the bitmap by performing a BitBlt() }
{ from the source bitmap to a monochrome bitmap }
BitBlt(ObjectDC, 0, 0,SrcW, SrcH, SaveDC, 0, 0, SRCCOPY);
{ Set the background color of the source DC back to the original }
SetBkColor(SaveDC, Color);
{ Create the inverse of the object mask }
BitBlt(BackDC, 0, 0, SrcW, SrcH, ObjectDC, 0, 0, NOTSRCCOPY);
{ Copy the background of the main DC to the destination }
BitBlt(MemDC, 0, 0, DstW, DstH, DstDC, DstX, DstY, SRCCOPY);
{ Mask out the places where the bitmap will be placed }
StretchBlt(MemDC, 0, 0, DstW, DstH, ObjectDC, 0, 0, SrcW, SrcH, SRCAND);
{ Mask out the transparent colored pixels on the bitmap }
BitBlt(SaveDC, 0, 0, SrcW, SrcH, BackDC, 0, 0, SRCAND);
{ XOR the bitmap with the background on the destination DC }
StretchBlt(MemDC, 0, 0, DstW, DstH, SaveDC, 0, 0, SrcW, SrcH, SRCPAINT);
{ Copy the destination to the screen }
BitBlt(DstDC, DstX, DstY, DstW, DstH, MemDC, 0, 0,
SRCCOPY);
{ Restore palette }
if Palette <> 0 then begin
SelectPalette(MemDC, palMem, False);
SelectPalette(ObjectDC, palObj, False);
SelectPalette(SaveDC, palSave, False);
SelectPalette(DstDC, palDst, True);
end;
{ Delete the memory bitmaps }
DeleteObject(SelectObject(BackDC, bmBackOld));
DeleteObject(SelectObject(ObjectDC, bmObjectOld));
DeleteObject(SelectObject(MemDC, bmMemOld));
DeleteObject(SelectObject(SaveDC, bmSaveOld));
{ Delete the memory DCs }
DeleteDC(MemDC);
DeleteDC(BackDC);
DeleteDC(ObjectDC);
DeleteDC(SaveDC);
end;
헥헥~
쓸 때는 다음과 같이 ... ^^;
procedure TForm1.Button1Click(Sender: TObject);
var
DestBitmap : TBitmap;
SrcBitmap : TBitmap;
begin
DestBitmap := TBitmap.Create;
SrcBitmap := TBitmap.Create;
try
DestBitmap.Width := Image2.Picture.Bitmap.Width;
DestBitmap.Height := Image2.Picture.Bitmap.Height;
DestBitmap.Canvas.Draw(0, 0, Image2.Picture.Bitmap);
SrcBitmap.Assign(Image1.Picture.Bitmap);
StretchBltTransparent(
DestBitmap.Canvas.Handle,
0, 0, DestBitmap.Width, DestBitmap.height,
SrcBitmap.Canvas.Handle,
0, 0, SrcBitmap.Width, SrcBitmap.Height,
SrcBitmap.Palette,
clBlack
);
Image3.Picture.Bitmap.Assign(DestBitmap);
finally
DestBitmap.Free;
SrcBitmap.Free;
end;
end;
음... Image2의 이미지 중 검은 부분을 Image1에 '투명'하게
올려서리... Image3에 보여주는 놈 입니다.
이번 기회에 성능 죽여주는 투명 비트맵 예제를 건질 수 있으면
좋겠네요~
이상돈 wrote:
> 이미지가 두개 있습니다.
> 이미지1은 배경
> 이미지2는 사진(인물은외에는 일정한 색(파랑이나 검정)
> 두이미지를 합성하고 싶은데 쉽지가 않네요.
> 배경이미지에 이미지2를(인물부분만)합성해서
> 새이미지를 만들어 저장해야하거든요.
> 부탁합니다.
> 질문만 올려서 죄송....^^;
0
0
삭제
수정
댓글
(NOTICE) You must be
logged in
to comment on this post.
심경섭
•
1999.04.07 19:09
1
COMMENTS
/
0
LIKES
순차적으로 에디트시 에러발생...
이정욱
•
1999.04.08 22:55
repeat until 문으로 대체해 보세요. 심경섭 wrote: > 한 레코드의 한 필드를 처음부터 순차적으로 수...
심경섭
•
1999.04.07 19:02
1
COMMENTS
/
0
LIKES
메모컴폰넌트와 qreport의 메모컨컴포넌트
안치봉
•
1999.04.07 19:54
심경섭 wrote: > 메모컴포넌트의 텍스트 내용을 그대로 > > 인쇄를 하려고 레포트에 메모컴포넌트를 썼...
김영묵
•
1999.04.07 17:48
3
COMMENTS
/
0
LIKES
Invalid BLOB handle Error발생
이정욱
•
1999.04.08 22:57
현재 사용하시는 델파이 버전이 어떻게 되는지요? 김영묵 wrote: > 안녕하세요.. 처음으로 이곳에 도착...
김영묵
•
1999.04.09 04:41
델파이 3.0 c/s버전입니다. 참고로 BDE에서 BLOB chace size를 늘려주었는데도 안됩니다. 이정욱 ...
이정욱
•
1999.04.10 19:21
사실은 제가 DB쪽은 잘 모르지만.. ^^; 오라클 8.0을 제데로 지원할 수 있는것은 델파이4라고 하네요. 오...
조휴관
•
1999.04.07 05:28
1
COMMENTS
/
0
LIKES
코드 편집기 부분에 대해 알고 싶어요..!
안치봉
•
1999.04.07 08:46
조휴관 wrote: > 델파이를 시작한지 얼마 되지 않아서요.. > 폼이 처음 생성 되고 코드 편집기로 들어가...
율보
•
1999.04.07 02:42
1
COMMENTS
/
0
LIKES
으.. 후킹되기는 되는데.... T_T
안치봉
•
1999.04.07 02:55
율보 wrote: > 으.. 알려주세요.. > 후킹은 문제없이 됩니다.. > 또한 spy로 살펴보니 키스트로크도 제...
이상돈
•
1999.04.03 22:08
1
COMMENTS
/
0
LIKES
[wlfans]두개의 이미지합성에 관하여?급합니다.
이미지가 두개 있습니다. 이미지1은 배경 이미지2는 사진(인물은외에는 일정한 색(파랑이나 검정) 두이미지를 합성하고 싶은데 쉽지가 않네요. 배경이미지에 이미지2를(인물부분만)합성해서 새이미지를 만들어 저장해야하거든요. 부탁합니...
이정욱
•
1999.04.04 04:55
하이텔서 퍼왔습니다. 번 호 : 2827 게시자 : 민성기 (오랑캐꽃) 등록일 : 1999-02-27 23:55 제 ...
문창완
•
1999.04.03 18:59
1
COMMENTS
/
0
LIKES
이미지를 좌우대칭으로 출력?..부탁
안치봉
•
1999.04.03 21:40
문창완 wrote: > 원본이미지를 출력(프린팅)할때 좌우가 바뀐(대칭된)이미지로 > 출력하고자 합니다. > ...
구자송
•
1999.04.03 17:50
3
COMMENTS
/
0
LIKES
Del4 QucikReport
이정욱
•
1999.04.06 06:06
제가 알기로는 정품이 그 기능을 지원하는것으로 알고 있습니다. 퀵리포트 정품이 말이죠... 구자송 ...
구자송
•
1999.04.06 10:25
이정욱 wrote: > 제가 알기로는 정품이 그 기능을 지원하는것으로 알고 있습니다. > 퀵리포트 정품이 말...
안치봉
•
1999.04.06 22:40
qusoft에서 구입하실수 있을것입니다. 나이렉스에서 구입대행도 가능합니다. 구자송 wrote: > 이정욱 ...
이광주
•
1999.04.03 06:32
1
COMMENTS
/
0
LIKES
ActiveX의 IE에서 미리보기는...
안치봉
•
1999.04.06 22:31
이광주 wrote: > THTML콤퍼넌트의 프린트기능을 구현하기 어려워 ActiveX Control에 있는 > IE를 불러 붙...
이대선
•
1999.04.03 05:44
1
COMMENTS
/
0
LIKES
keybd_event를 어떻게...
안치봉
•
1999.04.03 07:33
이대선 wrote: > keybd_event를 어떻게 사용해야 하는지 궁금합니다. > > keybd_event($41,VK_SNAPSHOT...
황순갑
•
1999.04.03 05:21
1
COMMENTS
/
0
LIKES
비주얼베이직을 델파이로
안치봉
•
1999.04.03 07:31
황순갑 wrote: > > 찾습니다. > 디지탈카메라의 소스 (비주얼베이직) 을 델파이 소스로 > 변환해 ...
이해진
•
1999.04.03 02:19
2
COMMENTS
/
0
LIKES
에구..아래 질문에 추가...
이정욱
•
1999.04.03 04:30
필드의 종류와 이름들을 말씀해 주세요. 거기에 문제가 있을 수 도있습니다. 특히 한글로 필드명을 준다...
이해진
•
1999.04.03 06:35
델파이에서 테이블 컴포넌트를 사용하지 않고 쿼리 컴포넌트를 사용하니까 문제가 해결되었습니다. 테이...
이해진
•
1999.04.03 02:11
1
COMMENTS
/
0
LIKES
델파이와 MS Access
이정욱
•
1999.04.03 04:29
쩝.. 무엇인가 잘못된것 같기는 한데 말씀하신것을 보면 알수가 없네요... 이곳 자료실에 다이아몬드 컴포...
이진수
•
1999.04.02 06:31
1
COMMENTS
/
0
LIKES
아래 질문이 모호하다면...
안치봉
•
1999.04.02 19:38
이진수 wrote: > 아래 질문이 모호하다면... > TreeView에서 상위노드와 하위노드들간의 구분을 인덱스를...
이진수
1999.04.02 06:02
0
COMMENTS
/
0
LIKES
TreeView component에 관해서...
이헌
1999.04.01 18:29
0
COMMENTS
/
0
LIKES
마스타/디테일 디비그리드 속도?
최종근
•
1999.04.01 02:59
1
COMMENTS
/
0
LIKES
화일전송하는 소스 좀 부탁해요!!!
이정욱
•
1999.04.01 20:43
소켓을 이용한 화일 송수신에 대한 소스는... 구하기 힘들것 같네요.. ^^; 그러나 AsyncPro라는 컴포넌트...
문창완
•
1999.04.01 01:36
2
COMMENTS
/
0
LIKES
비디오화상위에 투명 이미지 쒸우기는..?
안치봉
•
1999.04.01 23:02
문창완 wrote: > 비디오 화상위에 투명 이미지를 씌우고자 하는데 잘 안돼네요... > 통신상에 있는 컴포...
문창완
•
1999.04.03 19:02
그 문제는 안치봉님 께서 알려준 방법으로 해결하기 보다는 인터넷에서 컴포넌트를 구해서 해결했습니다...
손창근
1999.04.01 01:11
0
COMMENTS
/
0
LIKES
delphi/400
밍시
•
1999.03.31 19:25
3
COMMENTS
/
0
LIKES
델파이에서 차트를 ...
안치봉
•
1999.03.31 21:52
밍시 wrote: > TChartFX를 사용하여 차트를 구성했습니다. > InstallShield를 사용해 인스톨 프로그램을 ...
밍시
•
1999.03.31 22:33
총무과에서 사용을 합니다. 여긴 전산실이지요 설치할때라면 언제를 예기하는지요 > 안녕하세...
안치봉
•
1999.04.01 01:52
밍시 wrote: > 총무과에서 사용을 합니다. > 여긴 전산실이지요 > > 설치할때라면 > 언제를 예기하는...
이상돈
1999/04/03 22:08
Views
663
Likes
0
Comments
1
Reports
0
Tag List
수정
삭제
목록으로
한델 로그인 하기
로그인 상태 유지
아직 회원이 아니세요? 가입하세요!
암호를 잊어버리셨나요?
번 호 : 2827
게시자 : 민성기 (오랑캐꽃)
등록일 : 1999-02-27 23:55
제 목 : [응모] 델파이 퀴즈...
안녕하세요... 민성기 입니다.
항상 퀴즈를 내 주시는 지훈님께 감사 드리며... ^^;
음... 예전엔 복잡하고 희안하게 했다가... 요즘엔 RX의 소스를
고대로 배껴서 쓰고 있습니다. 빠르고 좋길래... 흐흐흐...
퀴즈 응모 입니당...
procedure StretchBltTransparent(DstDC: HDC; DstX, DstY, DstW, DstH: Integer;
SrcDC: HDC; SrcX, SrcY, SrcW, SrcH: Integer; Palette: HPalette;
TransparentColor: TColorRef);
const
PaletteMask = $02000000;
var
Color: TColorRef;
bmAndBack, bmAndObject, bmAndMem, bmSave:HBitmap;
bmBackOld, bmObjectOld, bmMemOld, bmSaveOld: HBitmap;
MemDC, BackDC, ObjectDC, SaveDC: HDC;
palDst, palMem, palSave, palObj: HPalette;
function PaletteColor(Color: TColor): Longint;
begin
Result := ColorToRGB(Color) or PaletteMask;
end;
begin
{ Create some DCs to hold temporary data }
BackDC := CreateCompatibleDC(DstDC);
ObjectDC := CreateCompatibleDC(DstDC);
MemDC := CreateCompatibleDC(DstDC);
SaveDC := CreateCompatibleDC(DstDC);
{ Create a bitmap for each DC }
bmAndObject := CreateBitmap(SrcW, SrcH, 1, 1, nil);
bmAndBack := CreateBitmap(SrcW, SrcH, 1, 1, nil);
bmAndMem := CreateCompatibleBitmap(DstDC, DstW, DstH);
bmSave := CreateCompatibleBitmap(DstDC, SrcW, SrcH);
{ Each DC must select a bitmap object to store pixel data }
bmBackOld := SelectObject(BackDC, bmAndBack);
bmObjectOld := SelectObject(ObjectDC, bmAndObject);
bmMemOld := SelectObject(MemDC, bmAndMem);
bmSaveOld := SelectObject(SaveDC, bmSave);
{ Select palette }
palDst := 0; palMem := 0; palSave := 0; palObj := 0;
if Palette <> 0 then begin
palDst := SelectPalette(DstDC, Palette, True);
RealizePalette(DstDC);
palSave := SelectPalette(SaveDC, Palette, False);
RealizePalette(SaveDC);
palObj := SelectPalette(ObjectDC, Palette, False);
RealizePalette(ObjectDC);
palMem := SelectPalette(MemDC, Palette, True);
RealizePalette(MemDC);
end;
{ Set proper mapping mode }
SetMapMode(SrcDC, GetMapMode(DstDC));
SetMapMode(SaveDC, GetMapMode(DstDC));
{ Save the bitmap sent here }
BitBlt(SaveDC, 0, 0, SrcW, SrcH, SrcDC, SrcX, SrcY, SRCCOPY);
{ Set the background color of the source DC to the color, }
{ contained in the parts of the bitmap that should be transparent }
Color := SetBkColor(SaveDC, PaletteColor(TransparentColor));
{ Create the object mask for the bitmap by performing a BitBlt() }
{ from the source bitmap to a monochrome bitmap }
BitBlt(ObjectDC, 0, 0,SrcW, SrcH, SaveDC, 0, 0, SRCCOPY);
{ Set the background color of the source DC back to the original }
SetBkColor(SaveDC, Color);
{ Create the inverse of the object mask }
BitBlt(BackDC, 0, 0, SrcW, SrcH, ObjectDC, 0, 0, NOTSRCCOPY);
{ Copy the background of the main DC to the destination }
BitBlt(MemDC, 0, 0, DstW, DstH, DstDC, DstX, DstY, SRCCOPY);
{ Mask out the places where the bitmap will be placed }
StretchBlt(MemDC, 0, 0, DstW, DstH, ObjectDC, 0, 0, SrcW, SrcH, SRCAND);
{ Mask out the transparent colored pixels on the bitmap }
BitBlt(SaveDC, 0, 0, SrcW, SrcH, BackDC, 0, 0, SRCAND);
{ XOR the bitmap with the background on the destination DC }
StretchBlt(MemDC, 0, 0, DstW, DstH, SaveDC, 0, 0, SrcW, SrcH, SRCPAINT);
{ Copy the destination to the screen }
BitBlt(DstDC, DstX, DstY, DstW, DstH, MemDC, 0, 0,
SRCCOPY);
{ Restore palette }
if Palette <> 0 then begin
SelectPalette(MemDC, palMem, False);
SelectPalette(ObjectDC, palObj, False);
SelectPalette(SaveDC, palSave, False);
SelectPalette(DstDC, palDst, True);
end;
{ Delete the memory bitmaps }
DeleteObject(SelectObject(BackDC, bmBackOld));
DeleteObject(SelectObject(ObjectDC, bmObjectOld));
DeleteObject(SelectObject(MemDC, bmMemOld));
DeleteObject(SelectObject(SaveDC, bmSaveOld));
{ Delete the memory DCs }
DeleteDC(MemDC);
DeleteDC(BackDC);
DeleteDC(ObjectDC);
DeleteDC(SaveDC);
end;
헥헥~
쓸 때는 다음과 같이 ... ^^;
procedure TForm1.Button1Click(Sender: TObject);
var
DestBitmap : TBitmap;
SrcBitmap : TBitmap;
begin
DestBitmap := TBitmap.Create;
SrcBitmap := TBitmap.Create;
try
DestBitmap.Width := Image2.Picture.Bitmap.Width;
DestBitmap.Height := Image2.Picture.Bitmap.Height;
DestBitmap.Canvas.Draw(0, 0, Image2.Picture.Bitmap);
SrcBitmap.Assign(Image1.Picture.Bitmap);
StretchBltTransparent(
DestBitmap.Canvas.Handle,
0, 0, DestBitmap.Width, DestBitmap.height,
SrcBitmap.Canvas.Handle,
0, 0, SrcBitmap.Width, SrcBitmap.Height,
SrcBitmap.Palette,
clBlack
);
Image3.Picture.Bitmap.Assign(DestBitmap);
finally
DestBitmap.Free;
SrcBitmap.Free;
end;
end;
음... Image2의 이미지 중 검은 부분을 Image1에 '투명'하게
올려서리... Image3에 보여주는 놈 입니다.
이번 기회에 성능 죽여주는 투명 비트맵 예제를 건질 수 있으면
좋겠네요~
이상돈 wrote:
> 이미지가 두개 있습니다.
> 이미지1은 배경
> 이미지2는 사진(인물은외에는 일정한 색(파랑이나 검정)
> 두이미지를 합성하고 싶은데 쉽지가 않네요.
> 배경이미지에 이미지2를(인물부분만)합성해서
> 새이미지를 만들어 저장해야하거든요.
> 부탁합니다.
> 질문만 올려서 죄송....^^;