Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

BCB - Slikanje dijela forme

[es] :: C/C++ programiranje :: BCB - Slikanje dijela forme

[ Pregleda: 2150 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

itf
Zagreb

Član broj: 59794
Poruke: 993
*.dsl.iskon.hr.



+9 Profil

icon BCB - Slikanje dijela forme23.05.2007. u 09:34 - pre 205 meseci
Recimo da želim "uslikati" dio forme. Primjerice, dio definiran s 4 koordinate (x1, x2, y1, y2) i da to stavim u radnu memoriju (copy). Ideje? Hvala
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.tekostolac.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: BCB - Slikanje dijela forme23.05.2007. u 10:30 - pre 205 meseci
Otprilike ovako nekako /netestirano/:

GetDC() - Prozor bez naslovne linije
GetWindowDC - Prozor sa naslovnom linijom
GetDC(0) - Desktop
GetDC( Nesto ) - Handle na prozor


Code:

// bool All, da li sa naslovnom linijom ili bez
// AHandle, da li prozor ili screen
// takodje proveri da li treba provera ako je All == true i AHandle == 0, ne znam sta bi se dogodilo
Graphics::TBitmap* ScreenCapture( bool All, HDC AHandle, int ALeft, int ATop, int AWidth, int AHeight )
{
   TRect r = Rect(ALeft, ATop, AWidth, AHeight);

   Graphics::TBitmap *bmp = new Graphics::TBitmap();

   bmp->Width = r.Width();
   bmp->Height = r.Height();
   bmp->PixelFormat = pf32bit;

   HDC hdc;

   if ( All )
      hdc = ::GetWindowDC( AHandle );
   else
      hdc = ::GetDC( AHandle );
      
   ::BitBlt( bmp->Canvas->Handle, 0, 0, bmp->Width, bmp->Height, hdc, ALeft, ATop, SRCCOPY);
   ::ReleaseDC( AHandle, hdc );

   return bmp;
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
   Image1->Picture->Bitmap->Assign( ScreenCapture( true, Form1->Handle, 10, 10, 100, 100 ) );
}


... a moze i sa CopyRect(), ako uspem da odradim, stavicu ovde kao EDIT:
Code:

Graphics::TBitmap* ScreenCapture2( bool All, HDC AHandle, int ALeft, int ATop, int AWidth, int AHeight )
{
   TRect r1 = Rect( ALeft, ATop, AWidth, AHeight );

   Graphics::TBitmap *bmp = new Graphics::TBitmap();
   bmp->Width = r1.Width();
   bmp->Height = r1.Height();
   bmp->PixelFormat = pf32bit;

   TCanvas *ScreenCanvas = new TCanvas();

   try
   {
      if ( All )
         ScreenCanvas->Handle = ::GetWindowDC( AHandle );
      else
         ScreenCanvas->Handle = ::GetDC( AHandle );

       try
       {
           TRect r2 = Rect( 0, 0, bmp->Width, bmp->Height );
           bmp->Canvas->CopyRect( r2, ScreenCanvas, r1 );
       }
       __finally
       {
           ::ReleaseDC( AHandle, ScreenCanvas->Handle );
       }
   }
   __finally
   {
       delete ScreenCanvas;
   }
   return bmp;
}

[Ovu poruku je menjao X Files dana 23.05.2007. u 11:43 GMT+1]


[Ovu poruku je menjao X Files dana 23.05.2007. u 12:00 GMT+1]
 
Odgovor na temu

itf
Zagreb

Član broj: 59794
Poruke: 993
*.dsl.iskon.hr.



+9 Profil

icon Re: BCB - Slikanje dijela forme23.05.2007. u 10:58 - pre 205 meseci
Radi, i zahvaljujem ;)

Iako, sjetimo se da
Citat:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Image1->Picture->Bitmap->Assign( ScreenCapture( true, Form1->Handle, 10, 10, 100, 100 ) );
}


može izazvati access violation u ovom slučaju :))) pozdrav
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.tekostolac.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: BCB - Slikanje dijela forme23.05.2007. u 11:02 - pre 205 meseci
Citat:

može izazvati access violation u ovom slučaju :))) pozdrav

Jakako :)

Proveri i ReleaseDC() argumente u MSDN dokumentaciji, da ne dodje do nekog issue-a (nisam bio dobro postavio u startu)

Pozdrav
 
Odgovor na temu

vlaiv
Vladimir Vlaisavljevic
Novi Sad

Član broj: 15993
Poruke: 352
212.200.249.*



+1 Profil

icon Re: BCB - Slikanje dijela forme24.05.2007. u 13:31 - pre 205 meseci
U krajnjoj liniji, mozes i koristiti metodu PaintTo, TWinControl-a, da iscrtas prozor na canvas bitmape ...

 
Odgovor na temu

[es] :: C/C++ programiranje :: BCB - Slikanje dijela forme

[ Pregleda: 2150 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.