返回指向当前工作页的帧缓冲区的指针
语法
用法
result = ScreenPtr
返回值
指向当前工作页框缓冲存储器的指针,如果没有设置图形模式,则为NULL(0)。
说明
ScreenPtr提供了一种直接读取/写入工作页面的帧缓冲区的方法。在尝试读取或写入之前,应使用
ScreenLock.返回的指针是有效的,直到任何后续调用
Screen或
ScreenRes,使其无效。
ScreenPtr也可用于测试
Screen或
ScreenRes的调用是否成功,由非NULL(
<> 0)返回值指示。
为了访问屏幕缓冲区中的像素,您将需要知道屏幕每像素的字节数和间距(每行字节数)以及宽度和高度以避免超出界限。这些信息可以使用
ScreenInfo找到。
帧缓冲区中的每一行都是
pitch 字节长。帧缓冲区由
height 行组成,按照他们在屏幕上的位置的顺序存储,从上到下,从左到右。
由于FreeBASIC图形库的设计,
ScreenPtr(如果非NULL)将始终指向后缓冲区,并且从不实际的视频RAM。
例子
Const SCREEN_WIDTH = 640, SCREEN_HEIGHT = 480
Dim As Integer w, h, bypp, pitch
''制作8位屏幕。
ScreenRes SCREEN_WIDTH, SCREEN_HEIGHT, 8
''获取屏幕信息(w和h应该匹配上面的常量,bypp应该是1)
ScreenInfo w, h, , bypp, pitch
''获取帧缓冲区的地址。任何PTR年
''这里用于允许简单的指针算术
Dim buffer As Any Ptr = ScreenPtr()
If (buffer = 0) Then
Print "错误:图形屏幕未初始化。"
Sleep
End -1
End If
''锁定屏幕以允许直接的帧缓冲区访问
ScreenLock()
''找到屏幕中心的像素地址
'' It'是一个8位像素,所以使用UByte Ptr。
Dim As Integer x = w \ 2, y = h \ 2
Dim As UByte Ptr pixel = buffer + (y * pitch) + (x * bypp)
''将像素颜色设置为10(浅绿色)。
*pixel = 10
''解锁屏幕。
ScreenUnlock()
''等待用户在关闭程序之前按下一个键
Sleep
Const SCREEN_WIDTH = 256, SCREEN_HEIGHT = 256
Dim As Integer w, h, bypp, pitch
''制作32位屏幕。
ScreenRes SCREEN_WIDTH, SCREEN_HEIGHT, 32
''获取屏幕信息(w和h应该匹配上面的常量,bypp应该是4)
ScreenInfo w, h, , bypp, pitch
''获取帧缓冲区的地址。任何PTR年
''这里用于允许简单的指针算术
Dim buffer As Any Ptr = ScreenPtr()
If (buffer = 0) Then
Print "错误:图形屏幕未初始化。"
Sleep
End -1
End If
''锁定屏幕以允许直接的帧缓冲区访问
ScreenLock()
''将行地址设置为缓冲区的开头
Dim As Any Ptr row = buffer
''迭代屏幕上的所有像素:
For y As Integer = 0 To h - 1
''将像素地址设置为行的开头
'' It'是一个32位像素,所以使用一个UInteger Ptr
Dim As UInteger Ptr pixel = row
For x As Integer = 0 To w - 1
''设置像素值
*pixel = RGB(x, x Xor y, y)
''获取下一个像素地址
''(PTR UInteger将由4个字节递增)
pixel += 1
Next x
''转到下一行
row += pitch
Next y
''解锁屏幕。
ScreenUnlock()
''等待用户在关闭程序之前按下一个键
Sleep
方言差异
与QB差别
参考