Я хочу, чтобы OpenFileDialog выбирал любые типы файлов и показывал биты файлов в растровом изображении. Я имею в виду, что выбранный файл содержит несколько бит 0/1, я хочу показать их в черно-белом изображении, ширина и высота которого получаются от пользователя. А также я не хочу ограничивать размер выбранного файла. Он может быть таким же большим, как память. Есть идеи?C# - преобразовать любой тип файла в растровое изображение в ящике
ответ
Если файл является допустимым файлом изображения, вы можете просто прочитать изображение, как это:
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 и 1 бит. –
Вместо объекта Graphics я использовал бы ['Bitmap.LockBits'] (https://msdn.microsoft.com/en-us/library/system.drawing.bitmap.lockbits (v = vs.110) .aspx) с растровым изображением 1 бит на пиксель. (Напиши ответ, но сегодня я ограничу свой телефон) –
Написать функцию, которая преобразует произвольные байты в растровое изображение, а затем загрузить его. –