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

FreeBASIC ImageInfo

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

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

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

画像の情報を検索します。

構文:
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


image

' 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

イメージ
方言差:
QBからの違い:
参照:
2次元描画関数に戻る
←リンク元に戻る プログラム開発関連に戻る

ページ歴史:2023-11-11 03:36:15
日本語翻訳:WATANABE Makoto、原文著作者:CountingPine

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

表示-非営利-継承