WideStudio/MWT Logo
WideStudio/MWT
Programming Guide
WideStudio/MWT Index
Table of contents


利用内存设备进行图片的作成和显示



制作和表示内存设备

利用存储器设备,可以直接对图片画像进行操作。


  • 存储器设备的图形绘画

  • 存储器设备的图片画像绘画

  • 存储器设备的直接参照和直接操作

  • 存储器设备的窗口显示
  • 以下我们将利用提供的ws/sampes/share/memdev/newproject. prj例子,介绍存储器设备的用法。这个范例中,按下读入按钮的后,001.jpg图片画像,将渐渐浮现出来。







    [渐渐显示出来的图片]

    这个范例的处理概要是如下。


  • 制作2个存储器设备

  • 存储器设备1中加入1001.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 函数制作窗口系统适合的Instance。

    接着,对存储器设备1的图片画层进行001.jpg追加。在存储器设备进行图片追加之前,象C 一样地用createPixmap 函数指定存储器设备大小并进行初始化。

    然后是存储器设备的图片追加。图片追加时,首先象D 一样调用beginDraw()函数。在E处 ,从管理图片的共同Instance中取得图片。在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