Я читаю изображение .img Gray Scale (заголовок 512 байт, 512 x 512 пикселей x 8 бит на пиксель).
Там я определяю порог для превращения изображения в градациях серого в бинарное изображение (черное/белое).
Но когда я присваиваю пикселям 0, они становятся голубыми (#01fffd)?!?! Когда я использую значение 2, оно почти черное (#020100).
Можете ли вы объяснить мне, как это происходит?
Я прочитал изображение так:
int width = 512;
int height = 512;
File* imageFilePointerIn = fopen("image.img", "r+b");
File* binaryImageFilePointerOut = fopen("imageOut.img",
"w+b");
unsigned char* header = new unsigned char[512];
unsigned char** imageData = new unsigned char*[width];
unsigned char** binaryImageArray = new unsigned char*[width];
fread(header, sizeof(char), 512, imageFilePointerIn);
for (int i = 0; i < width; i++) {
data[i] = new unsigned char[height];
fread(data[i], sizeof(char), height, imageFilePointerIn);
}
for (int i = 0; i < width; i++) {
binaryImageArray[i] = new unsigned char[height];
}
char unsigned thresholdBinaryImage = 128;
for (int i = 0; i < width; i++) {
for (int j = 0; j < height; j++) {
if (thresholdBinaryImage <= data[i][j]) {
binaryImageArray[i][j] = 255;
} else {
binaryImageArray[i][j] = 0;
}
}
}
fwrite(header, sizeof(char), headerSize, binaryImageFilePointerOut);
for (int i = 0; i < width; i++) {
fwrite(binaryImageArray[i], sizeof(char), height,
binaryImageFilePointerOut);
}
fclose(binaryImageFilePointerOut);
fclose(imageFilePointerIn);
Я понятия не имею, почему цвета могут отображаться вообще? Для отображения я переношу файл .img в файл .ras с кодом, взятым из Интернета. Но я не думаю, что ошибка могла быть там, так как я видел, как другие использовали тот же код для преобразования .img Grayscales в .ras только для отображения без цветов.
Было бы неплохо получить любое предложение :).