ScreenPtr
 
返回指向当前工作页的帧缓冲区的指针

语法

Declare Function ScreenPtr ( ) As Any Ptr

用法

result = ScreenPtr

返回值

指向当前工作页框缓冲存储器的指针,如果没有设置图形模式,则为NULL(0)。

说明

ScreenPtr提供了一种直接读取/写入工作页面的帧缓冲区的方法。在尝试读取或写入之前,应使用ScreenLock.返回的指针是有效的,直到任何后续调用ScreenScreenRes,使其无效。

ScreenPtr也可用于测试ScreenScreenRes的调用是否成功,由非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


方言差异

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

与QB差别

  • 新的FreeBASIC

参考