JPEG 画像ファイルを読み取り、そのビットをテキスト ファイルに保存します。ここで、テキスト ファイル内のこれらのビットを使用して、有効な JPEG 画像に変換したいと考えています。バイナリ ファイルを書き込もうとしましたが、イメージ ファイルが取得されません。
私を正しい方向に導いてください。私はこれに数日間頭を悩ませていますが、今のところ運がありません。
JPGファイルを書き込むための私のコードは次のとおりです。
int length;
unsigned char *inData;
char Buffer[9];
int c = 0, x;
/* file.txt has single bit per line. */
FILE *reader = fopen(file.txt, "r");
FILE *writer = fopen("output.JPG","wb");
fseek(reader, 0, SEEK_END);
length=ftell(reader);
fseek(reader, 0, SEEK_SET);
for(x=0; x < length; x++){
fscanf(reader, "%d", &inData);
if(c <= 8){ /* reading 8-bits */
Buffer[c] = inData;
} else {
fwrite(&Buffer, sizeof(Buffer), 1, writer);
c = 0;
}
c++;
}
fclose(reader);
fclose(writer);
これは、input.JPG を読み取り、そのビットを file.txt に書き込むためのコード スニペットです。
char *buffer;
int fileLen;
FILE *file = fopen("inputIM.JPG", "rb");
fseek(file, 0, SEEK_END);
fileLen=ftell(file);
fseek(file, 0, SEEK_SET);
buffer=(char *)malloc(fileLen+1);
fread(buffer, fileLen, 1, file);
fclose(file);
convertToBit(&buffer, fileLen);
free(buffer);
}
// convert buffer data to bits and write them to a text file
convertToBit(void *buffer, int length)
{
int c=0;
int SIZE = length * 8;
unsigned char bits[SIZE + 1];
unsigned char mask = 1;
unsigned char byte ;
int i = 0;
FILE *bitWRT = fopen("file.txt", "w");
for (c=0;c<length;c++)
{
byte = ((char *)&buffer)[c];
for(i = 0; i < 8; i++){
bits[i] = (byte >> i) & mask;
fprintf(bitWRT, "%d\n", bits[i]);
}
}
fclose(bitWRT);
}
ありがとう、
-サム