Как сохранить значения пикселей растрового изображения в массив с их значениями RGB, не считывая пиксели с экрана? - PullRequest
0 голосов
/ 01 июля 2019

Я в Microsoft Visual C ++ 6.У меня есть изображение BMP.Я хочу сохранить пиксели изображения в массиве с их значениями красного, зеленого и синего соответственно.

Я отобразил изображение на экране с помощью функции «BitBlt», затем я прочитал значения изображения с экрана, используя следующий код:

Работает без нареканий, но на это уходит много времени.Я нашел другой метод в Stackoverflow и попробовал его со своими потребностями следующим образом:

Но, к сожалению, он не работал.Не могли бы вы подсказать мне, как эффективно выполнить эту задачу?Заранее спасибо

    for (Y = 0; Y < Siz; Y++) {
     for (X = 0; X < Siz; X++) {
       COLORREF c = dc.GetPixel(70 + X, 110 + Y);
       B[c1] = GetRValue(c);
       B[c1 + 1] = GetGValue(c);
       B[c1 + 2] = GetBValue(c);
     }
    }

Другой код

    FILE *f = fopen(s, "rb");
    unsigned char info[54];
    fread(info, sizeof(unsigned char), 54, f); // read the 54-byte header

    // extract image height and width from header
   int width, height;
   memcpy(&width, info + 18, sizeof(int));
   memcpy(&height, info + 22, sizeof(int));
   int heightSign = 1;
   if (height < 0) {
    heightSign = -1;
   }

   int size = 3 * width * abs(height);
   unsigned char *data = new unsigned char[size]; // allocate 3 bytes per 
   pixel
   fread(data, sizeof(unsigned char), size, f); // read the rest of the 
   data at once
   fclose(f);

    if (heightSign == 1) {
    for (int i = 0; i < size; i += 3) {
      unsigned char tmp = data[i];
      data[i] = data[i + 2];
      data[i + 2] = tmp;
      int red = int(data[i] & 0xff);
      int green = int(data[i+1] & 0xff);
      int blue = int(data[i+2] & 0xff);
     }
    }
...