Растровое изображение из C # в C ++ - PullRequest
0 голосов
/ 15 марта 2012

Я думаю, что это должен быть простой вопрос для тех, кто использует растровое изображение в C ++.У меня есть мой рабочий код в C # - как сделать что-то подобное в C ++ ??Спасибо за ваши коды (помощь): -))

public Bitmap Visualize ()
{


  PixelFormat fmt = System.Drawing.Imaging.PixelFormat.Format24bppRgb;
  Bitmap result = new Bitmap( Width, Height, fmt );

  BitmapData data = result.LockBits( new Rectangle( 0, 0, Width, Height ), ImageLockMode.ReadOnly, fmt );
  unsafe
  {
    byte* ptr;

    for ( int y = 0; y < Height; y++ )
    {
      ptr = (byte*)data.Scan0 + y * data.Stride;

      for ( int x = 0; x < Width; x++ )
      {
          float num = 0.44;
          byte c = (byte)(255.0f * num);
          ptr[0] = ptr[1] = ptr[2] = c;


          ptr += 3;
      }
    }
  }
  result.UnlockBits( data );

  return result;

}

Ответы [ 3 ]

1 голос
/ 15 марта 2012

Необработанный перевод на C ++ / CLI, я не запускал пример, поэтому он может содержит некоторые опечатки.В любом случае, есть разные способы получить один и тот же результат в C ++ (потому что вы можете использовать стандартный CRT API).

Bitmap^ Visualize ()
{
  PixelFormat fmt = System::Drawing::Imaging::PixelFormat::Format24bppRgb;
  Bitmap^ result = gcnew Bitmap( Width, Height, fmt );

  BitmapData^ data = result->LockBits( Rectangle( 0, 0, Width, Height ), ImageLockMode::ReadOnly, fmt );
  for ( int y = 0; y < Height; y++ )
  {
    unsigned char* ptr = reinterpret_cast<unsigned char*>((data->Scan0 + y * data->Stride).ToPointer());

    for ( int x = 0; x < Width; x++ )
    {
        float num = 0.44f;
        unsigned char c = static_cast<unsigned char>(255.0f * num);
        ptr[0] = ptr[1] = ptr[2] = c;

        ptr += 3;
    }
  }

  result->UnlockBits( data );

  return result;

}
0 голосов
/ 15 марта 2012

C ++ ничего не содержит в отношении изображений или обработки изображений.Для этого доступно множество библиотек, и способ работы с данными может отличаться для каждого.

На самом базовом уровне изображение состоит из группы байтов.Если вы можете извлечь только данные (т. Е. Не заголовки или другие метаданные) в unsigned char[] (или какой-либо другой соответствующий тип, соответствующий формату вашего изображения), то вы можете перебирать каждый пиксель так же, как вы это делали в своем примере на C #.

0 голосов
/ 15 марта 2012

Вы можете делать очень похожие циклы, используя библиотеку Easy BMP

...