Я пытаюсь написать программу для размытия изображения, но сначала пытаюсь увидеть, могу ли я даже воспроизвести изображение, пиксель за пикселем, в другом файле. Я выделил 2-мерный массив char
, чтобы сохранить значение каждого пикселя в изображении.Воспроизведение изображения с помощью C
Примечание: Изображение в оттенках серого, и это типа .raw
Однако всякий раз, когда я пытаюсь читать пиксели в мой 2D массив, мое аварийное завершение работы программы. Я чувствую, что это связано с тем, что я не зацикливаюсь в размерах изображения правильно, но я не уверен.
Код:
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *fin, *fout;
char path_in[64], path_out[64], **rev, px;
int width, height, read, i, j;
printf("Input file name: ");
scanf("%s", path_in);
printf("Output file name: ");
scanf("%s", path_out);
printf("Width of image (in pixels): ");
scanf("%d", &width);
printf("Height of image (in pixels): ");
scanf("%d", &height);
fin = fopen(path_in, "rb");
fout = fopen(path_out, "wb");
row = 0;
rev = (char **)malloc(height * sizeof(char));
for(i = 0; i < width; i++)
rev[i] = (char *)malloc(width * sizeof(char));
for(i = 0; i < height; i++)
{
for(j = 0; j < width; j++)
{
read = fread(&px, sizeof(char), 1, fin);
rev[i][j] = px;
}
}
fclose(fout);
fclose(fin);
return 0;
}
Моя программа довольно узок, так как она принимает только оттенки серого .raw
тип изображения.
Почему вы используете (символ *) ? SW быстрее, если вы используете массив char (char *), выделенный с размером (width * height) * sizeof (char), а затем вы указываете внутри такого массива с помощью массива [x * height + y] или массива [y * width + x] (только один из двух!) –