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 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. |
|
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: Grafika | Rozdział 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) |
---|
Bitmapy | Rozdział 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) |
---|
:) |
|
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 ? |
|
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 ); . |
|
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: 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 :) |
|
« 1 » |