と、言うわけで、演習問題(2-4)のテストプログラム。
やる気が削げてきたので、またまた手抜きプログラム。
エラーチェックとか何もしていないので、そのつもりで。
プログラムのパラメータは、第1引数が変換元のpnmファイル名で、第2引数が変換後のpnmファイル名。
一応手元の画像を変換してみたところ、ちゃんと動いているように見える。
やる気が削げてきたので、またまた手抜きプログラム。
#include <stdio.h>
int main(int argc, char *argv[]) {
char buf[256];
FILE *fin, *fout;
int height, width, num, i;
unsigned char *src, *dst;
fin = fopen(argv[1], "r");
fout = fopen(argv[2], "w");
// P6
fgets(buf, 256, fin);
fprintf(fout, "%s", buf);
// height width
fgets(buf, 256, fin);
fprintf(fout, "%s", buf);
sscanf(buf, "%d%d", &height, &width);
num = height * width;
// depth
fgets(buf, 256, fin);
fprintf(fout, "%s", buf);
printf("height = %d, width = %d, num = %d, num * 4 = %d\n", height, width, num, num * 4);
src = (unsigned char *) malloc(((size_t)num) * 4);
dst = (unsigned char *) malloc(((size_t)num) * 4);
printf("src = %x, dst = %x\n", src, dst);
for (i = 0; i < num; i++) {
fread(src + i * 4, 1, 3, fin);
}
fclose(fin);
rgb2y(src, dst, num);
for (i = 0; i < num; i++) {
fwrite(dst + ((size_t)i) * 4, 1, 3, fout);
}
fclose(fout);
}
使い方は、まず変換元のファイルをjpegtopnm等でpnmファイルに変換して、上のプログラムに食わせ、出来上がったファイルをpnmtojpeg等に食わせる。エラーチェックとか何もしていないので、そのつもりで。
プログラムのパラメータは、第1引数が変換元のpnmファイル名で、第2引数が変換後のpnmファイル名。
一応手元の画像を変換してみたところ、ちゃんと動いているように見える。
カテゴリ
Linuxトラックバック(0)
このブログ記事を参照しているブログ一覧: CELLプログラミングその4
このブログ記事に対するトラックバックURL: https://www.wizard-limit.net/cgi-bin/mt/mt-tb.cgi/1116

コメントする