golang中image/color包的用法
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) //YCbCrToRGB将Y'CbCr上的三重色转变成RGB的三重色。
type Alpha struct { A uint8 }func (c Alpha) RGBA() (r,b,a uint32)
type Alpha16 struct { A uint16 }func (c Alpha16) RGBA() (r,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,a uint32) } type Gray //Gray代表一个8-bit的灰度。 type Gray struct { Y uint8 } func (c Gray) RGBA() (r,a uint32)
type Gray struct { Y uint16 }func (c Gray16) RGBA() (r,a uint32)
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 struct { R,A uint8 } func (c NRGBA) RGBA() (r,a uint32)
type NRGBA struct { R,A uint16 } func (c NRGBA64) RGBA() (r,a uint32)
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,B空间中找到最接近c的调色板对应的索引。
type RGBA struct { R,A uint8 } func (c RGBA) RGBA() (r,a uint32)
type RGBA64 struct { R,A uint16 } func (c RGBA64) RGBA() (r,a uint32)
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)(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |