schwarze Ränder bei Bitmap-Ausgabe
-
Hi,
modifiziere gerade ein altes VC6.0/MFC-Programm.
Ich gebe mehrere Bitmaps aus mit...dc.StretchBlt( -500, 0, Rect.right, Rect.bottom, &SpeicherDC, 0, -100, bm.bmWidth, bm.bmHeight, SRCCOPY );
dc.StretchBlt( 800, 0, 200, 100, &SpeicherDC2, 0, 0, bm2.bmWidth, bm2.bmHeight, SRCCOPY );Ich verschiebe also die auszugebende Grafik.
Dabei entstehen aber häßliche schwarze Balken an den Rändern...Wie kriege ich die Ränder blütenweiß?
-
Sicher, das bm und bm2 die gleiche Größe haben?
-
.. bm und bm2 haben nicht die gleiche Größe.
Die Grafiken sollen nicht "ebenenmäßig übereinander" gezeichnet werden, sondern nebeneinander, z.B. mittig oben bm2 (z.B. kleines Firmenlogo) und unten bm (z.B. eine Tabelle)....
-
Aber die Weiten der Quelle stimmen in jedem Fall mit der Größe der Bitmaps überein?
-
hmmm... also....
also Quelle1 ist eine Kopie des aktuellen Fensters...:
this->GetWindowsRect(rect);
in rect steht also die Größe der Quelle drin?!
in x.CreateCompatibleBitmap() benutze ich diese Größen...Jetzt übergebe ich die Bitmap an das Hauptprogramm und kopiere es in eine neue Bitmap:
sourceDC.SelectObject(&UrsprungsBitmap);
BITMAP bm;
UrsprungsBitmap.GetBitmap(&bm);
int sx = bm.bmWidth;
int sy = bm.bmHeight;
targetDC.StretchBlt(0,0,sx,sy,&sourceDC,0,0,sx,sy,SRCCOPY);Jetzt kommt das Ausgabeprogramm...:
CClientDC dc( this );
BITMAP bm;
bitmap.GetObject( sizeof( bm ), &bm );CDC SpeicherDC;
SpeicherDC.CreateCompatibleDC( &dc );
SpeicherDC.SelectObject( &bitmap );// Hier werden im aktuellen Fenster mehrere BITMAPs angezeigt
CRect Rect;
GetClientRect(&Rect);
dc.SetStretchBltMode( HALFTONE );
dc.StretchBlt( -500, 0, Rect.right, Rect.bottom, &SpeicherDC,
0, -100, bm.bmWidth, bm.bmHeight, SRCCOPY );
// Anzeigen der weiteren BITMAPs
-
Martin Richter schrieb:
Sicher, das bm und bm2 die gleiche Größe haben?
..danke, war die richtige Spur, allerdings nicht erst beim Anzeigen, sondern schon beim kopieren des gewünschten Bildschirmausschnitts muss ich das beachten, also...:
in x.CreateCompatibleBitmap()
muss ich ein kleineres Rechteck nehmen als in...
this->GetWindowsRect(rect);
... ermittelt