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

C++빌더 FAQ
C++Builder Programming FAQ
[33] [API][VCL] 이미지를 화면에 뿌리기
김성진.kark [kark] 16215 읽음    2001-09-05 23:21
>> 질문 : 이재근님 ( bcbdn C++Builder Q&A 10559번 )

안녕하세요.. 완전 초보 2틀 됐습니다.

MFC를 사용하다가 ㅡㅡ 높은 분의 명으로 인해 C++ Builder 를 사용하게 되었는뎅..

흐미.. 그림 그리기가 절 속터지게 하네여..

기꺼이 도움을 받을까 합니다.

폼에다가 256*256의 히스토 그램을 그리려고 합니다.

    Size szImg;
    szImg.cx = 256;
    szImg.cy = 256;

    bi = (BITMAPINFOHEADER*)MakeDIB(szImg);

    SetStretchBltMode(dc.m_hDC,COLORONCOLOR);
    StretchDIBits(dc.m_hDC,
        0,128,256,256,
        0,0,256,256,
        HIST, (LPBITMAPINFO)bi, DIB_RGB_COLORS, SRCCOPY);

위에 예제는 MFC에서 사용한건데여..

HIST 에 이미지 데이터가 저장되어 있고.. 위에서 영역을 DIB로 바꾸고..

그냥 Copy 해준거거든여 ㅡㅡ;

근데.. C Builder 에서 어찌 해야 하나여?

Canvas를 이용하여 그리라고 하는뎅.. 도무지 개념이 안서네여..


>> 답변1 : 조로님 ( bcbdn C++Builder Q&A 10564번 )

밑에 소스 중에 특별히 바꾸실건 없구여...

빌더는 DC에 대한 클래스가 구현 되어있습니다..

TCanvas라는 것인디여... 여기다 그리시면 됩니다..

그러니까 dc.m_hDC를 Canvas->Handle로 하시면 됩니다..

그게 폼의 DC라면 그냥 Canvas로 하시면되구여.. Image라면

Image->Canvas로 하시면 됩니다..

그렇게만 하시면 특별히 고치실것은 없는거 같은디...

MFC Class를 사용하신곳만 고치시고 나머지 API는 그대로 쓰셔도 무방합니다..


>> 답변2 : 개박살.U&I ( bcbdn C++Builder Q&A 10563번 )

안녕하세요? 개박살입니다.

먼저, 빌더에 입문을 환영합니다 ^^

폼에다가 Bitmap 데이타를 뿌리실려는 작업같은데, 저도 허접이지만 잠깐 설명을 드리자면,

윈도우는 DC가 있죠? 그걸 빌더에서는 Canvas라는 이름의 클래스로 캡슐화 해놓았죠

Canvas->Handle이 곧 HDC이죠

TForm은 Canvas를 가지고 있는데 이것을 이용해서 그리면 됩니다.

Bipmap 화일을 Canvas에 그리는 예제를 보여드리면,

     Graphics::TBitmap *Bitmap1 = new Graphics::TBitmap();
     Bitmap1->LoadFromFile("C:\\Borland\\Borland Shared\\Images\\Splash\\256color\\factory.bmp");
     Canvas->Brush->Bitmap = Bitmap1;
     Canvas->FillRect(Rect(0,0,100,100));
     delete Bitmap1;

이렇게 하는거죠

님께서는, 포인터로 이미지 데이타를 가지고 있는거 같은데 그부분은 저도 확실하지는 않는데, 일단

답변 드리자면, TStream을 이용해서 Canvas로 적용하는거 같습니다.


     unsigned char ImageBuf[1000];   <<- 이것이 만약 이미지데이타라면,,

     TMemoryStream *MyStream = new TMemoryStream();
     MyStream->WriteBuffer(ImageBuf, sizeof(ImageBuf));

     Graphics::TBitmap *Bitmap1 = new Graphics::TBitmap();
     Bitmap1->LoadFromStream(MyStream);
     Canvas->Brush->Bitmap = Bitmap1;
     Canvas->FillRect(Rect(0,0,100,100));

     delete MyStream;

이런식으로 ^^; (이건 직접 해보지는... -- )

그럼 참고하세요~~

ps. 참고로, 빌더에서도 API를 그대로 사용해서 적용할수도 있답니다.




+ -

관련 글 리스트
33 [API][VCL] 이미지를 화면에 뿌리기 김성진.kark 16215 2001/09/05
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.