KKR Temat założony przez niniejszego użytkownika |
Gdi+ » 2024-11-13 14:33:07 HDC hdc;
PAINTSTRUCT ps;
hdc = BeginPaint(hwnd, &ps); Graphics graphics(hdc);
Image image(L"C:\\my_żółć.png");
graphics.DrawImage(&image, 50, 50); EndPaint(hwnd, &ps);
Funkcja nie ładuje pliku z polskimi znakami. |
|
pekfos |
» 2024-11-13 19:17:51 A bez polskich znaków działa? Jak nie ładuje, to jaki błąd jest zwracany z image.GetLastStatus() zaraz po załadowaniu obrazu? |
|
KKR Temat założony przez niniejszego użytkownika |
» 2024-11-13 20:12:10 Bez polskich znaków jest ok, ładuje każdy plik graficzny.
error:: no matching function for call to gdiplus::Image::Image(const char[19])
"brak pasującej funkcji do wywołania"
20 lat pisałem w VB6, C++ -sa się ucze tyle o ile. |
|
pekfos |
» 2024-11-13 20:18:10 Zgubiłeś L na początku napisu. Wróć do poprzedniego kodu i podaj kod błędu z działania programu. |
|
KKR Temat założony przez niniejszego użytkownika |
» 2024-11-13 21:49:02 Nie pominołem "L"
to działa: Image image(L"D:/Tapety/brick-wall-3170274_1920.jpg");
a to nie: Image image(L"D:/ółśżć/brick-wall-3170274_1920.jpg");
np to: Element[Ilosc_Ikon].Sci="D:/ółśżć/ikón.exe" Element[Ilosc_Ikon].Iko=ExtractAssociatedIcon(Hin_Instance,LPSTR(Element[Ilosc_Ikon].Sci.c_str()),&index); działa poprawnie
albo na przykład: wczytywanie plików za pomocą "fstream" scierzka do pliku z okna wyboru pliku czy katalogu lub co kolwiek innego działa poprawnie.
Tylko to co pochodzi z GDI+ wywala błąd.
W VB6 to wygląda tak "fragment kodu" GdipLoadImageFromFile StrPtr("D:\Pobrane\ółśćż\ółśćż.jpg"), lngPointer GdipDrawImage m_lngGraphics, lngPointer, 0, 0
Czyli wychodzi na to że problem nie leży w GDI+ tylko w przekonwertowaniu scierzki pliku w C++ Tak mi się wydaje.
|
|
DejaVu |
» 2024-11-13 21:51:34 Może plik nie jest zapisany jako UTF-8/Unicode, tylko w lokalnym ISO, więc źle działa zapis z L''? /edit: ChatGPT 4o: Problem z wczytywaniem pliku o nazwie zawierającej polskie znaki (np. żółć) w funkcji Image z GDI+ może wynikać z kilku przyczyn: Kodowanie pliku źródłowego: Jeśli plik źródłowy nie jest zapisany w kodowaniu obsługującym znaki Unicode (np. UTF-8 lub UTF-16), kompilator może nieprawidłowo interpretować polskie znaki w ścieżce. Ustawienia projektu: W niektórych środowiskach programistycznych, takich jak Visual Studio, należy upewnić się, że projekt jest skonfigurowany do obsługi znaków Unicode. W Visual Studio można to ustawić w opcjach projektu, wybierając Use Unicode Character Set. Ścieżka do pliku: Upewnij się, że plik o nazwie my_żółć.png faktycznie istnieje pod podaną ścieżką i że aplikacja ma odpowiednie uprawnienia do jego odczytu. Rozwiązanie: Upewnij się, że plik źródłowy jest zapisany w kodowaniu obsługującym Unicode: W edytorze kodu wybierz odpowiednie kodowanie, np. UTF-8. Sprawdź ustawienia projektu: W Visual Studio przejdź do ustawień projektu i upewnij się, że zestaw znaków jest ustawiony na Unicode. Zastosuj prefiks L przed ścieżką: Użycie prefiksu L przed ciągiem znaków tworzy szerokoznakowy ciąg znaków (wide string), co jest wymagane przez funkcje GDI+. Image image( L"C:\\my_żółć.png" );
Sprawdź istnienie pliku: Upewnij się, że plik my_żółć.png znajduje się w podanej lokalizacji i że aplikacja ma do niego dostęp. Jeśli po wprowadzeniu powyższych zmian problem nadal występuje, warto rozważyć zmianę nazwy pliku na taką, która nie zawiera polskich znaków, aby wykluczyć problemy związane z kodowaniem i obsługą znaków specjalnych. |
|
pekfos |
» 2024-11-13 21:59:24 To działa poprawnie? MessageBoxW( NULL, L"C:\\my_żółć.png", L"test", MB_OK );
|
|
KKR Temat założony przez niniejszego użytkownika |
» 2024-11-13 22:42:21 MessageBoxW( NULL, L"C:\\my_żółć.png", L"test", MB_OK ); Nie działa D:\Programowanie\C++\test\main.cpp|67|error: converting to execution character set: Illegal byte sequence|
MessageBox( NULL, "C:\\my_żółć.png", "test", MB_OK ); Działanie poprawne, okno msg wyświetla "C:\\my_żółć.png"
Tak jak pisałem VB6 nie ma problemu ten sam istniejący plik "C:\my_żółć.png": GdipLoadImageFromFile StrPtr("C:\my_żółć.png"), lngPointer Ładuje poprawnie. W Codeblock jest problem, tak jak wspomniałe tylko z GDI+
Cokolwiek polskiego w sicierzce do pliku to z GDI+ jest problem. |
|
« 1 » 2 |