none
Graphics.DrawImageで拡大する時のpixel位置関係が知りたいです。 RRS feed

  • 質問

  • お世話になります。

    .NET Framework 4.0のWindows Formによるアプリケーション開発をしています。msdnを探索したのですが、画像拡大(というかリサイズ)にどのようなアルゴズムが使われているのかがわからなかったので、質問することにした次第です。

    たとえば、bitmapで256x256のデータを保持していて、そのデータを512x512のPanelに描画させたいとき、OnPaintにて、Graphics.DrawImage()をつかうと拡大して表示してくれます。

    ここで、元データのpixelが、どのように512x512に配置されたかを知りたいのです。たとえば、[127,127]がどのような位置関係に変わったのか、です。

    DrawImage()は、(Image, Rectangle, Int32, Int32, Int32, Int32, GraphicsUnit, ImageAttributes)のオーバーロードを利用しています。https://msdn.microsoft.com/ja-jp/library/ms142046(v=vs.100).aspx

    そして補間関係のフラグは今のところ、

    Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

    のみを指定しています。

    どこかに変換アルゴリズムのリソースがあれば、そのご教授でもよいので、よろしくお願いいたします。

    2016年12月19日 7:30

回答

  • 間違っていましたら、すみません。

    Graphics.SmoothingModeプロパティの設定は、直線や曲線、塗りつぶし領域の境界などに影響するプロパティで、画像の拡縮に対しては影響がないと思います。画像の拡縮に影響が出るのはGraphics.InterpolationModeプロパティで、下記のドキュメントの一部に使用するアルゴリズム名の記載がありました。

    https://msdn.microsoft.com/ja-jp/library/windows/desktop/ms534141(v=vs.85).aspx

    ただ、具体的に拡縮前のピクセルが拡縮後どのピクセルにどう影響したかを厳密に知るには、アルゴリズムの実装の詳細(コードなど)が必要かと思いますが、現在は公開されていないようです。
    2016年12月19日 8:24

すべての返信

  • 間違っていましたら、すみません。

    Graphics.SmoothingModeプロパティの設定は、直線や曲線、塗りつぶし領域の境界などに影響するプロパティで、画像の拡縮に対しては影響がないと思います。画像の拡縮に影響が出るのはGraphics.InterpolationModeプロパティで、下記のドキュメントの一部に使用するアルゴリズム名の記載がありました。

    https://msdn.microsoft.com/ja-jp/library/windows/desktop/ms534141(v=vs.85).aspx

    ただ、具体的に拡縮前のピクセルが拡縮後どのピクセルにどう影響したかを厳密に知るには、アルゴリズムの実装の詳細(コードなど)が必要かと思いますが、現在は公開されていないようです。
    2016年12月19日 8:24
  • ありがとうございます。

    非公開ですか。。。open sourceなら、とふと思ってしまいますね、こんなとき。

    やむを得ないので、パターンを絞って経験則的に対処してみようと思います。ご協力ありがとうございました。

    2016年12月20日 0:29