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

    Document Release 3.90 for WideStudio/MWT ver 3.90, Jul 2005


    WideStudio/MWT documents index | Table of contents

    Copyright(C) WideStudio/MWT Development Team, 1999-2005 Last modified: Jul 31, 2005