Get (图形)
 
获取当前工作页面或图像缓冲区的一部分的副本

语法

Get [source ,] [STEP](x1 , y1 ) - [STEP](x2 , y2 ), dest

参数

source
图像缓冲区的地址。
STEP
表示以下坐标不是绝对坐标。
[STEP](x1 , y1 )
副图像的左上角的坐标进行复制。STEP表示(x1 , y1 )偏移量与当前图形光标位置相对。
[STEP](x2 , y2 )
副图像右下角的坐标进行复制。STEP表示x2 y2 分别与x1 y1 相关。
dest
先前赋值的缓冲区的地址来存储图像数据。

说明

Get复制由坐标(x1 y1 )和(x2 y2 )指定的当前工作页面的矩形部分,它们表示左上角和右下角的矩形。STEP指定左上坐标相对于当前图形笔位置,和/或右下坐标相对于左上坐标。新的图像缓冲区格式化以匹配当前屏幕模式像素格式.

dest 可以是一个地址,一个排列,也可以是一个排列中将接收新图像缓冲区的第一个元素的引用。该存储器必须被充分赋值以保持图像缓冲器;所需字节数随用于编译程序的兰方言而异。

source 可以是一个地址,一个排列,或者引用一个排列中的第一个元素,它保存一个图像缓冲区来检索一部分。x1 y1 x2 y2 ??,Stepdest 在这种情况下具有相同的含义。

矩形的坐标受最近的WindowView (图形)语句的影响,并且必须都在View (图形)设置的当前剪切区域之内,否则将触发非法函数调用运行时错误,并且功能无效。

运行时错误:
Get会抛出以下运行时错误之一:

(1) Illegal function call
    • dest 是一个数组,但不足以容纳图像缓冲区。
    • 矩形的左上或右下坐标在当前剪辑区域之外。见View (图形).

方言差异

根据使用的FB方言,有两种类型的缓冲区(详见GfxInternalFormats):

  • -lang fb 方言中,dest 接收一个新的图像缓冲区,由一个32字节的图像头组成,后面是像素数据,该数据被行填充到下一个段落边界(16个字节)。使用以下公式计算存储图像缓冲区所需的总大小(以字节为单位),其中wh是当前工作页面或源图像缓冲区的矩形部分的相应宽度和高度,bpp是当前屏幕模式下每像素的字节数:
size = 32 + (((w * bpp + &hF) and not &hF) * h)

  • -lang qb -lang fblite 方言中,dest 接收一个QB风格的图像缓冲区,由一个4字节的图像头组成,后面是不是行填充的像素数据。使用以下公式计算存储图像缓冲区所需的总大小(以字节为单位),其中wh是当前工作页面或源图像缓冲区的矩形部分的相应宽度和高度,bpp是当前屏幕模式的每像素的字节数:
size = 4 + (w * h * bpp)

例子

#include once "fbgfx.bi"

''设置一个400x300的32位屏幕
ScreenRes 400, 300, 32

''首先画有趣的东西...
Line (10,10)-(140,30), RGB(255,255,0), bf
Draw String (20, 20), "你好!", RGB(255,0,0)

''现在,从屏幕左上方捕获一个150x50的图像
''缓存使用GET ...
Dim As fb.Image Ptr image = ImageCreate(150, 50)
Get (1,1)-(150,50), image

''并将其重复到所有地方!
Put (1,50), image
Put (1,100), image
Put (1,150), image
Put (1,200), image
Put (1,250), image
Put (150,1), image
Put (150,50), image
Put (150,100), image
Put (150,150), image
Put (150,200), image
Put (150,250), image

''和整个屏幕的框架..
Line (1,1)-(400-1,300-1), RGB(255,255,0), b

''现在得到整个屏幕...
Dim As fb.Image Ptr big = ImageCreate(400, 300)
Get (1,1)-(400-1,300-1), big

''并显示“屏幕截图”,就像它正在滚动...
Dim As Integer x = -350
While ((Inkey() = "") And (x < 350))
    ScreenLock
        Cls
        Put (x,1), big
    ScreenUnlock

    Sleep 100, 1

    x += 10
Wend


参考