Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Доступ к элементам bitset 
:(
    Опции темы
ImmS
Дата 29.1.2009, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Доброго времени суток...

вот такой вот простенький код

Код

Graphics::TBitmap *B = new Graphics::TBitmap;
   B->LoadFromFile(KontDirDec);

   int Size = B->Height*B->Width;
   TColor *Buf_pix = new TColor [Size];

   int m=0;
   for (int i=0;i<B->Width;i++)
  {
   for (int j=0; j<B->Height; j++)
   {
    Buf_pix[m]=B->Canvas->Pixels[i][j];
    m++;
   }
  }

  int SS[32];
  unsigned long Pix;
  for (int i=0;i<32;i++)
  {
   Pix = ColorToRGB(Buf_pix[i]);
   std::bitset<32>b(Pix);
   SS[i] = b[3];
  }


Выдает ошибку

[C++ Error] _bitset.h(89): E2021 Array must have at least one element

я так понимаю ругается на b[3], вроде как массив не заполнен...
расскажите что я делаю не так?
Задача получить доступ к четвертому биту пикселя картинки...
PM MAIL ICQ   Вверх
taiven
Дата 30.1.2009, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



PM   Вверх
Mpak
Дата 30.1.2009, 00:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



taiven, вы не много не поняли вопрос.. там мы изменяем значения битов, а сейас трубется получить их значения


--------------------
В любой откомпилированной программе есть, по крайней мере, одна ошибка...
P.S. А у меня их минимум две...
PM MAIL ICQ   Вверх
ImmS
Дата 30.1.2009, 00:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Там запихивали значение в бит пикселя, а мне нужно его получить....по примеру той темы и делал...
т.е. вообще я изменяю биты в изображении, и сохраняю его, а потом открыв другим exe'шником хочу получить значения битов которые изменял...воть...ток не работает почему-то :(



Это сообщение отредактировал(а) ImmS - 30.1.2009, 00:52
PM MAIL ICQ   Вверх
Mpak
Дата 30.1.2009, 01:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



мдя.. нашел интересную вещь:
Цитата

b1[3]=0; // in BCB5 - OK, in BCB6 - error



--------------------
В любой откомпилированной программе есть, по крайней мере, одна ошибка...
P.S. А у меня их минимум две...
PM MAIL ICQ   Вверх
dumb
Дата 30.1.2009, 02:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

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



Цитата(ImmS @  29.1.2009,  22:19 Найти цитируемый пост)
получить доступ к четвертому биту пикселя картинки...

Код

SS[i] = (Pix >> 3) & 1;

PM MAIL   Вверх
taiven
Дата 30.1.2009, 02:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



пример
Код

int a = 10;
if((a & (1 << 3))) ShowMessage("1");
else ShowMessage("0");

PM   Вверх
ImmS
Дата 30.1.2009, 04:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо dumb ...одно но...

В этом случае читает корректно 
Код

int SS[32];
  unsigned long Pix;
  for (int i=0;i<32;i++)
  {
  Pix = ColorToRGB(Buf_pix[i]);
  SS[i] = (Pix>>3) & 1;
  //ShowMessage(IntToStr(SS[i]));
  }


а вот в этом не понятно откуда значения берет

Код

for (int i=0, k=1;i<Summ*8;i++,k++)
  {
   if (k>Key.Length()){k=1;}
         Key_i = StrToInt(Key[k]);
         if (Key_i>= Step){Num=i*Step+(Key_i%Step)+32;}
         else {Num=i*Step+Key_i+32;}
         Pix = ColorToRGB(Buf_pix[Num]);
         Buf[i] = (Pix>>3) & 1;
     ShowMessage(IntToStr(Buf[i]));
  }


Три раза проверил пишет в файл вроде правильно....может я чего недопонимаю?
PM MAIL ICQ   Вверх
mrbrooks
Дата 30.1.2009, 08:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

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




Цитата(ImmS @  29.1.2009,  22:19 Найти цитируемый пост)
Задача получить доступ к четвертому биту пикселя картинки... 

если все таки юзать bitset
Код


//твой код

std::bitset<32>b(Pix);
SS[i] = b.at[3];

//твой код


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


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

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


 




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


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

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