These pages are written by only Japanese.
|
Namazu for hns による簡易全文検索です。 詳細は 詳細指定/ヘルプをご参照下さい。 |
||||||||||||||||||||||||||||||||||||||||||||||||
png_color *palette = NULL; int palette_num = 0; png_get_PLTE(png_ptr, png_info, &palette, &palette_num);こんな感じに取得できて、
for (i = 0 ; i < palette_num ; i+=8 ) { printf("[%03d]", i); for (j = 0 ; (j < 8) && ((i+j) < palette_num) ; j++) { printf(" #%02x%02x%02x", palette[i+j].red, palette[i+j].green, palette[i+j].blue); } printf("\n"); }こんな感じで参照できます。
gcc png_dump.c bitstream.c -lpng以下のページでも動作を確認できます。PNG ファイルを放り込むと 内部で png_dump が動きます。
% php sample/swfdump.phps "魔理沙は大変なものを盗んでいきました.swf" > /dev/null malloc: ;_;えっと… swfed は -DMALLOC_DEBUG を付けてコンパイルすると、 free し忘れを検出する為に、malloc/free の管理テーブルを作ります。 そのサイズが足りませんでした。
% bcut game.swf 0 900000 > game-hankake.swf % php sample/swfdump.phps game-hankake.swf swf_object_input: uncompress failed by unknown reason magic=CWS version=9 file_length=1063877 rect=(0, 0)-(0, 0) (f_size=0) frame_rate=0.0 frame_count=0 XXX (3) ptr=0xb79ac008 (/home/yoya/svn/swfed/src/swf_object.c, 61)メモリリーク発見。(☆▽☆)
% php ~/svn/swfed/sample/swfdump.phps game-hankake.swf swf_object_input: uncompress failed by unknown reason magic=CWS version=9 file_length=1063877 rect=(0, 0)-(0, 0) (f_size=0) frame_rate=0.0 frame_count=0よしよし。
% bcut kuriboo4.png 0 166300 > kuriboo4-hankake.png % php sample/swfdump.phps game.swf <略> [38] tag=DefineBitsLossless2(36) length=110 image_id=30 format=3 width=62 height=18 colormap_count=16 rgba colormap exists indices exists <略> % php sample/swfreplacepngdata.phps game.swf 30 kuriboo4-hankake.png > /dev/null png_data_read_func: ! png_buff->data_offset(160789) + size(5516) <= png_buff->data_len(166301) libpng error: png_read_read_func failed アボートしましたあちゃー… でも、libpng のエラーハンドリングは setjmp 方式なんですよね…
See the discussion on libpng error handling in the Customizing Libpng section below for more information on the libpng error handling. If an error occurs, and libpng longjmp’s back to your setjmp, you will want to call png_destroy_read_struct() to free any memory. if (setjmp(png_jmpbuf(png_ptr))) { png_destroy_read_struct(&png_ptr, &info_ptr, &end_info); fclose(fp); return (ERROR); }でもって、
If you read the file from different routines, you will need to update the jmpbuf field every time you enter a new rou- tine that will call a png_*() function.スコープがあってればイイじゃない。ってとこかしら。
png_bytepp png_image_data = NULL; <略> if (setjmp(png_jmpbuf(png_ptr))) { fprintf(stderr, "pngconv_png2lossless: libpng error jump occured\n"); png_destroy_read_struct(&png_ptr, &png_info, NULL); if (png_image_data) { for ( y = 0 ; y < png_height ; y++) { free(png_image_data[y]); } free(png_image_data); } return NULL; } <略> png_image_data = (png_bytepp) malloc(png_height * sizeof(png_bytep)); for (y=0; y < png_height; y++) { png_image_data[y] = (png_bytep) malloc(png_get_rowbytes(png_ptr, png_info)); }としてみたら、png_image_data が free 出来ず。 何でだろうと「setjmp ローカル変数」で google 様にお伺いを立てた所、
xにvolatileをつけ忘れると、こういうこと↑になります…ナルホド。最適化とレジスタの罠か… やっぱり setjmp キライ
/home/yoya/svn/swfed/src/swf_png.c: In function 'pngconv_png2lossless': /home/yoya/svn/swfed/src/swf_png.c:166: warning: passing argument 1 of 'png_destroy_read_struct' discards qualifiers from pointer target type /home/yoya/svn/swfed/src/swf_png.c:166: warning: passing argument 2 of 'png_destroy_read_struct' discards qualifiers from pointer target typevolatile つけたら怒られちゃった… ><
png_destroy_read_struct((png_structpp) &png_ptr, (png_infopp) &png_info, NULL);何だかなぁ…
/home/yoya/svn/swfed/src/swf_png.c:234: warning: argument 'image_data' might be clobbered by 'longjmp' or 'vfork'image_data は setjmp と関係ない所で使ってるのに… どうしよう…
地質学的には、両神山の多くの部分はチャート(SiO2 、水晶と同じ)という 成分で形成されている。チャートは数億年前に海底に沈んだプランクトン (放散虫)の化石から出来たもので、鉄よりも硬い(硬度7)。 4月下旬から5月中旬、山頂一帯にアカヤシオが咲く。自然林が多く残され、 紅葉が美しいことでも知られている。
両神山を形成する主な岩石は、チャートと呼ばれるもので、 角岩とも言い、火打ち石に使われたものも、この仲間だそうだ。 チャートは硬くて風化に強いので、ギザギザした尾根や絶壁を形成しやすい。 まさに、両神山の特徴ある地形は、このチャートの特性を表現しているわけだ。なるほど。
イザナギ・イザナミを祀ったのは、両神山と呼ばれるようになってからであって、 それ以前にはこの二神には何の関係もなかった。
八日見という山名の由来は、日本武尊が東夷征伐の時、 この山を8日間見給うたから、八日見山と名づけられたと伝えられる。 しかしそれはヨウカミに八日見と宛字したための伝説で、 ヨウカミという呼称はヤオガミから来たものである。 ヤオガミの「ヤ」は八の意、「オガミ」は大蛇の意で仏教でいう竜王のことである。 つまりヤオガミは8つの頭を持った竜王で、この山の古縁起に 「竜頭大明神を祭神とする」と記されてあるのと一致する。 (後略) ※出典:深田久弥『日本百名山』(1964年新潮社刊)の朝日文庫版から再録なるほど。なるほど。
\xe8\xb5\xa4\xe9\x9d\x92\xe9\xbb\x84\xe8\x89\xb2のような文字を submit すると、
赤青黄色が出力されます。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 27944 yoya 15 0 94656 45m 13m S 41.9 4.6 11:01.74 skype問題なかったので、次はボットをつないで様子を見ます。
png_get_tRNS(png_ptr, info_ptr, &trans, &num_trans, &trans_values); trans - array of transparent entries for palette (PNG_INFO_tRNS) trans_values - graylevel or color sample values of the single transparent color for non-paletted images (PNG_INFO_tRNS) num_trans - number of transparent entries (PNG_INFO_tRNS)
png_get_bKGD(png_ptr, info_ptr, &background); background - background color (PNG_VALID_bKGD) valid 16-bit red, green and blue values, regardless of color_typeとりあえず前者の tRNS を解析する事にしました。 png.h を見ると
extern PNG_EXPORT(png_uint_32,png_get_tRNS) PNGARG((png_structp png_ptr, png_infop info_ptr, png_bytep *trans, int *num_trans, png_color_16p *trans_values));となっているので、この型でやり取りすれば OK っぽいです。
png_color *palette = NULL; int palette_num = 0; png_bytep trans; int num_trans; png_color_16p trans_values; png_get_PLTE(png_ptr, png_info_ptr, &palette, &palette_num); printf(" palette_num=%d", palette_num); png_get_tRNS(png_ptr, png_info_ptr, &trans, &num_trans, &trans_values); printf(" num_trans=%d",num_trans);実験結果
palette_num=127 num_trans=127あってるっぽい。
gcc png_dump.c -lpng bitstream.c実行結果
(width, height)=(80,80) bpp=8 color_type=3(PALETTE) palette_num=127 num_trans=127 [000] #000000(00) #010101(20) #030202(11) #040404(3e) [004] #080706(52) #090605(2a) #140c0b(ff) #141111(72) [008] #350e0f(ff) #1b1b1b(9d) #241f1d(ff) #312020(5f)実験ページ
>>25 わかる 自分入れて4人になると、発言ターンを譲りっぱなしで発言できないwwwwww譲る気はないんだけど邪魔にならないタイミングを 探ってる間に次の話題に移ってる事が多いかな。○rz