【学习笔记】Windows GDI绘图(二)图像Images,位图Bitmaps和图元文件Metafiles

图像Images,位图Bitmaps和图元文件Metafiles

Image 类是一个抽象基类,提供用于处理光栅图像(bitmaps)和矢量图像(metafiles)的方法。 Bitmap 类和 Metafile 类从 Image 类继承。 Bitmap 类通过提供用于加载、保存和操作光栅图像的附加方法,在 Image 类的功能上进行扩展。 Metafile 类通过提供用于记录和检查矢量图像的附加方法,在 Image 类的功能上进行扩展。

位图类型

位图是一个位数组,用于指定矩形像素数组中每个像素的颜色。 专用于单个像素的位数决定了可以分配给该像素的颜色数量。

每像素位数可以分配给像素的颜色数
12^1 = 2
22^2 = 4
42^4 = 16
82^8 = 256
162^16 = 65,536
242^24 = 16,777,216

存储位图的磁盘文件通常包含一个或多个信息块,这些信息块存储每像素位数、每行中的像素数以及数组中的行数等信息。 此类文件可能还包含一个颜色表Color Table(有时称为调色板Color Palette)。 颜色表将位图中的数字映射到特定颜色。
在这里插入图片描述
将索引存储到颜色表中的位图称为调色板索引位图palette-indexed bitmap。

图形文件格式

BMP

BMP 是 Windows 用来存储与设备无关的图像和与应用程序无关的图像的标准格式。BMP 文件通常未压缩,因此不适合通过 Internet 传输。

GIF图形接换格式Graphics Interchange Format

GIF 是网页上显示的图像的常用格式。 GIF 适用于线条图、带有纯色块的图片以及颜色之间有清晰边界的图片。 GIF 经过压缩,但在压缩过程中不会丢失任何信息;解压缩后的图像与原始图像完全相同。 可以将 GIF 中的一种颜色指定为透明,以便图像具有显示它的任何网页的背景色。 可以将一系列 GIF 图像存储在单个文件中,以形成动画 GIF。 GIF 每个像素最多存储 8 位,因此它们被限制为 256 种颜色。

JPEG联合图像专家组Joint Photographic Experts Group

JPEG 是一种压缩方案,适用于扫描的照片等自然场景。 一些信息在压缩过程中丢失,但这种丢失通常是人眼无法察觉的。 JPEG 每个像素存储 24 位,因此它们能够显示超过 1600 万种颜色。 JPEG 不支持透明度或动画。
JPEG 图像的压缩级别是可配置的,但压缩级别越高(文件越小),丢失的信息就越多。
JPEG 压缩不适用于线条图、纯色块和清晰边界。
在这里插入图片描述
JPEG 是一种压缩方案,而不是文件格式。 JPEG 文件交换格式 (JFIF) 是一种文件格式,通常用于存储和传输根据 JPEG 方案压缩的图像。 Web 浏览器显示的 JFIF 文件使用 .jpg 扩展名。

EXIF可交换图像文件 Exchangeable Image File

EXIF 是一种文件格式,用于数码相机拍摄的照片。 EXIF 文件包含根据 JPEG 规范压缩的图像。 EXIF 文件还包含有关照片的信息(拍摄日期、快门速度、曝光时间等)和有关相机的信息(制造商、型号等)。

PNG可移植网络图形 Portable Network Graphics

PNG 格式保留了 GIF 格式的许多优点,但也提供了 GIF 没有的功能。 与 GIF 文件一样,PNG 文件在压缩时不会丢失信息。支持透明度。
PNG 在 GIF 的基础上改进了其渐进式显示图像的能力(即,在图像通过网络连接到达时显示越来越好的近似图像)。 PNG 文件可以包含 gamma 矫正和颜色校正信息,以便在各种显示设备上准确呈现图像。

TIFF标记图像文件格式 Tag Image File Format

TIFF 是一种灵活且可扩展的格式,受到各种平台和图像处理应用程序的支持。 TIFF 文件可以存储每像素任意位数的图像,并且可以采用多种压缩算法。 可以将多个图像存储在一个多页的 TIFF 文件中。 与图像相关的信息(扫描仪制造商、主机、压缩类型、方向、每像素样本数等)可以存储在文件中,并使用标记进行排列。 可以通过批准和添加新标记,按需扩展 TIFF 格式。

图元文件格式(矢量图像)

  • Windows图无文件(WMF)
  • 增强图无文件(EMF)
  • EMF+
Metafile myMetafile = new Metafile("Start.emf");
e.Graphics.DrawImage(myMetafile, 100, 100);

在这里插入图片描述

在GDI+中绘制、定位和克隆图像

//绘制位图
using(var bmp=new Bitmap("lena.jpg"))
{
    //注意,不指定宽、高时的区别
    e.Graphics.DrawImage(bmp, 100, 100);
    e.Graphics.DrawImage(bmp, 100, 150,bmp.Width,bmp.Height);
    
    //clone位图
    using (var cloneBmp = bmp.Clone(new Rectangle(bmp.Width / 4, bmp.Height / 4, bmp.Width / 2, bmp.Height / 2), PixelFormat.DontCare))
    {
        e.Graphics.DrawImage(cloneBmp, bmp.Width + 100, 200,cloneBmp.Width,cloneBmp.Height);
    }
}

在这里插入图片描述

在GDI+中裁切和缩放图像

可以使用 Graphics 类的 DrawImage 方法来绘制和定位矢量图像和光栅图像。 DrawImage 是一个重载方法,因此可以通过多种方式为其提供参数。

//绘制位图
using (var bmp = new Bitmap("lena.jpg"))
{
    e.Graphics.DrawImage(bmp, 0, 0, bmp.Width, bmp.Height);
    var srcRect = new Rectangle(bmp.Width / 4, bmp.Height / 4, bmp.Width / 4, bmp.Height / 4);
    var destRect1 = new Rectangle(600, 0, srcRect.Width / 2, srcRect.Height / 2);
    var destRect2 = new Rectangle(600, 100, srcRect.Width * 2, srcRect.Height * 2);

    //缩小
    e.Graphics.DrawImage(bmp, destRect1, srcRect, GraphicsUnit.Pixel);
    //放大
    e.Graphics.DrawImage(bmp, destRect2, srcRect, GraphicsUnit.Pixel);
}

在这里插入图片描述

https://learn.microsoft.com/zh-cn/dotnet/desktop/winforms/advanced/images-bitmaps-and-metafiles?view=netframeworkdesktop-4.8

  • 25
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

图南科技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值