![]() | Programming Guide | WideStudio/MWT Index 目次 |
メモリーデバイスを利用したイメージの作成と表示
メモリーデバイスの作成と表示
メモリデバイスを利用するとイメージ画像の直接操作を行うことができます。
メモリデバイスへの図形の描画 メモリデバイスへのイメージ画像の描画 メモリデバイスの直接参照と、直接操作 メモリデバイスのウィンドウへの表示 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回、イメージを表示 します。
Copyright(C) WideStudio/MWT Development Team, 1999-2005 | Last modified: Jul 31, 2005 |