Wide Studio Programmer's Guide

Wide Studio Home
Up to


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



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

メモリデバイスを利用するとイメージ画像の直接操作を行うことができます。
  • メモリデバイスへの図形の描画
  • メモリデバイスへのイメージ画像の描画
  • メモリデバイスの直接参照と、直接操作
  • メモリデバイスのウィンドウへの表示
  • 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 で、メモリデバイス2にセットします。 N では、バッファに設定された内容を内部のイメージに転送しなおし, 反映します. P で、反映したイメージデータをウィンドウに転送し、表示しています。 100段階の輝度計算のループを行い、輝度をあげながら100回、 イメージを表示します。
    Document Release 3.00

    For Use with Wide Studio Release 3.00, Summper 2002


    Wide Stuido Home | Up to

    Copyright(C) T. Hirabayashi, 1999-2002 Last modified: June 10, 2002