通过删除所有 alpha 通道从 32 位像素到 24 位像素的像素格式转换逻辑

A pixel format transform logic from 32-bit pixel to 24-bit pixel by dropping all the alpha channels

我尝试解决一个编码问题,问题描述在图片中。 1. 格式转换逻辑我很难理解。我把我所有的问题写下来如下。希望有人能帮我理清逻辑。

问题:

  1. 它说程序应该丢弃 alpha 通道,还提到了下一个像素的开始位置。当我处理输入数组中的第一个像素并在第一个像素中放置 alpha 通道时,描述中提到的下一个像素是输出数组中的第一个像素还是第二个像素?

  2. 关于下一个像素的起始位置,表示下一个像素从第一个32位字的第4个字节开始。我不确定我计算起始位置时,我应该使用原始数据计算它,不丢弃 alpha 通道,或者我应该使用我丢弃所有 alpha 通道的那个。

  3. 另外,我在计算第一个32位字时,是从原始输入数组的最开头开始还是从刚刚丢弃的alpha通道开始?

  1. It says the program should drop the alpha channel, and also mentions the beginning place of the next pixel. When I process the first pixel in the input array and drop the alpha channel in the first pixel, does the next pixel mentioned in the description is the first pixel or the second pixel in the output array?

都不是,它是 input 数组中的第二个像素。您应该读取 input 数组,因此得名(一次一个 32 位块)。结果将保存在 output 数组中。

  1. About the beginning place of the next pixel, it says the next pixel starts in the 4th byte of the first 32-bit word. I’m not sure when I calculate the beginning place, I should calculate it using the original data, without dropping the alpha channel, or I should use the one I dropped all the alpha channels.

由于您必须计算结果 output 数组,因此您应该“计算”output 数组中的起始位置。当您将 3x8 位块(24 位)序列保存为 32 位数组(因为它是一个 int 数组)时,您将在 how/where 上得到一个“重叠”,ranges/values 被保存.这在作业中表示如下:

|  3x8   |  3x8   |  3x8   |  3x8   |
|--------|--------|--------|--------| 
|11 22 33,11 22 33,11 22 33,11 22 33|
|-----------|-----------|-----------|
|   int[0]  |   int[1]  |   int[2]  |
  1. Also, when I calculate the first 32-bit word, should I start from the very beginning of the original input array or should I start from the alpha channel I just dropped?

您根本没有更改 input 数组。相反,您将结果保存在 output 数组中,然后从 output_RGB[0].

开始