Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.84/25: Рейтинг темы: голосов - 25, средняя оценка - 4.84
0 / 0 / 0
Регистрация: 21.09.2014
Сообщений: 58

Загрузка изображения попиксельно

09.09.2015, 11:15. Показов 5126. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно чтобы по нажатию Button1 открывалось окно для выбора файла изображения, а после выбора файла изображение помещалось и в PictureBox1, и в массив.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.09.2015, 11:15
Ответы с готовыми решениями:

Вывод изображения на экран попиксельно
Доброго времени суток. У меня вот такой вопрос: можно ли передавать экрану массив, содержащий RGB пикселей? Если это невозможно,...

Как попиксельно сравнить 2 изображения
как попиксельно сравнить 2 изображения вот мой код void __fastcall TForm1::Button1Click(TObject *Sender) { int i,j,n=0; ...

Отрисовка изображения попиксельно из бинарного файла
Здравствуйте! Очень нужна ваша помощь, мучаюсь с этой отрисовкой уже не первый день - всё не так срабатывает. Имеется текстовый файл, в...

6
127 / 121 / 68
Регистрация: 27.08.2015
Сообщений: 232
09.09.2015, 11:49
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
        private void button1_Click(object sender, EventArgs e)
        {
            // Диалог открытия файла.
            OpenFileDialog ofd = new OpenFileDialog();
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                Bitmap bmp = new Bitmap(ofd.FileName); // // Загружаем изображение.
                pictureBox1.Image = bmp; // Устанавливаем в PictureBox/
 
                // Считываем в массив цветов (медленно).
                Color[,] pixels = new Color[bmp.Width, bmp.Height];
                for (int i = 0; i < bmp.Width; ++i)
                {
                    for (int j = 0; j < bmp.Height; ++j)
                    {
                        pixels[i, j] = bmp.GetPixel(i, j);
                    }
                }
            }
        }
Считываение производится медленно с помощью GetPixel, можно сделать быстрее с помощью Bitmap.LockBits
1
0 / 0 / 0
Регистрация: 21.09.2014
Сообщений: 58
09.09.2015, 13:38  [ТС]
А если нужно считать изображение в черно-белом варианте?
0
127 / 121 / 68
Регистрация: 27.08.2015
Сообщений: 232
09.09.2015, 14:45
Само изображение чёрно-белое? (Кстати, под чёрно-белым подразумевается 2 градации цвета или 256 - серое, 8-битное изображение?) Вышеприведённый код сработает - только цветовые компоненты R,G,B у Color будут одинаковы. Или вы хотели другого, может быть более оптимального кода?
0
0 / 0 / 0
Регистрация: 21.09.2014
Сообщений: 58
09.09.2015, 19:47  [ТС]
Я имел в виду 256 - серое, 8-битное изображение. Т.е. цветное нужно переделать под этот вариант.
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
09.09.2015, 20:08
belka32,
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
using System;
using System.Drawing;
using System.Net;
using System.Windows.Forms;
 
namespace WindowsFormsApplication309
{
    public partial class Form1 : Form
    {
        private byte[,] array;
 
        public Form1()
        {
            InitializeComponent();
 
            var img = (Bitmap)Image.FromStream(new WebClient().OpenRead(@"http://hq-oboi.ru/photo/kotik_na_kamushke_1920x1200.jpg"));
 
            array = new byte[img.Width,img.Height];
 
            using(var wr = new ImageWrapper(img))
            foreach(var p in wr)
            {
                var gray = (byte)(255*wr[p].GetBrightness());
                array[p.X, p.Y] = gray;
                wr[p] = Color.FromArgb(gray, gray, gray);
            }
 
            BackgroundImage = img;
        }
    }
}
Класс ImageWrapper здесь.

0
127 / 121 / 68
Регистрация: 27.08.2015
Сообщений: 232
09.09.2015, 20:10
Лучший ответ Сообщение было отмечено belka32 как решение

Решение

Не совсем понимаю задачу. Как я уже говорил для серого изображения код выше будет работать только цветовые составляющие Color для одного пикселя будут одинаковы (R=G=B).
Вот другой код, использующий Bitmap.LockBits, для считывания значений пикселей в одномерный массив:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
        private void button1_Click(object sender, EventArgs e)
        {
            // Диалог открытия файла.
            OpenFileDialog ofd = new OpenFileDialog();
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                Bitmap bmp = new Bitmap(ofd.FileName); // // Загружаем изображение.
                pictureBox1.Image = bmp; // Устанавливаем в PictureBox
 
                // Получаем прямой доступ к пикселям изображения (только для чтения).
                // bmp.PixelFormat для 8-битного изображения будет PixelFormat.Format8bppIndexed
                Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
                BitmapData bmpData = bmp.LockBits(rect, ImageLockMode.ReadOnly, bmp.PixelFormat);
                // Выделяем место под хранение массива байт (1 пиксель - 1 байт для 8-битного изображения).
                int bytes = Math.Abs(bmpData.Stride) * bmp.Height;
                byte[] grayValues = new byte[bytes];
                // Копируем данные в заведённый массив.
                System.Runtime.InteropServices.Marshal.Copy(bmpData.Scan0, grayValues, 0, bytes);
                // Освобождаем доступ к пикселям Bitmap.
                bmp.UnlockBits(bmpData);
            }
        }
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.09.2015, 20:10
Помогаю со студенческими работами здесь

Загрузка картинок с сжатием и конвертированием изображения + массовая загрузка
Приветствую форумчане Я можно сказать что новичок в PHP но сайты пишу уже давно, и столкнулся с тем что мне нужно огромный архив на...

Загрузка изображения в Image с сохранении соотношения сторон изображения
загрузка изображения в Image(с фиксированным размером) при этом изображение должно сохранить соотношение сторон и полностью уместится в...

Загрузка изображения (только изображения)
Нужно обычная форма через которую надо загружать изображение в папку load Вот что я пока что написал : &lt;!DOCTYPE HTML PUBLIC...

Загрузка изображения
Помогите реализовать следующую задачу: Отправляю изображение через форму: &lt;input name=&quot;photo&quot; type=&quot;file&quot;...

Загрузка изображения в БД
Подскажите,пожалуйста, как сделать загрузку изображения в phpmyadmin


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru