画像の情報を検索します。
構文:
declare function Imageinfo ( byval image as const any ptr, byref width as long = 0, byref height as long = 0, byref bypp as long = 0, byref pitch as long = 0, byref pixdata as any ptr = 0, byref size as long = 0 ) as long
declare function Imageinfo ( byval image as const any ptr, byref width as longint, byref height as longint, byref bypp as longint = 0, byref pitch as longint = 0, byref pixdata as any ptr = 0, byref size as longint = 0 ) as long
用法:
in the LONG (or INTEGER<32>) version of the function:
result = Imageinfo( image [, [ width ] [, [ height ] [, [ bypp ] [, [ pitch ] [ , [ pixdata ] [, size ]]]]]] )
in the LONGINT (or INTEGER<64>) version of the function:
result = Imageinfo( image , width , height [, [ bypp ] [, [ pitch ] [ , [ pixdata ] [, size ]]]] )
パラメタ:
image
画像のアドレス。
width
画像の幅を、画素数(ピクセル)で格納。
height
画素の画像の高さを、画素数(ピクセル)で格納。
bypp
画像の画素あたりのバイト、すなわち、バイトで表現される1画素のサイズを格納。
pitch
画像のピッチを格納します。すなわち、バイトで表現されるそれぞれの走査線(列)のサイズ。
これは、width * bypp ぴったりより、多いかもしれないことに注意してください。なぜなら、走査線は、それらをメモリで、よりよく並べられるように水増しされるかもしれないので。
pixdata
画像の最初の走査線の始まりのアドレスを、格納します。
size
メモリ中の、画像のバイト表示のサイズを、格納。
戻り値:
image が、有効な画像を示さないなら、1(1)が、返されます。
さもなければ、width, height, bypp, pitch, pixdata および size に適切な値を割り当てます。そして、(0) を返します。
説明:
ImageInfo は、その寸法や色の深度など、画像の様々な情報を提供します。また、ピクセル・バッファで、全ての画素データに直接アクセスするために必要な情報を、提供します。
また、メモリの画像サイズを提供できます。既存の画像をコピーしたり、ファイルに画像を書き込むときに、メモリを割り当てるために役立ちます。
ImageInfo は、内部 FB.IMAGE 構造体(
fbgfx.bi で定義)にメンバーデータへの型付きポインターを介して直接アクセスするのではなく、画像の主な特性にアクセスする代替方法です。
ImageInfo によって返されるエラーコードは、次の行で
Err を使って確認できます。
ImageInfo の関数バージョンは、直接、32ビット
Long としてエラーコードを返します。
例:
注:FreeBASIC 1.08〜 で、SetEnviron を追加しなくても、日本語環境で描画画面が表示されるように改善されました。
' Sets the graphics method GDI
' 描画方法を GDI に設定
SetEnviron("fbgfx=GDI")
'' pixelptr(): imageinfo() を使って、画像のピクセルへのポインターを見つけます
'' エラーでは null を、境界外では x,y を返します
Function pixelptr
(ByVal img
As Any Ptr,
ByVal x
As Integer,
ByVal y
As Integer) As Any Ptr
Dim As Long w, h, bypp, pitch
Dim As Any Ptr pixdata
Dim As Long result
result =
(imageinfo
(img, w, h, bypp, pitch, pixdata
) =
0)
If result
Then
If x <
0 Or x >= w
Then Return 0
If y <
0 Or y >= h
Then Return 0
Return pixdata + y * pitch + x * bypp
Else
Return 0
End If
End Function
'' 使用例:
'' 320*200 描画画面, 8 bits per pixel
ScreenRes 320,
200,
8
Dim As Any Ptr ip
'' 画像ポインタ
Dim As Byte Ptr pp
'' 画素ポインタ (use byte for 8 bits per pixel)
ip =
ImageCreate(32,
32) '' 画像を生成 (32*32, 8 bits per pixel)
If ip <>
0 Then
'' 画像の上にパターンを描く
For y
As Integer =
0 To 31
For x
As Integer = y -
5 To y +
5 Step 5
'' x,y 位置のピクセルへのポインターを見つけます
'' 注意: これはすべてのピクセルのために行うには非能率ですl!
pp = pixelptr
(ip, x, y
)
'' 成功なら、ピクセルで値をプロットします
If (pp <>
0) Then *pp =
15
Next x
Next y
'' 画像を置き、そのまわりの境界を描きます
Put (10,
10), ip,
PSet
Line (9,
9)-
Step(33,
33),
4, b
'' メモリを回収するために画像を破壊します
ImageDestroy ip
Else
Print "Error creating image!"
End If
Sleep
' Sets the graphics method GDI
' 描画方法を GDI に設定
SetEnviron("fbgfx=GDI")
'' 32ビットの描画画面と、画像を作成します
ScreenRes 320,
200,
32
Dim image
As Any Ptr =
ImageCreate
( 64,
64 )
Dim pitch
As Long
Dim pixels
As Any Ptr
'' ピクセル・データで繰り返すことができる情報を取得します
If 0 <> imageinfo
( image, ,,, pitch, pixels
) Then
Print "unable to retrieve image information."
Sleep
End
end
If
'' 直接画素メモリを操ることによって、画像に、模様をつけます
For y
As Integer =
0 To 63
Dim row
As ulong
Ptr = pixels + y * pitch
For x
As Integer =
0 To 63
row
[x
] =
RGB
(x *
4, y *
4,
(x
Xor y
) *
4)
Next x
Next y
'' 画面に画像を描きます
Put (10,
10), image
ImageDestroy
( image
)
Sleep
方言差:
- 別名 __Imageinfo で参考されない限り、-lang qb 方言では、使えません。
QBからの違い:
参照: