画像描画関数/PICTファイル描画関数
PP BasicではPICTファイルを変数としてメモリに格納し、自由な位置、自由なサイズで画面上に描画することが出来ます。
PICT型変数の宣言:pict
PICT型変数を宣言します。
現在のPPBasicではPICT型変数は配列変数として宣言することは出来ません。
#-----------------------------サンプルコード
pict mypict
PICTファイルからのPICTデータの読み込み:openPictFile
PICTファイルを開き、PICTデータをPICT型変数に格納します。
#-----------------------------サンプルコード
openPictFile("mypict.pict",mypict)
PICTリソースからのPICTデータの読み込み:openPictRes
PICTリソースを開き、PICTデータをPICT型変数に格納します。
PICTデータのPICTファイルへの書き込み:savePictFile
PICT型変数のPICTデータをPICTファイルに書き込みます。
#-----------------------------サンプルコード
savePictFile("mypict.pict",mypict)
PICT変数のコピー:copyPict
PICT型変数のPICTデータを他のPICT変数にコピーします。
#-----------------------------サンプルコード
copyPict(srcpict,dstpict)
PICT変数を領域を指定してコピー:copyPictR
PICT型変数のPICTデータの内、矩形で指定た領域を他のPICT変数にコピーします。
矩形領域は、矩形の左上座標(x1,y1)及び右下座標(x2,y2)で指定します。
#-----------------------------サンプルコード
copyPictR(srcpict,dstpict,x1,y1,x2,y2)
PICT変数内のPICTデータの削除:killPict
現在PICT型変数に保持されているPICTファイルを削除し、メモリを解放します。
既にPICTデータを格納しているPICT型変数に対して、現在のデータを破棄して新しいPICTデータを格納したい場合、必ずkillPict文を使用して現在のPICTデータを削除しなければなりません。
プログラマがkillPictで明示的に削除しなかったPICTデータは、BASICプログラムの実行終了時に自動的に削除されます。
#-----------------------------サンプルコード
killPict(mypict)
PICTの透過色を指定:setPictTransparentColor
PICTデータ描画時の透過色をRGBで指定します。
RGBの各色は0.0〜1.0の範囲の実数で指定できます。
デフォルトでは透過色は白色に設定されています。
#-----------------------------サンプルコード:透過色を赤に設定
setPictTransparentColor(1,0,0)
PICTの透過/非透過を設定:setPictTransparentFlug
PICTデータ描画時に透過モードで描画するか否か設定します。
引数を0にした場合は非透過、1にした場合は透過モードになります。
デフォルトでは透過モードは非透過に設定されています。
#-----------------------------サンプルコード
RGBForeColor(0.8,0.8,0.8)
PaintRect(274,137,422,211)
pict ptest
openPictFile("tmp.pict",ptest)
setPictTransparentColor(0.00,0.41176,0.24705)
setPictTransparentFlug(0)
x0=200 :y0=100
drawPict(ptest,x0,y0)
#-----------------------------結果
setPictTransparentFlug(0)を指定した場合
setPictTransparentFlug(1)を指定した場合
PICTデータを元画像サイズを変更せずに座標指定して描画します。
与える座標はPICTデータの左上座標になります。
#-----------------------------サンプルコード
pict ptest
openPictFile("tmp.pict",ptest)
x=200 :y=100
drawPict(ptest,x,y)
#-----------------------------結果
PICTデータの矩形領域指定表示:drawPictR
PICTデータを矩形枠を指定して描画します。
矩形枠のサイズが元画像と異なる場合、矩形枠のサイズに合うように元画像をリサイズして表示します。矩形枠は矩形の左上座標(ix1,iy1)および右下座標(ix2,iy2)で指定します。
#-----------------------------サンプルコード
pict ptest
openPictFile("tmp.pict",ptest)
x0=200 :y0=100
px=148 :py=74
x1=x0 :y1=y0
x2=x0+px :y2=y0+py
drawPictR(ptest,x1,y1,x2,y2)
x0=200 :y0=185
x1=x0 :y1=y0
x2=x0+px*2 :y2=y0+py
drawPictR(ptest,x1,y1,x2,y2)
#-----------------------------結果
PICTの回転及び拡大/縮小表示:drawPictRot
PICTデータを画像中心位置、角度及び縦/横倍率を指定して描画します。
第一引数 :PICT変数
第二、第三引数:画像の中心座標(x,y)
第四引数 :角度[deg](角度はx軸方向を0°として反時計回りに指定)
第五、第六引数:横倍率、縦倍率
#-----------------------------サンプルコード
pict ptest
openPictFile("tmp.pict",ptest)
cx=200 :cy=100
thi=10
zx=2 :zy=1
drawPictRot(ptest,cx,cy,thi,zx,zy)
#-----------------------------結果
自由な四点で構成される四角形の中にPICTを表示:drawPictFRect
自由な四点を指定してPICTデータを描画します。
各点の座標は左上の点から時計回りに指定します。
#-----------------------------サンプルコード1
pict ptest
openPictFile("tmp.pict",ptest)
x0=200 :y0=100
x1=x0 :y1=y0
x2=x0+150 :y2=y0+20
x3=x0+200 :y3=y0+70
x4=x0-40 :y4=y0+120
drawPictFRect(ptest,x1,y1,x2,y2,x3,y3,x4,y4)
#-----------------------------結果
#-----------------------------サンプルコード2
# 画像回転ムービー作成
ソースコード
#-----------------------------結果
現在のメインウィンドウに描画されている画像を矩形枠を指定して切り抜き、PICT型変数に格納します。
矩形枠は左上座標(x1,y1)及び右下座標(x2,y2)で指定します。
#-----------------------------サンプルコード
getCurrentPict(mypict,x1,y1,x2,y2)
二次元配列変数に格納したRGBデータから画像を生成し、バックグラウンドRGB画像データとして格納します。
二次元の配列変数はix,iyよりも大きい数kx,kyを使用してR(kx,ky)で宣言します。
指定するデータは
0<=R(x,y)<=1、0<=G(x,y)<=1、0<=B(x,y)<=1の範囲で指定します。
#-----------------------------サンプルコード
ix=200
iy=100
dim r(ix+1,iy+1),g(ix+1,iy+1),b(ix+1,iy+1)
ix2=ix/2
iy2=iy/2
for i=1 to 360 step 1
x=int(sin(i/180*3.141592)*ix2)+ix2
y=int(cos(i/180*3.141592)*iy2)+iy2
r(x+1,y+1)=1
next
setRGBpictFromRGBData(ix+1,iy+1,r,g,b)
flushMainWin
#-----------------------------結果
二次元配列変数に格納したRGBデータから画像を生成し、PICT変数に格納します。
二次元の配列変数はix,iyよりも大きい数kx,kyを使用してR(kx,ky)で宣言します。
指定するデータは
0<=R(x,y)<=1、0<=G(x,y)<=1、0<=B(x,y)<=1の範囲で指定します。
#-----------------------------サンプルコード
ix=200
iy=100
dim r(ix+1,iy+1),g(ix+1,iy+1),b(ix+1,iy+1)
ix2=ix/2
iy2=iy/2
for i=1 to 360 step 1
x=int(sin(i/180*3.141592)*ix2)+ix2
y=int(cos(i/180*3.141592)*iy2)+iy2
r(x+1,y+1)=1
next
pict mypict
setPictVarFromRGBData(ix+1,iy+1,r,g,b,mypict)
drawPict(mypict, 1, 1)
drawPict(mypict, 50, 25)
drawPict(mypict,100, 50)
#-----------------------------結果
バックグラウンドRGB画像データ(ファイルメニューから読み込んだものか、setRGBpictで作成したもの)のサイズを取得します。
取得したデータは変数ix,iyに格納されます。
#-----------------------------サンプルコード
getRGBpictSize(ix,iy)
ファイルメニューから読み込んだバックグラウンドPICTデータのサイズを取得します。
取得したデータは変数ix,iyに格納されます。
#-----------------------------サンプルコード
getBgPictSize(ix,iy)
PICT変数に格納した画像のサイズを取得します。
取得したデータは変数ix,iyに格納されます。
#-----------------------------サンプルコード
getPictVarSize(mypict,ix,iy)
ファイルメニュー等から読み込んだバックグラウンドRGB画像データからRGBデータを取り出し、二次元配列r(ix,iy), g(ix,iy), b(ix,iy)へ格納します。
取得する範囲は矩形で指定します。矩形は左上座標(x1,y1)及び右下座標(x2,y2)で指定します。
画像データは二次元配列r,g,bの領域(x1,y1)〜(x2,y2)の範囲に0〜1の濃度で代入されます。
#-----------------------------サンプルコード
x1=101:y1=101
x2=200:y2=200
x0=x2-x1+1
y0=y2-y1+1
dim r(x0,y0),g(x0,y0),b(x0,y0)
getRGBDataFromRGBPict(x1,y1,x2,y2,r,g,b)
ファイルメニュー等から読み込んだバックグラウンドピクチャーからRGBデータを取り出し、二次元配列r(ix,iy), g(ix,iy), b(ix,iy)へ格納します。
取得する範囲は矩形で指定します。矩形は左上座標(x1,y1)及び右下座標(x2,y2)で指定します。
画像データは二次元配列r,g,bの領域(x1,y1)〜(x2,y2)の範囲に0〜1の濃度で代入されます。
#-----------------------------サンプルコード
x1=101:y1=101
x2=200:y2=200
x0=x2-x1+1
y0=y2-y1+1
dim r(x0,y0),g(x0,y0),b(x0,y0)
getRGBDataFromBgPict(x1,y1,x2,y2,r,g,b)
PICT変数からRGBデータを取り出し、二次元配列r(ix,iy), g(ix,iy), b(ix,iy)へ格納します。
取得する範囲は矩形で指定します。矩形は左上座標(x1,y1)及び右下座標(x2,y2)で指定します。
画像データは二次元配列r,g,bの領域(x1,y1)〜(x2,y2)の範囲に0〜1の濃度で代入されます。
#-----------------------------サンプルコード
pict mypict1
pict mypict2
pict mypict3
openPictFile("tmp.pict",mypict1)
getPictVarSize(mypict1,ix,iy)
x1=int(ix/2):y1=int(iy/2)
x2=ix :y2=iy
x0=x2-x1+1
dim r(ix,iy),g(ix,iy),b(ix,iy)
#--------PICTデータの右下1/4の領域を取得
getRGBDataFromPictVar(mypict1,x1,y1,x2,y2,r,g,b)
#--------取得したデータに濃度変換を施し、mypict2に格納する。
for i=x1 to x2
for j=y1 to y2
r(i,j)=r(i,j)*(i-x1)/x0
g(i,j)=g(i,j)*(i-x1)/x0
b(i,j)=b(i,j)*(i-x1)/x0
next
next
setPictVarFromRGBData(ix,iy,r,g,b,mypict2)
#--------右下1/4の領域をmypict3にコピー
copyPictR(mypict2,mypict3,x1,y1,x2,y2)
#--------PICT変数mypict1,mypict3の描画
drawPict(mypict1,100,100)
drawPict(mypict3,100+x1,100+y1)
#-----------------------------結果