#include #include #include #include #include "pixiadll.h" #include "px_samp.h" HINSTANCE hInst; int CALLBACK _DllMainCRTStartup( HINSTANCE hInstance, DWORD fdwReason, LPVOID lpReserved ) { hInst = hInstance; return(1); } /* テスト用の設定パラメータ 何らかの設定ダイアログをもつフィルタの場合にはこのように使用します。 */ typedef struct tagSAMPLE{ int a; int b; }SAMPLE; SAMPLE sample; /* 設定パラメータをもつフィルタでは、このように設定パラメータを読み書きする。 */ BOOL ReadData( LPSTR szDir ) { unsigned char szDataDir[256]; HFILE hFile; strcpy( szDataDir, szDir ); strcat( szDataDir, "px_samp.dat" ); if(-1==(hFile=_lopen( szDataDir,OF_READ|OF_SHARE_DENY_WRITE))){ sample.a = 0; sample.b = 0; return( TRUE ); } _lread( hFile,(LPBYTE)&sample, sizeof(SAMPLE)); _lclose( hFile ); return( TRUE ); } BOOL WriteData( LPSTR szDir ) { unsigned char szDataDir[256]; HFILE hFile; strcpy( szDataDir, szDir ); strcat( szDataDir, "px_samp.dat" ); if(-1==(hFile=_lcreat(szDataDir,0))) return( FALSE ); _lwrite( hFile,(LPBYTE)&sample, sizeof(SAMPLE)); _lclose( hFile ); return( TRUE ); } /*------------------------------------------------------------ フィルタのタイトルを得る 入力: hWnd.. オーナーウインドウハンドル 通常は使用しないが,NULLの場合も考慮すること 出力: fOpt.. 詳細設定をもつかどうかのフラグ ver.. DLL仕様のバージョン(Pixiaでは10にする。) info.. リストボックスに表示する文字列 */ BOOL FilterGetTitle( HWND hWnd, LPSTR info, BOOL *opt, int *ver ) { strcpy( info, "テストフィルタ" ); *opt = TRUE; *ver = 10; return( TRUE ); } /*------------------------------------------------------------ フィルタの実行 入力: */ BOOL FilterProc(HWND hWnd, LAYERINFO *li, SETLINEFUNC *sf, GETLINEFUNC *gf, LPSTR szDir,LPBYTE lpExt) { int i, j; int buff_size; LPBYTE lpWork; ReadData( szDir ); // 設定したパラメータを読み込む buff_size = (li->cx * 3 + 100); lpWork = (LPBYTE)GlobalAllocPtr( GHND, buff_size ); int ps[li->cy][li>-cx][2]; //データを配列に移す作業 j行i列、RGBの赤、緑、青 int ps2[li->cy][li>-cx][2]; if( lpWork == NULL ) return( FALSE ); for( j = 0; j < li->cy; j ++ ){ // 進行状況の表示 if( j % 5 ==0 ){ SendMessage( hWnd, MM_DISPINFO, INFO_PERCENTAGE, j * 100 / li->cy ); } // 画素情報を得る gf->GetLine( j, 0, li->cx-1, lpWork, -1 ); for( i = 0; i < li->cx;i ++ ){ // 赤ゲット ps[j][i][0] = lpWork[i*3]; // 青ゲット ps[j][i][1] = lpWork[i*3+1]; // 緑ゲット ps[j][i][2] = lpWork[i*3+2]; } } GlobalFreePtr( lpWork ); // 画素情報を保存する。 //sf->SetLine( j, 0, li->cx-1, lpWork, -1 ); // 進行状況表示の終了 SendMessage( hWnd, MM_DISPINFO, INFO_NONE, 0 ); return( TRUE ); } BOOL pictToCircle(LAYERINFO *li,int *ps,int *ps2,int size,int x,int y) { int startX; int startY; int endX; int endY; int i; int j; startX=CutNum(0,li->cx,x-size); startY=CutNum(0,li->cy,y-size); endX =CutNum(0,li->cx,x+size); endY =CutNum(0,li->cy,y+size); int sizeX=endX-startX; int sizeY=endY-startY; float ar=0; float ag=0; float ab=0; for(j=0;j0.8){ }else{ } } BOOL function CirclePaint(int *px2,int x,int y,int sx,int sy,int ex,int ey,int r,int g,int b){ //x,yから一定距離以内にある点を全て円で壁画する関数 //実はここは独自処理を追加したいので、後で色々いじれたらいいなあと思う、予定だけだけど //全部計算後値のエラーが起きたときにそなえ、全ての地点を整える予定 //円だけならライブラリでいいのだがそのうち、エリア範囲を判断して他の形を選んだり、色の塗り方選んだり独自処理を追加する予定なので、数値レベルで直接いじくっている int hekigaOk=0; int r2=r^2; for(int j=sy;jl){ l=min; } if(max