【发布时间】:2020-05-15 00:51:30
【问题描述】:
我知道这主要是一个图像问题而不是代码,但我会在这里试一试。
首先我有一个 8 位/像素的灰度图像(位图)。这意味着每个像素都表示为 1 字节。这意味着像素值是字节值。够清楚了。
然后……
我有一个 16 位/像素的灰度图像(位图)。这意味着每个像素都表示为 2 个字节。这对我来说很清楚。现在我创建一个 byte[] 数组来保存每个字节值。
对于 1024x1024 的图像,我将有 2097152 字节。它是 1024*1024*2。
我现在的问题是,如何获取特定像素的像素值。
假设位置(X|Y)处的像素,字节为 84 和 77。如何将这两个值转换为像素值。
首先我需要这个来进行一些需要像素值的计算,然后我想更改位图的调色板,它适用于每像素 8 位的图像,但不适用于每像素 16 位的图像。
任何帮助都会很好。
var width = bitmap.PixelWidth;
var height = bitmap.PixelHeight;
var dpiX = bitmap.DpiX;
var dpiY = bitmap.DpiY;
byte[] pixels = new byte[
bitmap.PixelHeight * bitmap.PixelWidth *
bitmap.Format.BitsPerPixel / 8];
bitmap.CopyPixels(pixels, bitmap.PixelWidth * bitmap.Format.BitsPerPixel / 8, 0);
这就是我创建像素数组的方式。
【问题讨论】:
-
@Clemens public virtual void CopyPixels(Array pixel, int stride, int offset);第三个参数是偏移量。第二个参数是步幅。
-
哦,很抱歉造成混乱。如果您“想要更改位图的调色板”,则无论如何都应该使用索引格式,也许是 Indexed8。
-
对不起,我没有关注。我猜 2 字节的像素值将是 2 字节的乘积(84*77 = 6468)。但是这个值超出了我的 0..255 间隔(8 位)的范围
-
16 位像素值的范围为 0..65535。该值将计算为 (256 * 84) + 77。
-
那么这意味着如果我想将 16 位转换为 8 位将是 84/256 + 77?
标签: c# wpf image bitmap bits-per-pixel