标签: blit

与blitting有点混淆(Pygame)

我刚开始学习一些pygame(整体编程很新),我有一些关于它是如何工作的非常基本的问题.

我还没有找到一个地方解释我何时需要blit或不在屏幕上包含某个表面.例如,绘制圆形时:

circle = pygame.draw.circle(screen, (0, 0, 0), (100, 100), 15, 1)
Run Code Online (Sandbox Code Playgroud)

我不需要这样做screen.blit(circle),但在显示文字时:

text = font.render("TEXT", 1, (10, 10, 10)) 
textpos = text.get_rect()
textpos.centerx = screen.get_rect().centerx
screen.blit(text, textpos)
Run Code Online (Sandbox Code Playgroud)

如果我不blit,文本将不会出现.

说实话,我真的不知道blitting应该做什么,除了将所需的表面"粘贴"到屏幕上.我希望我已经足够清楚了.

python pygame blit

23
推荐指数
2
解决办法
4万
查看次数

什么是SDL中的Blit?

在SDL wiki中它说

使用此功能可以从源曲面到目标曲面执行快速blit.

然而,这对我没有多大帮助.

在这种情况下,术语表面blitting意味着什么?

sdl blit

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

检查类型是否为blittable的最快方法?

在我的serialiser/deserialiser中,我有以下代码段:

    if (element_type.IsValueType && collection_type.IsArray)
    {
        try
        {
            GCHandle h = GCHandle.Alloc(array_object, GCHandleType.Pinned);
            int arrayDataSize = Marshal.SizeOf(element_type) * c.Count;
            var array_data = new byte[arrayDataSize];
            Marshal.Copy(h.AddrOfPinnedObject(), array_data, 0, arrayDataSize);
            h.Free();
            WriteByteArray(array_data);

            return;
        }
        catch (ArgumentException)
        {
            //if the value type is not blittable, then we need to serialise each array item one at a time
        }
    }
Run Code Online (Sandbox Code Playgroud)

其目的是尝试以尽可能最有效的方式(即,仅将内容作为一堆字节)写入流中的值类型数组.

当类型是值类型但不是blittable时,问题就出现了,Alloc()失败了.此时捕获异常并将控制权传递给处理数组的代码,就好像它由引用类型组成一样.

然而,由于我的应用程序中遇到的值类型的数量,此检查(由于抛出并捕获我理解的异常非常慢)被证明是严重的瓶颈.所以我想知道,检查类型是否是blittable的最快方法是什么?

c# serialization marshalling value-type blit

16
推荐指数
2
解决办法
2529
查看次数

pygame 中的surface.blit() 函数是什么?它有什么作用?它是如何工作的?

我是 Python 初学者,对函数不是很清楚surface.blit()。它有什么作用?它是如何工作的?

关于如何创建它,我遇到了以下几点。

  • 创建所需大小的画布
  • 创建一个包含要显示的对象的较小尺寸的表面。
  • 定义表面的 Rect 值。
  • Blit(重叠)画布上矩形位置的表面

句法: canvas.blit(surface, surfacerect)

为什么只使用 rect?可以是其他形状吗?

python pygame canvas blit

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

如果指定了GL_COLOR_BUFFER_BIT掩码,glBlitFramebuffer是否会复制所有颜色附件?

如果我复制从一个FBO像素到另一个和他们每个人都有颜色附件的多个(不必是相同的号码),如果我的面具是GL_COLOR_BUFFER_BIT,哪种颜色的附件(GL_COLOR_ATTACHMENT0,GL_COLOR_ATTACHMENT1,..., GL_COLOR_ATTACHMENTi)它复制?他们都是?如果是,如果这些FBO附加了不同数量的颜色缓冲区怎么办?

假设有2个FBO以这种方式绑定:

glBindFramebuffer(GL_READ_FRAMEBUFFER, fbo1); 
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fbo2); 
Run Code Online (Sandbox Code Playgroud)

请注意,它fbo1有2个颜色附件,并fbo2有4个颜色附件.

那么glBlitFrameBuffer在这种情况下如何将blit颜色附件?

我无法在OpenGL文档中的任何地方找到它.

opengl graphics framebuffer blit

15
推荐指数
1
解决办法
5391
查看次数

如何在Pygame中以一些透明度对PNG进行blit?

我试图将PNG图像blit到表面上,但由于某种原因,图像的透明部分变黑,这是简单的代码:

screen = pygame.display.set_mode((800, 600), pygame.DOUBLEBUF, 32)

world = pygame.Surface((800, 600), pygame.SRCALPHA, 32)
treeImage = pygame.image.load("tree.png")

world.blit(treeImage, (0,0), (0,0,64,64))
screen.blit(world, pygame.rect.Rect(0,0, 800, 600))
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能解决问题?图像具有Alpha透明度,我在PhotoShop中将其打开,背景变为透明,而不是黑色或白色或任何其他颜色.

感谢您的支持 :)

python png pygame alpha blit

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

如何在android中blit()?

我习惯用老式图书馆处理图形(allegro,GD,pygame),如果我想将一个位图的一部分复制到另一个......我只是使用blit.

我想弄清楚如何在android中做到这一点,我感到非常困惑.那么......我们将这些Canvas设置为只写,Bitmaps是只读的吗?看起来真是太愚蠢了,必须有一些我想念的东西,但我真的无法理解.

编辑:更精确一点...... 如果位图是只读的,而且画布只是写入的,我不能将A插入B,然后将B插入C?

graphics android canvas bitmap blit

14
推荐指数
1
解决办法
8435
查看次数

Tkinter GUI 中实时更新的 Blitting - 性能和图像重叠问题

我有一些关于 blitting matplotlib 图的问题,它本身嵌入在 Tkinter GUI 中 - 整个程序最终将在 Raspberry Pi 上运行。问题涉及多个层面,这是我的第一个问题,如有不明白之处,请提前见谅。

简而言之,我正在做的是:我正在使用 Tk GUI 来同时读取多个传感器,并且我希望对所述 GUI 上的传感器数据进行一些实时更新。我希望将每个可测量的数量放在一个单独的框架上,这就是我决定为每个 Sensor 设置一个类的原因。其中一个传感器是流量传感器,其读出和绘制如下:

import Tkinter as Tk
import numpy as np
import matplotlib.pyplot as plt
from datetime import datetime

from matplotlib.figure import Figure
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg

from Backend import Backend  #self written data acquisition handler  

#global variables
t0 = datetime.now() #start time of program

#Returns time difference in seconds
def time_difference(t1, t2):
    delta = t2-t1
    delta = delta.total_seconds()
    return delta

# Define …
Run Code Online (Sandbox Code Playgroud)

python user-interface tkinter matplotlib blit

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

SDL:在另一个纹理上渲染纹理

我遇到以下问题:

我需要在另一个纹理上渲染纹理,然后渲染该主纹理.例如,我有蓝色矩形纹理,我想在这个蓝色矩形的顶部绘制红色矩形.但是我希望它们仅限制此矩形的渲染.如下图所示: 在此输入图像描述

我读了一些关于它们之间的纹理blit或类似的东西,但我不确定这是否可行.

我的代码看起来像这样:

SDL_RenderCopy(ren,bluetexture,NULL,dBLUErect);
SDL_RenderCopy(ren,redtexture,NULL,dREDrect);
SDL_RenderPresent(ren);
Run Code Online (Sandbox Code Playgroud)

任何人都知道如何在SDL 2.0中执行此操作?这就是我使用的方式.

c++ textures rendering sdl blit

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

PyGame:使用alpha对图像应用透明度?

我想显示具有指定透明度的alpha图像,但无法弄清楚如何操作.

为了详细说明我是如何努力的,下面的模糊是这个SO答案的一个稍微修改的代码块,但如果你运行它,你会看到"图像"丢失它的原生alpha,而" image2"永远不会改变!呸.

#!/usr/bin/env python

import pygame, sys

pygame.init()

window = pygame.display.set_mode((200, 200))
background = pygame.Surface((window.get_size()))
background.fill((255, 255, 255))
image = image2 = pygame.image.load('alpha.png')

image = image.convert()
rect = image.get_rect()

image2 = image2.convert_alpha()
rect2 = image2.get_rect()

rect2.left = rect.width + 1

i = 0
while True:
  for event in pygame.event.get():
    if event.type == 12:
      pygame.quit()
      sys.exit()

  image.set_alpha(i)
  image2.set_alpha(i)

  window.fill((255, 255, 255))
  window.blit(background, background.get_rect())
  window.blit(image, rect)
  window.blit(image2, rect2)

  if i == 255:
    i = 0
  else:
    i …
Run Code Online (Sandbox Code Playgroud)

python pygame alpha blit geometry-surface

6
推荐指数
4
解决办法
2万
查看次数