Q&A

  • [wlfans]두개의 이미지합성에 관하여?급합니다.
이미지가 두개 있습니다.

이미지1은 배경

이미지2는 사진(인물은외에는 일정한 색(파랑이나 검정)

두이미지를 합성하고 싶은데 쉽지가 않네요.

배경이미지에 이미지2를(인물부분만)합성해서

새이미지를 만들어 저장해야하거든요.

부탁합니다.

질문만 올려서 죄송....^^;

1  COMMENTS
  • Profile
    이정욱 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를(인물부분만)합성해서

    > 새이미지를 만들어 저장해야하거든요.

    > 부탁합니다.

    > 질문만 올려서 죄송....^^;





    • 심경섭
    • 1999.04.07 19:09
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.04.08 22:55
      repeat until 문으로 대체해 보세요. 심경섭 wrote: > 한 레코드의 한 필드를 처음부터 순차적으로 수...
    • 안치봉
      1999.04.07 19:54
      심경섭 wrote: > 메모컴포넌트의 텍스트 내용을 그대로 > > 인쇄를 하려고 레포트에 메모컴포넌트를 썼...
    • 김영묵
    • 1999.04.07 17:48
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      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
    • 안치봉
      1999.04.07 02:55
      율보 wrote: > 으.. 알려주세요.. > 후킹은 문제없이 됩니다.. > 또한 spy로 살펴보니 키스트로크도 제...
    • 이상돈
    • 1999.04.03 22:08
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      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
    • 이정욱
      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
    • 안치봉
      1999.04.06 22:31
      이광주 wrote: > THTML콤퍼넌트의 프린트기능을 구현하기 어려워 ActiveX Control에 있는 > IE를 불러 붙...
    • 이대선
    • 1999.04.03 05:44
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 안치봉
      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
    • 이정욱
      1999.04.03 04:29
      쩝.. 무엇인가 잘못된것 같기는 한데 말씀하신것을 보면 알수가 없네요... 이곳 자료실에 다이아몬드 컴포...
    • 이진수
    • 1999.04.02 06:31
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 안치봉
      1999.04.02 19:38
      이진수 wrote: > 아래 질문이 모호하다면... > TreeView에서 상위노드와 하위노드들간의 구분을 인덱스를...
    • 이헌
    • 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 23:02
      문창완 wrote: > 비디오 화상위에 투명 이미지를 씌우고자 하는데 잘 안돼네요... > 통신상에 있는 컴포...
    • 문창완
      1999.04.03 19:02
      그 문제는 안치봉님 께서 알려준 방법으로 해결하기 보다는 인터넷에서 컴포넌트를 구해서 해결했습니다...
    • 밍시
    • 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: > 총무과에서 사용을 합니다. > 여긴 전산실이지요 > > 설치할때라면 > 언제를 예기하는...