检索有关图像的信息
语法
用法
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
方言差异
与QB差别
参考