画像は縦横のサイズが256の画像です。そしてこの画像から輝度値をー20するというプログラム作っていて、私は最初-20すればいいのではないかと思いout_image[y][x] = in_image[y][x] - 20;と書いて実行してみたのですが出力された画像はなぜか真っ白な部分が多くできあがった状態になりました。
そして調べてみたら負の数字がunsigned charでは表現できないらしくじゃあ別のを使えばいいのかと思ったのですがその問題にはキャスト?も別のも使わずunsigned charだけでできると書いてありました。
いろいろためしてみたのですが結局白い部分が残ってしまい失敗してしまいました。
もうお手上げ状態なので助けてほしいです。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void main(void)
{
int x, y;
char fni[40], fno[40];
unsigned char head[1078], buf[YSIZE][XSIZE];
unsigned char in_image[YSIZE][XSIZE];
unsigned char out_image[YSIZE][XSIZE];
FILE *fp, *fp2;
printf("ファイル名を入力:");
scanf("%s", fni);
fp = fopen(fni, "rb");
fread(head, sizeof(unsigned char), 1078, fp);
fread(buf, sizeof(unsigned char), XSIZE*YSIZE, fp);
for (y = 0; y<YSIZE; y++){
for (x = 0; x<XSIZE; x++){
in_image[y][x] = buf[y][x];
}
}
printf("読み込み終了!\n");
printf("出力ファイル名を入力:");
scanf("%s", fno);
for (y = 0; y<YSIZE; y++){
for (x = 0; x<XSIZE; x++){
out_image[y][x] = in_image[y][x] - 20;
if (out_image[y][x] <= 0){
out_image[y][x] = 0;
}
}
}
fp2 = fopen(fno, "wb");
fwrite(head, sizeof(unsigned char), 1078, fp2);
fwrite(out_image, sizeof(unsigned char), XSIZE*YSIZE, fp2);
fclose(fp);
fclose(fp2);
printf("終了!\n");
}