Я в 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);
}
}