0

小さな bmp から jpg へのコンバーターを開発しました。次のコードは機能しており、必要に応じて正確な結果を提供しています

BOOLEAN convertBMPtoJPG(const WCHAR *src_bmp_path,const WCHAR *dest_jpeg_path);

次に、関数を次のように呼び出します。

const WCHAR *src_bmp_path = L"test.bmp";
const WCHAR *dest_jpeg_path= L"test.jpg";
convertBMPtoJPG(src_bmp_path,dest_jpeg_path);

ただし、関数を次のように変更する必要があります (与えられた要件に従って) が、そうするとコンパイル エラーが発生します。

BOOLEAN convertBMPtoJPG(char *src_bmp_path,char *dest_jpeg_path);

次に、関数は次のように呼び出されます (ただし、上記のプロトタイプだけに従う必要があります)。

char *src_bmp_path = "test.bmp";
char *dest_jpeg_path= "test.jpg";
convertBMPtoJPG(src_bmp_path,dest_jpeg_path);

スタックオーバーに関する別の質問では、Win32 型に関する情報が多すぎましたが、まだ問題を解決できませんでした。私は Win32 API が得意ではありません。後のアプローチで何がうまくいかないのか教えてください。

編集:

エラー メッセージ: エラー C2664: 'Gdiplus::Status Gdiplus::Image::Save(const WCHAR *,const CLSID *,const Gdiplus::EncoderParameters *)' : パラメーター 1 を 'char *' から 'const WCHAR * に変換できません' 1> 指されている型は無関係です。変換には reinterpret_cast、C スタイルのキャスト、または関数スタイルのキャストが必要です

4

2 に答える 2

2

Image::Save()値のみを受け入れるWCHAR*ため、char*ラッパーはWCHAR*などに変換する必要がありますMultiByteToWideChar()(Win32 API Unicode 関数を内部で呼び出すときに Win32 API Ansi 関数が行うのと同じように)。

std::wstring towstring(const char *src)
{
    std::wstring output;
    int src_len = strlen(src);
    if (src_len > 0)
    {
        int out_len = MultiByteToWideChar(CP_ACP, 0, src, src_len, NULL, 0);
        if (out_len > 0)
        {
            output.resize(out_len);
            MultiByteToWideChar(CP_ACP, 0, src, src_len, &output[0], out_len);
        }
    }
    return output;
}

BOOLEAN convertBMPtoJPG(char *src_bmp_path,char *dest_jpeg_path)
{
    return convertBMPtoJPG(towstring(src_bmp_path).c_str(), towstring(dest_jpeg_path).c_str());
}

BOOLEAN convertBMPtoJPG(const WCHAR *src_bmp_path, const WCHAR *dest_jpeg_path)
{
   // your existing conversion logic here...
}
于 2013-02-20T19:02:38.393 に答える
0

さて、あなたは Unicode サポートのためにコンパイルしているようです。Win32 データ型のリストはここにあります

WCHAR は次のように定義されます -

 A 16-bit Unicode character. For more information, see Character Sets Used By Fonts.
 This type is declared in WinNT.h as follows:
 typedef wchar_t WCHAR;

これは、さまざまな文字列型間で変換する方法を示すリンクです。文字列変換のサンプル.

于 2013-02-20T18:48:29.310 に答える