| Programming Guide | WideStudio/MWT Index Table of contents |
메모리디바이스를 사용한 이미지의 작성과 표시
메모리디바이스의 작성과 표시
메모리디바이스를 사용하면 이미지 화상에 직접 조작을 할수가있습니다.
메모리디바이스에로의 도형의 묘화 메모리디바이스에로의 이미지 화상의 묘화 메모리디바이스의 직접 참조와 직접 조작 메모리디바이스의 윈도우에로의 표시 ws/sampes/share/memdev/newproject.prj 에서 제공되여있는 샘플을 예로 메모리디바이스의 사용법을 보아봅시다. 이 샘플은 단추를 누르면 001.jpg 라는 이미지 화상을 읽어놓고 점점 떠오르도록 묘화합니다.
이 샘플의 처리개요는 다음과 같습니다.
[점점 떠오르는 이미지 화상의 표시]
메모리디바이스를 2개 작성 메모리디바이스1에 001.jpg 를 묘화 1. 메모리디바이스2에 메모리디바이스에서 휘도를 변해서 전송 2. 메모리디바이스2의 내용을 윈도우에 전송 휘도를 올리면서 1,2을 되푸리한다 #include <WScom.h> #include <WSCfunctionList.h> #include <WSCbase.h> //---------------------------------------------------------- //Function for the event procedure //---------------------------------------------------------- #include <WSDappDev.h> #include <WSCcolorSet.h> #include <WSCimageSet.h> #include <WSCmainWindow.h> extern WSCmainWindow* newwin000; #include <WSDmwindowDev.h> WSDmwindowDev* mdev = NULL; WSDmwindowDev* mdev2 = NULL; void btnep(WSCbase* object){ WSDdev* dev = newwin000->getdev(); //A if (mdev == NULL){ //B mdev = WSDmwindowDev::getNewInstance(); mdev2 = WSDmwindowDev::getNewInstance(); } mdev->createPixmap(200,200); //C mdev->beginDraw(0,0,200,200); //D WSDimage* image = WSGIappImageSet()->getImage("001.jpg"); //E mdev->drawStretchedImage(0,0,200,200,image); //F mdev->endDraw(); //G mdev2->createPixmap(200,200); //H mdev->initBuffer(); //I mdev2->initBuffer(); //J long i,x,y; for(i=0;i<100; i++){ for(x=0; x<200; x++){ for(y=0; y<200; y++){ WSCuchar r,g,b; mdev->getBufferRGB(x,y,&r,&g,&b); //K r = (WSCushort)((double)(r*i)/100); //L g = (WSCushort)((double)(g*i)/100); //L b = (WSCushort)((double)(b*i)/100); //L mdev2->setBufferRGB(x,y,r,g,b); //M } } mdev2->putBufferToPixmap(); //N mdev2->copyToWindow(dev,0,0,200,200,0,0); //P } } static WSCfunctionRegister op("btnep",(void*)btnep);A 에서 묘화할 윈도우의 디바이스를 취득합니다.
B 에서는 처음에 단추가 눌리운 경우에 메모리디바이스를 작성합니다. 메모리디바이스는 new 연산자에서의 작성은 못합니다. 메모리디바이스는 윈도우 시스템에 위존함으로 getNewInstance 메서드가 윈도우 시스템 에 적합한 인스턴스를 작성합니다.
다음에 메모리디바이스1에는 이미지화상 001.jpg 의 묘화입니다. 메모리디바이스에 묘화를 하기전에 C 와 같이 createPixmap 메서드로 메모리디바이스의 크기를 지정해서 초기화를 합니다.
다음에 메모리디바이스에 묘화합니다. 묘화를 할 경우는 먼저 D 와 같이 beginDraw() 메서드를 부릅니다. E 에서 이미지 관리 전역 인스턴스에서 이미지를 취득합니다. F 에서는 취득한 이미지를 표시하고있습니다. 묘화가 끝나면 endDraw() 메서드를 부릅니다.
H 에서 메모리디바이스2도 초기화해놓습니다. I,J 로 직접 조작을위한 버퍼를 초기화합니다. 이 때 내부의 이미지의 데이터가 버퍼에 전송됩니다. K 에서 메모리디바이스1의 RGB값을 취득합니다. L 에서 취득한 RGB값의 휘도를 조절하여 M 에서 메모리디바이스1에 셋합니다.
N 에서는 버퍼에 설정된 내용을 내부의 이미지에 다시 전송해서 반영합니다. P 로 반영한 이미지 데이터를 윈도우에 전송해서 표시하고있습니다. 100단계의 휘도계산의 루프를 실행하고 휘도를 올려놓고 100번 이미지를 표시합니다.
| Copyright(C) WideStudio/MWT Development Team, 1999-2005 | Last modified: Jul 31, 2005 |