|
0 / 0 / 0
Регистрация: 01.12.2011
Сообщений: 8
|
|
Мучение: Создание из двумерного массива bitmap-а в оттенках серого01.12.2011, 11:58. Показов 3726. Ответов 13
Метки нет (Все метки)
Требуется помощь:
Осуществлен вывод значений двумерного массива значений в рабочее окно программы с помощью SetPixel(...). Однако это вариант не подходит из-за медленной отрисовки этого массива. (2D Массив представляет собой изображение 8 разр. в оттенках серого). Пробую следующим кодом, создавая предварительно динамический массив ... const int FLAGZOOM = 600; unsigned char * RusFlag[FLAGZOOM*FLAGZOOM]; ... и заполняя его, создать bitmap, чтобы потом отобразить его на экране стандартными способами. Умею загружать bitmap-ы с диска и отображать, но с этим просто беда: отображаются, простите, вертикальные розовые полосы. Где вкралась ошибка? HELP!!! кусок кода в array_to_bitmap.txt
0
|
|
| 01.12.2011, 11:58 | |
|
Ответы с готовыми решениями:
13
Как массив байтов (1 байт на пиксель (изображение в оттенках серого) запихнуть в Bitmap и отобразить в PicterBox? Создание динамического массива Bitmap создание Clone с Bitmap меньшего размера с сохранением изначальных габаритов Bitmap |
|
|
||||||
| 01.12.2011, 12:24 | ||||||
|
vikkey, лучше выкладывайте так, вам куда как быстрее помогут:
1
|
||||||
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|
| 02.12.2011, 11:39 | |
|
Используй SetPixelV, она быстрее.)
0
|
|
|
0 / 0 / 0
Регистрация: 01.12.2011
Сообщений: 8
|
|
| 05.12.2011, 10:52 [ТС] | |
|
Выполнена замена SetPixel(...) на SetPixelV(...). Что-то жизнь лучше не стала; ну, может, самую малость... Однако всё одно - не то, что надо!
0
|
|
|
0 / 0 / 0
Регистрация: 01.12.2011
Сообщений: 8
|
|
| 05.12.2011, 11:00 [ТС] | |
|
Попробую расширить формулировку проблемы наглядными "примерами".
Добавлю скриншоты окна программы: 1. левое верхнее изображение - работа этого самого кода, который выложил BRcr; 2. если записать RusFlag[i]=(unsigned char *)h, то выводит то, что отображено вверху справа; 3. пример замены 8 -> 32 в BITMAPINFOHEADER bmi={sizeof(bmi),FLAGZOOM,-FLAGZOOM,1,32,BI_RGB,0,0,0,0,0} и RusFlag[i]=(unsigned char *)h показан внизу слева (только синий канал отображается); 4. внизу справа - то, что должно быть. Ну, помогите же кто-нибудь!!!
0
|
|
|
|
||
| 05.12.2011, 17:52 | ||
![]() Для полного счастья лучше выложите побольше кода, например, объявления и определения переменных FLAGZOOM, ArrayWindow, RusFlag, покажите, что вы с ними делаете до этого кода.
0
|
||
|
0 / 0 / 0
Регистрация: 01.12.2011
Сообщений: 8
|
|
| 06.12.2011, 03:56 [ТС] | |
Да ничего я с ними не делаю особенного: объявляю как глобальные. В первом сообщении, когда создавалась тема, указано как это делалось.ArrayWindow[l][m] - обыкновенный двумерный массив типа double; значения в нем меняются от 0 до 255 (всё стандартно как для 8 разр изображения). Заполнить его можно как угодно: хоть случайными числами! Главное, чтобы значения их были от 0 до 255... Объявляется тоже как глобальный в самом начале программы после перечисления всех библиотек. ... double ArrayWindow[600][600]={0.0}; ... Это мной здесь показан пример работы с конкретным изображением, каждый пиксель которого присваивается отдельному элементу массива ArrayWindow[l][m]. Для своего примера можно заполнить массив ArrayWindowRGB каким-нибудь другим изображением или вообще синтезировать и забить случайными числами от 0 до 255. Дело не в том, что содержит ArrayWindow[l][m], а то как его отобразить в окне программы!? А нужно, чтобы отображался он в оттенках серого, как черно-белая фотография. А у меня пока не получается, -выложенный кусок кода зачем-то его раскрашивает или еренду выводит на экран, - и связано это не с предшествующими действиями над FLAGZOOM, ArrayWindow или RusFlag, а с неправильным представлением переменной str, значения которой присваиваются RusFlag[i]. Если я правильно понимаю, чтобы все было в оттенках серого надо в маски синего, красного и зеленого каналов записать одинаковые значения. При этом для синей маски заполняются биты: "0x000000NN", где N -значение h в 16 разр. представлении; для зеленой - "0x0000NN00", и для красной - "0x00NN0000". В итоге, чтобы активировать все каналы цветов и получить именно в оттенках серого, а не цветное, надо записать так: "0x00NNNNNN" Теорию я понимаю, но реализовать программно не получается! Где-то ошибка вкралась! О_о Подскажите, люди добрые!
0
|
|
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|
| 06.12.2011, 06:12 | |
|
Для изображения в градациях серого, тебе нужно либо задавать одинаковые компоненты RGB, то приведёт к увеличению размера картинки, либо использовать индексированное изображение с чёрно-белой палитрой.
Самый быстрый способ это не SetPixel, разумеется, а непосредственное редактирование массива битов (массив всегда одномерный). При этом строки могут быть расположены не подряд, а с некоторым интервалом, необходимым для выравнивания. Кроме того, они могут располагаться в обратном порядке, т.е. первая строка будет не верхней, а нижней в изображении. Больше писать не хочу - MSDN, RTFM.
0
|
|
|
0 / 0 / 0
Регистрация: 01.12.2011
Сообщений: 8
|
||||
| 06.12.2011, 07:06 [ТС] | ||||
|
0
|
||||
|
|
|||||||||||
| 06.12.2011, 17:16 | |||||||||||
Если вам надо забить массив указателей на строчки, делайте эти строчки в цикле динамически :
0
|
|||||||||||
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
||
| 06.12.2011, 19:26 | ||
|
1
|
||
|
0 / 0 / 0
Регистрация: 01.12.2011
Сообщений: 8
|
|||||||||||
| 08.12.2011, 11:16 [ТС] | |||||||||||
|
Всё оказалось действительно просто, как и предполагалось!
str надо действительно заполнять по-другому и код сократился! Посмеюсь над собой ![]()
Хотя ... не удалять ... чтобы другие новички не наступали на те же грабли...
0
|
|||||||||||
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
||
| 08.12.2011, 11:41 | ||
|
Ну и теперь, когда ты уже разобрался, я бы посоветовал реализовать то же самое, но с индексированной картинкой.
0
|
||
|
0 / 0 / 0
Регистрация: 01.12.2011
Сообщений: 8
|
||
| 08.12.2011, 11:53 [ТС] | ||
|
Ой, нет спасибо... У меня из-за этого куска итак простой в работе! Столько уже всего накопилось... Пусть кто-нибудь другой попробует. А я буду просто заглядывать и посматривать... и копировать...
0
|
||
| 08.12.2011, 11:53 | |
|
Помогаю со студенческими работами здесь
14
Создание двумерного массива с элементами, зависящими от размера массива. Создание двумерного массива - C++ Создание двумерного массива
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга,
Ты же видел моря и метели.
Как сменялись короны и стяги,
Как эпохи стрелою летели.
- Этот мир — это крылья и горы,
Снег и пламя, любовь и тревоги,
И бескрайние. . .
|
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1
У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\
А в самом низу файла-профиля. . .
|