Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
 Аватар для Figga
0 / 0 / 1
Регистрация: 09.11.2013
Сообщений: 72

Как черно/белый рисунок перенести в массив char[]

25.08.2014, 00:48. Показов 2914. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
есть черно белый рисунок. каждый пиксель рисунка занимает 3 байка , а мне бы хотелось в 1 байт поместить 8 пикселей. Типа двоичный код Белый = 0, Черный = 1.

Незнаю даже в сторону каких класов смотреть =(
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.08.2014, 00:48
Ответы с готовыми решениями:

Черно-белый BMP рисунок преобразовать в двумерный массив (матрицу)
Есть черно-белый рисунок в формате BMP - необходимо отобразить в тхт файле матрицу, где бы цифрами от 0 до 255 отображались все оттенки...

Преобразовать рисунок в черно-белый по алгоритму
Пиксели рисунка закодированы числами от 0 до 255 (обозначающими яркость пикселей) в виде матрицы, содержащей N строк и M столбцов. Нужно...

Перевести цветной рисунок в чёрно-белый
Задача с informatics.mccme.ru Алгоритм решения я понимаю, но с написанием программ я не дружу :cry: Яркости пикселей рисунка...

12
Заблокирован
25.08.2014, 01:03
Не классов, а операторов. Биты в байт объединяют операторами. Операторы описаны в книжках и в документации.
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
25.08.2014, 01:03
Figga, c Google поссорились?
https://www.google.ru/webhp?ta... +and+white
0
 Аватар для Figga
0 / 0 / 1
Регистрация: 09.11.2013
Сообщений: 72
25.08.2014, 03:19  [ТС]
Цитата Сообщение от insite2012 Посмотреть сообщение
Figga, c Google поссорились?
https://www.google.ru/webhp?ta... +and+white
Я C# учу самостоятельно, поэтому для меня залочить изображение и скопировать его в массив для дальнейших манипуляций - это простая и понятная задача.

А вот как составить байт из битов я вообще не имею понятия =(

У меня есть массив цветов( только Белые или Черные). мне нада взять 8 цветов и сформировать из них Байт.
(Черный = 1, Белый = 0) допустим первые 8 цветов такие {Черн, Белый, Белый, Белый, Белый, Белый, Белый, Черн} = B10000001. Потом из следующих восьми составить второй байт и тд

как это можно сделать??
0
Вежливость-главное оружие
 Аватар для some_name
233 / 234 / 86
Регистрация: 19.02.2013
Сообщений: 1,446
25.08.2014, 03:46
Лучший ответ Сообщение было отмечено Figga как решение

Решение

Вот такой костыль наворотил. Вроде работает.
Кликните здесь для просмотра всего текста

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
32
33
34
35
36
37
38
39
40
41
42
43
44
public FormMain()
        {
            InitializeComponent();
            Bitmap image = new Bitmap("d:\\Untitled.png");  
            string imageInText = ImageToString(image);             
        }
 
        private bool IsBlack(Color pixel)
        {
            return pixel.ToArgb() == Color.Black.ToArgb();
        }
 
        private string ImageToString(Bitmap image)
        {
            StringBuilder sb = new StringBuilder();
            for (int y = 0; y < image.Height; ++y)
            {
                bool[] bits = new bool[image.Width];
                for (int x = 0; x < image.Width; ++x)
                {
                    bits[x] = IsBlack(image.GetPixel(x, y));
                }
                sb.AppendLine(new string(BitsToChars(bits)));
            }
            return sb.ToString();
        }
 
        private char[] BitsToChars(bool[] bits)
        {
            int bitsInChar = sizeof(char) * 8;
            char[] chars = new char[bits.Length / bitsInChar];
            for (int numberOfChars = 0, index = 0; index < bits.Length; )
            {
                int charBits = 0;
                for (int bit = 0; (bit < bitsInChar) && (index < bits.Length); ++bit)
                {
                    charBits <<= 1;
                    charBits |= bits[index++] ? 1 : 0;
                }
                chars[numberOfChars++] = (char)charBits;
            }
            return chars;
        }
    }

Получил такой вывод:
Кликните здесь для просмотра всего текста

￿￿￿￿
￿￿￿￿
￿￿￿￿
￿￿￿￿
￿￿￿￿
￿￿￿￿
￿￿￿￿
￿￿￿￿
￿￿￿￿
￿￿￿￿
￿￿￿￿
￿￿￿￿
￿￿￿￿
￿￿￿￿
￿￿￿￿
翿￿￿￿
㿿￿￿￿
㣯﾿﷎䎀
㣯マ硫䎀
㣯マ硫䎀
㣯゚硫䎀
㿿￿￿￀
㿿￿￿¢
㿿￿￿¢
㣫ﯿ硫䎀
㣩硫䎀
㣨硫䎀
ᣨ䎀
ᣨ䎀
᳨䎀
῿￿￿￿
᳨臎䎀
᳨臎䎀
᳨臎䎀
᳨臎䎀
᳨臎䎀
᳈臎䎀
᷈臎䎀
῿￿￿￿
῿￿￿￿
῿￿￿￿
㧈掃臎䎀
㧈玃臎䎀
㧈玃臎䎀
㧈玃臎䎀
㧈玃臎䎀
㧈玃臎䎀
㧈玃臎䟀
㿿￿￿¢
㿿￿￿¢
㿿￿￿
㮈玃臎䎀
㮈玃臎䎀
㮈玃臎䎀
㮈玃臎䎀
㮈掃臎䎀
῿￿￿¢
῿￿￿￰
῿￿￿￰
È䆃聠䎀
ˆā聀䆀


на такой картинке:
Название: Untitled.png
Просмотров: 151

Размер: 1.0 Кб
1
 Аватар для Figga
0 / 0 / 1
Регистрация: 09.11.2013
Сообщений: 72
25.08.2014, 04:19  [ТС]
Цитата Сообщение от some_name Посмотреть сообщение
charBits <<= 1;
charBits |= bits[index++] ? 1 : 0;
Огромное спасибо!!!! именно это мне и нужно было.
0
25.08.2014, 05:13

Не по теме:

Цитата Сообщение от Figga Посмотреть сообщение
Как черно/белый рисунок перенести char[]
Цитата Сообщение от Figga Посмотреть сообщение
а мне бы хотелось в 1 байт поместить 8 пикселей
Не в тему, но чтобы вы дальше не находились в состоянии заблуждения сообщаню вам, что в C# char занимает 2 байта, а не 1. 1-байтовый тип в C# - это byte.

0
Вежливость-главное оружие
 Аватар для some_name
233 / 234 / 86
Регистрация: 19.02.2013
Сообщений: 1,446
25.08.2014, 10:19
Ага, TC говорил то о char, то о 8 битах.
0
 Аватар для Figga
0 / 0 / 1
Регистрация: 09.11.2013
Сообщений: 72
25.08.2014, 16:01  [ТС]
Цитата Сообщение от kodv Посмотреть сообщение
Не в тему, но чтобы вы дальше не находились в состоянии заблуждения сообщаню вам, что в C# char занимает 2 байта, а не 1. 1-байтовый тип в C# - это byte.

Опа!!!!! это неожидано.
Мне нужно передать в микроконтролер рисунок как массив Char[]. там библиотека написана походу на С или С++ и там char весит 1 байт. А редактор изображения для перевода изображения в char я написал на C# где char весит уже 2 байта =(((

Посоветуйте что делать??? я собирался при помощи этого редактора закодировать изображения в текстовый файл . А потом считывать нужный кусок этого файла с SD карты.
Походу не все так просто как мне казалось =(( А cколько весит 1 символ в текстовом файле .txt ???
0
Вежливость-главное оружие
 Аватар для some_name
233 / 234 / 86
Регистрация: 19.02.2013
Сообщений: 1,446
25.08.2014, 16:07
Зачем вам передавать как char? Передавайте byte.

Добавлено через 1 минуту
Цитата Сообщение от Figga Посмотреть сообщение
А cколько весит 1 символ в текстовом файле .txt ???
Смотря в какой кодировке. Unicode8 - 1 байт. Unicode16 - 2 байта

Добавлено через 52 секунды
Пишите вообще бинарный файл и не парте мозг. Потом сможете все распарсить вообще без проблем
1
 Аватар для Figga
0 / 0 / 1
Регистрация: 09.11.2013
Сообщений: 72
25.08.2014, 21:16  [ТС]
библиотека на микроконтроле принимает рисунок как массив char[]. Плюс еще библиотека которая будет считывать эту информацию с SD карты походу не умеет работать с бинарным файлом.

поэтому мне хотелось бы както сохранить все в текстовый документ и потом считывать его по байту

Добавлено через 13 минут
0
 Аватар для m0nax
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
25.08.2014, 22:04
char в нативных языках типа с/с++ это 1 байт
char в с#/net это 2 байта
byte в с#/net это 1 байт
0
Вежливость-главное оружие
 Аватар для some_name
233 / 234 / 86
Регистрация: 19.02.2013
Сообщений: 1,446
25.08.2014, 22:12
Цитата Сообщение от m0nax Посмотреть сообщение
char в нативных языках типа с/с++ это 1 байт
char в с#/net это 2 байта
byte в с#/net это 1 байт
Коротко и ясно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.08.2014, 22:12
Помогаю со студенческими работами здесь

Черно-белый рисунок на экран QBasic'y
На экран QBasic можно вынести двухцветный черно-белый рисунок. Для этого берете графический BMP - файл размером 640×480. Создаете...

Как создать Bitmap черно-белый
Вот так создаю Bitmap bitmap=Bitmap.createBitmap(720, 1280, Bitmap.Config.RGB_565); То есть 2 байта на точку. А мне надо 2 бита...

Как сделать черно белый скрин в WinXP
В Windows 7 задаю количетсво цветов к примеру черно былый и скрин делаеться нормально А в Windows XP просто ничего не происходит, скрин...

Как перевести монитор в черно белый режим в Windows ?
вот думал заработает зашел в Свойства:Экран/Параметры/Дополнительно/управление цветом там есть цветовой профиль, может подскажете какой...

Черно-белый ковер.
там во вложениях написано


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru