将二维int数组转换为灰度图像

时间:2013-02-19 04:36:50

标签: c# arrays graphics

我有一个从0到255的整数二维数组,每个数组代表一个灰色阴影。我需要把它变成灰度图像。图像的宽度和高度分别是数组的列数和行数。

截至2013年2月,我正在使用Microsoft Visual C#2010 Express和最新的(我认为).NET框架。

许多其他人都遇到过这个问题但是没有一个解决方案对我有用;他们似乎都调用了我的代码中不存在的方法。我想我可能会遗漏一份使用声明或其他内容。

顺便说一句,我对编程很新,所以请尽量解释一切。

提前致谢。

编辑:好的,这就是我所拥有的:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int width;
            int height;
            int[,] pixels;
            Random randomizer = new Random();

            Start:
            Console.WriteLine("Width of image?");
            string inputWidth = Console.ReadLine();
            Console.WriteLine("Height of image?");
            string inputHeight = Console.ReadLine();

            try
            {
                width = Convert.ToInt32(inputWidth);
                height = Convert.ToInt32(inputHeight);
            }
            catch (FormatException e)
            {
                Console.WriteLine("Not a number. Try again.");
                goto Start;
            }
            catch (OverflowException e)
            {
                Console.WriteLine("Number is too big. Try again.");
                goto Start;
            }

            pixels = new int[width, height];

            for (int i = 0; i < width; ++i)
                for (int j = 0; j < height; ++j)
                pixels[i, j] = randomizer.Next(256);



            Console.ReadKey();
        }
    }
}

所以这里是我正在尝试做的一些伪代码:

Initialize some variables

Prompt user for preferred width and height of the resulting image.

Convert input into Int.

Set up the array to be the right size.

Temporary loop to fill the array with random values. (this will be replaced with a series of equations when I can figure out how to write to a PNG or BMP.

//This is where I would then convert the array into an image file.

Wait for further input.

似乎帮助其他人使用名为bitmap的类或对象的其他解决方案,但我似乎没有该类,也不知道它所在的库。

1 个答案:

答案 0 :(得分:0)

以与RGB字节中的图像相同的方式创建它,灰度的唯一区别是R G B将是相同的值以获得灰色:

int width = 255; // read from file
int height = 255; // read from file
var bitmap = new Bitmap(width, height, PixelFormat.Canonical);

for (int y = 0; y < height; y++)
   for (int x = 0; x < width; x++)
   {
      int red = 2DGreyScaleArray[x][y]; // read from array
      int green = 2DGreyScaleArray[x][y]; // read from array
      int blue = 2DGreyScaleArray[x][y]; // read from array
      bitmap.SetPixel(x, y, Color.FromArgb(0, red, green, blue));
   }