0008241
小魚が死んだので下水に流した。
彼女の小さな小さな猫も死んだので下水に流した。


LinkJapan 日記リンク なにしよっかなぁ〜?(休み版)
・読みたい漫画
グルグル、ローゼン、不思議な少年(8巻?)
・やりたいゲーム
戦国猛将3、LOM、ひぐらし、シンフォニア
2015年11月
1234567
891011121314
15161718192021
22232425262728
2930     



月の日記を
 OR AND
スペースで区切って複数指定可能
11日
書き忘れてたけど、libtiffによる32bitTiff画像出力がうまくいったので書くよ。

読み込みはデータの形状にもよるし、まあ力技だったが、書き込みは楽だろうと高をくくっていたら、当てが外れた。
32bitだから、4byte文字のintを使えばキャストの必要もなく楽かな、って思ってたけど、なかなかうまくいかんかった。
問題はそもそも必要とされるRPstripやstripMaxの定義が曖昧でいかんともしがたくて。。。
まあ、以下で解決。

RPstrip(TIFFTAG_ROWSPERSTRIP)はstripの高さ、長さ(画素数)の次元を持つ。
IFFDefaultStripSize(lineimage,bit))で画像サイズから求まるデフォルトの値を採用。
stripの幅は画像サイズ(x_max)と等しい。

場合によってはstripに収容されているデータ数がRPstrip*x_maxと等しくなっていない場合がある。
その場合、読み込みに一工夫必要になる。

stripMax()はStripの数であり、無次元。
int型にキャストした、(int)(y_max/RPstrip+0.9)で定義できる。
+0.9は小数点切り上げのため。

stripSizeはstripに収容されるデータの大きさbyte単位。
RPstrip*x_max*(bps/8)で計算できる。

最後のループ
result=TIFFWriteEncodedStrip(lineimage, stripCount, buffer+imageOffset, stripSize))
でstripごとに書き込み。
resultに返す値は書き込みに成功したデータの大きさ、byteの次元。
書き込みに成功したデータの数はresult/(bps/8)、基本的に端以外は=RPstrip*x_maxである。

bufferはポインタであり、コンテナされている2番目のstripの頭のアドレスはbuffer[0]のアドレスから、result/(bps/8)分だけ移動したところである。
依って、imageOffsetという形で、書き込みに成功したデータの全数を記憶しておく。


そのうちどんなダイナミックレンジだろうと読み込み/書き込みできるようにしたいなぁ。

-----------------------------------

#include
#include // mathmatica
#include // read and write
#include // edit the tiff file "gcc ***.c -ltiff -lm"

int image(int x_max, int y_max, int *data){
TIFF *lineimage;
char* linefilename=(char*)malloc(100*sizeof(char));

int pp=0;
for (y = 0; y < y_max; y++){ // direction y
for (x = 0; t < x_max; x++){ // direction x
buffer[pp] = data[x][y];pp++;
}
}

int* buffer;
int bufferSize = (x_max)*(y_max);
if((buffer = (int *) malloc(bufferSize*sizeof(int))) == NULL){ // defined the size of buffer and error check
fprintf(stderr, "Could not allocate enough memory for the uncompressed image\n");
exit(42);
}

int imageOffset=0;
int stripCount, stripSize, stripMax,RPstrip,bit,result;
bps = 32;
sprintf(linefilename,"name.tif");

if((lineimage = TIFFOpen(linefilename, "w")) == NULL){
printf("cannot open\n");
exit(1);
}


TIFFSetField(lineimage, TIFFTAG_BITSPERSAMPLE, bps);
TIFFSetField(lineimage, TIFFTAG_IMAGEWIDTH, x_max);
TIFFSetField(lineimage, TIFFTAG_IMAGELENGTH, y_max);
TIFFSetField(lineimage, TIFFTAG_SAMPLESPERPIXEL, 1); // gray scale
TIFFSetField(lineimage, TIFFTAG_ROWSPERSTRIP, RPstrip = TIFFDefaultStripSize(lineimage,32));
TIFFSetField(lineimage, TIFFTAG_COMPRESSION, COMPRESSION_NONE); // compress the tiff file (CCITTFAX4 etc.)
TIFFSetField(lineimage, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISBLACK); // 0->white:PHOTOMETRIC_MINISWHITE 0:->Black:PHOTOMETRIC_MINISBLACK RGB:PHOTOMETRIC_RGB
TIFFSetField(lineimage, TIFFTAG_FILLORDER, FILLORDER_MSB2LSB); // order of datas (Up to bottom:_MSB2LSB, Bottom to up:_LSB2MSB)
TIFFSetField(lineimage, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG); // a primary of bitmap is pixcel, or "plane"
TIFFSetField(lineimage, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT); // position of the origin
TIFFSetField(lineimage, TIFFTAG_XRESOLUTION, 72); // bpi of x
TIFFSetField(lineimage, TIFFTAG_YRESOLUTION, 72); // bpi of y
TIFFSetField(lineimage, TIFFTAG_RESOLUTIONUNIT, RESUNIT_NONE); // Unit name _INCH or _CENTIMETER
TIFFSetField(lineimage, TIFFTAG_SOFTWARE,"software");


stripSize = TIFFStripSize(lineimage);
stripMax = RPstrip*x_max*(bps/8);

imageOffset=0;
for (stripCount = 0; stripCount <= stripMax; stripCount++){
if((result = TIFFWriteEncodedStrip(lineimage, stripCount, buffer+imageOffset, stripSize)) == -1){
fprintf(stderr, "Write error on input strip number %d\n", stripCount);
exit(42);
}
imageOffset += result/(bps/8);
}

fprintf(stderr, "%s finished",linefilename);

TIFFClose(lineimage);

////memory release/////
free(data);
free(filename);
free(buffer);
free(linefilename);

return 0;
}
-----------------------------------
2015年11月14日(土) No.2276

No. PASS
No. USER PASS

ひぐらしのなく頃に絆兇亮作CMだよー作り直した。けど重いから外した。
http://higu.biz/nipanipa2/usercms/blogparts/7915/s後のん
http://higu.biz/nipanipa2/usercms/blogparts/115/s 前のん
チャット作ったよ〜
2008ねんがー
さばぷら
元さば夢 元元ひぐらし絆推理所「WHY WHO HOW」
元ひぐらし推理所「ひぐらしぐらし」
現ひぐらし推理所「ひぐらしぐらぐら」
10年8〜9月分目次
コミックダッシュ! kirinkirinkirin の所有コミック
[Admin] [TOP]
shiromuku(cr3)DIARYS version 1.10
CGIレンタル




2年以上日記を保存したい方へ!無料→有料日記データ移行(ご自分で削除した過去の日記も修復可) LinkJapan