<?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>画像処理</title><link>http://blogs.wankuma.com/myugaru/category/1697.aspx</link><description>画像処理</description><managingEditor>myugaru (myugaru@wankuma.com)</managingEditor><dc:language>ja-JP</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>myugaru (myugaru@wankuma.com)</dc:creator><title>[画像処理](x1,y1,x2,y2) vs (x,y,width,height) その５</title><link>http://blogs.wankuma.com/myugaru/archive/2008/03/21/128927.aspx</link><pubDate>Fri, 21 Mar 2008 15:53:00 GMT</pubDate><guid>http://blogs.wankuma.com/myugaru/archive/2008/03/21/128927.aspx</guid><wfw:comment>http://blogs.wankuma.com/myugaru/comments/128927.aspx</wfw:comment><comments>http://blogs.wankuma.com/myugaru/archive/2008/03/21/128927.aspx#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://blogs.wankuma.com/myugaru/comments/commentRss/128927.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/myugaru/services/trackbacks/128927.aspx</trackback:ping><description>&lt;P&gt;&lt;STRONG&gt;&lt;FONT size=4&gt;●前回まで&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.wankuma.com/myugaru/archive/2008/03/16/127910.aspx" addEventLogcatcher="true"&gt;&lt;FONT color=#000080&gt;[画像処理](x1,y1,x2,y2) vs (x,y,width,height)&lt;/FONT&gt;&lt;/A&gt; &lt;BR&gt;&lt;A href="http://blogs.wankuma.com/myugaru/archive/2008/03/16/127980.aspx" addEventLogcatcher="true"&gt;&lt;FONT color=#000080&gt;[画像処理](x1,y1,x2,y2) vs (x,y,width,height) その２&lt;/FONT&gt;&lt;/A&gt; &lt;BR&gt;&lt;A href="http://blogs.wankuma.com/myugaru/archive/2008/03/17/128132.aspx" addEventLogcatcher="true"&gt;&lt;FONT color=#000080&gt;[画像処理](x1,y1,x2,y2) vs (x,y,width,height) その３&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;&lt;A href="http://blogs.wankuma.com/myugaru/archive/2008/03/18/128285.aspx"&gt;&lt;FONT color=#000080&gt;[画像処理](x1,y1,x2,y2) vs (x,y,width,height) その４&lt;/FONT&gt;&lt;/A&gt; 
&lt;P&gt;&lt;FONT color=#006400&gt;※以下PnPとPnSは私の造語です。&lt;BR&gt;PnP・・・Point and Point。座標２つで矩形領域を表す方式&lt;BR&gt;PnS・・・Point and Size。座標１つと領域のサイズで矩形領域を表す方式&lt;/FONT&gt; 
&lt;HR id=null&gt;
前回はGDIとGDI+の矩形描画の仕組みを私なりに書いてみました。&lt;BR&gt;しかし色々と調査してみると&lt;FONT color=#800080&gt;GDIの「内接する矩形を描画している」という解釈はどうやら不正解&lt;/FONT&gt;のようです。&lt;STRONG&gt;&lt;FONT size=4&gt; 
&lt;HR id=null&gt;
●線分描画アルゴリズムからの考察&lt;BR&gt;&lt;/FONT&gt;&lt;/STRONG&gt;説明のために縦の辺についてだけ抜き出します。&lt;BR&gt;前回説明を省きましたが緑が仮想座標上の辺、&lt;BR&gt;青が実際のディスプレイに表示されるピクセルです。 
&lt;P&gt;内接すると仮定すると図１（A)のようになります。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;IMG src="http://myugaru.wankuma.com/image/20080321_1.png"&gt; &lt;/P&gt;
&lt;P&gt;緑の線に対して青のピクセル位置を求めようとすると、&lt;BR&gt;&lt;FONT color=#ff0000&gt;左右のそれぞれ別の（線分描画の）計算&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;が必要&lt;/FONT&gt;となります。&lt;BR&gt;果たして縦線を２通りの計算で求めるなどわざわざやるか？という問題です。&lt;BR&gt;その可能性は０では無いでしょうが、どの縦線も同じ計算で求めていると考えた方が自然ではないでしょうか？&lt;BR&gt;そしてその場合は図１（B)のようになります。&lt;BR&gt;するとこれはRightは-1した値を用いて計算するという事になります。&lt;BR&gt;あるいはLeftを+1する説も考えられますが数学の世界で上限を未満で表現する体系がありますのでRight-1という解釈の方が妥当だろうと思います。&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;ここにきて「GDIは右下座標を用いない。左上以上、右下未満で範囲指定する」&lt;BR&gt;という俗説がやっぱり正解なんだなあとわかります。&lt;BR&gt;なんとか別の説をひねり出したかったのですが今日の所はあきらめます。&lt;STRONG&gt;&lt;FONT size=4&gt; 
&lt;HR id=null&gt;
●線幅について&lt;BR&gt;&lt;/FONT&gt;&lt;/STRONG&gt;前回の最後で考慮がもれていると書いたアレは&lt;STRONG&gt;線幅&lt;/STRONG&gt;でした。&lt;BR&gt;線幅をテストできるように実験プログラムを修正しました。&lt;BR&gt;&lt;A href="http://myugaru.wankuma.com/GDIvsGDIplus.zip"&gt;http://myugaru.wankuma.com/GDIvsGDIplus.zip&lt;/A&gt;&lt;BR&gt;見やすいようにグリッドも表示しています。
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;IMG src="http://myugaru.wankuma.com/image/20080321_pg.png"&gt; &lt;/P&gt;
&lt;P&gt;GDIの矩形(塗潰し)Left=2,Top=2,Right=8,Bottom=8を線幅1～3で表示すると次のようになります。&lt;IMG src="http://myugaru.wankuma.com/image/20080321_2.png"&gt;&lt;/P&gt;
&lt;P&gt;こうしてみると線幅２の時は緑の線が青の中心を通っています。&lt;BR&gt;線幅１や３の場合には中心がピクセル中央となってしまいますので、&lt;BR&gt;&lt;FONT color=#ff0000&gt;誤差の０．５だけ右下方向へずらして描画している&lt;/FONT&gt;ようです。&lt;/P&gt;
&lt;P&gt;すでにGDIの矩形は内接矩形の描画では無いだろうと書きましたが、&lt;BR&gt;線幅２以上の矩形の図の説明を内接矩形でするとかなり無理が生じます。&lt;BR&gt;そういう意味でもやはり内接矩形論は正しくないのだろうと考えられます。&lt;STRONG&gt;&lt;FONT size=4&gt; 
&lt;HR id=null&gt;
●GDI+の線幅2以上はどうか&lt;BR&gt;&lt;/FONT&gt;&lt;/STRONG&gt;GDI+について線幅2以上で書くとGDIと全く同じ考え方になっているとわかります。&lt;BR&gt;つまり線幅が偶数の場合は緑の線が青の中心を通り、&lt;BR&gt;線幅が奇数の場合は緑の線の右下へ0.5ずれるという仕様です。&lt;IMG src="http://myugaru.wankuma.com/image/20080321_3.png"&gt;&lt;STRONG&gt;&lt;FONT size=4&gt; 
&lt;HR id=null&gt;
●まとめ&lt;BR&gt;&lt;/FONT&gt;&lt;/STRONG&gt;GDIもGDI+もどちらも上の緑の線で表現されるような仮想図形を想定しており、&lt;BR&gt;ディスプレイのピクセルで表現する際に誤差が生じているのだとわかりました。&lt;BR&gt;&lt;STRONG&gt;ディスプレイ主体で考えると色々な疑問が生じるのはそのせいです。&lt;BR&gt;&lt;/STRONG&gt;また矩形描画について実験した結果はGDIもGDI+もどうやら誤差の扱い方は同じだということもわかりました。&lt;BR&gt;またGDIは右下を使用しないという仕様を再確認できました。&lt;STRONG&gt;&lt;FONT size=4&gt; 
&lt;HR id=null&gt;
●次回&lt;BR&gt;&lt;/FONT&gt;&lt;/STRONG&gt;このシリーズは私は結構おもしろいと思ってやっていますが、&lt;BR&gt;読んでる人はそろそろ飽きて来たのではないかと思っています。&lt;BR&gt;昨日書いたリバースエンジニアリングの話にしてもいいかなと思ったり、&lt;BR&gt;あるいはUMLの勉強で序章が終わりましたので、&lt;BR&gt;ゲーム製作の方を進展させるのもいいかなと思っています。&lt;img src ="http://blogs.wankuma.com/myugaru/aggbug/128927.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>myugaru (myugaru@wankuma.com)</dc:creator><title>[画像処理](x1,y1,x2,y2) vs (x,y,width,height) その４</title><link>http://blogs.wankuma.com/myugaru/archive/2008/03/18/128285.aspx</link><pubDate>Tue, 18 Mar 2008 12:39:00 GMT</pubDate><guid>http://blogs.wankuma.com/myugaru/archive/2008/03/18/128285.aspx</guid><wfw:comment>http://blogs.wankuma.com/myugaru/comments/128285.aspx</wfw:comment><comments>http://blogs.wankuma.com/myugaru/archive/2008/03/18/128285.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/myugaru/comments/commentRss/128285.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/myugaru/services/trackbacks/128285.aspx</trackback:ping><description>&lt;P&gt;&lt;STRONG&gt;&lt;FONT size=4&gt;●前回まで&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.wankuma.com/myugaru/archive/2008/03/16/127910.aspx"&gt;[画像処理](x1,y1,x2,y2) vs (x,y,width,height)&lt;/A&gt; &lt;BR&gt;&lt;A href="http://blogs.wankuma.com/myugaru/archive/2008/03/16/127980.aspx"&gt;[画像処理](x1,y1,x2,y2) vs (x,y,width,height) その２&lt;/A&gt; &lt;BR&gt;&lt;A href="http://blogs.wankuma.com/myugaru/archive/2008/03/17/128132.aspx"&gt;[画像処理](x1,y1,x2,y2) vs (x,y,width,height) その３&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;FONT color=#006400&gt;※以下PnPとPnSは私の造語です。&lt;BR&gt;PnP・・・Point and Point。座標２つで矩形領域を表す方式&lt;BR&gt;PnS・・・Point and Size。座標１つと領域のサイズで矩形領域を表す方式&lt;/FONT&gt;&lt;/P&gt;
&lt;HR id=null&gt;

&lt;P&gt;前エントリー最後に示した&lt;FONT color=#006400&gt;&lt;STRONG&gt;「横４ドット縦３ドットの矩形を表示する」&lt;/STRONG&gt;&lt;/FONT&gt;について。&lt;/P&gt;
&lt;P&gt;色々なコメントいただいたことも踏まえて、&lt;/P&gt;
&lt;P&gt;GDIとGDI+で出てきた答えに私なりの解釈をつけてみます。&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000&gt;ご注意：私の解釈は本当に軽いものです。&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000&gt;いわば円周率とか年号を歌で丸暗記するのと同じく、&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000&gt;「こう考えたら頭に入りやすいかも～」くらいのすっごい軽い解釈です。&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000&gt;くれぐれも鵜呑みにして他の人に話しとかしないようにしてください。&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000&gt;きっと後悔しますよ＞＜&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT size=4&gt;
&lt;HR id=null&gt;
●GDIのRectangleの私の解釈&lt;BR&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT color=#0000ff&gt;座標軸はピクセル間を通っており与えられた矩形領域に&lt;STRONG&gt;内接する矩形を描画している&lt;/STRONG&gt;と解釈。&lt;/FONT&gt; &lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;Rectangle(hdc,0,0,4,3)&lt;/FONT&gt;&lt;/P&gt;&lt;IMG src="http://myugaru.wankuma.com/image/20080318_1.png"&gt; &lt;STRONG&gt;&lt;FONT size=4&gt;
&lt;HR id=null&gt;
●GDI+のGraphics.DrawRectangleの私の解釈&lt;BR&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;A href="http://blogs.wankuma.com/myugaru/archive/2008/03/16/127910.aspx"&gt;凪瀬さんがコメントしてくれたJAVAの仕組み&lt;/A&gt;そのままだと解釈します。 
&lt;P&gt;&lt;EM&gt;&lt;FONT color=#0000ff&gt;「座標軸は無限に細く、出力デバイスのピクセル間に存在します。 &lt;BR&gt;図形の輪郭を描く操作は、ピクセルサイズのペンをピクセル間の無限に細い輪郭線に沿って動かしていくことによって動作します。 &lt;BR&gt;ペンは、輪郭線のアンカーポイントにぶら下がり、かつ右側に位置しています。」 &lt;/FONT&gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;Graphics.DrawRectangle(pen, 0, 0, 3, 2)&lt;/FONT&gt;&lt;/P&gt;&lt;IMG src="http://myugaru.wankuma.com/image/20080318_2.png"&gt; &lt;STRONG&gt;&lt;FONT size=4&gt;
&lt;HR id=null&gt;
●GDI+のGraphics.FillRectangleの私の解釈&lt;BR&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT color=#0000ff&gt;DrawRectangleと矩形領域の定義までは同じで&lt;STRONG&gt;内接する矩形を塗りつぶしている&lt;/STRONG&gt;と解釈。 &lt;/FONT&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;Graphics.FillRectangle(pen, 0, 0, 4, 3)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://myugaru.wankuma.com/image/20080318_3.png"&gt;&amp;nbsp;&lt;FONT size=4&gt;&lt;STRONG&gt;
&lt;HR id=null&gt;
●アレを考慮していない&lt;BR&gt;&lt;/STRONG&gt;&lt;/FONT&gt;何とか上手く誤魔化せたかな？とか思っていたんですが &lt;/P&gt;
&lt;P&gt;&lt;FONT size=5&gt;「ん？アレを考慮してないぞ・・」&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;というアレに思い当たってしまいました。&lt;/P&gt;
&lt;P&gt;実験してみなければわからないのですが、&lt;/P&gt;
&lt;P&gt;場合によっては上の解釈は自分でいきなりぶっ壊してしまうかもです（汗。それは一体なんの事でしょう？&lt;/P&gt;
&lt;P&gt;続きは次のエントリーへ引っ張ります・・・&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/myugaru/aggbug/128285.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>myugaru (myugaru@wankuma.com)</dc:creator><title>[画像処理](x1,y1,x2,y2) vs (x,y,width,height) その３</title><link>http://blogs.wankuma.com/myugaru/archive/2008/03/17/128132.aspx</link><pubDate>Mon, 17 Mar 2008 17:22:00 GMT</pubDate><guid>http://blogs.wankuma.com/myugaru/archive/2008/03/17/128132.aspx</guid><wfw:comment>http://blogs.wankuma.com/myugaru/comments/128132.aspx</wfw:comment><comments>http://blogs.wankuma.com/myugaru/archive/2008/03/17/128132.aspx#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://blogs.wankuma.com/myugaru/comments/commentRss/128132.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/myugaru/services/trackbacks/128132.aspx</trackback:ping><description>&lt;P&gt;&lt;STRONG&gt;&lt;FONT size=4&gt;●前回まで&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.wankuma.com/myugaru/archive/2008/03/16/127910.aspx"&gt;&lt;FONT color=#000080&gt;[画像処理](x1,y1,x2,y2) vs (x,y,width,height)&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.wankuma.com/myugaru/archive/2008/03/16/127980.aspx"&gt;&lt;FONT color=#000080&gt;[画像処理](x1,y1,x2,y2) vs (x,y,width,height) その２&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#006400&gt;※以下PnPとPnSは私の造語です。&lt;BR&gt;PnP・・・Point and Point。座標２つで矩形領域を表す方式&lt;BR&gt;PnS・・・Point and Size。座標１つと領域のサイズで矩形領域を表す方式&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000&gt;(3/18 1:00 「長方形」という表現を「矩形」に改めました。 恣意のさんご指摘ありがとうございました。)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000&gt;&lt;/FONT&gt;
&lt;HR id=null&gt;

&lt;P&gt;前回までの私の書き方もまずかったのですが、&lt;BR&gt;注意深く考えるとこの話には２つの問題が隠れています。&lt;STRONG&gt;&lt;FONT size=4&gt;&lt;/P&gt;
&lt;P&gt;
&lt;HR id=null&gt;

&lt;P&gt;１．PnPとPnSの違いでミスをする、という話&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;/STRONG&gt;つまりこれが一般的なPnPとPnSの話です。&lt;BR&gt;まずPnPとPnSの違いは第３第４引数が座標か大きさかという違いです。&lt;BR&gt;&lt;EM&gt;&lt;STRONG&gt;&lt;FONT color=#008000&gt;第３引数＝第１引数＋大きさ横、第４引数＝第２引数＋大きさ縦&lt;BR&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/EM&gt;なのか&lt;BR&gt;&lt;STRONG&gt;&lt;EM&gt;&lt;FONT color=#008000&gt;第３引数＝大きさ横、第４引数＝大きさ縦&lt;/FONT&gt;&lt;/EM&gt;&lt;/STRONG&gt;&lt;BR&gt;なのか。&lt;/P&gt;
&lt;P&gt;サイズを先に頭に思い描いた時、PnPでは足し算という手間が発生しうっかりミスをする、という問題になるかと思います。&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000&gt;（逆に２点を先に思い描けばPnSで引き算が発生します。同じことです。）&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;VS2008環境なら引数リストはヒントで表示されますので、&lt;BR&gt;よっぽど慌てなければ間違うことは少ないと思います。&lt;BR&gt;ということは・・・この問題は&lt;FONT color=#0000ff size=4&gt;&lt;STRONG&gt;「慣れればどっちでもよい」&lt;/STRONG&gt;&lt;/FONT&gt;で解決！？（汗&lt;STRONG&gt;&lt;FONT size=4&gt; &lt;/FONT&gt;&lt;/STRONG&gt;&lt;STRONG&gt;&lt;FONT size=4&gt;
&lt;P&gt;
&lt;HR id=null&gt;

&lt;P&gt;&lt;/P&gt;
&lt;P&gt;２．実際の図形の大きさが分からないという話&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;/STRONG&gt;一般的なPnPとPnSの比較で考察を進めようと思ったんですが、&lt;BR&gt;あまりこの２つの間に対立している技術ってなさそうですね？？&lt;BR&gt;なのでGDI vs GDI+の話に当面なりそうです。&lt;/P&gt;
&lt;P&gt;そしてGDI vs GDI+の話になればPnPとPnSの違いよりも&lt;BR&gt;ここで取り上げる描画ルーチンの特性の違いの話の方が問題は大きそうです。&lt;/P&gt;
&lt;P&gt;まず最終目標を&lt;FONT color=#000080 size=4&gt;&lt;STRONG&gt;「横４ドット縦３ドットの矩形を表示する」&lt;/STRONG&gt;&lt;/FONT&gt;とします。&lt;BR&gt;第１第２引数が0であればPnPとPnSの違いによる足し算問題は&lt;BR&gt;考慮しなくてすみますので左上は原点(0,0)としましょう。&lt;BR&gt;矩形の描画はGDIに1種類、GDI+には2種類用意されています。&lt;FONT color=#ff0000&gt;（※１）&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;GDI：Rectangle(hdc, x1, y1, x2, y2)&lt;BR&gt;GDI+：Graphics.DrawRectangle(pen, x, y, width, height)&lt;BR&gt;GDI+：Graphics.FillRectangle(pen, x, y, width, height)&lt;/P&gt;
&lt;P&gt;さてこれらにどういう引数を渡せば最終目標をディスプレーに実現できるでしょうか？&lt;BR&gt;答えがすぐに分かる人は相当にGDI/GDI+に慣れ親しんだ方でしょう。&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000&gt;※１：&lt;BR&gt;この種類数の違いは思想（発想）の違いにあります。&lt;BR&gt;GDIに機能が少ないわけではありません。&lt;BR&gt;ここではGDIのメソッドはGDI+の2つのメソッドの機能を&lt;BR&gt;合わせ持っているという感じの理解でいいです。&lt;BR&gt;（私はそれで困った事はないです）&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;答えは、&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;GDI：Rectangle(hdc, 0, 0, 4, 3)&lt;BR&gt;GDI+：Graphics.DrawRectangle(pen, 0, 0, 3, 2)&lt;BR&gt;GDI+：Graphics.FillRectangle(pen, 0, 0, 4, 3)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000&gt;いつもの注意：&lt;BR&gt;ここに書いている事柄は一度は必ず実物でご確認ください。&lt;BR&gt;前エントリーに示したPnPPnSを使えば簡単に確認できます。&lt;BR&gt;あるいは私のプログラムに頼らず自作するのも素敵だと思います。&lt;BR&gt;確認せずに納得・推論を進める事は自己責任でお願いいたします。&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;さてこの結果を見ていくつか疑問が出てきませんか？&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;疑問１&lt;BR&gt;&lt;/STRONG&gt;GDIはPnPなので第３第４引数は右下座標のはず。どうして(・・・3,2)とならないのか？&lt;BR&gt;&lt;STRONG&gt;疑問２&lt;BR&gt;&lt;/STRONG&gt;GDI+のDrawRectangleは第３第４引数は大きさのはず。どうして(・・・4,3)とならないのか？&lt;BR&gt;&lt;STRONG&gt;疑問３&lt;/STRONG&gt;&lt;BR&gt;FillRectangleは&amp;#8221;大きさ&amp;#8221;という意味では(・・・4,3)で合っている。&lt;BR&gt;しかしDrawRectangleと同じ数値でないのは変じゃないのか？&lt;/P&gt;
&lt;P&gt;
&lt;HR id=null&gt;

&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT size=4&gt;●疑問がでてしまうのは・・・&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;これは、そもそも画像処理ライブラリが&lt;STRONG&gt;「何を描画して」&lt;/STRONG&gt;いるのかを理解していないために起きる疑問でした。&lt;/P&gt;
&lt;P&gt;私は頭では色々と理解はしているつもりですよ。&lt;/P&gt;
&lt;P&gt;でもやっぱりお手軽に画像処理を楽しみたいってのも私にはあります。&lt;/P&gt;
&lt;P&gt;そこらへんをあえてブラックボックスとしてフィーリングで何とか理解できないかなあって思っていたりもします。&lt;/P&gt;
&lt;HR id=null&gt;

&lt;P&gt;&lt;STRONG&gt;&lt;FONT size=4&gt;●続きは次のエントリーへ&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;全然進展してませんねえ。まあ今私UMLの勉強中であまり面白そうなことがおもいつかないのですよ。なのでしばらくこんなエントリーばっかりかもです（すみません）&lt;/P&gt;
&lt;HR id=null&gt;

&lt;P&gt;&lt;STRONG&gt;&lt;FONT size=4&gt;●本日のアテにならないかも「知れない」&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;・GDI+はWindowなどのPnS思想にただ合わせただけかも知れない。&lt;BR&gt;・GDI+はJavaの描画にただ合わせただけかも知れない。&lt;BR&gt;&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/myugaru/aggbug/128132.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>myugaru (myugaru@wankuma.com)</dc:creator><title>[画像処理](x1,y1,x2,y2) vs (x,y,width,height) その２</title><link>http://blogs.wankuma.com/myugaru/archive/2008/03/16/127980.aspx</link><pubDate>Sun, 16 Mar 2008 20:07:00 GMT</pubDate><guid>http://blogs.wankuma.com/myugaru/archive/2008/03/16/127980.aspx</guid><wfw:comment>http://blogs.wankuma.com/myugaru/comments/127980.aspx</wfw:comment><comments>http://blogs.wankuma.com/myugaru/archive/2008/03/16/127980.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/myugaru/comments/commentRss/127980.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/myugaru/services/trackbacks/127980.aspx</trackback:ping><description>&lt;P&gt;&lt;A id=_10bc2d1cd07e72a2_HomePageDays_DaysList__ctl0_DayItem_DayList__ctl0_TitleUrl HREF="/myugaru/archive/2008/03/16/127910.aspx" addEventLogcatcher="true"&gt;&lt;FONT color=#000080&gt;[画像処理](x1,y1,x2,y2) vs (x,y,width,height)&lt;/FONT&gt;&lt;/A&gt; の続きです。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;色々確認用のプログラムを作りました。&lt;/STRONG&gt;&lt;STRIKE&gt;&lt;FONT size=1&gt;→PnPPnS.zip&lt;/FONT&gt;&lt;/STRIKE&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;&lt;STRONG&gt;&lt;FONT color=#a52a2a&gt;&lt;FONT size=4&gt;
&lt;HR id=null&gt;

&lt;P&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/STRONG&gt;
&lt;P&gt;&lt;FONT size=1&gt;&lt;STRIKE&gt;23:22緊急追記&lt;/STRIKE&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=1&gt;&lt;STRIKE&gt;すみません先ほどのPnPPnSはバグがありました。&lt;/STRIKE&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=1&gt;&lt;STRIKE&gt;新しい方を申し訳ありませんが再度ダウンロードください。→PnPPnS_2.zip&lt;/STRIKE&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=1&gt;&lt;STRIKE&gt;&lt;/STRIKE&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;FONT color=#ff0000&gt;&lt;STRONG&gt;
&lt;HR id=null&gt;
3/17 7:40&lt;/FONT&gt;&lt;/STRONG&gt; 
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#ff0000&gt;コンボボックスの動作を少し変えました。&lt;FONT color=#000000&gt;→&lt;/FONT&gt;&lt;A href="http://myugaru.wankuma.com/PnPPnS_3.zip"&gt;&lt;STRONG&gt;&lt;FONT size=4&gt;PnPPnS_3.zip&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/A&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/STRONG&gt;
&lt;P&gt;
&lt;HR id=null&gt;
というか前に作ったShape確認プログラムをちょろっと改造しただけです。 
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;(参考：&lt;A href="http://myugaru.wankuma.com/Shape.zip"&gt;Shape.zip - Shapeクラス（2007/12/12更新）&lt;/A&gt;&lt;BR&gt;ブログ→&lt;A href="http://d.hatena.ne.jp/myugaru/20071211"&gt;http://d.hatena.ne.jp/myugaru/20071211&lt;/A&gt;）&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;とりあえず動かせる方は動かしてみてください。&lt;/P&gt;
&lt;P&gt;&lt;STRIKE&gt;なんか机上の空論はダメですね。&lt;/STRIKE&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRIKE&gt;現実は私には意外な結果が出ました・・・。&lt;/STRIKE&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#ff0000&gt;23:25追記&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#ff0000 size=4&gt;すみません。バグを直したら予想通りの結果になりました。&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#ff0000 size=4&gt;意外なのはバグのせいでした＞＜；；；お騒がせしました。&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;・・・明日これらの結果はまとめます。&lt;/STRONG&gt;&lt;/P&gt;&lt;FONT face="Courier New" size=2&gt;&lt;/FONT&gt;&lt;img src ="http://blogs.wankuma.com/myugaru/aggbug/127980.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>myugaru (myugaru@wankuma.com)</dc:creator><title>[画像処理](x1,y1,x2,y2) vs (x,y,width,height)</title><link>http://blogs.wankuma.com/myugaru/archive/2008/03/16/127910.aspx</link><pubDate>Sun, 16 Mar 2008 08:16:00 GMT</pubDate><guid>http://blogs.wankuma.com/myugaru/archive/2008/03/16/127910.aspx</guid><wfw:comment>http://blogs.wankuma.com/myugaru/comments/127910.aspx</wfw:comment><comments>http://blogs.wankuma.com/myugaru/archive/2008/03/16/127910.aspx#Feedback</comments><slash:comments>20</slash:comments><wfw:commentRss>http://blogs.wankuma.com/myugaru/comments/commentRss/127910.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/myugaru/services/trackbacks/127910.aspx</trackback:ping><description>&lt;P&gt;&lt;FONT size=4&gt;&lt;STRONG&gt;●私と画像処理&lt;/STRONG&gt;&lt;FONT size=1&gt;～なぜか今頃まともな自己紹介？～&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;誰でもパソコンでプログラムを作っていると画像処理には興味を持ったりすると思う。&lt;BR&gt;聞くところによればVisualじゃないBASIC世代な先輩たちはLINE文やCIRCLE文やPSET文などで手軽にお絵かきを楽しんだそうだ。でも最近の画像処理技術の向上は目覚しく、特にハードウェア(GPU)の急速な進歩もあって、一から画素を扱うようなプログラミングはちょっと手軽には手が出しにくいところまで来ているように思う。逆にツールは充実しているのでそういう意味からもプログラムで画像を作る意味は違ってきたのかもしれない。&lt;/P&gt;
&lt;P&gt;さて私はといえば・・・実は私もLINE文やCIRCLE文は使ったことがある。&lt;BR&gt;小学生の頃に学校にたった一つしかなかったパソコンを校長先生に無理に頼んで使わせてもらって遊んだ思い出がある。それから&amp;#215;&amp;#215;年。今でもプログラムで線や円を書くのは大好きだ。&lt;BR&gt;わんくま同盟のブログタイトルを考えたときに&lt;STRONG&gt;サブタイトルに速攻で画像処理を入れた&lt;/STRONG&gt;くらいに愛している。&lt;/P&gt;
&lt;P&gt;あの頃から今まで私の対象は主に２次元画像処理で当然GDIやGDI+には結構お世話になっている。でも、だからといって何か作品を作っているかと言えば・・・まともに人様にお見せできそうなやつはWindowsNT4.0+VC5.0時代に作った簡単なカードゲームくらいかも知れない。&lt;/P&gt;
&lt;P&gt;私が特に興味を持って勉強していたのは画像ファイルフォーマットで、有名どころのBITMAPやJPEGはもちろん、ご存知の無い人が多そうなマイナーフォーマットまで多くの文献を読みあさった。そしてほとんどのフォーマットのSusieプラグインをVC6.0で自作してきた。この中には今でこそ著作権も切れて公言できるがGIFのデコーダも含まれている。&lt;/P&gt;
&lt;P&gt;あと他には自作テキストエディタなどにも挑戦した。画像処理とは一見関係ないが一応USER DRAWでGUIを作っていたので多少は関係があるように思う。これはあまり出来が良くなくて・・・というか優秀なエディタはいくらでも世に出回っていたので中途半端に投げ出した。&lt;/P&gt;
&lt;P&gt;人に説明しづらい物作りにかまけている間に気付くと世の流れに乗り遅れてしまい、今頃からやっとDirectXの勉強をしているしだいである。&lt;/P&gt;
&lt;P&gt;
&lt;HR id=null&gt;

&lt;P&gt;&lt;/P&gt;
&lt;P&gt;なんだか今頃ちゃんと自己紹介している。&lt;BR&gt;最近文章力が上がった&lt;FONT color=#ff0000 size=1&gt;（※嘘。上がってませんから）&lt;/FONT&gt;ので急にたくさん自分の事も書いてみたくなったのだ。&lt;/P&gt;
&lt;P&gt;・・・では、さっさと本題に入ります。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT size=4&gt;
&lt;HR id=null&gt;
●矩形領域を表す異なる2つの手段&lt;/FONT&gt;&lt;/STRONG&gt; 
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;GDIもGDI+も図形描画ルーチン呼び出しは必ず座標を必要とする。&lt;BR&gt;その中でも特に矩形領域を表す４数値を渡す関数は少なくない。&lt;BR&gt;４数値の使い道は以下の２パターンがある。&lt;/P&gt;
&lt;P&gt;１．Point &amp;amp; Point（２つの点。以降P&amp;amp;P）&lt;BR&gt;２．Point &amp;amp; Size（１つの点と領域の大きさ。以降P&amp;amp;S）&lt;/P&gt;
&lt;P&gt;タイトルの意味するのは関数引数形式で２パターンを表現したものだ。&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000&gt;（※P&amp;amp;P、P&amp;amp;Sは私の造語です）&lt;/FONT&gt;&lt;/P&gt;&lt;FONT color=#ff0000&gt;
&lt;P&gt;&lt;FONT color=#ff0000&gt;（修正9:30 「平面」という表現を「長方形の領域」に改めました. れいさんご指摘ありがとうございました）&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT color=#ff0000&gt;（修正3/18 1:00 「長方形」という表現を「矩形」に改めました。恣意のさんご指摘ありがとうございました）&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;STRONG&gt;&lt;FONT size=4&gt;
&lt;HR id=null&gt;
●なぜGDI+はGDIの方式をやめたのか&lt;/STRONG&gt;&lt;/FONT&gt; 
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;実際に数えたわけではないが私の使ってきた関数たちは経験的に、&lt;BR&gt;&lt;STRONG&gt;&lt;FONT color=#ff0000&gt;GDIはP&amp;amp;Pが多くGDI+はP&amp;amp;Sが多い&lt;/FONT&gt;ように思う。&lt;/STRONG&gt;&lt;BR&gt;私の画像処理人生ではGDIの占める割合は多くGDI+はつい最近の技術と感じている。&lt;BR&gt;そのせいか私はGDI+を使っていて方式の差異によるミスをよく起こしてしまう。&lt;BR&gt;GDI+から初めて使用している人や、ちゃんと引数を確認して使うような人にとってはGDIとの比較に意味もないのだろう。&lt;BR&gt;そういう方たちには「やめた」という表現は色々語弊もあるだろう。&lt;BR&gt;しかしGDIに結構慣らされてしまった私の目には十分「やめた」ようにしか見えず、多少なりとも被害も被っていると思っている。&lt;/P&gt;
&lt;P&gt;同じMicrosoft社のライブラリであるGDIとGDI+。どうして両者は方式に違いが出来てしまったのだろう？&lt;/P&gt;
&lt;P&gt;私の様なGDI漬けユーザーを切り捨ててまで実装方式を変える意味とは何だろう？&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT size=4&gt;
&lt;HR id=null&gt;
●とりあえず。&lt;/FONT&gt;&lt;/STRONG&gt; 
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#0000ff&gt;ここからですます調です（笑&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;私なりに&lt;/P&gt;
&lt;P align=center&gt;&lt;FONT color=#008000 size=6&gt;勝手にまとめて叩かれる&lt;FONT size=2&gt;(inspired R.Tanaka.Ichiro)&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;ってのもアリですが（汗。&lt;/P&gt;
&lt;P&gt;せっかく盛り上がりそうな話題なので一回目は私は何も書かずに、&lt;/P&gt;
&lt;P&gt;色々な人からコメントとかトラックバックとかを読ませてもらいたいなあと勝手に決めました（笑&lt;/P&gt;
&lt;P&gt;特にGDIとGDI+の対決じゃなくてP&amp;amp;PとP&amp;amp;Sの対決でもいいので何かまとめられたら嬉しいなあって思っています。&lt;/P&gt;
&lt;P&gt;でも反応が薄そうならば（泣）一応私の方ではそれなりに連載できるくらいの断片的推測を用意しています。&lt;/P&gt;
&lt;P&gt;それをこれから時間を見つけてシリーズ化して書き出すのもアリなのかなあと思います。&lt;/P&gt;
&lt;P&gt;（意外とあっさり結論が出たりするかも知れませんが、それはそれで助かります）&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT size=4&gt;●本日の「知れない」&lt;BR&gt;&lt;/FONT&gt;&lt;/STRONG&gt;・０ベースvs１ベース問題もこっそり関係しているかも知れない。&lt;BR&gt;よくわかるかも知れない図&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;■■■■&lt;BR&gt;■■■■&lt;BR&gt;■■■■&lt;BR&gt;&lt;/STRONG&gt;P&amp;amp;Pだと(0,0,3,2)&lt;BR&gt;P&amp;amp;Sだと(0,0,4,3)&lt;/P&gt;&lt;BR&gt;(。-｀ω&amp;#180;-)＜「勝手に見つけ出した先輩たちの0ベースvs1ベース問題エントリー」 
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;囚人さん→&lt;A href="http://blogs.wankuma.com/shuujin/archive/2007/07/27/87326.aspx"&gt;0 ベース vs 1 ベース&lt;/A&gt;&lt;BR&gt;επιστημηさん→&lt;A href="http://blogs.wankuma.com/episteme/archive/2007/07/27/87360.aspx"&gt;どんだけ～?&lt;/A&gt;&lt;BR&gt;やまださん→&lt;A href="http://blogs.wankuma.com/yamada/archive/2007/07/30/87792.aspx"&gt;0 ベースなんだけど&amp;#8230;&amp;#8230;&lt;/A&gt;&lt;BR&gt;凪瀬さん→&lt;A href="http://blogs.wankuma.com/nagise/archive/2007/07/30/87822.aspx"&gt;数の数え方&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=1&gt;（いえ、特にお呼びたてするつもりではありませんが・・・）&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;・多くの要求を満足するのは突き詰めればP&amp;amp;Sかも知れない。&lt;BR&gt;なぜなら&lt;FONT color=#008000&gt;&lt;STRONG&gt;P&amp;amp;Pでは「完全に描画しない」を表現できない&lt;/STRONG&gt;&lt;/FONT&gt;。&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000&gt;&lt;STRONG&gt;3/17こっそり追記&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000&gt;とても重要な注意：私の書いてることを鵜呑みにしてはいけません。私の書いていることを確認せずに推論を進めることは自己責任でお願いいたします。最後の方の「知れない」コーナーは特に信用なりません。&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&lt;STRONG&gt;&lt;FONT size=4&gt;３．自分で必ず試す&lt;BR&gt;&lt;/FONT&gt;&lt;/STRONG&gt;重要です。人の書いてる事を鵜呑みにしてはいけません。&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;myugaru &lt;A id=viewpost.ascx_TitleUrl href="/myugaru/archive/2008/03/08/126848.aspx" addEventLogcatcher="true"&gt;&lt;FONT color=#000080&gt;Google先生だけでがんばる（その１）&lt;/FONT&gt;&lt;/A&gt; 投稿日時 : 2008年3月8日 10:08 より&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000&gt;です。&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/myugaru/aggbug/127910.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>myugaru (myugaru@wankuma.com)</dc:creator><title>Pixel-to-Pixel速度比較（観点が不明確だった）</title><link>http://blogs.wankuma.com/myugaru/archive/2008/03/15/127869.aspx</link><pubDate>Sat, 15 Mar 2008 19:55:00 GMT</pubDate><guid>http://blogs.wankuma.com/myugaru/archive/2008/03/15/127869.aspx</guid><wfw:comment>http://blogs.wankuma.com/myugaru/comments/127869.aspx</wfw:comment><comments>http://blogs.wankuma.com/myugaru/archive/2008/03/15/127869.aspx#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://blogs.wankuma.com/myugaru/comments/commentRss/127869.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/myugaru/services/trackbacks/127869.aspx</trackback:ping><description>&lt;P&gt;今日は「&lt;A id=_e01f1b52f8963ce0_HomePageDays_DaysList__ctl1_DayItem_DayList__ctl0_TitleUrl href="/myugaru/archive/2008/03/13/127590.aspx" addEventLogcatcher="true"&gt;&lt;FONT color=#000080&gt;Pixel-to-Pixel速度比較&lt;/FONT&gt;&lt;/A&gt; 」のまとめをしたかったのですが、&lt;/P&gt;
&lt;P&gt;うっかり大変なことを忘れておりました。&lt;/P&gt;
&lt;P&gt;家族でちょっとしたイベントのある夜だったのです。&lt;/P&gt;
&lt;P&gt;・・・ということであまり綺麗にまとめる時間がなくなってしまいました。&lt;/P&gt;
&lt;P&gt;でもざっくり書いてみます。（あとで修正するかもしれません）&lt;/P&gt;&lt;STRONG&gt;&lt;FONT size=4&gt;
&lt;P&gt;
&lt;HR id=null&gt;

&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000&gt;25:00追記&lt;/FONT&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;前回&lt;STRONG&gt;「ある条件」&lt;/STRONG&gt;って書いてたのでそれに即して書き記します。&lt;/P&gt;
&lt;P&gt;私が目的にしていることはDirectXで背景画をリアルタイムで書き換える手段の検討でした。&lt;/P&gt;
&lt;P&gt;目的から考えれば手段としてはGDI+に頼ること自体が方向性として微妙だったなと途中で気付いたのです。&lt;/P&gt;
&lt;P&gt;つまり&lt;STRONG&gt;「私がやりたいことはライブラリImageUtilsで処理を書く必要があるかどうか」&lt;/STRONG&gt;という条件だったわけです。&lt;/P&gt;
&lt;P&gt;流れる星などのエフェクト効果はピクセルで描画できたら実装できそうに思いました。そこからGDI+へ考えを進めるのではなくて&lt;STRONG&gt;DirectXのピクセルレンダリングのパスへそういうピクセル単位でのドットON/OFFを設定できるのか&lt;/STRONG&gt;という方向へ話をもっていくべきでした。この話の方向はいづれ考えてみようと思います。&lt;/P&gt;
&lt;P&gt;そういうわけですが。&lt;/P&gt;
&lt;P&gt;たとえ微妙方向性だとしても乗りかかってしまった船なので、とりあえずこのエントリーは決着は付けようと思っています。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT size=4&gt;
&lt;HR id=null&gt;

&lt;P&gt;&lt;/P&gt;
&lt;P&gt;●ColorMatrixが速いのはおかしい&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;私は実は計測する前からLockBits/UnlockBitsの方が速いと予想していました。&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000&gt;（追記：前回納得できていない、と書いたのは、上の追記に書いたとおり話が微妙だってたことに気付いたのもありますが、予想が外れていて納得できないという意味もありました）&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;前回ColorMatrixが速くなったような結論が出たのは、&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;速度重視思想だけでは無いImageUtilsを使用したため&lt;/STRONG&gt;だと考えれば納得できます。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT size=4&gt;●作者junkiさんの記事&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://junki.lix.jp/csgr/002ColorDataAccess1.htm"&gt;Bitmap の内部色データにアクセスする (1)&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;EM&gt;「このコードは、前回の配列コピーの場合より、さらに４倍以上速い。この方法は &lt;B&gt;unsafe{}&lt;/B&gt; ブロックを含むが、もっとも高速なので以後はこの方法を使うことにする。」&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;この時点ではライブラリでunsafeを使用する事を考えていらっしゃいました。&lt;/P&gt;
&lt;P&gt;&lt;A href="http://junki.lix.jp/csgr/005ColorDataAccess3.htm"&gt;&lt;FONT color=#002c99&gt;Bitmap の内部色データにアクセスする (3)&lt;/FONT&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;EM&gt;「図は、今回つくったクラスをつかって画像のすべてのピクセルの &lt;B&gt;R&lt;/B&gt; 成分と &lt;B&gt;G&lt;/B&gt; 成分を入れ換えたものである。&lt;/EM&gt;&lt;A href="http://code.junki.main.jp/?eid=270324" target=_blank&gt;&lt;FONT color=#002c99&gt;&lt;EM&gt;ここ&lt;/EM&gt;&lt;/FONT&gt;&lt;/A&gt;&lt;EM&gt;でテストしたように、&lt;/EM&gt;&lt;A href="http://junki.lix.jp/csgr/004ColorDataAccess2.htm" target=_blank&gt;&lt;FONT color=#002c99&gt;&lt;EM&gt;前回&lt;/EM&gt;&lt;/FONT&gt;&lt;/A&gt;&lt;EM&gt;の &lt;B&gt;unsafe&lt;/B&gt; コードに比べると ３－４割時間がかかって遅くなるが、なによりポインタをあらわに使わないで済むことは重要である。」&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;しかしunsafeを使用するデメリットなどをjunkiさんなりに考慮された上で最終的には時間がかかってもunsafe未使用方式を採用に到っておられます。&lt;/P&gt;
&lt;P&gt;&lt;FONT size=4&gt;&lt;STRONG&gt;●まとめ&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;ライブラリImageUtilsの思想は「GDI+の描画処理で加工できないBitmap（具体的には８ビットのカラーパレット式ビットマップなど）を加工できる」という事を可能とするライブラリでした。&lt;/P&gt;
&lt;P&gt;私が&lt;FONT color=#ff0000&gt;そのImageUtilsを使って処理を書きたい&lt;/FONT&gt;のであれば&lt;FONT color=#ff0000&gt;ColorMatrixでは処理を書けない&lt;/FONT&gt;ということになります。&lt;/P&gt;
&lt;P&gt;私が&lt;FONT color=#ff0000&gt;扱う画像がGDI+で加工する事をしたい＆unsafeは使いたくない&lt;/FONT&gt;のであれば&lt;FONT color=#ff0000&gt;ColorMatrixを使えばよい&lt;/FONT&gt;ということになります。&lt;/P&gt;
&lt;P&gt;私が&lt;FONT color=#ff0000&gt;扱う画像がGDI+で加工する事をしたい＆unsafeを使っても速くしたい&lt;/FONT&gt;のであれば&lt;FONT color=#ff0000&gt;Lockbits/UnlockBits&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;を使えばよい&lt;/FONT&gt;ということになります。&lt;/P&gt;
&lt;P&gt;つまり&lt;STRONG&gt;何の速度差を知りたかったのか&lt;/STRONG&gt;を明確にしなければ議論することができない話だったとわかりました。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT size=4&gt;●次回？&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;ということでもうちょっと観点を明確にしてちゃんと実測してみたいと思います。&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/myugaru/aggbug/127869.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>myugaru (myugaru@wankuma.com)</dc:creator><title>Pixel-to-Pixel速度比較</title><link>http://blogs.wankuma.com/myugaru/archive/2008/03/13/127590.aspx</link><pubDate>Thu, 13 Mar 2008 22:19:00 GMT</pubDate><guid>http://blogs.wankuma.com/myugaru/archive/2008/03/13/127590.aspx</guid><wfw:comment>http://blogs.wankuma.com/myugaru/comments/127590.aspx</wfw:comment><comments>http://blogs.wankuma.com/myugaru/archive/2008/03/13/127590.aspx#Feedback</comments><slash:comments>129</slash:comments><wfw:commentRss>http://blogs.wankuma.com/myugaru/comments/commentRss/127590.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/myugaru/services/trackbacks/127590.aspx</trackback:ping><description>&lt;P&gt;&lt;A id=_dfa1f0ff10b46b6f_HomePageDays_DaysList__ctl7_DayItem_DayList__ctl2_TitleUrl href="/myugaru/archive/2008/03/06/126503.aspx" addEventLogcatcher="true"&gt;&lt;FONT color=#000080&gt;&lt;EM&gt;リフレクション&lt;/EM&gt;&lt;/FONT&gt;&lt;/A&gt;&lt;EM&gt; &lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;A id=_dfa1f0ff10b46b6f_HomePageDays_DaysList__ctl4_DayItem_DayList__ctl2_TitleUrl href="/myugaru/archive/2008/03/09/126920.aspx" addEventLogcatcher="true"&gt;&lt;FONT color=#000080&gt;&lt;EM&gt;[C#,VB.NET]Graphics.DrawImage(image,0,0)の落とし穴&lt;/EM&gt;&lt;/FONT&gt;&lt;/A&gt;&lt;EM&gt; &lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;A id=_dfa1f0ff10b46b6f_HomePageDays_DaysList__ctl1_DayItem_DayList__ctl1_TitleUrl href="/myugaru/archive/2008/03/12/127332.aspx" addEventLogcatcher="true"&gt;&lt;FONT color=#000080&gt;&lt;EM&gt;VC#Express2008で.NET Frameworkのライブラリ・ソースへステップイン&lt;/EM&gt;&lt;/FONT&gt;&lt;/A&gt;&lt;EM&gt; &lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;これらのエントリーは実はちょっと確認したいことがあった流れで書いてました。&lt;BR&gt;確認したかったのはGDI+の処理速度です。&lt;BR&gt;具体的には&lt;STRONG&gt;「同じ結果を導く異なる描画方法の処理速度差」&lt;/STRONG&gt;になると思います。&lt;BR&gt;もちろん速い方を選びたいのが人情でしょう。&lt;BR&gt;今日は上の流れで見つけたある２つの同じ結果を導く違う描画方法の比較をしようと思います。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT size=4&gt;
&lt;HR id=null&gt;
●比較対象処理&lt;BR&gt;&lt;/FONT&gt;Pixel-to-Pixel処理&lt;/STRONG&gt;の一種であるグレースケール化です。&lt;BR&gt;方式１：Bitmap.LockBits/Bitmap.UnlockBitsで画像の画素情報に直接アクセス&lt;BR&gt;方式２：System.Drawing.Imaging.ColorMatrixによる色の行列変換 
&lt;P&gt;&lt;/P&gt;&lt;STRONG&gt;&lt;FONT size=4&gt;
&lt;P&gt;
&lt;HR id=null&gt;

&lt;P&gt;&lt;/P&gt;
&lt;P&gt;●テストプログラム詳細&lt;/P&gt;&lt;/FONT&gt;&lt;/STRONG&gt;
&lt;P&gt;&lt;A href="http://myugaru.wankuma.com/GrayScaleSpeedTest.zip" target=_blank&gt;ダウンロード：C# - GrayScaleSpeedTest.zip&lt;/A&gt;&lt;/P&gt;&lt;STRONG&gt;&lt;FONT size=4&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT color=#0000ff&gt;共通部分&lt;BR&gt;&lt;/FONT&gt;・画像はjpg画像に限定し24bitピクセルフォーマットでの比較を行う。&lt;BR&gt;・まずファイルオープンダイアログでjpgを選択&lt;BR&gt;・フォームクラスのローカル変数originalBmpに画像を保管&lt;BR&gt;・各方式はメニューで選択&lt;BR&gt;・選択された方式にoriginalBmpを引き渡しピクチャボックスへ結果を描画させる&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;方式１部分&lt;BR&gt;&lt;/FONT&gt;・junki氏の画像処理ライブラリ「ImageUtils」&lt;FONT color=#ff0000&gt;（※１）&lt;/FONT&gt;のGrayScale24()を使用（このメソッドは内部でBitmap.LockBits/Bitmap.UnlockBitsを使用してグレースケール化を行う）&lt;BR&gt;・引数にBitmapの参照を渡し返値は参照に上書きして返ってくるので、方式１開始部分で一旦originalBmpのクローンを作ってGrayScale24()で処理し返値をピクチャボックスへ設定する。&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000&gt;※１：Image Processing Utilities for C#2.0 (VC# 2005) Copyright junki, Jan, 2006 -&lt;BR&gt;junki氏 HP：&lt;/FONT&gt;&lt;A href="http://junki.lix.jp/"&gt;&lt;FONT color=#ff0000&gt;http://junki.lix.jp/&lt;/FONT&gt;&lt;/A&gt;&lt;FONT color=#ff0000&gt;　ImageUtils：&lt;/FONT&gt;&lt;A href="http://junki.lix.jp/archives2/ImageUtils.lzh"&gt;&lt;FONT color=#ff0000&gt;http://junki.lix.jp/archives2/ImageUtils.lzh&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;方式２部分&lt;BR&gt;&lt;/FONT&gt;・ColorMatrixに次の行列を設定&lt;BR&gt;&lt;PRE&gt;[ 0.299, 0.299, 0.299, 0.0, 0.0 ]
[ 0.587, 0.587, 0.587, 0.0, 0.0 ]
[ 0.114, 0.114, 0.114, 0.0, 0.0 ]
[   0.0,   0.0,   0.0, 1.0, 0.0 ]
[   0.0,   0.0,   0.0, 0.0, 1.0 ]&lt;/PRE&gt;・ImageAttributesを作成し行列を設定&lt;BR&gt;・変換用にoriginalBmpと同サイズ、24bitピクセルフォーマットのビットマップ作成&lt;BR&gt;・Graphics.DrawImageにImageAttributesを渡し変換用ビットマップに対してグレースケールで描画を行う。&lt;BR&gt;・変換用ビットマップをピクチャボックスへ設定する。
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT size=4&gt;
&lt;P&gt;
&lt;HR id=null&gt;

&lt;P&gt;&lt;/P&gt;
&lt;P&gt;●結果&lt;BR&gt;&lt;/FONT&gt;&lt;/STRONG&gt;フリー写真素材&lt;FONT color=#ff0000&gt;（※２）&lt;/FONT&gt;をお借りして方式１と方式２でそれぞれ１００回ずつ変換を行った。&lt;BR&gt;以下はそれぞれの方式のかかった時間を５回ずつ表示させています&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://myugaru.wankuma.com/image/20080313_2.png"&gt; &lt;/P&gt;
&lt;P&gt;ColorMatrixを用いた方が速いという結果になりました。&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000&gt;※２：ren氏HP：&lt;/FONT&gt;&lt;A href="http://sk-d.a-thera.jp/"&gt;&lt;FONT color=#ff0000&gt;http://sk-d.a-thera.jp/&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;&lt;FONT color=#ff0000&gt;ダウンロード：&lt;/FONT&gt;&lt;A href="http://www.photolibrary.jp/profile/artist_244_1.html"&gt;&lt;FONT color=#ff0000&gt;http://www.photolibrary.jp/profile/artist_244_1.html&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000&gt;&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT size=4&gt;
&lt;P&gt;
&lt;HR id=null&gt;

&lt;P&gt;&lt;/P&gt;
&lt;P&gt;●実は納得していなかった&lt;BR&gt;&lt;/FONT&gt;&lt;/STRONG&gt;私はこのテストでは&lt;FONT color=#a52a2a&gt;ColorMatrixの優位を証明できていない&lt;/FONT&gt;と思っています。&lt;BR&gt;jpgが悪いとか誤字とか行列の値が違ってるとかループ回数が少ないとか多いとかではありません。&lt;BR&gt;このテストでも&lt;STRONG&gt;ある条件下&lt;/STRONG&gt;では私も十分に納得すると思います。&lt;BR&gt;でも今回は&lt;STRONG&gt;その条件ではない&lt;/STRONG&gt;ので納得していないわけです。&lt;/P&gt;
&lt;P&gt;ではある条件とは一体何のことでしょう？&lt;BR&gt;＃うーーん。実は引っ張るほど大した話じゃないかもですが・・・&lt;/P&gt;
&lt;P&gt;この続きは明日か・・・明後日かもです。&lt;BR&gt;色々と考えて楽しみにしててください。 &lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;＃聞くと本当に大した事じゃないので怒らないでくださいね。&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/myugaru/aggbug/127590.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>myugaru (myugaru@wankuma.com)</dc:creator><title>[C#,VB.NET]Graphics.DrawImage(image,0,0)の落とし穴</title><link>http://blogs.wankuma.com/myugaru/archive/2008/03/09/126920.aspx</link><pubDate>Sun, 09 Mar 2008 10:20:00 GMT</pubDate><guid>http://blogs.wankuma.com/myugaru/archive/2008/03/09/126920.aspx</guid><wfw:comment>http://blogs.wankuma.com/myugaru/comments/126920.aspx</wfw:comment><comments>http://blogs.wankuma.com/myugaru/archive/2008/03/09/126920.aspx#Feedback</comments><slash:comments>59</slash:comments><wfw:commentRss>http://blogs.wankuma.com/myugaru/comments/commentRss/126920.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/myugaru/services/trackbacks/126920.aspx</trackback:ping><description>&lt;P&gt;&lt;FONT color=#008000 size=4&gt;&lt;STRONG&gt;[C#,VB.NET]Graphics.DrawImage(image,0,0)の落とし穴&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#008000 size=1&gt;&lt;STRONG&gt;サブタイトル：単に女の子の画像を張りたかっ(ry&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#ff0000&gt;12:00 すみません若干認識がずれていたようですので赤で修正しました&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Graphics.DrawImage(image,0,0)は等倍表示を意味します。しかしこの等倍表示には２通りの意味があります。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT size=4&gt;●確認プログラム&lt;BR&gt;&lt;/FONT&gt;&lt;/STRONG&gt;確認のために以下のプログラムをダウンロードして実行してください。&lt;/P&gt;
&lt;P&gt;これはDrawImage(image,0,0)で実装された単なる画像ビュアーです。&lt;/P&gt;
&lt;P&gt;C#とVB.NETを用意してます。&lt;BR&gt;&lt;A href="http://myugaru.wankuma.com/DrawImageCheck_src.zip"&gt;http://myugaru.wankuma.com/DrawImageCheck_src.zip&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;実行形式も用意しました。実行には.Net Framework3.5が必要です。&lt;BR&gt;&lt;A href="http://myugaru.wankuma.com/DrawImageCheck_bin.zip"&gt;http://myugaru.wankuma.com/DrawImageCheck_bin.zip&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT size=4&gt;●確認手順&lt;BR&gt;&lt;/FONT&gt;&lt;/STRONG&gt;プログラムを実行すると単なるフォームが表示されます。↓の画像をドラッグ＆ドロップしてみてください。 &lt;BR&gt;&lt;IMG src="http://myugaru.wankuma.com/image/20080309_50.bmp"&gt; &lt;/P&gt;
&lt;P&gt;&lt;FONT size=1&gt;(c)elouai.com - Candybar 4 Doll Maker &lt;/FONT&gt;&lt;A href="http://elouai.com/candybar4/dollmakergirl.php"&gt;&lt;FONT size=1&gt;http://elouai.com/candybar4/dollmakergirl.php&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;ブラウザで表示されているものより拡大されましたか？手持ちの画像でもこの確認プログラムとブラウザにドラッグ＆ドロップして確認してみてください。両者で見た目のサイズが違っているものはありませんか？&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT size=4&gt;●原因&lt;BR&gt;&lt;/FONT&gt;&lt;/STRONG&gt;DrawImage(イメージ, 0, 0)は「物理サイズで等倍表示する」事を意味しています。&lt;BR&gt;ですから「論理サイズでの等倍表示」を期待する人にとっては等倍と見えません。&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000&gt;すなわち&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#ff0000&gt;確認プログラムは「物理サイズ等倍表示」&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#ff0000&gt;ブラウザなどは「論理サイズ等倍表示」だという違いがこの現象を起こしています。&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT size=4&gt;●解説&lt;BR&gt;&lt;/FONT&gt;１．解像度&lt;BR&gt;&lt;/STRONG&gt;イメージには解像度と呼ばれるプロパティが存在しています。&lt;BR&gt;水平方向の解像度＝イメージ.HorizontalResolution&lt;BR&gt;垂直方向の解像度＝イメージ.VerticalResolution&lt;BR&gt;ディスプレイにも解像度があります。例えば私の17インチディスプレイで&lt;STRIKE&gt;&lt;FONT color=#ff0000&gt;1024&amp;#215;768表示時には&lt;/FONT&gt;&lt;/STRIKE&gt;解像度96dpiになっています。&lt;FONT color=#ff0000&gt;解像度は1024&amp;#215;768などを800&amp;#215;600に変えても変わるものではなくディスプレイそのものの能力値として機能しているようです。&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;２．画像に解像度が設定されるタイミング&lt;BR&gt;&lt;/STRONG&gt;画像の解像度の決まるタイミングは&lt;FONT color=#ff0000&gt;ブラウザのような画像解像度を無視するアプリによって&lt;/FONT&gt;画像ストリームとしてファイルに保存される瞬間です。&lt;BR&gt;ほとんどの場合は使っているディスプレイの解像度がその画像に設定されます。&lt;/P&gt;
&lt;P&gt;以下のリンクを右クリックから「対象をファイルに保存」でPCへ保存してください。&lt;BR&gt;&lt;A href="http://myugaru.wankuma.com/image/20080309_50.bmp"&gt;http://myugaru.wankuma.com/image/20080309_50.bmp&lt;/A&gt;&lt;BR&gt;この場合は画像ではなく単にファイルとして保存されるので本来の画像に設定された解像度が維持されます。&lt;BR&gt;保存した画像ファイルをExplorer上で右クリックしてプロパティを確認してみてください。&lt;BR&gt;この画像が解像度50dpiで作成されているのだというのが確認できます。 &lt;BR&gt;&lt;IMG src="http://myugaru.wankuma.com/image/20080309_1.png"&gt; 
&lt;P&gt;
&lt;P&gt;次に先ほどの女の子の画像上を右クリックして&lt;FONT color=#ff0000&gt;「名前を付けて画像を保存」&lt;/FONT&gt;でPCへ保存してみてください。&lt;BR&gt;お使いのディスプレイに合わせてその解像度が設定されるかと思います。&lt;BR&gt;先ほど同様に保存した画像ファイルのプロパティを確認してみてください。&lt;BR&gt;（ブラウザによっては50dpiのままのものもあるかもしれません。IEはディスプレイ解像度に変わりました）&lt;BR&gt;&lt;IMG src="http://myugaru.wankuma.com/image/20080309_2.png"&gt; 
&lt;P&gt;※ディスプレイ解像度はコントロールパネルの画面などから確認ができます。&lt;BR&gt;&lt;IMG src="http://myugaru.wankuma.com/image/20080309_3.png"&gt;&amp;nbsp; 
&lt;P&gt;&lt;STRONG&gt;２．物理サイズでの等倍&lt;BR&gt;&lt;/STRONG&gt;物理サイズというのは画像のインチ数でのサイズの事を指します。&lt;/P&gt;
&lt;P&gt;上の確認プログラムの動作はこの物理サイズを等倍とするプログラムになっています。&lt;/P&gt;
&lt;P&gt;先ほどの女の子の画像の論理サイズ（ピクセルサイズ）は横150&amp;#215;縦290です。&lt;/P&gt;
&lt;P&gt;物理サイズ横＝150&amp;#247;50＝3インチ&lt;BR&gt;物理サイズ縦＝290&amp;#247;50＝5.8インチ&lt;/P&gt;
&lt;P&gt;の画像だといえます。&lt;/P&gt;
&lt;P&gt;それを96dpiのディスプレイに物理サイズで等倍表示するとどういう事が起こるかというと、&lt;/P&gt;
&lt;P&gt;横ピクセル＝3&amp;#215;96＝288&lt;BR&gt;縦ピクセル＝5.8&amp;#215;96＝556.8&lt;/P&gt;
&lt;P&gt;つまりディスプレイ上で288&amp;#215;556ピクセルで表示される事を意味します。&lt;BR&gt;これは論理サイズでは拡大表示となります。&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000&gt;&lt;STRIKE&gt;物理サイズでの等倍のシンプルな確認方法はディスプレイ&lt;/STRIKE&gt;&lt;STRIKE&gt;解像度を変えてみる事です。&lt;BR&gt;試しにディスプレイを1024&amp;#215;768や800&amp;#215;600などに変えてみてください。&lt;BR&gt;物理サイズでの等倍を行うプログラムではその見た目のサイズは変わりません。&lt;/STRIKE&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;ディスプレイの能力によって96dpiが決まるので1024&amp;#215;768を800&amp;#215;600にする行為はこの能力の変更には直結していません。したがってこの場合見た目のサイズも変わってしまうという結果になります。確認が不足しておりました。すみません。&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;３．論理サイズでの等倍&lt;BR&gt;&lt;/STRONG&gt;論理サイズというのは画像のピクセル数でのサイズの事を指します。&lt;BR&gt;ブラウザの動作は論理サイズを等倍とするプログラムになっています。&lt;BR&gt;DrawImageのサイズ指定バージョンは画像の解像度を無視しディスプレイ解像度で表示することを意味しています。&lt;BR&gt;DrawImage(image,0,0,image.Width,image.Height)は論理サイズでの等倍に利用できます。（可能な人は先ほどのプログラムを修正して確認してください）&lt;BR&gt;論理サイズでの等倍の場合はディスプレイ解像度で表示されるわけですから、当然ディスプレイの解像度を1024&amp;#215;768や800&amp;#215;600に変えるとその物理サイズであるインチ数でのサイズは変わる事になります。&lt;FONT color=#ff0000&gt;これは前述の通り論理サイズ等倍だけの話ではありませんでした。すみません。&lt;/FONT&gt;&lt;BR&gt;先の画像のように意図的に50dpiを設定している画像だったなら50dpiのディスプレイというのは見かけませんので、ほとんどの場合は製作者の意図したサイズで表示されていないという事を意味しています。&lt;FONT color=#0000ff&gt;この意味は多少あっていると思われます。&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT size=4&gt;●対策&lt;BR&gt;&lt;/FONT&gt;１．画像の解像度を変更する方法&lt;BR&gt;&lt;/STRONG&gt;残念ながら通常のWindows付属ペイントだとこれは出来ません。&lt;BR&gt;画像解像度を簡単に変えることが出来るフリーのペイントツールがあります。&lt;BR&gt;&lt;A href="http://www.getpaint.net/"&gt;http://www.getpaint.net/&lt;/A&gt;&lt;BR&gt;以下のように解像度のみ修正できます。&lt;BR&gt;・[イメージ]→[キャンバスサイズ]の解像度の数値をかえる&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;２．とりあえず論理サイズの方が一般的？&lt;BR&gt;&lt;/STRONG&gt;一般に普及しているブラウザやペイントツールの動作を見てもディスプレイへの表示時はほとんどが画像の解像度を無視しているようです。&lt;BR&gt;なので画像を単純にブラウジングするような場合にはDrawImage(image,0,0,image.Width,image.Height)とサイズ指定して論理サイズ等倍を意識したつくりにする方が良いように思います。&lt;/P&gt;
&lt;P&gt;あまり需要は無いのかもですが、何かのプログラムでディスプレイ解像度に依存しない（つまり物理サイズが必要な）局面が出てきた場合にはこのエントリーの事を思い出して欲しいと思います。&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000&gt;物理サイズ等倍というのは見た目での等倍実現に寄与していないようです。現在のディスプレイの能力に見合ったサイズとしてそのサイズを表現するという意味合いで使われているように思います。不確かな記述をしてしまい申し訳ありませんでした。&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=1&gt;最後に・・・ここまで書いてからふっと見ると・・・ほとんどここに書いてました。ヘルプも空気も嫁てません。。→&lt;/FONT&gt;&lt;A href="http://msdn2.microsoft.com/ja-jp/library/558kfzex(VS.80).aspx"&gt;&lt;FONT size=1&gt;http://msdn2.microsoft.com/ja-jp/library/558kfzex(VS.80).aspx&lt;/FONT&gt;&lt;/A&gt; &lt;BR&gt;&lt;FONT size=1&gt;・・・開き直って私なりにまとめたのはこれで良しとしときます。&lt;/FONT&gt;&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/myugaru/aggbug/126920.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>myugaru (myugaru@wankuma.com)</dc:creator><title>リフレクション</title><link>http://blogs.wankuma.com/myugaru/archive/2008/03/06/126503.aspx</link><pubDate>Thu, 06 Mar 2008 06:53:00 GMT</pubDate><guid>http://blogs.wankuma.com/myugaru/archive/2008/03/06/126503.aspx</guid><wfw:comment>http://blogs.wankuma.com/myugaru/comments/126503.aspx</wfw:comment><comments>http://blogs.wankuma.com/myugaru/archive/2008/03/06/126503.aspx#Feedback</comments><slash:comments>19</slash:comments><wfw:commentRss>http://blogs.wankuma.com/myugaru/comments/commentRss/126503.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/myugaru/services/trackbacks/126503.aspx</trackback:ping><description>&lt;P&gt;今日はGraphics.DrawImageUnscaled()がGraphics.DrawImage()の何のひねりも無い単なるラッパーである検証をします。&lt;/P&gt;
&lt;P&gt;使うのは↓コイツです。&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.aisto.com/roeder/dotnet/"&gt;http://www.aisto.com/roeder/dotnet/&lt;/A&gt;&lt;BR&gt;Reflector for .NET&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000&gt;.Netアセンブリにはネイティブなら完全消滅するような変数名もそのまま入っているので、ほぼ完全にソースに復元可能です。&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#ff0000&gt;ただしリバースエンジニアリングを軽々しく行うのは諸々問題があるように思いますので、&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#ff0000&gt;あくまでも&lt;STRONG&gt;自己責任&lt;/STRONG&gt;でお願いします。&lt;BR&gt;&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;追記3/11：Microsoftでライブラリソースの公開がされているそうです。&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.wankuma.com/katamari/archive/2008/03/11/127150.aspx"&gt;&lt;FONT color=#0000ff&gt;JZ5さんの記事&lt;/FONT&gt;&lt;/A&gt;&lt;FONT color=#0000ff&gt;が参考になりました。JZ5さん感謝いたします。&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.atmarkit.co.jp/fdotnet/insiderseye/20080222sourcecode/sourcecode.html"&gt;&lt;FONT color=#0000ff&gt;http://www.atmarkit.co.jp/fdotnet/insiderseye/20080222sourcecode/sourcecode.html&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=4&gt;&lt;/FONT&gt;?&lt;/P&gt;
&lt;P&gt;&lt;FONT size=4&gt;●では簡単な手順で検証：&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;と思ったのですがこれは各自で色々お試しください。&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.atmarkit.co.jp/fdotnet/tools/dotfuscator/dotfuscator_02.html"&gt;http://www.atmarkit.co.jp/fdotnet/tools/dotfuscator/dotfuscator_02.html&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://sonic64.com/2005-10-11.html"&gt;http://sonic64.com/2005-10-11.html&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;他にもぐぐれば丁寧な使い方をご指導くださっているページはネットにあふれかえっておりますのでよろしくお願いいたします。&lt;/P&gt;
&lt;P&gt;&lt;FONT size=4&gt;●もっともっと使い倒す手順：&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;?自分の作ったプログラムは果たしてどういう風にコンパイルされているのか？本当に意図したとおりのコードに翻訳されてるか？ってのが気になることってありませんか？そういう時には、以下はVisual Studio C# 2008 Express Editionの話ですが他のエディション、言語も似た手順で簡単に調べられます。&lt;/P&gt;
&lt;P&gt;1.ツール→外部ツールメニューを開きます&lt;/P&gt;&lt;IMG src="http://myugaru.wankuma.com/image/20080306_reflecter2_1.png"&gt; 
&lt;P&gt;2.「追加」から↓のように設定します。Reflector本体の場所は自身の環境にあわせて適宜変更します。ちなみに引数の$(TargetPath)は三角ボタンから「ターゲットパス」を選べば簡単に入力できます。&lt;/P&gt;&lt;IMG src="http://myugaru.wankuma.com/image/20080306_reflecter2_2.png"&gt; 
&lt;P&gt;3.では何でも良いので適当にC#でプロジェクトを作りコンパイルOKまで進めます。私は仮に下のコンソールアプリを使いました。（ちゅうい：ニコちゃんやハートに突っ込み入れないように願います。）&lt;/P&gt;&lt;IMG src="http://myugaru.wankuma.com/image/20080306_reflecter2_3.png"&gt; 
&lt;P&gt;4.ツールメニューを開くと先ほど作ったRefrectorメニューがあるので選択します。自分の作ったプログラムを逆アセンブルできます。&lt;/P&gt;&lt;IMG src="http://myugaru.wankuma.com/image/20080306_reflecter2_4.png"&gt; 
&lt;P&gt;5.ちなみにTools→Optionsから表示フォーマットを変えるとdelegateが実装されていないソースとしても翻訳してくれます。&lt;/P&gt;
&lt;P&gt;↓Optimization=3.5&lt;/P&gt;&lt;IMG src="http://myugaru.wankuma.com/image/20080306_reflecter2_6_35.png"&gt; 
&lt;P&gt;↓Optimization=None&lt;/P&gt;&lt;IMG src="http://myugaru.wankuma.com/image/20080306_reflecter2_6_none.png"&gt;&lt;img src ="http://blogs.wankuma.com/myugaru/aggbug/126503.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>