cpp

Создание изображения. Формат YCbCr

Создать изображение в формате YCbCr (цветовая модель color.YCbCrModel) позволяет функция NewYCbCr() из пакета image. Формат функции:

image.NewYCbCr(r image.Rectangle,
               subsampleRatio image.YCbCrSubsampleRatio) *image.YCbCr
type YCbCrSubsampleRatio int
(image.YCbCrSubsampleRatio).String() string

В параметре subsampleRatio можно указать следующие константы:

fmt.Printf("%d\n", image.YCbCrSubsampleRatio420) // 2
fmt.Printf("%d\n", image.YCbCrSubsampleRatio444) // 0
fmt.Printf("%d\n", image.YCbCrSubsampleRatio422) // 1
fmt.Printf("%d\n", image.YCbCrSubsampleRatio440) // 3
fmt.Printf("%d\n", image.YCbCrSubsampleRatio411) // 4
fmt.Printf("%d\n", image.YCbCrSubsampleRatio410) // 5

Пример:

r := image.Rect(0, 0, 100, 100)
img := image.NewYCbCr(r, image.YCbCrSubsampleRatio420)

Определение структуры image.YCbCr:

type YCbCr struct {
   Y, Cb, Cr      []uint8
   YStride        int
   CStride        int
   SubsampleRatio YCbCrSubsampleRatio
   Rect           Rectangle
}

Закрасим изображение красным цветом:

fmt.Println(img.YStride)                  // 100
fmt.Println(img.CStride)                  // 50
fmt.Println(img.SubsampleRatio)           // YCbCrSubsampleRatio420
fmt.Println(img.Rect.Dx(), img.Rect.Dy()) // 100 100
for y, my := img.Rect.Min.Y, img.Rect.Max.Y; y < my; y++ {
   for x, mx := img.Rect.Min.X, img.Rect.Max.X; x < mx; x++ {
      yi := img.YOffset(x, y)
      ci := img.COffset(x, y)
      img.Y[yi] = 76
      img.Cb[ci] = 85
      img.Cr[ci] = 255
   }
}

Структура image.YCbCr содержит следующие методы:

  • ColorModel() — возвращает цветовую модель. Формат метода:
(*image.YCbCr).ColorModel() color.Model

Пример:

fmt.Println(img.ColorModel() == color.YCbCrModel) // true
  • Bounds() — возвращает координаты прямоугольной области. Формат метода:
(*image.YCbCr).Bounds() image.Rectangle

Пример:

fmt.Println(img.Bounds()) // (0,0)-(100,100)
  • At() — возвращает информацию о цвете точки с указанными координатами. Формат метода:
(*image.YCbCr).At(x int, y int) color.Color

Пример:

fmt.Println(img.At(0, 0).RGBA()) // 65113 102 26 65535
  • RGBA64At() — возвращает информацию о цвете точки с указанными координатами. Формат метода:
(*image.YCbCr).RGBA64At(x int, y int) color.RGBA64

Пример:

fmt.Println(img.RGBA64At(0, 0).RGBA()) // 65113 102 26 65535
  • YCbCrAt() — возвращает информацию о цвете точки с указанными координатами. Формат метода:
(*image.YCbCr).YCbCrAt(x int, y int) color.YCbCr

Пример:

fmt.Println(img.YCbCrAt(0, 0).RGBA()) // 65113 102 26 65535
  • YOffset() — возвращает смещение внутри слайса из поля Y для точки с указанными координатами. Формат метода:
(*image.YCbCr).YOffset(x int, y int) int

Пример:

fmt.Println(img.YOffset(10, 10)) // 1010
  • COffset() — возвращает смещение внутри слайсов из полей Cb и Cr для точки с указанными координатами. Формат метода:
(*image.YCbCr).COffset(x int, y int) int

Пример:

fmt.Println(img.COffset(10, 10)) // 255
  • Opaque() — возвращает true, если изображение является полностью непрозрачным, и false — в противном случае. Формат метода:
(*image.YCbCr).Opaque() bool

Пример:

fmt.Println(img.Opaque()) // true
  • SubImage() — возвращает фрагмент изображения. Формат метода:
(*image.YCbCr).SubImage(r image.Rectangle) image.Image

Пример:

im := img.SubImage(image.Rect(0, 0, 50, 50))

Учебник Go (Golang)
Учебник Go (Golang) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов

cpp