- ベストアンサー
CImageのファイル名を指定して保存
- VC2005を使用してCImageクラスを利用してファイルを保存する方法についての質問です。
- (1)の方法でファイルを保存しようとすると正常に保存できない問題が発生しています。
- (2)の方法で直接ファイル名を指定して保存すると問題なく保存できているのですが、(1)のような間接的な方法で保存する方法を知りたいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
★覚えていますか? ・前回 Unicode 文字列でないといけないと書きましたけど。 Save メソッドは Unicode の文字列でないといけないようです。 >SaveImage.Save("1111.jpg"); ----(2) ↑ これは VC2005 の文字列リテラルのデフォルトが Unicode に設定されています。 なので直接文字列で指定すると保存されるのです。 >SaveImage.Save(filename); ----(1) ↑ これは CString クラスですよね。 CString filename = TEXT( "1111.jpg" ); とすれば出来ませんか? http://msdn2.microsoft.com/ja-jp/library/8a994dfk(VS.80).aspx ・普段 CString 型はあまり利用した事がないので良くは分かりませんが 上記のリンクより CString 型でも ワイド文字(Unicode)が扱えるみたいですね。 マルチバイトの文字列は必ずワイド文字(Unicode)に変換してから Save メソッドに 渡して下さい。 ・以上。
その他の回答 (2)
- Oh-Orange
- ベストアンサー率63% (854/1345)
★回答者 No.2 です。 ・CString 型で上手く出来ないときは LPTSTR 型を使うのはどうですか。 LPTSTR lpFname = TEXT("1111.jpg"); SaveImage.Save( lpFname ); とします。 ・これなら VC2005 の文字列のデフォルトが Unicode になるため lpFname には ワイド文字としてセットされます。その lpFname を SaveImage.Save() に 渡せば出来ませんか? ・特に CString 型を使わなければいけないという条件がないのなら LPTSTR 型で ソースを書き換えてみて下さい。 他にも TCHAR szFname[ MAX_PATH ]; lstrcpy( szFname, TEXT("1111.jpg") ); SaveImage.Save( lpFname ); でも良いかも。 ・参考に。
お礼
お世話になっております。 ご回答ありがとうございます。 CStringを使用する必要はありません。 CImage.loadのときにCStringを使用したためその流れで使用しました。 動作確認したいと思います。 本当にありがとうございました。
- burroughs6
- ベストアンサー率76% (29/38)
CString ss; ssが使われていないですが、 SaveImage.Save(ss); ----(1) のことですか。 >正常に保存できません 保存できないとは、(1)ファイルが作られない(2)ファイルは作られるが表示できない(3)作られる場所が違う(4)プログラムが異常終了する…等があると思いますが、どうでしょうか。
お礼
お世話になっております。 ご回答ありがとうございます。 申し訳ありません。ごちゃごちゃになってました。 SaveImage.Save(ss); ----(1) が正解です。 症状は、ファイルは作られるが0KBのファイルになってしまいです。 よろしくお願いします。
お礼
前回に引き続きありがとうございます。 Cimageを使用してできるようになりました。ちょっと前進できました。 その方法で確認させていただきたいと思います。 最近、VC2005を本格的に始めたため、わからない事が多くて かなりてんぱってます。 今も、picture box 内の再描画がうまくできなくて困ってます。 また、質問させていただく事がある(もしかすると明日?)かもしれませんが、その時はご指南いただけると幸いです。 よろしくお願いします。