GDI PLUS - zmiana rozmiaru bimapy

problemy z tworzeniem aplikacji graficznych oraz audio i wideo

GDI PLUS - zmiana rozmiaru bimapy

Nowy postprzez Corvis » wtorek, 22 czerwca 2010, 11:13

Witam,

Staram się zmienić rozmiar bitmapy w taki sposób aby była zawsze wielkości formy:

Kod: Zaznacz cały
void __fastcall TForm1::FormResize(TObject *Sender) {
    Gdiplus::Graphics NowyObrazek(Image1->Canvas->Handle);
    NowyObrazek.SetInterpolationMode(Gdiplus::InterpolationModeBicubic);
    NowyObrazek.DrawImage(bmp,0,0,this->Width,this->Height) ;
}


gdzie bmp jest bitmapÄ… odczytanÄ… z pliku.

Problem polega na tym, że obrazek nie jest odmalowany na całej formie tylko na jej kawałku ( Screen )

Gdzie robie błąd ??
Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
PodziÄ™kowaÅ‚ : 80
OtrzymaÅ‚ podziÄ™kowaÅ„: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows VistaSafari

Re: GDI PLUS - zmiana rozmiaru bimapy

Nowy postprzez Corvis » wtorek, 22 czerwca 2010, 11:35

Dodam, że jak ustawiam :
Kod: Zaznacz cały
Form1->WindowsState = wsMaximized;
, wtedy obrazek dopasowuje siÄ™ do rozmiaru okna. Tylko czemu tak jest ?
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
PodziÄ™kowaÅ‚ : 80
OtrzymaÅ‚ podziÄ™kowaÅ„: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows VistaSafari

Re: GDI PLUS - zmiana rozmiaru bimapy

Nowy postprzez Cyfrowy Baron » wtorek, 22 czerwca 2010, 12:47

Problem stanowi obiekt Image a nie GDI+. Sprawdź to takim prostym kodem.

Kod: Zaznacz cały
void __fastcall TForm1::FormResize(TObject *Sender)
{
Image1->Canvas->Brush->Color = clWhite;
Image1->Canvas->FillRect(Rect(0, 0, this->Width, this->Height));
}


Zauważysz, że Image1 jest wypełniane kolorem tylko przy pierwszym użyciu. Po zmianie rozmiaru okna programu funkcja FIllRect wypełnia obszar obiektu Image tylko w początkowym rozmiarze. Jest to jedna z tych dziwnych właściwości klasy TImage, gdyż wiąże się to z klasą TPicture i TBitmap. W skrócie wygląda to tak, że po pierwszym wypełnieniu tego obiektu rozmiar płótna Canvas jest ograniczany do tego obszaru, potem po zmianie rozmiaru obiektu Image rozmiar jego płótna Canvas nie zmienia się automatycznie, przez co dalsze rysowanie odbywa się na na starym rozmiarze.

W celu rozwiązania tego problemu trzeba ustalić nowy rozmiar dla Picture->Bitmap:

Kod: Zaznacz cały

void __fastcall TForm1
::FormResize(TObject *Sender)
{
 Image1->Picture->Bitmap->Width = this->Width;
 Image1->Picture->Bitmap->Height = this->Height;

 Gdiplus::Graphics NowyObrazek(Image1->Canvas->Handle);
 NowyObrazek.SetInterpolationMode(Gdiplus::InterpolationModeBicubic);

 NowyObrazek.DrawImage(imageBMP, 0, 0, this->Width, this->Height);
}
  


Być może istnieje inny sposób, ale na razie tak to widzę. Dodam przy tym, że np. rysowanie bezpośrednio na Canvas formularza lub innego obiektu posiadającego TCanvas, nie sprawia takich problemów.

Za ten post autor Cyfrowy Baron otrzymał podziękowanie od:
Corvis
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 PLUS - zmiana rozmiaru bimapy

Nowy postprzez Corvis » wtorek, 22 czerwca 2010, 13:02

dzieki !!
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
PodziÄ™kowaÅ‚ : 80
OtrzymaÅ‚ podziÄ™kowaÅ„: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows VistaSafari


  • 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ść