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ß?


  • Mod

    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)....


  • Mod

    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


Anmelden zum Antworten