Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обращение к пикселю bmp-файла 
:(
    Опции темы
Lirius
Дата 27.4.2008, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 5.1.2007

Репутация: нет
Всего: нет



Есть картинка bmp. Надо обратиться к каждому пикселю перевести его RGB значение в двоичный код и изменить последние 3 бита.
Код

            Color pix=Color.Aqua;
            string R="",G="",B="";
            string tmp;
            int respix=0;
             for (int i = 0; i < 2; i++)
                for (int j = 0; j < 2; j++)
                {
                    pix = bmp.GetPixel(i, j);
                    respix = pix.ToArgb();
                }
            //t.Text = Convert.ToString(respix,2);
            tmp = Convert.ToString(respix, 2);
            for (int i = 8; i < 16; i++)
                R += tmp[i];
            for (int j = 16; j < 24; j++)
                G += tmp[j];
            for (int k = 24; k < 32; k++)
                B += tmp[k];
            tt.Text = R+" "+ G+" "+B+"\n";
            
            bmp.SetPixel(1, 1, Color.FromArgb(int.Parse(R),int.Parse(G),int.Parse(B)));
            bmp.Save("out.bmp");      

Когда перевожу из string в int то первые нули пропадают и получается 6 бит
а надо 8 для bmp.SetPixel(1, 1, Color.FromArgb(int.Parse®,int.Parse(G),int.Parse(B)));
PM MAIL   Вверх
vponomarov
Дата 27.4.2008, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 407
Регистрация: 11.8.2007
Где: Киев

Репутация: 4
Всего: 12



Lirius, тут не нужно переводить в стринг (tmp = Convert.ToString(respix, 2);)
компоненты цвета можно получить так: pix.R, pix.G, pix.B
а дальше делай с ними, что хочешь.
не совсем понял твою задачу, но в шарпе есть битовые операции. возможно они тебе пригодятся.


--------------------
user posted image
user posted image
PM MAIL ICQ   Вверх
Lirius
Дата 28.4.2008, 06:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 5.1.2007

Репутация: нет
Всего: нет



Код

 Color pix=Color.Aqua;
            int[] R = new int[8];
            int[] G = new int[8];
            int[] B = new int[8];
            int k = 8;
            string tmp; 
            int respix=0;
            string r="", g="", b="";
            
            t.Text = "consider\n";
            for (int i = 0; i < 2; i++)
                for (int j = 0; j < 2; j++)
                {
                    pix = bmp.GetPixel(i, j);
                    respix = pix.ToArgb();
                }
            //t.Text = Convert.ToString(respix,2);
            tmp = Convert.ToString(respix, 2);
            
            for (int i = 0; i < R.Length; i++)
            {
                R[i] = tmp[k++]%2==0 ? 0:1;
                tt.Text += R[i]+"\n";
            }
            for (int i = 0; i < R.Length; i++)
            {
                r += R[i];
            }
            
            tt.Text +="\n";
            for (int i = 0; i < G.Length; i++)
            {
                G[i] = tmp[k++] % 2 == 0 ? 0 : 1;
                tt.Text += G[i] + "\n";
            }
            for (int i = 0; i < G.Length; i++)
            {
                g += G[i];
            }
            
            tt.Text += "\n";
            for (int i = 0; i < B.Length; i++)
            {
                B[i] = tmp[k++] % 2 == 0 ? 0 : 1;
                tt.Text += B[i] + "\n";
            }
            for (int i = 0; i < B.Length; i++)
            {
                b += B[i];
            }
            
            
            //bmp.SetPixel(1, 1, Color.FromArgb(Convert.ToInt32(r,10),Convert.ToInt32(g,10),Convert.ToInt32(b,10)));
            //bmp.Save("out.bmp");                


Я получил значение битовые в массивы R,G,B потом скинул в r,g,b строку и при конвертировании Convert.ToInt32(r,10) не конвертируется в 
10 систему счисления. Хотя в msdn'e написано что  при передаче строкового типа которое содержит число в 2 системе то Convert.ToInt32(r,10) должно перевести в 10, но почему то не переводит.
И какая библиотека и какие операции отвечают за работу с битами ?
А задача такая:
Назывется стеганография - нужно текст спрятать в картинку используя при этом 3 младших бита каждого из значений R,G,B.



PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0448 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.