Как я могу сгенерировать грани куба YCbCr в VB.NET
Я написал программу на VB.NET для создания только одной грани куба цветового пространства YCbCr. Я хочу, чтобы окончательное изображение выглядело похожим на плоскость CbCr при постоянной яркости в Википедии (где Y=1).
В конечном итоге я хочу создать изображения всех 6 граней куба, чтобы я мог создать анимированный трехмерный куб в Photoshop (я уже знаю, как создать куб в Photoshop, когда у меня есть изображения его граней). Готовый куб будет похож на куб YUV на веб-сайте softpixel.
Ниже приведены результаты моей программы и кода на данный момент. У меня не было проблем с созданием граней куба цветового пространства RGB, но куб YCbCr оказался проблематичным. Я применил формулу преобразования YCbCr к каждому пикселю на грани куба RGB, но центр передней грани должен быть белым, а центр противоположной грани должен быть черным. Может кто-нибудь сказать мне, какой код мне не хватает?
Public Class Form2
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
PictureBox1.Width = 255
PictureBox1.Height = 255
'create new bitmap
Dim newbmp As Bitmap = New Bitmap(255, 255)
'Generate the new image
Dim x As Integer
Dim y As Integer
For y = 0 To 254
For x = 0 To 254
Dim yval As Integer
Dim cb As Integer
Dim cr As Integer
'Convert to YCbCr using these formulas
'0+(0.299*RED)+(0.587*GREEN)+(0.114*BLUE)
'128-(0.168736*RED)-(0.331264*GREEN)+(0.5*BLUE)
'128+(0.5*RED)-(0.418688*GREEN)-(0.081312*BLUE)
yval = Math.Floor(0 + (0.299 * x) + (0.587 * y) + (0.114 * 255))
cb = Math.Floor(128 - (0.168736 * x) - (0.331264 * y) + (0.5 * 255))
cr = Math.Floor(128 + (0.5 * x) - (0.418688 * y) - (0.081312 * 255))
newbmp.SetPixel(x, y, Color.FromArgb(yval, cb, cr))
Next x
Next y
'load image into picturebox
PictureBox1.Image = newbmp
End Sub
Конец класса