
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です。
No.2ベストアンサー
- 回答日時:
>filename1="C:/a.bmp";
>filename2="C:/b.bmp";
全部ちゃんと見ているわけではありませんので
違ってたら御自分でどの段階でプログラムが
飛んでいるのかを確認してください
(デバッガの使い方を覚えてください)
Windowsで上記のファイルはありえません
filename1="C:\\a.bmp";
じゃないですか(b.bmpのほうも同じ)
ファイルが無いのでオープンエラーで飛ぶのか
その後でたらめな情報でメモリアロケートするので飛ぶのではないかと思います
まさにおっしゃられたようにファイルがなく、GetWidth()の所でエラーが出てました。ちゃんとファイルを用意すれば読み込み、保存できるようになりました。
本当にありがとうございました。
No.1
- 回答日時:
コンパイルできることが動くことではありませんので
自分で書いたコードを乗せてください
この回答への補足
以下にコード載せます。
// 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が見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
CImageのファイル名を指定して保存
C言語・C++・C#
-
MFCで画像を表示させているのですが、透過表示する方法がわかりません。
C言語・C++・C#
-
-
4
画面を強制的に再描画させる方法
C言語・C++・C#
-
5
MFC - ダイアログボックスのPictureControlへの画像表示
C言語・C++・C#
-
6
RGBのバイナリデータをCImageにコピー
C言語・C++・C#
-
7
CImage GetBitsメソッドについて
C言語・C++・C#
-
8
VC++プログラムをつかったBMP画像の拡大縮小について
C言語・C++・C#
-
9
VC++スレッドの正しい終了のさせかた
C言語・C++・C#
-
10
ダイアログ内コントロールの位置取得について
C言語・C++・C#
-
11
StretchBlt関数について
C言語・C++・C#
-
12
読み込み中にアクセス違反が発生しました、と出ます。これを回避することは
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
[c++] <pthread.h>がinclude で...
-
extern "C" の利用方法に関して
-
Makefile作成時の拡張子.oとは?
-
” OS ビルド ” の意味が分か...
-
C言語でMIDIを鳴らしたいです。
-
PICの__CONFIGのラインについて
-
VisualStudio.netでmemcmp関数...
-
VBAを何回も作り直して、容量が...
-
python エラー
-
アプリケーションのDLLファイル...
-
DLLファイルの逆コンパイラにつ...
-
組み込みソフト。ROM領域にデータ
-
multiple definitionというエラー
-
デバッグとビルドは何が違うの...
-
<unistd.h>をVisualStudioでつ...
-
64ビットのlinuxで32ビットメモ...
-
VC++6.0 で使用可能な、"Platfo...
-
fortranでプログラムを実行する...
-
unsigned long long 型のフォー...
-
至急おねがいします
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
” OS ビルド ” の意味が分か...
-
Makefile作成時の拡張子.oとは?
-
VBAを何回も作り直して、容量が...
-
エクセルVBAではRound...
-
マクロ コンパイルがグレーバック
-
C言語でヘッダファイルにグロー...
-
ILSpyで、デコンパイルできない。
-
【VC++6.0(MFC)】警告「LINK : ...
-
「fatal error C1189」を回避す...
-
1 つ以上の複数回定義されてい...
-
クリティカルエラー Expressio...
-
動的な変数名のつけ方について
-
C言語のコンパイルができません
-
C++コンパイル時に『 C1083: in...
-
セミコロンについて
-
他のLinuxでも動くa.outの作り方
-
includeと#include
-
ビルドとリビルドの違いを教え...
-
コンパイルエラー:ユーザ定義...
-
MFCのエラーについて
おすすめ情報