Отрисовка изображения попиксельно из бинарного файла - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Очень нужна ваша помощь, мучаюсь с этой отрисовкой уже не первый день - всё не так срабатывает. Имеется текстовый файл, в котором черно-белая картинка представлена нулями и единицами (приведен во вложении). Нужно считать этот файл и отрисовать его в переменную структуры Bitmap, которая потом выводится в picturebox. Я пробовал это сделать вот так:
 using (StreamReader sr = File.OpenText(@"C:\Users\admin\Desktop\тест.txt"))
            {
                while (sr.Peek() != -1)
                {
                    for (int y = 0; y < height; y++)
                    {
                        for (int x = 0; x < height; x++)
                        {
                            char c = (char)sr.Read();
                            if (c == '0')
                                image.SetPixel(x, y, Color.White);
                            else if (c == '1')
                                image.SetPixel(x, y, Color.Black);
                        }
                    }
                } 
            }
Но в этом случае оно перекашивает картинку каким-то непонятным образом. Пробовал использовать SetPixel ещё по-разному, через матрицу и пр., но в остальных случаях он её отрисовывает как-то наполовину.

Решение задачи: «Отрисовка изображения попиксельно из бинарного файла»

textual
Листинг программы
using System;
using System.ComponentModel;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
 
namespace WindowsFormsApplication339
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
 
            BackgroundImage = GetBitmap("c:\\test.txt");
            BackgroundImageLayout = ImageLayout.Center;
        }
 
        Bitmap GetBitmap(string filePath)
        {
            var lines = File.ReadAllLines(filePath);
            var res = new Bitmap(lines[0].Length, lines.Length);
            for (int y = 0; y < res.Height; y++)
            for (int x = 0; x < res.Width; x++)
                res.SetPixel(x, y, lines[y][x] == '1' ? Color.White : Color.Black);
 
            return res;
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.333 из 5
Похожие ответы