• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:CImageクラスの使用について)

CImageクラスの使用について

このQ&Aのポイント
  • CImageクラスを使って画像処理を行いたいです。
  • コンパイルはできるのですが、途中で止まります。どうすれば実行できるようになるのでしょうか?
  • 環境はWindows XP、visual studio 2005です。

質問者が選んだベストアンサー

  • ベストアンサー
  • koi1234
  • ベストアンサー率53% (1866/3459)
回答No.2

>filename1="C:/a.bmp"; >filename2="C:/b.bmp"; 全部ちゃんと見ているわけではありませんので 違ってたら御自分でどの段階でプログラムが 飛んでいるのかを確認してください (デバッガの使い方を覚えてください) Windowsで上記のファイルはありえません filename1="C:\\a.bmp"; じゃないですか(b.bmpのほうも同じ) ファイルが無いのでオープンエラーで飛ぶのか その後でたらめな情報でメモリアロケートするので飛ぶのではないかと思います

salty_salt
質問者

お礼

まさにおっしゃられたようにファイルがなく、GetWidth()の所でエラーが出てました。ちゃんとファイルを用意すれば読み込み、保存できるようになりました。 本当にありがとうございました。

その他の回答 (1)

  • koi1234
  • ベストアンサー率53% (1866/3459)
回答No.1

コンパイルできることが動くことではありませんので 自分で書いたコードを乗せてください

salty_salt
質問者

補足

以下にコード載せます。 // imageIO2.cpp : コンソール アプリケーションのエントリ ポイントを定義します。 // #include "stdafx.h" #include "imageIO2.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // 唯一のアプリケーション オブジェクトです。 CWinApp theApp; using namespace std; int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) { int nRetCode = 0; // MFC を初期化して、エラーの場合は結果を印刷します。 if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)) { // TODO: 必要に応じてエラー コードを変更してください。 _tprintf(_T("致命的なエラー: MFC の初期化ができませんでした。\n")); nRetCode = 1; } else { // TODO: アプリケーションの動作を記述するコードをここに挿入してください。 CImage inimg; CString filename1,filename2; filename1="C:/a.bmp"; inimg.Load(filename1); int width=inimg.GetWidth(); int height=inimg.GetHeight(); unsigned char *img1=new unsigned char[width*height*3]; for(int j=0;j<height;j++){ int addr=j*width*3; for(int i=0;i<width;i++,addr+=3){ COLORREF c=inimg.GetPixel(i,j); img1[addr]=GetRValue(c); img1[addr+1]=GetGValue(c); img1[addr+2]=GetBValue(c); } } // upside down // unsigned char *img2=new unsigned char[width*height*3]; for(int j=0;j<height;j++){ int addr1=j*width*3; int addr2=(height-j-1)*width*3; for(int i=0;i<width;i++,addr1+=3,addr2+=3){ img2[addr2]=img1[addr1]; img2[addr2+1]=img1[addr1+1]; img2[addr2+2]=img1[addr1+2]; } } CImage outimg; outimg.Create(width,height,24); for(int j=0;j<height;j++){ int addr=j*width*3; for(int i=0;i<width;i++,addr+=3){ COLORREF c=RGB((int)img2[addr],(int)img2[addr+1],(int)img2[addr+2]); } } filename2="C:/b.bmp"; outimg.Save(filename2); delete[] img1; delete[] img2; } return nRetCode; } あとstdafx.hの最後に#include <atlimage.h>を追加しました。 よろしくお願いします。

関連するQ&A

専門家に質問してみよう