Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

WinApi Bitmapy problem z załadowniem

Ostatnio zmodyfikowano 2012-05-13 17:55
Autor Wiadomość
martysek3
Temat założony przez niniejszego użytkownika
WinApi Bitmapy problem z załadowniem
» 2012-05-13 17:12:01
Witam, zaczynam naukę winapi i jestem na etapie bitmap ale niestety mam problem nie mogę żadnej załadować.
Oto fragment kodu
C/C++
HBITMAP hbmObraz;
hbmObraz =( HBITMAP ) LoadImage( NULL, "obrazek.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE );
HDC hdcNowy = CreateCompatibleDC( hdcNowy );
SelectObject( hdcNowy, hbmObraz );
BITMAP bmInfo;
GetObject( hbmObraz, sizeof( bmInfo ), & bmInfo );
hdcNowy = GetDC( hWnd );
BitBlt( hdcNowy, 50, 50, bmInfo.bmWidth, bmInfo.bmHeight, hdcNowy, 0, 0, SRCCOPY );
ReleaseDC( hWnd, hdcNowy );

oraz błąd

error C2664: 'LoadImageW' : cannot convert parameter 2 from 'const char [12]' to 'LPCWSTR'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

Nie jest podany dokładny adres do pliku bo jest dodany zasobów, przed dodaniem do zasobów próbowałem podać normalną ścieżkę ale też nic nie dało.
Co powinienem zrobić aby to zadziałało.
P-56653
xevuel
» 2012-05-13 17:18:46
Kod dawaj w [cpp]...[/cpp] a błędy w [code]...[/code]

Użyj LoadImageA. A jeśli bitmapa jest przechowywana w zasobach, to nie podaje się do niej ścieżki, tylko używa makra [MSDN] MAKEINTRESOURCE :)

HDC hdcNowy = CreateCompatibleDC( hdcNowy );
 Ta linijka jest bez sensu... Przejrzyj sobie te lekcje:
GrafikaRozdział 5. Podstawowe mechanizmy do rysowania po kontekście urządzenia. Rysowanie linii, prostokątów, elips i okręgów oraz figur o innych kształtach. Ponadto pobieranie kontekstu urządzenia i jego zwalnianie, tworzenie pióra i pędzla oraz ich obsługa. (lekcja)
BitmapyRozdział 6. Ładowanie bitmap z pliku i wyświetlanie ich na ekranie, oraz tworzenie masek na bazie istniejących obrazów. Dodatkowo w rozdziale znajdują się także informacje o zwalnianiu zarezerwowanej pamięci, zagadnieniu kluczowym w GDI. (lekcja)
 :)
P-56655
martysek3
Temat założony przez niniejszego użytkownika
» 2012-05-13 17:39:20
Ogólnie rzecz biorąc ten cały kod brałem z kursu niestety nie działał.
Wspomniana linijka wyglądała tak
HDC hdcNowy = CreateCompatibleDC( hdc );
I niestety przy niej wywalało błąd - error C2065: 'hdc' : undeclared identifier - dlatego zmieniłem i już nie ma tego błędu. Ale z tego co widzę nie tędy droga program się kompiluje i nawet uruchamia ale niestety od razu wyskakuje błąd "Run-Time Check Failure #3 - The variable 'hdcNowy' is being used without being initialized."
Może to wina tego że w Visual Studnio wybrałem gotowy projekt ?
P-56656
xevuel
» 2012-05-13 17:42:00
Pomyśl logicznie. Jak możesz do zmiennej a, którą właśnie tworzysz, przypisać wynik funkcji która działa na tej zmiennej?

I dobrze wyglądała. A żeby uzyskać hdc, użyj
HDC hdc = GetDC( hwnd );
 przed
HDC hdcNowy = CreateCompatibleDC( hdc );
.
P-56657
martysek3
Temat założony przez niniejszego użytkownika
» 2012-05-13 17:55:21
No i działa :) Trzeba było jeszcze w Ostatniej lini zmienić hdcNowy na hdc. SelectObject( hdcNowy, hbmObraz ); tutaj musi zostać hdcNowy bo inaczej nie działa.
A całość poprawnie wygląda tak:
C/C++
HBITMAP hbmObraz;
hbmObraz =( HBITMAP ) LoadImageA( NULL, "c:\\obrazek.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE );
HDC hdc = GetDC( hWnd );
HDC hdcNowy = CreateCompatibleDC( hdc );
SelectObject( hdcNowy, hbmObraz );
BITMAP bmInfo;
GetObject( hbmObraz, sizeof( bmInfo ), & bmInfo );
hdc = GetDC( hWnd );
BitBlt( hdc, 50, 50, bmInfo.bmWidth, bmInfo.bmHeight, hdcNowy, 0, 0, SRCCOPY );
ReleaseDC( hWnd, hdc );

Dzięki wielkie za pomoc :)
P-56658
« 1 »
  Strona 1 z 1