FreeBASIC マニュアルのトップに戻る

FreeBASIC Getgraphics

目次→描画ライブラリ参考→2次元 描画関数GET (GRAPHICS)←オリジナル・サイト

GET (描画) 左にメニュー・フレームが表示されていない場合は、ここをクリックして下さい

←リンク元に戻る プログラム開発関連に戻る

現在作業中のページか、画像バッファの、一部のコピーを取得します。

構文:
Get [source,] [STEP](x1, y1) - [STEP](x2, y2), dest

パラメタ:
source
画像バッファのアドレス。省略した場合は、現在の作業ページがコピーされます。
STEP
以下の座標が、絶対座標でないことを示します。
[STEP](x1, y1)
コピーするサブ画像の左上角の座標です。
STEP は、オフセット (x1, y1) が、現在の描画カーソル位置からの相対位置であることを示します。
[STEP](x2, y2)
コピーするサブ画像の右下角の座標です。
STEP は、オフセット x2y2 が、x1y1 からの相対位置であることを示します。
dest
画像データを格納するために、前もって割り当てたバッファのアドレス。

説明:
 Get は、座標 (x1, y1) と (x2, y2)によって指定された現在の作業中のページの長方形の部分を、コピーします。座標 (x1, y1) と (x2, y2)は、それぞれ、長方形の左上と右下の角を表します。
 Step は、左上の座標が、現在の描画ペン位置からの相対位置であることを示しています。右下の座標は、左上の座標からの相対位置になります。
 新しい画像バッファは、現在の画面モードの pixel format に合わせるために、フォーマットされます。

dest は、アドレスや、array(名前は後ろに空のカッコを付けない)や、新しいイメージバッファを受け取る array 内の最初の要素への参照、になることができます。
このメモリーは、画像バッファーを保持するために十分な量を割り当てなければなりません(必要なバイト数は、プログラムのコンパイルに使う -lang dialect によって異なります)。
有効な画像バッファは、ImageCreate 文を使うだけで簡単に作成できます。

source は、アドレス、 array、または、部分を検索する画像バッファを保持する array の最初の要素の参照です。
x1, y1, x2, y2, Step および dest は、この場合、同じ意味です。

長方形の座標は、最新の WINDOWView (描画) 命令文の影響を受けます。そして、View (描画)による、現在の切り取り領域セットの中になります(またはデフォルトのビューポート内)。そうでないと、不法な関数呼び出しランタイム・エラーになります。そして、関数は無効になります。

Runtime errors(ランタイム・エラー):
Get は、下の runtime errors の一つを表示します。:

(1) Illegal function call

方言差:
FB方言の用法に依存する、2種類のバッファ (詳細は GfxInternalFormats を参照) が、あります:



例:
注:FreeBASIC 1.08〜 で、SetEnviron を追加しなくても、日本語環境で描画画面が表示されるように改善されました。
#include once "fbgfx.bi"

' Sets the graphics method GDI
' 描画方法を GDI に設定
SetEnviron("fbgfx=GDI")

'' 400x300 32bit 画面を設定します
ScreenRes 400, 300, 32

'' 最初にいいものを描きます...
Line (10,10)-(140,30), RGB(255,255,0), bf
Draw String (30, 20), "Hello there!", RGB(255,0,0)

'' 画面の左上から 150x50 のブロックを、
'' GET を使って、画像バッファに、取得します...
Dim As fb.Image Ptr image = ImageCreate(150, 50)
Get (0,0)-(150-1,50-1), image

'' そして、これを、いたる所で繰り返します!
Put (0,50), image
Put (0,100), image
Put (0,150), image
Put (0,200), image
Put (0,250), image
Put (150,0), image
Put (150,50), image
Put (150,100), image
Put (150,150), image
Put (150,200), image
Put (150,250), image

ImageDestroy(image)

'' そして、全画面のあたりのフレーム..
Line (0,0)-(400-1,300-1), RGB(255,255,0), b

'' ここで全画面を取得します...
Dim As fb.Image Ptr big = ImageCreate(400, 300)
Get (0,0)-(400-1,300-1), big

'' そして、この "screenshot" を表示します。まるで映像がスクロールしているように...
Dim As Integer x = -350
While ((Inkey() = "") And (x < 350))
    ScreenLock
        Cls
        Put (x,0), big
    ScreenUnlock

    Sleep 100, 1

    x += 10
Wend

ImageDestroy(big)


twirl2  以下は、QB64 http://www.qb64.net/
サンプル・フォルダにあるプログラムを、FreeBASIC 用に微修正したものです。
QB64\programs\samples\misc\twirl2.bas
'Twirl by Antoni Gual, from an idea  by Steve Nunnaly
'for Rel's 9 LINER contest at QBASICNEWS.COM  1/2003
'------------------------------------------------------------------------

'$lang: "qb"

' Sets the graphics method GDI
' 描画方法を GDI に設定
SetEnviron("fbgfx=GDI")

1 IF i THEN CIRCLE (160, 100), i, (i MOD 16) + 32, , , .8 ELSE SCREEN 13
2 i = i + 1
3 IF i < 200 THEN GOTO 1 ELSE DIM b2%(5000)
4 w = (w + .3)
5 xmid = 140 + SIN(7 * w / 1000) * 110
6 ymid = 80 + SIN(11 * w / 1000) * 59
7 GET ((xmid - (SIN(w) * 28)), (ymid - (COS(w) * 20)))-((xmid - (SIN(w) * 28)) + 40, (ymid - (COS(w) * 20)) + 40), b2%
8 PUT ((xmid - (SIN(w - .04) * 27.16)), (ymid - (COS(w - .04) * 19.4))), b2%, PSET
9 IF LEN(INKEY$) = 0 THEN GOTO 4

参考:
2次元描画関数に戻る

←リンク元に戻る プログラム開発関連に戻る

ページ歴史:2019-03-04 11:38:42
日本語翻訳:WATANABE Makoto、原文著作者:SysOp

ホームページのトップに戻る

表示-非営利-継承