WideStudio Programming Guide

| WideStudio Programming Guide | WideStudio 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번 이미지를 표시합니다.

Document Release 3.70 for WideStudio ver 3.70, Feb 2004

WideStudio documents index | Table of contents

Copyright(C) T. Hirabayashi, 2000-2004 | Last modified: Feb 25, 2004