|
3 / 3 / 1
Регистрация: 19.05.2019
Сообщений: 180
|
|
нарисовать битмап устанавливая цвет каждого пикселя. direct2d18.05.2021, 00:53. Показов 4265. Ответов 8
Метки нет (Все метки)
У меня есть массив с данными , которые должны использоваться для того чтобы задавать цвет, как это сделать в direct2d ,
вопрос кажется легким , но ответа я на него не нашел , аналог SetPixel() можно сказать. Если процесс сложный оставьте пожалуйста комментарии.
0
|
|
| 18.05.2021, 00:53 | |
|
Ответы с готовыми решениями:
8
Вывести в окно битмап, используя инструменты Direct2D как получить цвет каждого пикселя Получить цвет каждого пикселя изображения, разбив на уровни RGB |
|
2736 / 891 / 331
Регистрация: 10.02.2018
Сообщений: 2,118
|
|
| 18.05.2021, 12:49 | |
|
Аналогов функции SetPixel нет, но возможность попиксельного рисования есть. Подобное рисование будет крайне медленным и не эффективным. Одно дело, если вам нужно сделать это единожды, и совсем другое, если вы хотите попиксильно рисовать сцену несколько раз в секунду.
1
|
|
|
3 / 3 / 1
Регистрация: 19.05.2019
Сообщений: 180
|
|
| 18.05.2021, 12:54 [ТС] | |
|
мда, паходу преподу придется объяснить что direct использовать вредно.
Мне нужен именно второй вариант.
0
|
|
|
2736 / 891 / 331
Регистрация: 10.02.2018
Сообщений: 2,118
|
|
| 18.05.2021, 13:20 | |
|
Объекты direct2d как правило "лежат" в памяти графической карты. Различные операции с объектами так же выполняются в памяти графической карты. Всё это сделано для того, что бы повысить скорость рисования. Максимальная производительность достигается путём загрузки в память графической карты всего материала необходимого для сцены и дальнейшего комбинирования сцены из имеющихся объектов. Вам нужно как-то попытаться соотнести свою задачу с этими принципами.
Если пикселей не очень много, то вы можете создать набор разноцветных кистей и закрашивать ими квадратики (пиксели). Если же прям нужен битмэп, то нужно выделять блок данных в операционной памяти компа. Рисовать свои пиксели в этом блоке памяти. Затем копировать этот блок в объект ID2D1Bitmap (CopyFromMemory). Затем средствами direct2d рисовать получившийся битмэп (ID2D1RenderTarget:: DrawBitmap). Всё же я полагаю, что это будет не очень быстрый способ.
0
|
|
|
3 / 3 / 1
Регистрация: 19.05.2019
Сообщений: 180
|
|
| 18.05.2021, 13:42 [ТС] | |
|
а можешь пример скинуть? как рисовать свои пиксели в блоке памяти, ты в этом пункте зацепок не оставил.
0
|
|
|
2736 / 891 / 331
Регистрация: 10.02.2018
Сообщений: 2,118
|
||||||||||||||||||||||||||||||||||||||||||
| 18.05.2021, 14:24 | ||||||||||||||||||||||||||||||||||||||||||
|
Во-первых, нужно знать формат Bitmap-а, который используется в direct2d.
Сейчас я точно не помню, но вроде там был BGRA по 8 бит на каждую компоненту. Это значит, что один пиксель кодируется 4-мя байтами. Для картинки 4 на 4 пикселя картинка будет выглядеть как-то так:
При разворачивании пикселей в строку (непрерывный блок памяти) получается последовательность строк:
Каждая ячейка (пиксель) занимает 4 байта. Если вам нужно изменить первый пиксель во второй строке сверху (б0), то нужно посчитать его смещение от начала. Для этого нужно номер строки умножить на длину строки в байтах и прибавить номер столбца помноженный на 4. ofset = row*pinch + col*4 = 1*16 + 0*4 = 16 Первый байт нужного пикселя (б0) имеет смещение 16. Этот байт определяет синюю компоненту пикселя, следующий байт - зеленую, следующий - красную, следующий - прозрачность. Если хотите, то можете написать свою функцию SetPixel для работы с блоком памяти. Или можете заполнять картинку последовательно начиная с начала и постоянно инкриментируя адрес ячейки.
0
|
||||||||||||||||||||||||||||||||||||||||||
|
3 / 3 / 1
Регистрация: 19.05.2019
Сообщений: 180
|
|
| 18.05.2021, 16:42 [ТС] | |
|
я такой делаю стринг , или массив стрингов которые будут такие "FFAABBEE" и это будет мой блок памяти?
посчитать смещение я понял как, вроде не сложно, как обратиться к самому пикселю, как мне ему присвоить значение? какой командой? пикселю битмапа. Добавлено через 18 минут в майкрософт такой параметр для CopyFromMemory , я не понимаю в каком виде? одномерный массив , двумерный массив чего? байтов , стрингов, чаров , интов. const void *srcData,
0
|
|
|
2736 / 891 / 331
Регистрация: 10.02.2018
Сообщений: 2,118
|
|||||||
| 18.05.2021, 16:44 | |||||||
Сообщение было отмечено ДЛ имончик как решение
Решение
1
|
|||||||
|
3 / 3 / 1
Регистрация: 19.05.2019
Сообщений: 180
|
|
| 18.05.2021, 16:48 [ТС] | |
|
спасибо!!! понял что написать мне быстрее чем объяснить))
0
|
|
| 18.05.2021, 16:48 | |
|
Помогаю со студенческими работами здесь
9
Можно ли менять цвет не каждого пикселя, а глобально для всей картинки? Изменить цвет формы в цвет пикселя под курсором по клику мыши Написать программу, которая будет определять цвет пикселя под курсором и выводить на экран этот цвет Цвет пикселя цвет пикселя Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
|
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение:
DISM / Online / Add-Capability / CapabilityName:WMIC~~~~
Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
|
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: при создании документов установить период списания автоматически. . .
|
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2.
Задача: вывести данные из ТЧ нетипового документа. . .
|
|
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению.
На форме документа создается. . .
|
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
|
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
|
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
|