とにかく奥が深い。何かやろうとするたびに、膨大なbackgroundに押し潰されそうになる。
 
 *フォーマット [#o31398be]
 画像の持つ情報量は多いので、ファイルの形式としては何らかの圧縮を施すのが通例であり、その方法の違いなどにより様々なファイル形式が存在する。一般に、写真画像ならjpegが適し、白の背景に黒の三角形を描きました、みたいなエッジのきいた人工的な図形ならPNGの方が適する場合が多い。
 -[[ウェブで用いられる画像形式について。:http://www.marguerite-site.com/Nihongo/Labo/Image/index.html]]
 -[[画像圧縮アルゴリズム (5) LZ法:http://www2.starcat.ne.jp/~fussy/algo/algo8-5.htm]]
 -[[離散コサイン変換:http://laputa.cs.shinshu-u.ac.jp/~yizawa/InfSys1/advanced/dct/]]
 
 
 *RGBとグレースケール [#v465ca1b]
 一般的なPC上で、色は赤・緑・青(RGB)の各々の強度(加色混合)で表現される。ここで「いやいや私はグレースケールで充分です」と謙遜したつもりでも、色々と方式があって余計に頭を使う破目に陥った。しかし世の中広いもので、幾つかすばらしい解説が与えられていた。
 *色とデータ量 [#r5756ed4]
 一般的なPC上で、色は赤・緑・青(RGB)の各々の強度(加色混合)で表現される。各色の強度をどれだけ細かく制御するかで、表現できる色の数が決まる。
 
 最近のPC上では約1677万色を区別して発色することが容易に可能で、これは大体人間の識別できる色数の限界といわれているらしい。この意味において、発色「数」に関してはPCまわりの技術は充分な水準に達しているといえる(無論、色空間の変換やらモニタの較正やら、他に考慮すべき事項もまだ沢山あるが、とりあえず「数」だけは充分)。
 
 1677万とは 256*256*256=(2^8)^3 である。RGBに各々256種類(8bit)の情報を割り振ることによって実現される。つまり、ひとつの点の色を表現するのに 8bit + 8bit + 8bit = 24bit のデータ量が必要なわけである。このことから「1677万色の発色 」を24bitカラーと称することもある。True Colorと呼ばれているものも同様の意味を持つ。32bit PC上のデータ処理の観点からは、嘘データを8bitつめこんで、32bit/点 として扱う方が効率がよいらしい(アライメントの事情だかなんだか。よくわからん)。故に、32bitカラーと呼ばれているものも、色の数としては24bitカラーと変わらない。
 
 これに対し、6万5千色を扱うHigh Colorあるいは16bitカラー(2^16=65536)と呼ばれるものもある。これはRとBを5bit、Gを6bitで表現している。業務用機器では、RGB各々10bitで表現している(2^(10+10+10)=1073741824 種類の発色ができる)ものもあるらしい。
 
 以下参考文献。
 -[[PC View:http://www.pc-view.net/]]より[[RGB:http://www.pc-view.net/Help/manual/0270.html]]
 -[[色色雑学:http://konicaminolta.jp/entertainment/colorknowledge/index.html]] すごい!
 
 **グレースケール [#v465ca1b]
 モノクロ画像だと色の情報は失われるが、データ量も小さいため、RGBをモノクロに変換したいこともままある。しかしこの変換も一筋縄ではいかず、色々と方式があって混乱したが、幾つかのすばらしい解説のおかげで理解がちょっぴり深まった。
 -[[osakana.factory - グレースケールのひみつ:http://ofo.jp/osakana/cgtips/grayscale.phtml]]
 -[[ISP imaging-developers - 色変換式集:http://image-d.isp.jp/commentary/color_cformula/index.html]]
 -[[YUVフォーマット及び YUV<->RGB変換:http://vision.kuee.kyoto-u.ac.jp/~hiroaki/firewire/yuv.html]]
 
 *PNG [#h1252d19]
 
 Portable Network Graphics のことで、GIFの後継として開発されたそうだ。
 
 **ライブラリ [#h5709eca]
 
 プログラムからPNGを扱うためには[[zlib:http://www.zlib.net/l]]と[[libpng:http://www.libpng.org/pub/png/libpng.html]]が必要となる。ソースもバイナリも手に入るが、ソースを持ってきてもVisual Studio用のプロジェクトが付属するのでビルドは楽である。プロジェクトを開いて ビルド => アクティブな構成の設定 から好きなものを選ぶだけでよい。
 -[[bmp2png & png2bmp:http://hp.vector.co.jp/authors/VA010446/software/b2psrc.html]]
 -[[PNG利用術:http://www5.cds.ne.jp/~kato/png/]]
 -[[PNGを読み込む(VC++でlibpngを使用する):http://hp.vector.co.jp/authors/VA016379/cpplib/libpng.htm]]
 -[[libpngについて:http://estset.d.fiw-web.net/unix/libpng.html]]
 
 
 **PNGファイルフォーマット [#h064f0e5]
 -[[倉庫という名の作品展:http://depot.c--v.net/yaezakura.php/docs/prog/png]]
 -[[Portable Network Graphics (PNG) Specification (Second Edition):http://www.w3.org/TR/2003/REC-PNG-20031110/]]
 
 
 
 *GDI+ [#u84caed6]
 Windowsにおいて、標準の画像フォーマットは所謂「ビットマップ」であるが、それ以外のjpegといったフォーマットの方が巷で専ら使用されている。GDI+は、そういった様々のフォーマットの画像(BMP, GIF, JPEG, PNG, TIFF, EMF)を扱うためのライブラリ。(だそうだ。まだ使ってない)
 
 -[[GDI+に関するメモ:http://www.nilab.info/megabbs/readres.cgi?bo=computer&vi=1093051600]]
 -[[GDI+の導入:http://lamoo.s53.xrea.com/develop/gdiplus/gdiplus.html]]
 -[[第335章 GDI+の基礎 その1(猫でもわかるプログラミングより):http://www.kumei.ne.jp/c_lang/sdk4/sdk_335.htm]]
 -[[第336章 GDI+の基礎 その2(猫でもわかるプログラミングより):http://www.kumei.ne.jp/c_lang/sdk4/sdk_336.htm]]
 
 platformSDKが必要みたいだ。
 -[[Windows Server 2003 PSDK Full Download with Local Install(Windows 2000でもこちらから導入するらしい):http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm]]
 -[[Visual C++ Toolkit + Platform SDK のインストールとテスト:http://homepage1.nifty.com/kazubon/progdoc/poor/vctoolkit.html]]