热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

golang中image/color包的用法

color包是image包对于color重点介绍,实现了基本的颜色库color中定义了如下几个变量var(BlackGray16{0}White

color包是image包对于color重点介绍,实现了基本的颜色库

color中定义了如下几个变量

var (
    Black       = Gray16{0}
    White       = Gray16{0xffff}
    Transparent = Alpha16{0}
    Opaque      = Alpha16{0xffff}
)

func RGBToYCbCr(r, g, b uint8) (uint8, uint8, uint8) //RGBToYCbCr将RGB的三重色转换为Y'CbCr模型的三重色
func YCbCrToRGB(y, cb, cr uint8) (uint8, uint8, uint8)  //YCbCrToRGB将Y'CbCr上的三重色转变成RGB的三重色。


type Alpha       //Alpha代表一个8-bit的透明度。

type Alpha struct {
	A uint8
}
func (c Alpha) RGBA() (r, g, b, a uint32)


type Alpha16       //Alpha16代表一个16位的透明度。

type Alpha16 struct {
	A uint16
}
func (c Alpha16) RGBA() (r, g, b, a uint32)

预乘简单定义(预乘会在后面的定义中用到):

什么是预乘?假设一个像素点,用RGBA四个分量来表示,记做(R,G,B,A),那预乘后的像素就是(R*A,G*A,B*A, A),这里A的取值范围是[0,1]。所以,预乘就是每个颜色分量都与该像素的alpha分量预先相乘。可以发现,对于一个没有透明度,或者说透明度为1的像素来说,预乘不预乘结果都是一样的。

type Color      //Color可以将它自己转化成每个RGBA通道都预乘透明度。这种转化可能是有损的。任何实现RGBA()方法的结构体都实现了Color接口

type Color interface {

	// RGBA返回预乘透明度的红,绿,蓝和颜色的透明度。每个值都在[0, 0xFFFF]范围内,
	// 但是每个值都被uint32代表,这样可以乘以一个综合值来保证不会达到0xFFFF而溢出。
	RGBA() (r, g, b, a uint32)
}

type Gray     //Gray代表一个8-bit的灰度。

type Gray struct {
	Y uint8
}

func (c Gray) RGBA() (r, g, b, a uint32)


type Gray16         //Gray16代表了一个16-bit的灰度。

type Gray struct {
	Y uint16
}
func (c Gray16) RGBA() (r, g, b, a uint32)


type Model         //Model接口实现了Convert方法,Model可以在它自己的颜色模型中将一种颜色转化到另一种。这种转换可能是有损的。

type Model interface {
	Convert(c Color) Color
}
其中基本的颜色模型Model如下所示:

var (
	RGBAModel    Model = ModelFunc(rgbaModel)
	RGBA64Model  Model = ModelFunc(rgba64Model)
	NRGBAModel   Model = ModelFunc(nrgbaModel)
	NRGBA64Model Model = ModelFunc(nrgba64Model)
	AlphaModel   Model = ModelFunc(alphaModel)
	Alpha16Model Model = ModelFunc(alpha16Model)
	GrayModel    Model = ModelFunc(grayModel)
	Gray16Model  Model = ModelFunc(gray16Model)
)
而YCbCrModel是Y'CbCr颜色的模型

var YCbCrModel Model = ModelFunc(yCbCrModel)

func ModelFunc(f func(Color) Color) Model  //ModelFunc返回一个Model,它可以调用f来实现转换。


type NRGBA            //NRGBA代表一个没有32位透明度加乘的颜色。每个红,绿,蓝和透明度都是8bit的数值

type NRGBA struct {
	R, G, B, A uint8
}

func (c NRGBA) RGBA() (r, g, b, a uint32)


type NRGBA64         //NRGBA64代表无透明度加乘的64-bit的颜色,它的每个红,绿,蓝,和透明度都是个16bit的数值。

type NRGBA struct {
	R, G, B, A uint16
}

func (c NRGBA64) RGBA() (r, g, b, a uint32)


type Palette         //Palette是颜色的调色板

type Palette []Color

func (p Palette) Convert(c Color) Color    //返回欧式r g b空间中最接近color c 的调色板颜色
func (p Palette) Index(c Color) int   //Index在Euclidean R,G,B空间中找到最接近c的调色板对应的索引。


type RGBA         //RGBA代表一个传统的32位的预乘透明度的颜色,它的每个红,绿,蓝,和透明度都是个8bit的数值。

type RGBA struct {
	R, G, B, A uint8
}

func (c RGBA) RGBA() (r, g, b, a uint32)


type RGBA64       //RGBA64代表一个64位的预乘透明度的颜色,它的每个红,绿,蓝,和透明度都是个8bit的数值。

type RGBA64 struct {
	R, G, B, A uint16
}

func (c RGBA64) RGBA() (r, g, b, a uint32)


type YCbCr        //YCbCr代表了完全不透明的24-bit的Y'CbCr的颜色,它的每个亮度和每两个色度分量是8位的。

type YCbCr struct {
	Y, Cb, Cr uint8
}

JPEG,VP8,MPEG家族和其他一些解码器使用这个颜色模式。每个解码器经常将YUV和Y'CbCr同等使用,但是严格来说,YUV只是用于分析视频信号,Y' (luma)是Y (luminance)伽玛校正之后的结果。

RGB和Y'CbCr之间的转换是有损的,并且转换的时候有许多细微的不同。这个包是遵循JFIF的说明:http://www.w3.org/Graphics/JPEG/jfif3.pdf。


func (c YCbCr) RGBA() (r uint32,g uint32,b uint32,a uint32)

推荐阅读
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 千万不要错过的后端[纯干货]面试知识点整理 I I
    千万不要错过的后端【纯干货】面试知识点整理IIc++内存管理上次分享整理的面试知识点I,今天我们来继续分享面试知识点整理IIlinuxkernel内核空间、内存管理、进程管理设备、 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 本文介绍了一种轻巧方便的工具——集算器,通过使用集算器可以将文本日志变成结构化数据,然后可以使用SQL式查询。集算器利用集算语言的优点,将日志内容结构化为数据表结构,SPL支持直接对结构化的文件进行SQL查询,不再需要安装配置第三方数据库软件。本文还详细介绍了具体的实施过程。 ... [详细]
  • 本文介绍了Codeforces Round #321 (Div. 2)比赛中的问题Kefa and Dishes,通过状压和spfa算法解决了这个问题。给定一个有向图,求在不超过m步的情况下,能获得的最大权值和。点不能重复走。文章详细介绍了问题的题意、解题思路和代码实现。 ... [详细]
  • 本文介绍了在go语言中利用(*interface{})(nil)传递参数类型的原理及应用。通过分析Martini框架中的injector类型的声明,解释了values映射表的作用以及parent Injector的含义。同时,讨论了该技术在实际开发中的应用场景。 ... [详细]
  • 本文介绍了一道经典的状态压缩题目——关灯问题2,并提供了解决该问题的算法思路。通过使用二进制表示灯的状态,并枚举所有可能的状态,可以求解出最少按按钮的次数,从而将所有灯关掉。本文还对状压和位运算进行了解释,并指出了该方法的适用性和局限性。 ... [详细]
  • 按照之前我对map的理解,map中的数据应该是有序二叉树的存储顺序,正常的遍历也应该是有序的遍历和输出,但实际试了一下,却发现并非如此,网上查了下,发现从Go1开始,遍历的起始节点就是随机了,当然随机 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • Windows7 64位系统安装PLSQL Developer的步骤和注意事项
    本文介绍了在Windows7 64位系统上安装PLSQL Developer的步骤和注意事项。首先下载并安装PLSQL Developer,注意不要安装在默认目录下。然后下载Windows 32位的oracle instant client,并解压到指定路径。最后,按照自己的喜好对解压后的文件进行命名和压缩。 ... [详细]
  • Java 11相对于Java 8,OptaPlanner性能提升有多大?
    本文通过基准测试比较了Java 11和Java 8对OptaPlanner的性能提升。测试结果表明,在相同的硬件环境下,Java 11相对于Java 8在垃圾回收方面表现更好,从而提升了OptaPlanner的性能。 ... [详细]
  • 浙江大学2005–2006学年秋冬季学期《大学计算机基础》课程期末考试试卷开课学院:计算中心,考试形式:闭卷,允许带入场考试 ... [详细]
author-avatar
娱乐老爷_410
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有