github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/image/ycbcr.go (about)

     1  // Copyright 2011 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package image
     6  
     7  import (
     8  	"github.com/shogo82148/std/image/color"
     9  )
    10  
    11  // YCbCrSubsampleRatioは、YCbCr画像で使用されるクロマサブサンプル比率です。
    12  type YCbCrSubsampleRatio int
    13  
    14  const (
    15  	YCbCrSubsampleRatio444 YCbCrSubsampleRatio = iota
    16  	YCbCrSubsampleRatio422
    17  	YCbCrSubsampleRatio420
    18  	YCbCrSubsampleRatio440
    19  	YCbCrSubsampleRatio411
    20  	YCbCrSubsampleRatio410
    21  )
    22  
    23  func (s YCbCrSubsampleRatio) String() string
    24  
    25  // YCbCrは、Y'CbCr色のインメモリイメージです。ピクセルごとに1つのYサンプルがありますが、
    26  // 各CbおよびCrサンプルは1つ以上のピクセルに跨ることができます。
    27  // YStrideは、垂直方向の隣接ピクセル間のYスライスインデックスデルタです。
    28  // CStrideは、別々のクロマサンプルにマップされる垂直方向の隣接ピクセル間のCbおよびCrスライスインデックスデルタです。
    29  // 絶対的な要件ではありませんが、通常、YStrideとlen(Y)は8の倍数です、そして:
    30  //
    31  //	4:4:4の場合、CStride == YStride/1 && len(Cb) == len(Cr) == len(Y)/1。
    32  //	4:2:2の場合、CStride == YStride/2 && len(Cb) == len(Cr) == len(Y)/2。
    33  //	4:2:0の場合、CStride == YStride/2 && len(Cb) == len(Cr) == len(Y)/4。
    34  //	4:4:0の場合、CStride == YStride/1 && len(Cb) == len(Cr) == len(Y)/2。
    35  //	4:1:1の場合、CStride == YStride/4 && len(Cb) == len(Cr) == len(Y)/4。
    36  //	4:1:0の場合、CStride == YStride/4 && len(Cb) == len(Cr) == len(Y)/8。
    37  type YCbCr struct {
    38  	Y, Cb, Cr      []uint8
    39  	YStride        int
    40  	CStride        int
    41  	SubsampleRatio YCbCrSubsampleRatio
    42  	Rect           Rectangle
    43  }
    44  
    45  func (p *YCbCr) ColorModel() color.Model
    46  
    47  func (p *YCbCr) Bounds() Rectangle
    48  
    49  func (p *YCbCr) At(x, y int) color.Color
    50  
    51  func (p *YCbCr) RGBA64At(x, y int) color.RGBA64
    52  
    53  func (p *YCbCr) YCbCrAt(x, y int) color.YCbCr
    54  
    55  // YOffsetは、(x, y)のピクセルに対応するYの最初の要素のインデックスを返します。
    56  func (p *YCbCr) YOffset(x, y int) int
    57  
    58  // COffsetは、(x, y)のピクセルに対応するCbまたはCrの最初の要素のインデックスを返します。
    59  func (p *YCbCr) COffset(x, y int) int
    60  
    61  // SubImageは、rを通じて見える画像pの一部を表す画像を返します。
    62  // 返される値は、元の画像とピクセルを共有します。
    63  func (p *YCbCr) SubImage(r Rectangle) Image
    64  
    65  func (p *YCbCr) Opaque() bool
    66  
    67  // NewYCbCrは、指定された境界とサブサンプル比率を持つ新しいYCbCrイメージを返します。
    68  func NewYCbCr(r Rectangle, subsampleRatio YCbCrSubsampleRatio) *YCbCr
    69  
    70  // NYCbCrAは、非アルファ乗算のY'CbCr-with-alpha色のインメモリイメージです。
    71  // AとAStrideは、埋め込まれたYCbCrのYとYStrideフィールドに対応します。
    72  type NYCbCrA struct {
    73  	YCbCr
    74  	A       []uint8
    75  	AStride int
    76  }
    77  
    78  func (p *NYCbCrA) ColorModel() color.Model
    79  
    80  func (p *NYCbCrA) At(x, y int) color.Color
    81  
    82  func (p *NYCbCrA) RGBA64At(x, y int) color.RGBA64
    83  
    84  func (p *NYCbCrA) NYCbCrAAt(x, y int) color.NYCbCrA
    85  
    86  // AOffsetは、(x, y)のピクセルに対応するAの最初の要素のインデックスを返します。
    87  func (p *NYCbCrA) AOffset(x, y int) int
    88  
    89  // SubImageは、rを通じて見える画像pの一部を表す画像を返します。
    90  // 返される値は、元の画像とピクセルを共有します。
    91  func (p *NYCbCrA) SubImage(r Rectangle) Image
    92  
    93  // Opaqueは、画像全体をスキャンし、それが完全に不透明であるかどうかを報告します。
    94  func (p *NYCbCrA) Opaque() bool
    95  
    96  // NewNYCbCrAは、指定された境界とサブサンプル比率を持つ新しい [NYCbCrA] イメージを返します。
    97  func NewNYCbCrA(r Rectangle, subsampleRatio YCbCrSubsampleRatio) *NYCbCrA