图形和图像的区分

    对于图形接口,可能它的接口函数是:

Surface* DrawSomething(int start_x, int start_y, int finish_x, int finish_y);

    而对于图像接口,它的接口函数函数可能是:

Surface* LoadFromFile(const string& filename);

图形和图像的区分

    从广义上说,所有人肉眼能看到的对象,都是图形。从狭义上说,图形是我们所看到的一种点、线、面的描述对象。

    图像,是由数据组成的任意像素点的描述对象。比如我们所看到的照片。在电脑中,图形的显示过程是有一定顺序(比如从左往右)的,而图像则是按照像素点进行显示的。电脑对于图形的编辑、修改更为简单方便,因为单一的图形具有特殊的属性(比如圆圈的直径、颜色等等,这些在这个图形建立的时候就固定了下来)。

    对于图像进行编辑则非常困难,软件需要用一些特殊的算法来计算图像的色块、区域、描边等等,来安排图像该如何进行编辑,有一些甚至还需要用到深度学习的方法来辨别图像的显示区域、显示的内容等等,所以图像的修改比之图形的修改要困难。

    如果按照载体来说,图形也是一种图像。因为一张 JPG 图片可能存储的是一幅照片,也可能存储一幅三角形的图形。虽然本质不一样,但是由于存储的形式是以图像的形式存储的,在电脑看来,这个三角形就是一幅图像。但是如果在游戏中使用函数画出了一个三角形,那就是图形。

    严格来说,图形其实是图像的一种抽象表现形式。一般来讲,图形的轮廓并不复杂,比如一个圆圈、一个方块、一个三角形、一条线、某些几何图形、工程上面使用的图纸和 CAD 等,这些都属于图形。图形的色彩也并不是很丰富。而图像一般都有复杂的轮廓、非常多的细节和颜色(当然也有纯单一的颜色,比如黑白照片)。
    准确地说,图形和图像有不同的模式。当然,从计算机最底层的程序(显卡处理)来看,绘制图形和图像所经过的硬件处理几乎是一样的。一般显卡会经过这些流程进行图形、图像计算(2D)、显存,用来存取图形图像内容,GPU 计算图像图像内容并渲染,最后输出到显示器。

    从图像的呈现方式讲,只有通过图像的方式去呈现“图形”这个对象,才能看到图形,而在开发游戏的过程中,图形和图像的编程方式是截然不同的。比如要画线,那么可能会使用到一个叫 DrawLine 的函数。该函数里面需要输入线条的起始坐标,这就是图形的绘制方式。

图形和图形的绘制

    使用 Pygame 游戏库来建立一个窗体,绘制图形、载入图像。

import pygame
pygame.init()
caption=pygame.display.set_caption('Xiaokun App')
screen=pygame.display.set_mode([320,200]) # 窗口大小为 320*200
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
    pygame.display.update()
    screen.fill([255,255,255]) # 用白色填充窗体
sys.exit()

    这段代码中,首先,需要告诉 Python 要引入 Pygame。然后 Pygame 进行初始化(init)。在这个初始化的函数里,Pygame 会初始化屏幕、声音、事件、按钮等一系列需要初始化的东西。随后,利用 Pygame 的 display 对象的 set_caption 函数来设置窗体的文字,将这个设置后的对象返回给 caption 变量。随后,再使用 set_mode 函数设置窗口大小,将窗口大小设置为 320x200 分辨率,将返回对象赋值给 screen 变量,最后 screen 拿到窗口句柄后,使用 fill 函数设置填充窗体的颜色,在这里填充的颜色是白色。

    可以看到,使用 Pygame 游戏库来建立一个 Windows 窗体比前面我们提到的任何一种方式都快。那是因为Pygame 封装了建立窗体的代码和图形显示模块(这也是python编程的优势)。

    一个游戏是在一个大循环下形成的,所以需要一个大循环以确保这个程序不会立刻退出。

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
    pygame.display.update()
    screen.fill([255,255,255]) # 用白色填充窗体
sys.exit()

    这段代码中,当条件为真(True)的时候(条件总是为真),进行一个循环。事实上这是个死循环,如果没有下面的退出代码的话。那么在这个循环里,从 Pygame 的 event 事件列表中取出 event 事件,然后进行判断,如果 event 的类型是退出类型(点击右上角的 X 关闭按钮),那么 Pygame 就退出,这个 quit 函数就直接退出 while 大循环了。最终系统也退出 sys.exit。
    要在窗体上放上一个矩形和圆。我们先使用 rect 函数来画一个矩形:

pygame.draw.rect(screen,[255,0,0],[150,10,0,40],0)

    其中,draw 中 rect 的定义为:rect(目标画布, 颜色, 位置, 宽度)。

    也可以用类似的方法来画一个圆:

  pygame.draw.circle(screen,[0,0,0],[top,left],20,1)

使用 pygame.draw.circle() 用来画圆形。circle 函数具有 5 个参数:目标画布(在这里是 screen)、颜色(由左侧点和顶部点组成的圆形初始位置)、直径、宽度。

    在 Pygame 游戏开发库里面,画一个图形是很容易的事情,不需要知道太多的细节,只要将位置和颜色或者内容填充进去就可以了。

    可以在 Pygame 中使用 Pygame.image.load 来加载图像文件,这个函数支持各种图片格式。使用这个方法来加载一副 PNG 图片:

obj = pygame.image.load("test.png").convert_alpha()

    使用 convert_alpha 函数是因为这个函数会使用透明方法来绘制,所以我们在加载一个拥有 alpha 通道的图片的时候(比如 TGA、PNG)的时候,可以使用这个方式。

    然后使用 blit 方法将图像绘制出来:

screen.blit(obj, (20,10))

    blit 这个函数会以各种函数形式出现在图形引擎的函数里面,比如 FastBlit 等等。这个函数具体负责将图像从某一个平面复制到另一个平面,或者将图像从内存复制到屏幕。简而言之,这个函数的功能就是将图像“绘制”在游戏窗体的屏幕上。

    blit 函数的第一个参数是加载完成的返回对象,第二个参数是绘制的坐标位置。最后需要 update(更新)整个游戏窗体的绘制内容。

    载入图像的代码整合如下:

import pygame
pygame.init()
caption=pygame.display.set_caption('Python App')
screen=pygame.display.set_mode([320,200]) # 窗口大小为 640*480

obj = pygame.image.load("test.png").convert_alpha()  

while True:  

    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            pygame.quit()
            sys.exit()
    screen.blit(obj, (20,10))
    pygame.display.update()
screen.fill([255,255,255])# 用白色填充窗口


这里写图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值