>> 질문 : 이재근님 (
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를 그대로 사용해서 적용할수도 있답니다.