dポイントプレゼントキャンペーン実施中!

CImageクラスを使って画像処理を行いたいです。
具体的には、
1.Load()で画像を読み込み
2.処理(画像の回転、反転とか)
3.Save()を使って画像を保存

コンパイルはできるのですが、
Debug Assertion Failed!
File: c:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include\atlimage.h
Line: 978
Expression: m_hBitmap != 0
が出て途中で止まります。

どうやれば途中で止まらず実行できるようになるのでしょうか?
助言のほどお願いします。

環境はWindows XP、visual studio 2005です。

A 回答 (2件)

>filename1="C:/a.bmp";



>filename2="C:/b.bmp";

全部ちゃんと見ているわけではありませんので
違ってたら御自分でどの段階でプログラムが
飛んでいるのかを確認してください
(デバッガの使い方を覚えてください)

Windowsで上記のファイルはありえません
filename1="C:\\a.bmp";
じゃないですか(b.bmpのほうも同じ)

ファイルが無いのでオープンエラーで飛ぶのか
その後でたらめな情報でメモリアロケートするので飛ぶのではないかと思います
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/03/17 13:09

コンパイルできることが動くことではありませんので


自分で書いたコードを乗せてください

この回答への補足

以下にコード載せます。

// 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>を追加しました。

よろしくお願いします。

補足日時:2010/03/16 16:01
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A