CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - GDI+ i zmiana rozmaru TImage

GDI+ i zmiana rozmaru TImage

problemy z tworzeniem aplikacji graficznych oraz audio i wideo

GDI+ i zmiana rozmaru TImage

Nowy postprzez Gepcio » niedziela, 20 maja 2012, 12:07

Mam taki problem. Otóż potrzebuję wczytać grafiki z pliku do TImage. I teraz na formie mam TListBox, w którym są nazwy plików, na zdarznie "onclick" mam taki kod:
KOD cpp:     UKRYJ  
 void __fastcall TfrmMain::LoadImage(UnicodeString FileName)
{

 UnicodeString path = FileName;
 Gdiplus::Image image(WideString(path).c_bstr() );

 Gdiplus::Graphics grphx(imgPage->Canvas->Handle);
 imgPage->Picture->Bitmap->Width=image.GetWidth();
 imgPage->Picture->Bitmap->Height=image.GetHeight();

 grphx.DrawImage(&image, 0, 0, imgPage->Picture->Bitmap->Width, imgPage->Picture->Bitmap->Height);

}


I teraz problem:
Zmienia się rozmiar TImage ale bitmapa jest całą biała. Może jakiś pomysł? Mi już witki opadły...
Avatar użytkownika
Gepcio
Bladawiec
Bladawiec
 
Posty: 10
Dołączył(a): niedziela, 20 maja 2012, 11:52
Podziękował : 4
Otrzymał podziękowań: 1
System operacyjny: Windows 7 Ultimate
Kompilator: Embarcadero RAD Studio 2010
C++ Builder 2010 Update 5
Gadu Gadu: 0
    Windows 7Firefox

Re: GDI+ i zmiana rozmaru TImage

Nowy postprzez Cyfrowy Baron » niedziela, 20 maja 2012, 13:04

Też próbowałem na różne sposoby, ale nic nie mogę wymyślić. Problem polega na tym, że gdi rysuje po Canvas, a Canvas w Image ma rozmiar początkowy taki jaki ma Image i zmiana rozmiaru Image nie powoduje już zmiany rozmiaru płótna Canvas. Kolejny problem to taki, że jeżeli gdziekolwiek w kodzie podepniesz Image pod Gdiplus::Graphics to tracisz nad nim kontrolę, czyli nie można zmienić rozmiaru Image nawet przed umieszczeniem w nim grafiki przez GDI+.

Na etapie programowania ustaw rozmiar Image na bardzo duży, np. 3000x3000, po wczytaniu grafiki będziesz mógł go swobodnie zmieniać. I nie tak:

KOD cpp:     UKRYJ  
imgPage->Picture->Bitmap->Width=image.GetWidth();
 imgPage->Picture->Bitmap->Height=image.GetHeight();


lecz tak:

KOD cpp:     UKRYJ  
imgPage->Width = image.GetWidth();
imgPage->Height = image.GetHeight();


Przy czym rozmiar Image możesz zmienić dopiero po pierwszym wczytaniu grafiki, a nie przed.

i nie tak:

KOD cpp:     UKRYJ  
 grphx.DrawImage(&image, 0, 0, imgPage->Picture->Bitmap->Width, imgPage->Picture->Bitmap->Height);


lecz tak:

KOD cpp:     UKRYJ  
 grphx.DrawImage(&image, 0, 0,imageBmp->GetWidth(), imageBmp->GetHeight());




Testowałem takim kodem:

KOD cpp:     UKRYJ  
void __fastcall TForm1::LoadImage(String FileName)
{
 static x = 0;
 String path = FileName;


 Gdiplus::Graphics grphx(Image1->Canvas->Handle);
 Gdiplus::Image imageBmp ( path.c_str() );

 Image1->Width = 800 + x;
 Image1->Height = 600 + x;

 grphx. DrawImage(&imageBmp, 0, 0, imageBmp.GetWidth(), imageBmp.GetHeight());

 x += 50;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button5Click(TObject *Sender)
{
 LoadImage("c:\\test.bmp");
}


A dla Image1 ustawiłem początkowy rozmiar na 2000x2000. Zmiana rozmiaru przebiegała bezproblemowo.
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+ i zmiana rozmaru TImage

Nowy postprzez Gepcio » niedziela, 20 maja 2012, 16:30

Wielkie dzięki! Dało radę! :)

A tam, gdzie mnie poprawiałeś z oboma width i height to też tak robiłem przedtem, tylko nie napisałem o tym. Mój błąd. Ale dzięki jeszcze raz :)
Avatar użytkownika
Gepcio
Bladawiec
Bladawiec
 
Posty: 10
Dołączył(a): niedziela, 20 maja 2012, 11:52
Podziękował : 4
Otrzymał podziękowań: 1
System operacyjny: Windows 7 Ultimate
Kompilator: Embarcadero RAD Studio 2010
C++ Builder 2010 Update 5
Gadu Gadu: 0
    Windows 7Firefox


  • 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 2 gości