2

我在 VB.NET 中编写了一个程序来生成 YCbCr 颜色空间立方体的一个面。我希望最终图像看起来类似于维基百科上恒定亮度下的 CbCr 平面(其中 Y=1)。

最终,我想创建立方体所有 6 个面的图像,这样我就可以在 Photoshop 中制作动画 3D 立方体(我已经知道如何在 Photoshop 中创建立方体的面图像)。完成的立方体看起来类似于softpixel 网站上的YUV 立方体。

下面是我的程序的输出和到目前为止的代码。我生成 RGB 颜色空间立方体的面没有问题,但 YCbCr 立方体被证明是有问题的。我已经对 RGB 立方体正面的每个像素应用了 YCbCr 转换公式,但是正面的中心应该是白色的,而对面的中心应该是黑色的。有人可以告诉我我缺少什么代码吗?

尝试 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

结束类

4

0 回答 0