3、2D时代

几十年工艺改进,解决了基本制造问题,计算机开始向应用过渡。显示问题是首当其冲的问题,多年的思辨与实践,2D技术横空出世,完善发展,为计算机的应用推广做出了卓越的贡献。双色显示的星星之火,在2D时代终于熊熊燃烧,计算机走向民间的时代到来了。

下面从公司产品的角度,回顾2D时代的图形图像编程。

3.1、公司

3.1.1、Amiga

Amiga是80年代图形性能最强大的电脑之一,拥有专门处理图形的芯片。杰.迈纳是当年显卡芯片设计的灵魂人物。下图Amiga500拆机,红圈内的denise芯片就是专门用来负责处理图形的,denise是真正意义上的2d加速卡。

这家公司在音视频多媒体领域超越当年的IBM与Apple,遗憾的是,最好的技术也被市场所淘汰。

3.1.2、IBM

1981年, IBM推出个人电脑,提供了两种显卡,一种是“单色显卡”(简称 MDA), 一种是 “彩色绘图卡” (简称 CGA)。

1982年,IBM又推出了MGA(Monochrome Graphic Adapter), 又称Hercules Card (大力士卡),  除了显示图形外,还保留了原来MDA的功能,IBM是世界第一块显卡制造商。

3.1.3、S3

S3在1989年开始造显卡,2D画质领域无人能及,盛极一时的Trident也无奈败下阵来。S3最经典的产品当属Trio64V+,有着高速的2D性能和强大的VCD软解实力,支持1024×768的分辨率,在低分辨率下支持最高32Bit真彩色。

那是一个VCD满天飞的年代,显卡的VCD解压能力是视频底层技术的一个突破。S3几经被转卖,先被威盛收编,后被HTC揽入囊中。今天,HTC步履蹒跚,生死一线。

3.1.4、Trident

Trident,这家公司当年在2D显卡领域红极一时,在当年的产品专柜里,多次看到其身影,后期由于技术方向原因,在3D显卡年代被淘汰。最终在2003年被XGI收购。而XGI最终在后来被ATI纳入麾下。

3.1.5、Matrox(迈创)

曾经独显领域的主要玩家,2D显卡时代声名显赫,3D时代落寞,最终转向小众视频市场。如今说起显卡GPU,很多人脑海里只会浮现NVIDIA、AMD两个名字,在上个世纪末,Matrox(迈创)的名字如雷贯耳。它的资格比NVIDIA、AMD要老得多。迈创来自加拿大(ATI也是),Matrox成立于1976年,比ATI早9年,比NVIDIA早17年。

3.2、图形技术

1976年~1995年是沉闷寂寥的2D时代,显示技术发展缓慢,,图形图像编程近乎停滞。市场期待着集成电路的发展、微电子技术的爆发。

1995年之后,硬件技术的春天到来了,3D显卡涌现,性能和技术有很大提升,鸟语花香,百家争鸣。厂商不断推陈出新才能生存,跟不上节奏的企业,逃不了被收购的命运。缅怀过去,继往开来,2D技术多年的发展为3D技术做了20年的铺垫。

结合过去历史,回顾当年2D编程的技术。

3.2.1、GDI编程

当时图形图像编程多使用GDI技术。

代码示例:

CDC *pDC = GetDC();
pDC->SelectObject(&…);
ReleaseDC(pDC);

GDI编程的出现,代表了消费级图像编程的兴起。

3.2.2、GDI+编程

GDI+是GDI的增强版,想当年,Windows平台的上的图形图像技术,走在各个平台的前端。

GDI编程为OpenGL和DirectX做了铺垫。

代码示例:

HINSTANCE hInst = AfxGetResourceHandle();
HRSRC hRsrc = ::FindResource (hInst,MAKEINTRESOURCE(nID),sTR); // typeif (!hRsrc)
return FALSE;// load resource into memoryDWORD len = SizeofResource(hInst, hRsrc);
BYTE* lpRsrc = (BYTE*)LoadResource(hInst, hRsrc);
if (!lpRsrc)
return FALSE;// Allocate global memory on which to create stream
HGLOBAL m_hMem = GlobalAlloc(GMEM_FIXED, len);
BYTE* pmem = (BYTE*)GlobalLock(m_hMem);
memcpy(pmem,lpRsrc,len);
IStream* pstm;
CreateStreamOnHGlobal(m_hMem,FALSE,&pstm);// load from stream
pImg=Gdiplus::Image::FromStream(pstm);// free/release stuff
GlobalUnlock(m_hMem);
pstm->Release();
FreeResource(lpRsrc);

无论GDI还是GDI+技术,都代表着图形图像编程的年代到来了。

3.2.3、Direct 2D

Direct2D的出现代表着引擎技术的到来,体现了市场对图形图像、音视频技术的强烈需求,在引擎的背后,封装了图形图像技术的专业性与复杂性。

代码示例:

#include <windows.h>
#include <d2d1.h>
#include <d2d1helper.h>
#include <dwrite.h>
#pragma comment(lib,"dwrite.lib")
#pragma comment(libd"d2d1.lib") static HINSTANCE g_hinst;
static HWND g_hwnd;
static bool g_flag_app_exit;static ID2D1Factory * g_factory;
static ID2D1HwndRenderTarget * g_render_target; g_render_target->Resize(D2D1::SizeU(LOWORD(lparam),HIWORD(lparam)));
D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &g_factory); RECT rc;
GetClientRect(g_hwnd, &rc); g_factory->CreateHwndRenderTarget(D2D1::RenderTargetProperties(), D2D1::HwndRenderTargetProperties(g_hwnd,
D2D1::SizeU(rc。right - rc。left, rc。bottom - rc。top)    ), &g_render_target); g_render_target->BeginDraw();
g_render_target->Clear(D2D1::ColorF(0。63, 0。84, 0。00));
g_render_target->EndDraw();
g_render_target->Release();
g_factory->Release(); 

3.2.4、AGG

AGG,全名:Anti-Grain Geometry,一个开源的、高效2D图形库。AGG的功能与GDI+的功能类似,提供了比GDI+更灵活的编程接口,产生的图形的质量非常高,跨平台的2D图形引擎,可在Windows、Wince、Linux等平台上运行。

设计上,师出Boost库,使用了大量的C++语法规则,包括模板、仿函数等处理。为了能在更多平台上使用,并没有直接使用Boost和STL库,自己实现了部分STL功能。”

3.2.5、Cairo

cairo 是一个免费的矢量绘图软件库,可以绘制多种输出格式。cairo支持许多平台,包括 Linux、BSD、Windows等。Linux 绘图可以通过 X Window 系统、Quartz、图像缓冲格式或 OpenGL 上下文来实现。

cairo 的主要设计目标是提供尽可能接近的输出。这种一致的输出使 cairo 非常适合 GUI 工具集编程和跨平台应用程序开发。使用同一个绘图库打印高分辨率的屏幕和绘制屏幕内容,这种功能具有显著的优点。

在支持的目标平台上,cairo 尝试智能化地使用底层硬件和软件支持。高质量矢量图形和高性能的结合使cairo成为优秀的绘图系统。

cairo 用C编写的,为大多数常用的语言提供了绑定。选用C语言有助于创建新的绑定,在进行C语言调用时提供高性能。和Python绑定,支持快速原型开发,降低了学习 cairo绘图API的门槛。

代码示例:

#include <cairo.h> int  main (int argc, char *argv[]) { cairo_surface_t *surface; cairo_t *cr; int width = 640; int height = 480; surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, height); cr = cairo_create (surface); /* Drawing code goes here */ cairo_set_line_width (cr, 10); cairo_set_source_rgb (cr, 0, 0, 0); cairo_rectangle (cr, width/4, height/4, width/2, height/2); cairo_stroke (cr); /* Write output and clean up */ cairo_surface_write_to_png (surface, "rectangle。png"); cairo_destroy (cr); cairo_surface_destroy (surface); return 0;
}

3.2.6、Cocoa Drawing

Cocoa Drawing是苹果公司的2D图形图像开发类库,在XCode下运用,旨在推广苹果公司的技术。纵然苹果一直有着很强的图形图像处理能力,但仅局限于苹果公司本身的软件,苹果在早期一直没有很好的图形图像编程引擎。

近些年苹果的Metal技术,才可以算作苹果公司真正的技术创举。

代码示例:

[NSGraphicsContext saveGraphicsState];// Create the path and add the shapes
NSBezierPath* clipPath = [NSBezierPath bezierPath];
[clipPath appendBezierPathWithRect:NSMakeRect(0.0,0.0,100.0,100.0)];
[clipPath appendBezierPathWithOvalInRect:NSMakeRect(50.0,50.0,100.0,100.0)];// Add the path to the clip shape。
[clipPath addClip];// Draw the image。
[NSGraphicsContext restoreGraphicsState];

3.3、总结

计算机功能的强大,代表本身的强大,本身的强大代表体系的复杂,模块的组合,视频技术也不例外,从宏观角度来看,图形图像编程框架如下图。

软硬件技术是紧密结合的,硬件技术的进步推动了软件编程的繁荣,软件技术的应用促进了硬件的推广。早期的硬件公司驱动设计、专业级的编程接口研发,到后期消费级市场软件技术的繁荣。图形图像编程形成独立的软件阵地,呼唤着3D时代的到来。

显示硬件发展与视频开发系列(2)----2D时代相关推荐

  1. 显示硬件发展与视频开发系列(3)----3D时代

    4.3D时代 历史长河中,科技进步是人类文明的主要推动力.沧海桑田,天下多变,人类对科技的研究与探索从未停止,计算显示技术也不例外. 现实是3D的,显示硬件注定也是3D的.透过历史的云烟,得到岁月的启 ...

  2. 显示硬件发展与视频开发系列(6)----显示标注与视频处理单元(1):显示标准

    7.显示标准与视频处理单元 消费级视频智能处理大体有10年左右,有了巨大的发展,展望未来,对应于大厂而言,竞争是标准的竞争.包含显示标准与处理单元,竞争推动了科技的进步,市场的繁荣. 新的显示硬件也不 ...

  3. 显示硬件发展与视频开发系列(6)----显示标注与视频处理单元(2):VPU

    VPU(Video Processing Unit,视频处理单元)是一种全新的视频处理平台核心引擎,具有硬解码功能以及减少CPU负荷的能力.VPU可以减少服务器负载和网络带宽的消耗. VPU由ATI提 ...

  4. 显示硬件发展与视频开发系列(6)----显示标注与视频处理单元(3):APU

    APU是"Accelerated Processing Units"的简称,中文名字叫加速处理器,是AMD融聚未来理念的产品,它第一次将处理器和独显核心做在一个晶片上. CPU与A ...

  5. 显示硬件发展与视频开发系列(6)----显示标注与视频处理单元(5):TPU

    TPU(Tensor Processing Unit)张量处理单元,为机器学习定制的芯片,经过专门深度机器学习方面的训练,它有更高效能(每瓦计算能力). 谷歌,2015年6月,I/O开发者大会上推出的 ...

  6. 【音视频开发系列】一学就会,快速掌握音视频开发的第一个开源项目FFmpeg

    快速掌握音视频开发的第一个开源项目:FFmpeg 1.为什么要学FFmpeg 2.FFmpeg面向对象思想分析 3.FFmpeg各种组件剖析 视频讲解如下,点击观看: [音视频开发系列]一学就会,快速 ...

  7. 【音视频开发系列】盘点音视频直播RTSP/RTMP推流一定会遇到的各种坑,教你快速解决

    聊聊RTSP/RTMP推流那些坑 1.推流架构分析 2.推流缓存队列的设计 3.FFmpeg函数阻塞问题分析 [音视频开发系列]盘点音视频直播一定会遇到的各种坑,教你快速解决 更多精彩内容包括:C/C ...

  8. 【音视频开发系列】srs-webrtc-janus开源流媒体服务器分析

    全球最牛开源流媒体服务器源码分析 1.如何学习流媒体服务器 2.全球最牛流媒体服务器架构分析 3.我们能从全球最牛流媒体服务器得到什么 [音视频开发系列]srs-webrtc-janus流媒体服务器分 ...

  9. 音视频开发系列--H264编解码总结

    一.概述 H264,通常也被称之为H264/AVC(或者H.264/MPEG-4 AVC或MPEG-4/H.264 AVC) 对摄像头采集的每一帧视频需要进行编码,由于视频中存在空间和时间的冗余,需要 ...

最新文章

  1. 循环相关函数range、enumerate、zip
  2. 浅谈JavaScript继承
  3. CNN-2: AlexNet 卷积神经网络模型
  4. Hibernate 基础配置及常用功能(二)
  5. 动态规划基础——爬楼梯(Leetcode 70)
  6. python pandas使用pipe管道增强代码可读性
  7. js 对象数组和对象的使用
  8. leetcode算法题第二题(c++)
  9. SCU 2941 I NEED A OFFER!(01背包变形)
  10. DbUtil的介绍使用
  11. m2接口和nvme协议接口_B85主板有M.2接口吗?支持NVMe协议吗?
  12. 不愧是阿里P8!黑马程序员java培训学费
  13. power shell 命令 动词 大全 再也不用死记硬背命令
  14. 从PCC到MIC,理解变量之间的相关性
  15. 数据库锁的分类(粒度,级别)
  16. python钉钉机器人发送excel附件_python调用钉钉机器人发送消息
  17. 基于Java Web的在线考试系统的实现
  18. 地质体剖面从构建到Web三维展示
  19. 刷机提示图像和设备不匹配_苹果用户一定要学会的刷机教程,包治百病
  20. 遇见2016年最值得期待的新产品

热门文章

  1. 镜像法计算变压器漏磁场(三)
  2. 联想笔记本进入pe_联想进pe按哪个键
  3. 向伊拉克运动员致敬!
  4. java 8 lambda sort_java8新特性:Lambda表达式ArrayList排序
  5. Oracle使用plsql developer连接数据库报错“Ora-12154:连接标识”
  6. Kaggle数据集强势分析“绝地求生”,攻略吃鸡!(给我的智障朋友们找的吃鸡攻略)
  7. Mac如何设置定时关机
  8. 《庆余年》全集盗版泄露,女主角很生气,网友评论也是亮了
  9. 指纹辨识将被破解?最新研究出人工智能可以绘制假指纹
  10. 小龙虾炒菜机器人_10岁男孩用炒菜机器人做烤鱼炸薯条,爸妈和同学直流口水...