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);

关于 stackover 的另一个问题提供了太多关于 Win32 类型的信息,但是我还不能解决这个问题。我在 Win32 API 方面不是很好,请指导我在以后的方法中出了什么问题。

编辑:

错误消息: 错误 C2664:'Gdiplus::Status Gdiplus::Image::Save(const WCHAR *,const CLSID *,const Gdiplus::EncoderParameters *)':无法将参数 1 从 'char *' 转换为 'const WCHAR * ' 1> 指向的类型是不相关的;转换需要 reinterpret_cast、C-style cast 或 function-style cast

4

2 回答 2

2

Image::Save()仅接受WCHAR*值,因此您的char*包装器必须转换为WCHAR*,例如 with MultiByteToWideChar()(就像 Win32 API Ansi 函数在内部调用 Win32 API Unicode 函数时所做的那样),例如:

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 回答