public unsafe static void hsiToBmp(int [,,] src, Bitmap dst) { int W = dst.Width; int H = dst.Height; BitmapData bmpData = dst.LockBits(new Rectangle(0, 0, W, H), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb); byte *ptr = (byte *)bmpData.Scan0.ToPointer(); int padding = bmpData.Stride - (W * 3); int r, g, b; for (int y = 0; y < H; y++) { for (int x = 0; x < W; x++) { HsiToRgb.convert(src[x, y, 0], src[x, y, 1], src[x, y, 2], out r, out g, out b); *(ptr++) = (byte)b; *(ptr++) = (byte)g; *(ptr++) = (byte)r; } ptr += padding; } dst.UnlockBits(bmpData); }
public static void Luminancia(int[,,] src, int H, int W) { int r, g, b, gs; for (int y = 0; y < H; y++) { for (int x = 0; x < W; x++) { HsiToRgb.convert(src[x, y, 0], src[x, y, 1], src[x, y, 2], out r, out g, out b); gs = (int)(r * 0.2990 + g * 0.5870 + b * 0.1140); RgbToHsi.convert(gs, gs, gs, out src[x, y, 0], out src[x, y, 1], out src[x, y, 2]); } } }