标签: off-screen

如何在OpenGL上渲染屏幕?

我的目标是将没有窗口的OpenGL场景直接渲染到文件中.场景可能比我的屏幕分辨率大.

我怎样才能做到这一点?

我希望能够选择任何大小的渲染区域大小,例如10000x10000,如果可能的话?

c++ windows opengl off-screen

35
推荐指数
2
解决办法
5万
查看次数

在内存中渲染MATLAB图

是否有任何替代方法可以使用getframesaveas将图形内容保存到光栅图像中以进行进一步处理?

方法1: getframe

h = figure('visible', 'off');
a = axes('parent', h);

% render using `scatter3()` or other plot function.

content = frame2im(getframe(h));
Run Code Online (Sandbox Code Playgroud)

这具有显示图形在调用中执行屏幕捕获的严重缺点,getframe()并且当在循环中执行这样的渲染时(即,content在每次迭代时将其保存为视频帧)存在问题.

方法2: saveas

h = figure('visible', 'off');
a = axes('parent', h);

% render using `scatter3()` or other plot function.

saveas(h, '/path/to/file.png');
content = imread(/path/to/file.png');
Run Code Online (Sandbox Code Playgroud)

这种方法具有写入磁盘的严重缺点,这在多线程应用程序中存在问题,并且比直接渲染到内存要慢.因为saveas()在调用PNG编码器之前显然会渲染到内存,所以我想要的是可能的,但我在MATLAB文档中找不到任何只执行渲染部分的函数.

问题:

您是否知道将任意axes内容渲染到光栅图像的替代方法?

video matlab image screen-capture off-screen

24
推荐指数
3
解决办法
1万
查看次数

android截取屏幕截图

我正在开发一个Android应用程序.我有一个活动,比如A,它用整个屏幕填充视图.在AI中按下一个按钮想要开始另一个活动,比如B,它也有一些视图和控件.我希望活动B在屏幕外,并希望从A获取B的屏幕截图.可能吗?

注意:我通过将绘图缓存保存到位图中来成功获取页面A的屏幕截图,但很难获取屏幕外页面的屏幕截图.

android screenshot off-screen android-activity

19
推荐指数
2
解决办法
9344
查看次数

UIView:如何进行非破坏性绘图?

我原来的问题:

我正在创建一个简单的绘图应用程序,需要能够绘制我现有的,先前绘制的内容drawRect.在不完全替换现有内容的情况下绘制现有内容的正确方法是什么?

根据这里和其他地方收到的答案,这是交易.

  1. 您应该准备好在drawRect 调用时重绘整个矩形.

  2. 无法通过执行以下操作阻止内容被删除:

    [self setClearsContextBeforeDrawing: NO];

    这仅仅是对图形引擎的暗示,没有必要让它为您预先清除视图,因为您可能需要重新绘制整个区域.它可能会阻止您的视图被自动删除,但您不能依赖它.

  3. 要在不擦除的情况下在视图上绘制,请将绘图绘制到屏幕外位图上下文(系统永远不会清除它).然后在您drawRect的屏幕外缓冲区中复制到视图.

例:

- (id) initWithCoder: (NSCoder*) coder {    
     if (self = [super initWithCoder: coder]) {
         self.backgroundColor = [UIColor clearColor];
         CGSize size = self.frame.size;
         drawingContext = [self createDrawingBufferContext: size];
     }

     return self;
 }

- (CGContextRef) createOffscreenContext: (CGSize) size  {
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    CGContextRef context = CGBitmapContextCreate(NULL, size.width, size.height, 8, size.width*4, colorSpace, kCGImageAlphaPremultipliedLast);
    CGColorSpaceRelease(colorSpace);

    CGContextTranslateCTM(context, 0, size.height);
    CGContextScaleCTM(context, 1.0, -1.0); …
Run Code Online (Sandbox Code Playgroud)

iphone drawing off-screen uiview cgbitmapcontextcreate

17
推荐指数
1
解决办法
9004
查看次数

无窗口创建OpenGL上下文

我想弄清楚为屏幕外渲染创建无窗口OpenGL程序的最简单方法是什么.

目前我使用它,到目前为止工作正常:(为清晰起见,此处删除了错误检查)

BOOL create_opengl_context(){
    GLuint PixelFormat;
    static PIXELFORMATDESCRIPTOR pfd;
    hDC = GetDC(NULL);
    PixelFormat = ChoosePixelFormat(hDC, &pfd);
    SetPixelFormat(hDC, PixelFormat, &pfd);
    hRC = wglCreateContext(hDC);
    wglMakeCurrent(hDC, hRC);
}
Run Code Online (Sandbox Code Playgroud)

这样安全吗?创建无窗口OpenGL程序的"标准"方法是什么?

编辑:我正在使用FBO进行屏幕外渲染.

c++ windows opengl off-screen

16
推荐指数
1
解决办法
1万
查看次数

无效到自己的位图

我想在屏幕外渲染一个控件到一些位图,以便我可以快速访问它.

不幸的是,Control.DrawToBitmap似乎绘制了它所调用的整个控件,包括它的所有子控件.在内部,它向位图发出带有自提供DC的WM_PRINT消息.然后将此临时位图blitting到用户提供的位图.对我来说不可接受,我宁愿根据需要更新这个位图,以便在需要位图时最小化我的性能.

在理想情况下,我希望表单的行为就像它在屏幕上可见(但它不可能).这意味着,如果某个控件的Text属性发生了变化,则表单将部分失效.然后,捕获相关的消息/事件将允许我为要绘制的表单指定我自己的DC,或者简单地将表单DC BitBlt到我自己的DC.

我看过的一些方向:

  • PaintEventArgs参数OnPaint似乎举行成员savedGraphicsState,也许它可以用来找出不需要无效
  • 表单可见但在屏幕区域外.然而,控件不会被绘制.
  • 在窗口上手动调用RedrawWindow(),同样的故事

c# winapi off-screen wm-paint

11
推荐指数
1
解决办法
1066
查看次数

屏幕外的Android Animate视图不起作用

我的视图完全位于屏幕之外,我试图将其设置为屏幕上的动画.

我打电话的时候:

view.startAnimation(tA);
Run Code Online (Sandbox Code Playgroud)

没有任何反应,tA.initialize和tA.applyTransformation永远不会被调用.

如果我在开始动画之前移动视图以使其中任何部分可见,则动画可以正常工作.

当视图位于父视图之外时,什么阻止视图被动画?

animation android off-screen

8
推荐指数
1
解决办法
5419
查看次数

用于FBO渲染的OpenGL ES2.0屏外上下文

我想用FBO进行屏幕外渲染(在没有任何WS的控制台环境中).我知道有必要创建一个OpenGL上下文,并且至少有一个虚拟窗口用于任何操作,因此我做了以下初始化:

// Step 1 - Get the default display.
eglDisplay = eglGetDisplay((EGLNativeDisplayType)0);

// Step 2 - Initialize EGL.
EGLint iMajorVersion, iMinorVersion;
if (!eglInitialize(eglDisplay, &iMajorVersion, &iMinorVersion))
{
    printf("Error: eglInitialize() failed.\n");
    goto cleanup;
}

// Step 3 - Make OpenGL ES the current API.
eglBindAPI(EGL_OPENGL_ES_API);
if (!TestEGLError("eglBindAPI"))
{
    goto cleanup;
}

// Step 4 - Specify the required configuration attributes.
EGLint pi32ConfigAttribs[5];
pi32ConfigAttribs[0] = EGL_SURFACE_TYPE;
pi32ConfigAttribs[1] = EGL_WINDOW_BIT;
pi32ConfigAttribs[2] = EGL_RENDERABLE_TYPE;
pi32ConfigAttribs[3] = EGL_OPENGL_ES2_BIT;
pi32ConfigAttribs[4] = EGL_NONE;

// Step 5 - Find …
Run Code Online (Sandbox Code Playgroud)

fbo off-screen windowless opengl-es-2.0

8
推荐指数
1
解决办法
6306
查看次数

强制关闭屏幕WebView进行绘制

我有一个WebViews滑块,每个WebView完全符合屏幕尺寸.用户可以从左向右滚动,反之亦然.

当WebView从未显示在可见区域之前出现问题.它的内容是预先加载的,但整个表面都是空白几毫秒,直到Android知道它变得可见并显示其内容.

因为一张图片胜过千言万语: 架构

每次添加视图时我都会执行"requestLayout".我试图使它们无效,甚至做一个假卷轴......但没有成功.

目标API级别为17.

android drawing scroll off-screen webview

7
推荐指数
0
解决办法
466
查看次数

高效的屏幕外UIView渲染和镜像

我有一个"屏幕外"的UIView层次结构,我希望在屏幕的不同位置进行渲染.此外,应该可以仅显示此视图层次结构的一部分,并且应该反映对此层次结构所做的所有更改.

困难:

  • 如果要将所有更改合并到视图层次结构中,则该UIView方法drawHierarchy(in:afterScreenUpdates:)始终调用draw(_ rect:),因此对于大型层次结构而言效率非常低.您必须在每次屏幕更新时重绘它或观察所有视图的所有更改属性.绘制视图层次结构文档
  • UIView方法snapshotView(afterScreenUpdates:)也没有多大帮助,因为如果此层次结构是"屏幕外",我还没有找到获得正确视图层次结构图的方法.快照视图文档

"屏幕外":此视图层次结构的根视图不是应用程序UI的一部分.它没有超级视图.

您可以在下面看到我的想法的直观表示:

例

rendering off-screen uiview ios swift

7
推荐指数
1
解决办法
233
查看次数