以编程方式将PNG设置为Win32 API中的优化校准

时间:2009-10-07 16:59:15

标签: c winapi

我使用Visual Studio 2008,我在资源视图中加载了PNG文件,并将其分配给IDB_BANG_PNG。

优化校准称为IDC_STATIC15。

我无法将PNG加载到图片控件中。

LRESULT CALLBACK DialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{

// Way of loading a bmp with a mask perhaps?  Or a PNG file programatically?

static HBRUSH hBrushStatic;
HBITMAP hBmp = LoadBitmap(hDlg,MAKEINTRESOURCE(IDB_BANG_PNG));

switch(message)
{
case WM_INITDIALOG:     
    CheckDlgButton(hDlg, IDC_CHECK, FALSE);
    EnableWindow(GetDlgItem(hDlg, IDOK), FALSE);
    // Bitmap version is IDB_BANG, PNG is at IDB_BANG_PNG
    // IDC_STATIC15 is the picture frame
    HWND item = GetDlgItem(hDlg,IDC_STATIC15);
    SendMessage(item,STM_SETIMAGE,IMAGE_BITMAP,(LPARAM)hBmp);   
    return TRUE;

// .... snip

当涉及到Win32 / GUI开发,做一个快速的项目并让她困住时,我很天真,任何帮助都表示赞赏。

4 个答案:

答案 0 :(得分:4)

这可以使用GDI+bitmap class

Bitmap oBmp(L"D:\\test.png");
HBITMAP hBmp;
oBmp.GetHBITMAP(0, &hBmp);
SendMessage(item,STM_SETIMAGE,IMAGE_BITMAP,(LPARAM)hBmp);

一些警告。您的控件需要SS_BITMAP样式。不要忘记包含gdiplus.h及其库。您需要初始化(GdiplusStartup)并关闭GDI +。 释放所有系统资源就在你身上。

答案 1 :(得分:2)

我认为LoadBitmap或任何其他普通的GDI函数(例如LoadImage)都不会加载PNG。

您可以使用图片编辑工具将资源保存为32位BMP,然后将LoadImageLR_CREATEDIBSECTION一起使用。

或者您可以使用将PNG文件加载到DIBSECTION中的库。除了BMP之外,GDI +还将加载PNG和JPG。

OLE自动化库还有一个IPicture接口,您可以使用各种图像类型进行实例化,然后获取基础DIBSECTION。使用起来很尴尬,特别是如果你不熟悉COM。请参阅OleLoadPicture作为起点。

答案 2 :(得分:0)

就个人而言,我使用CPictureEx课程。我认为它不支持png,而是支持bmp,jpeg和GIF动画。

我还使用Cairo图形进行特殊渲染。开罗支持png格式 当然开罗有点难用。

答案 3 :(得分:0)

您检查过DevIL / OpenIL库吗?它遵循OpenGL风格的函数命名,并用好的'C。

编写

我过去曾成功使用过。它也很便携。

请在此处查看:http://openil.sourceforge.net/features.php