将int的二维数组转换为灰度图像
本文关键字:灰度图像 转换 二维数组 int | 更新日期: 2023-09-27 18:00:07
我有一个从0到255的整数的2D数组,每个整数代表一个灰色阴影。我需要把它变成灰度图像。图像的宽度和高度分别是数组的列数和行数。
自2013年2月起,我正在使用Microsoft Visual C#2010学习版和最新的.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.
其他解决方案似乎帮助其他人使用了一个名为位图的类或对象,但我似乎没有这个类,也不知道它在哪个库中。
创建它的方式与从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));
}