CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - GDI+ Bitmap do TAdvGlowButton.Picture [komponent TMS]

GDI+ Bitmap do TAdvGlowButton.Picture [komponent TMS]

problemy z tworzeniem aplikacji graficznych oraz audio i wideo

Re: GDI+ Bitmap do TAdvGlowButton.Picture [komponent TMS]

Nowy postprzez Cyfrowy Baron » piątek, 10 sierpnia 2012, 10:26

polymorphism napisał(a):A co tam mogło nie wyjść?


Nie działa, czyli wyskakują błędy, gdy zamiast:

KOD cpp:     UKRYJ  
Gdiplus::Image *imagePNG;


dam:

KOD cpp:     UKRYJ  
std::auto_ptr<Gdiplus::Image> imagePNG;




polymorphism napisał(a):Mała uwaga. Metody statyczne wywołuj w ten sposób:


KOD cpp:     UKRYJ  
 imagePNG = Gdiplus::Image::FromFile( L"c:\\image2.png", false );


Nie ma błędu, ale grafika nie jest wczytywana do imagePNG, więc ten sposób nie działa.



polymorphism napisał(a):Zresztą Twój kod dopuszcza możliwość wielokrotnego tworzenia obiektów (vide AdvGlowButton1Click), zatem niezwalnianie obiektów imagePNG jest błędem, który powoduje wycieki pamięci/zasobów.


Chodzi Tobie o to, że każde wywołanie:

KOD cpp:     UKRYJ  
imagePNG = imagePNG->FromFile( L"c:\\image2.png", false );


Tworzy nową instancję obiektu?



polymorphism napisał(a):Image::FromFile tworzy instancję operatorem new, więc dobrze by było ją zwolnić.


Tylko, że ja nie używam Image::FromFile, bo to nic by nie dało, po prostu o czym wspomniałem wyżej to nie powoduje wczytania grafiki do obiektu.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: GDI+ Bitmap do TAdvGlowButton.Picture [komponent TMS]

Nowy postprzez polymorphism » piątek, 10 sierpnia 2012, 10:44

Nie działa, czyli wyskakują błędy,

Jakie błędy?

Nie ma błędu, ale grafika nie jest wczytywana do imagePNG, więc ten sposób nie działa.

Przecież to jest ta sama metoda? Tylko wywołanie inaczej zapisane.

Chodzi Tobie o to, że każde wywołanie (...) tworzy nową instancję obiektu?

Tak.

Tylko, że ja nie używam Image::FromFile (...)

Jak już wcześniej wspomniałem, to jest ta sama (statyczna) metoda, innej klasa Image nie ma (a jak by miała, to Twój kod tym bardziej jest błędny).
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: GDI+ Bitmap do TAdvGlowButton.Picture [komponent TMS]

Nowy postprzez Cyfrowy Baron » piątek, 10 sierpnia 2012, 20:37

polymorphism napisał(a):Przecież to jest ta sama metoda? Tylko wywołanie inaczej zapisane.


Mój błąd! :? Po prostu usunąłem plik graficzny z dysku c: i funkcja nie miała czego czytać. Dziwne jednak, że nie rzuciła żadnym wyjątkiem.



polymorphism napisał(a):Jakie błędy?



[BCC32 Error] Unit1.cpp(23): E2285 Could not find a match for 'operator std::auto_ptr<Gdiplus::Image>::= <_Other>(Gdiplus::Image *)'



tyczy się tego kodu:

KOD cpp:     UKRYJ  
 imagePNG = Gdiplus::Image::FromFile(pathPNG.c_str(), false);


deklaracja w pliku nagłówkowym wygląda tak:

KOD cpp:     UKRYJ  
std::auto_ptr<Gdiplus::Image> imagePNG;


gdy w pliku nagłówkowym dam tak:

KOD cpp:     UKRYJ  
std::auto_ptr<Gdiplus::Image> imagePNG (new Gdiplus::Image);


otrzymują błąd:


[BCC32 Error] Unit1.h(32): E2293 ) expected



który to błąd tyczy się właśnie tej deklaracji.



Problem jednak sprowadza się do tego jak wczytywać do Gdiplus::Image obrazki bez konieczności niszczenia tegoż obiektu.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: GDI+ Bitmap do TAdvGlowButton.Picture [komponent TMS]

Nowy postprzez polymorphism » piątek, 10 sierpnia 2012, 22:38


  • [BCC32 Error] Unit1.cpp(23): E2285 Could not find a match for 'operator std::auto_ptr<Gdiplus::Image>::= <_Other>(Gdiplus::Image *)'


    Przecież pokazywałem jak powinno być -> link (chodzi konkretnie o użycie metody reset).

  • [BCC32 Error] Unit1.h(32): E2293 ) expected

    Image nie ma konstruktora domyślnego, stąd pewnie błąd.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Poprzednia strona

  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Aplikacje multimedialne, graficzne

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 1 gość

cron