none
CLR (Windows Form アプリケーション) にてのCImageの利用方法 RRS feed

  • 質問

  •  

    CLRにてCImageを利用する方法はありませんか?

     

    インターネットなどでいろいろ探しましたが、ATL、MFCに対応ということで

    ATLにてコンパイラできるように設定し、atlimage.hをインクルードしました。

     

    しかし、コンパイルはOKなのですが

    Debug Assertion Failed!!
    Expression: =CtlValidHeapPointer(pUserData)
    というエラーダイアログが出ました.

    この対処方法などあれば教えてください。

     

    CImageのGetPixelAddressが利用したいのですが、同等なものがあればソチラも教えてください。

     

     

    よろしくお願いします。

    2007年10月11日 6:43

回答

  • 過去ログの

    CLRプロジェクトにてMFCを使用する方法
    http://forums.microsoft.com/msdn-ja/ShowPost.aspx?PostID=671312&SiteID=7

     

    が参考になりませんでしたか?

    2007年10月11日 7:06
  • CImage クラスにそのまま相当するものはありません。

     

    CImage 自身は、CreateDIBSection で生成される HBITMAP のラッパーなので、そのまま当てはまるものはないのですが、

    内部的には、GDI+ を利用しているので、System.Drawing.Imaging.Bitmap クラスが一番近いと思います。

     

    とはいえ、元が HBITMAP を直接抱えているものと、GDI+ の画像オブジェクトなのとでだいぶ違いはありますけど。

     

    GetPixelAddress を使って具体的に何をやるのか?次第ですが、連続的に画像データに対して操作を行う(読むだけ、読み書きとも)のであれば、

    LockBits してしまえば、GetBits と同様に先頭アドレスを引っ張りだすことができます。

    2007年10月11日 8:21
  • ありがとうございました!

    解決策があったんですね。

     

    見落としていました。

    2007年10月18日 6:46

すべての返信

  • 過去ログの

    CLRプロジェクトにてMFCを使用する方法
    http://forums.microsoft.com/msdn-ja/ShowPost.aspx?PostID=671312&SiteID=7

     

    が参考になりませんでしたか?

    2007年10月11日 7:06
  • CImage クラスにそのまま相当するものはありません。

     

    CImage 自身は、CreateDIBSection で生成される HBITMAP のラッパーなので、そのまま当てはまるものはないのですが、

    内部的には、GDI+ を利用しているので、System.Drawing.Imaging.Bitmap クラスが一番近いと思います。

     

    とはいえ、元が HBITMAP を直接抱えているものと、GDI+ の画像オブジェクトなのとでだいぶ違いはありますけど。

     

    GetPixelAddress を使って具体的に何をやるのか?次第ですが、連続的に画像データに対して操作を行う(読むだけ、読み書きとも)のであれば、

    LockBits してしまえば、GetBits と同様に先頭アドレスを引っ張りだすことができます。

    2007年10月11日 8:21
  • ありがとうございました!

    解決策があったんですね。

     

    見落としていました。

    2007年10月18日 6:46