| WideStudio Programming Guide | WideStudio 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.70 for WideStudio ver 3.70, May 2004

WideStudio documents index | Table of contents

Copyright(C) WideStudio Development Team, 1999-2004 | Last modified: May 25, 2004