namespace txtToImg
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
string fileContent = File.ReadAllText("D:\\pixels.txt");
string[] integerStrings = fileContent.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
int[] integers = new int[integerStrings.Length];
for (int n = 0; n < integerStrings.Length; n++)
{
integers[n] = int.Parse(integerStrings[n]);
}
Bitmap my = new Bitmap(512, 512);
for (int i = 0; i < 512; i++)
for (int j = 0; j < 512; j++)
my.SetPixel(i, j, Color.Blue);
my.Save("D:\\my.jpg");
}
}
}
我没有像我那样将所有像素设置为蓝色,而是想使用数组中的值。
这就是我将像素保存到文本文件的方法!它们是从0到255的整数。现在我正在尝试处理灰度图像,所以我不需要单独使用R,G和B,这就是为什么它(R + G + B)/ 3。
using (Bitmap bitmap = new Bitmap("D:\\6.jpg"))
{
int width = 512;
int height = 512;
TextWriter tw = new StreamWriter("D:\\pixels.txt");
for (int i = 0; i < height; i++)
{
for (int j = 0; j < width; j++)
{
Color color = bitmap.GetPixel(j, i);
tw.Write((color.R + color.G + color.B) / 3 + " ");
}
//tw.Write(" ");
}
tw.Close();
}
答案 0 :(得分:0)
由于您已经拥有每种颜色1个字节的灰度值,因此将Format8bppIndexed用于新图像是有意义的:
// Create 8 bit per pixel bitmap
var bitmap = new Bitmap(512, 512, PixelFormat.Format8bppIndexed);
// Set grayscale color palette
var colorPalette = bitmap.Palette;
var colorEntries = colorPalette.Entries;
for ( int i = 0; i < 256; i++ )
{
colorEntries[i] = Color.FromArgb(i, i, i);
}
// Apply changes to color pallete
bitmap.Palette = colorPalette;
// Retrieve bitmap data for efficient writes
var bitmapData = bitmap.LockBits(Rectangle.FromLTRB(0, 0, 512, 512), ImageLockMode.WriteOnly, PixelFormat.Format8bppIndexed);
// Allocate array to store intermediate pixel data
byte[] colorData = new byte[bitmapData.Stride * bitmapData.Height]; // 1 byte per pixel since it is 8bppIndexed format
for (int i = 0; integers.Length; i++)
{
int line = i / 512;
int position = i % 512;
colorData[line * bitmapData.Stride + position] = (byte)integers[i]; // color values from file
}
// Copy computed pixel data to BitmapData
Marshal.Copy(colorData, 0, bitmapData.Scan0, colorData.Length);
bitmap.UnlockBits(bitmapData);
bitmap.Save("D:\\test.bmp");