2016-12-24 8 views
0

Я хочу, чтобы OpenFileDialog выбирал любые типы файлов и показывал биты файлов в растровом изображении. Я имею в виду, что выбранный файл содержит несколько бит 0/1, я хочу показать их в черно-белом изображении, ширина и высота которого получаются от пользователя. А также я не хочу ограничивать размер выбранного файла. Он может быть таким же большим, как память. Есть идеи?C# - преобразовать любой тип файла в растровое изображение в ящике

+1

Написать функцию, которая преобразует произвольные байты в растровое изображение, а затем загрузить его. –

ответ

3

Если файл является допустимым файлом изображения, вы можете просто прочитать изображение, как это:

Image image = Image.FromFile(pathOfImage); 

..., а затем назначить его на поле изображения.

Вам понадобится ссылка на System.Drawing.dll и введите using using System.Drawing; в верхней части вашего кода.

Если биты в файле представляют собой черно-белые пиксели, вам нужно будет нарисовать изображение самостоятельно.

Сначала создайте Bitmap, а затем создайте из него графический объект. Затем вы можете нарисовать на нем пиксели.

using (var image = new Bitmap(width, height)) 
using (var g = Graphics.FromImage(image)) { 
    // TODO: Draw using the graphics object. (Insert code below) 
} 

Вы можете использовать ответ от этого ответа читать биты: BinaryReader - Reading a Single “ BIT ”?

В двойном цикле, то вы можете перебирать бит. Предполагая, что биты сохраняются построчно:

using (var stream = new FileStream("file.dat", FileMode.Open)) { 
    for (int y = 0; y < height; y++) { 
     for (int x = 0; x < width; x++) { 
      bool? bit = stream.ReadBit(true); 
      if (bit == null) { // No more bits 
       return; 
      } 
      if (bit.Value) { 
       g.FillRectangle(Brushes.White, x, y, 1, 1); 
      } 
     } 
    } 
} 

Наконец назначить изображение в окне изображения

pictureBox1.Image = image; 
+0

Файлы являются недопустимыми. Он хочет получить черно-белое представление битовых полей любого произвольного файла. –

+0

Хорошо, это путано, так как действительные файлы изображений также состоят из 0 и 1 бит. –

+1

Вместо объекта Graphics я использовал бы ['Bitmap.LockBits'] (https://msdn.microsoft.com/en-us/library/system.drawing.bitmap.lockbits (v = vs.110) .aspx) с растровым изображением 1 бит на пиксель. (Напиши ответ, но сегодня я ограничу свой телефон) –