ImageInfo
 
检索有关图像的信息

语法

Declare Function ImageInfo ( ByVal image As Any Ptr, ByRef width As Integer = 0, ByRef height As Integer = 0, ByRef bypp As Integer = 0, ByRef pitch As Integer = 0, ByRef pixdata As Any Ptr = 0, ByRef size As Integer = 0 ) As Integer

用法

result = ImageInfo( image [, [width ] [, [height ] [, [bypp ] [, [pitch ] [, [pixdata ] [, size ]]]]]] )

参数

image
图像的地址。
width
存储图像的宽度,以像素为单位。
height
存储图像的高度,以像素为单位。
bypp
存储图像每像素的字节 - 即单个像素的大小,以字节为单位。
pitch
存储图像的间距 - 即每个扫描线(行)的大小(以字节为单位)。请注意,这可能不仅仅是width * bypp ,因为扫描线可能会被填充,以使其在内存中更好地对齐。
pixdata
存储图像的第一条扫描线的起始地址。
size
将图像的大小存储在内存中,以字节为单位。

返回值

如果image 未指向有效图像,则返回一个(1)。否则,将为width height bypp pitch pixdata size 赋值适当的值,并返回零(0)。

说明

ImageInfo提供有关图像的各种信息,例如图像的尺寸和颜色深度,还可以为您提供直接访问像素缓冲区中所有像素数据所需的信息。

它还可以在存储器中提供图像的大小,这对于赋值内存以复制现有图像或将图像写入文件是有用的。

例子

''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 Integer w, h, bypp, pitch
    Dim As Any Ptr pixdata
    Dim As Integer success
    
    success = (ImageInfo(img, w, h, bypp, pitch, pixdata) = 0)
    
    If success 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位
ScreenRes 320, 200, 8

Dim As Any Ptr ip ''图像指针

Dim As Byte Ptr pp ''像素指针(每像素8位使用字节)

ip = ImageCreate(32, 32) ''创建一个图像(每像素32 * 32,8位)

If ip <> 0 Then

    ''在图像上绘制图案
    For y As Integer = 0 To 31

        For x As Integer = y - 5 To y + 5 Step 5

            ''在x,y位置找到指向像素的指针
            ''注意:这对于每个像素都是无效的!
            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 "创建图像时出错!"
End If

Sleep



''创建32位图形屏幕和图像。
ScreenRes 320, 200, 32
Dim image As Any Ptr = ImageCreate( 64, 64 )

Dim pitch As Integer
Dim pixels As Any Ptr

''获取足够的信息来迭代像素数据。
If 0 <> ImageInfo( image, ,,, pitch, pixels ) Then
    Print "无法检索图像信息。"
    Sleep
    End
End If

''通过直接操作像素存储器,在图像上绘制图案。
For y As Integer = 0 To 63
    Dim row As UInteger 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



方言差异

  • -lang qb 方言中不可用,除非使用别名__Imageinfo引用。

与QB差别

  • 新的FreeBASIC

参考