更改位图颜色映射c#

时间:2017-05-03 16:32:53

标签: c# bitmap colormap

我有一个浮点[,]矩阵的值,这段代码我已经能够将矩阵转换成一个位图,最终会在一个pictureBox上绘制。

private unsafe Bitmap ToBitmap(float[,] rawImage)
    {
        int width = rawImage.GetLength(1);
        int height = rawImage.GetLength(0);

        Bitmap img = new Bitmap(width, height);
        BitmapData bitmapData = img.LockBits(
            new Rectangle(0, 0, width, height),
            ImageLockMode.ReadWrite,
            PixelFormat.Format32bppArgb
        );
        ColorARGB* startingPosition = (ColorARGB*)bitmapData.Scan0;

        for (int i = 0; i < height; i++)
            for (int j = 0; j < width; j++)
            {
                double color = rawImage[i, j];

                byte rgb = (byte)(color * 255); // lowering this value make the image less saturated, but still grayscale

                ColorARGB* position = startingPosition + j + i * width;
                position->A = 255;
                position->R = rgb;
                position->G = rgb;
                position->B = rgb;
            }

        img.UnlockBits(bitmapData);

        return img;

    }



public struct ColorARGB
    {
        public byte B;
        public byte G;
        public byte R;
        public byte A;

        public ColorARGB(Color color)
        {
            A = color.A;
            R = color.R;
            G = color.G;
            B = color.B;
        }

        public ColorARGB(byte a, byte r, byte g, byte b)
        {
            A = a;
            R = r;
            G = g;
            B = b;
        }

        public Color ToColor()
        {
            return Color.FromArgb(A, R, G, B);
        }
    }

使用此代码,结果是一个graylvl图像,有一些饱和的部分;我想将颜色重新映射成&#34; jet&#34; colormap或&#34; hot&#34;,但我不知道我应该从哪里开始。 这个想法是: 低于阈值且高于阈值的所有矩阵值应使用特定颜色进行映射(在jet cMap的情况下,它们将是红色和蓝色,而2个限制之间的值将映射到所有其他值)。

发布的代码改编自我在网上找到的内容,我该如何处理?我能找到的只是色彩映射的重映射,但要将旧颜色更改为新颜色,而不是整个ColorMapping。

0 个答案:

没有答案