Здравсвтуйте. Такая проблема, открываю xlsx файл, записываю данные с него(предположительно только цифры) в datagridview, а потом хочу с этого datagridview скопировать все данные в таблицу байтов и высветлить, как картинку в PictureBoх. Проблема наступает в месте, где идет обработка данных для битмапы(Parameter is not valid). Смотрел в дебагере, все чисто(скрин ниже)
Перед написание данного поста, перепробовал множество вариантов(все, которые нашел на stackoverflow и не только). Может у кого есть догадки, что не так с данными?
private void buttonShowImage_Click(object sender, EventArgs e)
{
int size = (dataGridView1.RowCount) * (dataGridView1.ColumnCount-1);
byte[] arrOfValues = new byte[size];
PictureBox picBox = new PictureBox();
int k = 0;
for(int i = 0; i < dataGridView1.Rows.Count; i++)
{
for(int j = 0; j < dataGridView1.Columns.Count-1; j++)
arrOfValues[k++] = Convert.ToByte(dataGridView1[i, j].Value);
}
ImageConverter ic = new ImageConverter();
Image img = (Image)ic.ConvertFrom(arrOfValues); // ОШИБКА ЗДЕСЬ
Bitmap bmp = new Bitmap(img);
// System.Drawing.Image returnImage = System.Drawing.Image.FromStream(ms);
picBox.SizeMode = PictureBoxSizeMode.Zoom;
//ImageConverter converte = new ImageConverter();
picBox.Image = bmp;
picBox.Show();
}
Не имею под рукой среды разработки, однако идея следующая: картнка является двумерным массивом пикселей: picture[n][m]
, а вы пытаетесь заполнить ее одномерным массивом байтов arrOfValues[n*m]
.
Предлогаю создать Bitmap
указывая размер в конструкторе и в цикле заполнить его значениями из массива байтов. Следует учитывать так же порядок чтения строк, он должен быть таким же как и при записи картинки в ексель, если изображение было прежде записано туда а не создано сразу в екселе.
Что то вроде такого:
int width = 256; //например
int height = 512;
Bitmap image = new Bitmap(width, height);
for (int i = 0; i < width; ++i) {
for(int j = 0; j < height; ++j) {
int col = arrOfValues[i*height+j];
image.setPixel(i, j, Color.FromARGB(col,col,col));
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Нужно написать Telegram бота с личным кабинетом в котором будет баланс пользователя и специально сгенерированная строка для реферальной ссылкиМожно...
Написал класс для работы с БД от SQL, однако в ходе работы создаётся дочерний процесс от SQL, который нагружает процессор на 20%, и потребляет 170 мб оперативы...