Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Доступ к элементам bitset


Автор: ImmS 29.1.2009, 22:19
Доброго времени суток...

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

Код

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], вроде как массив не заполнен...
расскажите что я делаю не так?
Задача получить доступ к четвертому биту пикселя картинки...

Автор: taiven 30.1.2009, 00:23
http://forum.vingrad.ru/forum/topic-245698.html

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

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


Автор: Mpak 30.1.2009, 01:17
мдя.. нашел интересную вещь:
Цитата

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

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

Код

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

Автор: taiven 30.1.2009, 02:34
пример
Код

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

Автор: ImmS 30.1.2009, 04:49
Спасибо 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]));
  }


Три раза проверил пишет в файл вроде правильно....может я чего недопонимаю?

Автор: mrbrooks 30.1.2009, 08:49

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

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


//твой код

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

//твой код


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)