golang中image/color包的用法

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

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)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.