我在 VB.NET 中编写了一个程序来生成 YCbCr 颜色空间立方体的一个面。我希望最终图像看起来类似于维基百科上恒定亮度下的 CbCr 平面(其中 Y=1)。
最终,我想创建立方体所有 6 个面的图像,这样我就可以在 Photoshop 中制作动画 3D 立方体(我已经知道如何在 Photoshop 中创建立方体的面图像)。完成的立方体看起来类似于softpixel 网站上的YUV 立方体。
下面是我的程序的输出和到目前为止的代码。我生成 RGB 颜色空间立方体的面没有问题,但 YCbCr 立方体被证明是有问题的。我已经对 RGB 立方体正面的每个像素应用了 YCbCr 转换公式,但是正面的中心应该是白色的,而对面的中心应该是黑色的。有人可以告诉我我缺少什么代码吗?
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
结束类