Загрузить CBitmap динамически - PullRequest
9 голосов
/ 19 января 2010

У меня есть растровое изображение, которое я хочу загрузить динамически. Но я не могу его загрузить.

CBitmap bmp;

bmp.LoadBitmap("c:\\aeimg");

похоже не работает. Может кто-нибудь, пожалуйста, помогите мне.

Спасибо.

Ответы [ 7 ]

13 голосов
/ 19 января 2010

Вы также можете попробовать что-то вроде этого:

CImage image;
image.Load(_T("C:\\image.png"));
CBitmap bitmap;
bitmap.Attach(image.Detach());
3 голосов
/ 15 июля 2010

Согласно документации CBitmap: LoadBitmap() функция принимает идентификатор ресурса растрового изображения или идентификатор ресурса растрового изображения.

Нельзя указать путь к файлу растрового изображения.

Например

MyProject.rc
------------
MYBMP      BITMAP  "res\myimage.bmp"

и убедитесь, что в resource.h нет записи MYBMP, иначе во время предварительной обработки он заменится на id и, в конечном итоге, LoadBitmap() завершится ошибкой, поскольку приложение не может найтиресурс как FindResource() не работает.

Теперь сделайте это:

CBitmap bmp;
bmp.LoadBitmap(L"MYBMP");

Это определенно загрузит растровое изображение.

1 голос
/ 25 апреля 2012

CBitmap не поддерживает непосредственное чтение из файла .bmp. Вместо этого вы можете использовать класс CImage, как предлагается в других ответах. Вам нужно будет включить atlimage.h в свой код, чтобы CImage заработало:

#include <atlimage.h>
:
CImage img;
img.Load (_T("C:\\image.bmp"));
CBitmap bitmap;
bitmap.Attach(img.Detach());

Другой способ - загрузить изображение с помощью LoadImage Win32 API, а затем присоединить CBitmap к этому:

HBITMAP hBitmap = (HBITMAP)LoadImage(NULL,"c:\\image.bmp", 
                                      IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
if (hBitmap != NULL) 
   bitmap.Attach(hBitmap);
1 голос
/ 19 января 2010

Чтобы загрузить растровое изображение из файла, вы хотите использовать LoadImage с флагом LR_LOADFROMFILE.

0 голосов
/ 17 апреля 2019
CString filename;
TCHAR szFilter[] = _T("Bitmap (*.bmp)|*.bmp|PNG (*.png)|*.png||");

CFileDialog selDlg(TRUE, NULL, NULL, OFN_OVERWRITEPROMPT | OFN_EXTENSIONDIFFERENT, szFilter, this);


if (selDlg.DoModal() == IDOK)
{
    filename = selDlg.GetPathName();

    CImage image;

    HBITMAP hBitmap = (HBITMAP)LoadImage(NULL,filename, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);


    if (hBitmap)
    {
    // Delete the current bitmap
    if (m_bmpBitmap.DeleteObject())
        m_bmpBitmap.Detach();   // If there was a bitmap, detach it

    // Attach the currently loaded bitmap to the bitmap object
    m_bmpBitmap.Attach(hBitmap);

    Invalidate();
    }

}
0 голосов
/ 19 января 2010

Это может быть так же просто, как вы забыли избежать обратной косой черты.Вместо

bmp.LoadBitmap("c:\aeimg");

используйте

bmp.LoadBitmap("c:\\aeimg");

В противном случае вы передаете неверный путь к методу LoadBitmap.

0 голосов
/ 19 января 2010

CImage не работает с png в прошлый раз, когда я пытался / проверял. Посмотрите на CxImage - http://www.codeproject.com/KB/graphics/cximage.aspx.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...