Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/21: Рейтинг темы: голосов - 21, средняя оценка - 4.86
 Аватар для Кротяка
7 / 7 / 1
Регистрация: 20.12.2010
Сообщений: 392

Индексированное изображение и массив пикселей

11.07.2018, 07:53. Показов 4546. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Необходимо получить индекс цвета каждого пикселя изображения в палитре цветов (индексированное изображение). Сейчас используется следующий вариант:
C#
1
2
3
4
5
6
List<byte> data = new List<byte>(); // индексы
List<Color> pixels = bitmap.Palette.Entries.ToList(); // палитра
 
for (int i = 0; i <bitmap.Height; i++)
    for (int j = 0; j < bitmap.Width; j++)
        data.Add((byte)pixels[k].IndexOf(bitmap.GetPixel(j, i)));
однако работает он ОЧЕНЬ медленно, а с учётом высокого разрешения изображений и их кол-ва так и вовсе.

Вопросы:
1) Существует ли способ ускорить процесс прохождения по циклу для получения значений RGBA каждого пикселя?
2) Возможно, существует более оптимальный способ получения индексов цветов изображений в палитре?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.07.2018, 07:53
Ответы с готовыми решениями:

Считать изображение в массив пикселей
Здравствуйте. Нужно изображение .JPG представить по пикселям. Как это можно сделать? С помощью библиотек или вручную.

Загрузить изображение из png-файла в массив пикселей
как загрузить изображение из png файла в массив пикселей?

Привести изображение к оттенкам серого и получить одномерный массив зачений его пикселей
Здравствуйте. Модифицируйте пожалуйста код так, чтобы получаемое на данном этапе разработки изображение привелось к оттенкам серого. И...

2
298 / 260 / 108
Регистрация: 26.10.2012
Сообщений: 810
11.07.2018, 08:13
1.Вызывать попиксельно GetPixel слишком медленно, лучше сразу получить все пиксели
Вот мой старый код получающий от Bitmap Image -> byte[] rgbValues
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
        void GetRgbValues()
        {
            Width = Image.Width;
            Height = Image.Height;
            Rectangle rect = new Rectangle(0, 0, Image.Width, Image.Height);
            BitmapData bmpData =
                Image.LockBits(rect, ImageLockMode.ReadWrite,
                Image.PixelFormat);
 
 
            // Get the address of the first line.
            IntPtr ptr = bmpData.Scan0;
            _Stride = bmpData.Stride;
            _bytesPerPixel = System.Drawing.Image.GetPixelFormatSize(Image.PixelFormat)/8;
            _strideError = Math.Abs(_Stride) - _bytesPerPixel * Image.Width;
           
            // Declare an array to hold the bytes of the bitmap.
            int bytes = Math.Abs(bmpData.Stride) * Image.Height;
            rgbValues = new byte[bytes];
 
            // Copy the RGB values into the array.
            System.Runtime.InteropServices.Marshal.Copy(ptr, rgbValues, 0, bytes);
            Image.UnlockBits(bmpData);
 
           
        }
Можно получать писксели через неуправляемый код и еще быстрее.
2. Вот тут может тоже тормозить
pixels[k].IndexOf(bitmap.GetPixel(j, i))
Лучше сделать pixels не List-ом , а Dictionary<Color, int> - быстрее будет работать.
0
 Аватар для Кротяка
7 / 7 / 1
Регистрация: 20.12.2010
Сообщений: 392
11.07.2018, 08:39  [ТС]
jetyb, хорошо бы увидеть пример на моём участке кода, потому что я пока не совсем понимаю, как мне использовать ваши наработки. Кроме того, мне нужно в обязательном порядке сохранить прозрачность, т.е. получать RGBA, а не RGB.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.07.2018, 08:39
Помогаю со студенческими работами здесь

Уменьшить изображение до пикселей
Как уменьшить изображение до пикселей c#?

Нарисовать в квадрате X*X пикселей изображение
Помогите пожалуйста с заданием -Дать возможность пользователю ввести целое число X от 100 до 400 и выбрать цвет из палитры Windows....

Android: Изображение из массива пикселей
Как сформировать изображение из массива пикселей? Как потом его вывести на экран, растянув до нужного размера? Как получить разрешение...

SFML изображение из массива пикселей
Можно-ли в SFML создать изображение из массива пикселей, если да то как?

Из массива пикселей сформировать bmp изображение
Добрый день. Имеется массив пикселей char*, из которого необходимо сформировать bmp изображение. В массиве пиксел представлен 12-ти...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru