/*Title: P3.c
Location: ~/csc1710/P3/P3.c
Class: CSC1710
Name: Emily
Date: 02-18-2017
This program is meant to convert a colored image to black and white.*/
#include<stdio.h>
#include <string.h>
int main(void)
{
int height, width;
char red;
char green;
char blue;
char imageType[3];
char comment[256];
char newlinechar;
int mcc;
unsigned char color;
//scan and print for image type
fscanf(stdin,"%[^\n]%c",imageType,&newlinechar);
strncpy(imageType,"P2",3);
fprintf(stdout,"%s\n",imageType);
//scan and print for comment
fscanf(stdin,"%[^\n]%c",comment,&newlinechar);
strncpy(comment,"#EMILY MORAN Black and White Conversion Routine, Version 0.1",256);
fprintf(stdout,"%s\n",comment);
//scan and print for height and width
fscanf(stdin,"%d %d",&width,&height);
fprintf(stdout,"%d %d\n",width,height);
//scan and print for max color code
fscanf(stdin,"%d",&mcc);
fprintf(stdout,"%d\n",mcc);
//while loop for RGB numbers
while(fscanf(stdin," %c", ,&red)!=EOF){
fscanf(stdin,"%c",&green);
fscanf(stdin,"%c",&blue);
color =(unsigned char)0.3*red+0.5*green+0.2*blue;
fprintf(stdout,"%hhu\n",color);
}
return(0);
}
上記は私のCSCクラスのプログラミングプロジェクトです。プロジェクトの最初の部分は、整数値を使用してppmイメージをpgmにグレースケール化することでした。この部分は私のイメージエディタで私にとって完璧に動作します。%C whileループで改行を維持していますか?
第2の部分は、これらの整数値を文字にすることにより、より少ないスペースを使用することでした。しかし、私は今、画像が正しく表示されない問題に遭遇しています。まだグレースケールではありますが、最初の画像と同じ画像ではありません。私の教授は今朝、ループが新しい行をスキップしていないというバグについて話しましたが、whileループでfscanfを編集してnewImageおよびコメントとして表示しようとすると、コンパイラーはセグメンテーションの失敗を訴えます。
ところで、プログラムに.ppmファイルを入力し、新しい.pgm値を出力しています。
誰かが私のコードでこの問題を見るのを助けることができますか?ありがとう!あなたは新しい色データを出力しているとき、あなたはそれが連続ブロックでなければなりません\n
文字
fprintf(stdout,"%hhu\n",color);
含めている
「これらの整数値を文字にする」とは、バイナリデータとして書き込むことですか?改行とバイト値10の違いをどうやって分かりますか?何かここではあまり一致しません。とにかく、バイナリデータを使用している場合は、 'fscanf'を使って読み込みません(おそらく' getc'を使用します)。 – hyde
デバッガ(gdbのような)を使用している場合は、セグメンテーションフォールトをどのラインで取得しているのかを教えてください –
どの入力を使用していますか? – melpomene