WideStudio Programming Guide

| WideStudio Programming Guide | WideStudio Index 目次

> ## メモリーデバイスを利用したイメージの作成と表示

> ### メモリーデバイスの作成と表示

> メモリデバイスを利用するとイメージ画像の直接操作を行うことができます。
> - メモリデバイスへの図形の描画
> - メモリデバイスへのイメージ画像の描画
> - メモリデバイスの直接参照と、直接操作
> - メモリデバイスのウィンドウへの表示
> ws/sampes/share/memdev/newproject.prj で提供されているサンプルを例に、 メモリデバイスの使い方について見ていきましょう。このサンプルは、ボタン を押すと 001.jpg なるイメージ画像を読み込んで、だんだん浮かび上がって 来るように描画します。

> ［段々と浮かび上がって来るイメージ画像の表示］
> このサンプルの処理の概要は次の通りです。
> - メモリデバイスを2つ作成
> - メモリデバイス1に 001.jpg を描画
> - 1. メモリデバイス２にメモリデバイスから輝度を変えて転送
> - 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 | 目次

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