2009-07-09 13 views
0

Ich verwende C++ GDI, StretchDIBits, um Bilder auf DC zu zeichnen.Bild schütteln, wenn StretchDIBits teilweise

Da das Originalbild groß ist und hohe Qualität benötigt wird. Ich benutze HAFTONE-Modus, um das gesamte Bild auf DC (Zoom das Bild) scheint zeitaufwendig.

So entscheide ich mich, teilweise mit StretchDIBits zu zeichnen. Aber es gibt ein ernstes Problem über StretchDIBits.

I kann nur rect in ganzen Zahlen zu einem Bereich, in ganzen Zahlen ziehen (die Breite und Höhe und linken oberen Punkt x, y alle ganzen Zahlen)

::SetStretchBltMode(hdc, HALFTONE); 
    ::StretchDIBits(hdc, 
     realDrawRect.left, 
     realDrawRect.top, 
     realDrawRect.right - realDrawRect.left, 
     realDrawRect.bottom - realDrawRect.top, 
     left, 
     top, 
     width, 
     height, 
     pImageDIB, 
     pImageHead, 
     DIB_RGB_COLORS, SRCCOPY); 

wenn das Bild 21 ist, * 21. Jetzt zeichne ich (5, 5, 7, 7) nach DC, bei (20, 20, 60,60), das nächste Mal, wenn ich zeichnen möchte (21, 20, 61, 60). Es gibt keine entsprechende Position am Originalbild. Also kann ich nur eine Approximation rect an den DC zeichnen. Jetzt passiert das Problem, das Bild zittert !!

Ich ärgere mich über dieses Problem. Wie kann ich das Schütteln vermeiden?

Antwort

0

Wenn das Schütteln durch das Runden der ganzen Zahl entsteht, versuchen Sie es auf die nächste ganze Zahl zu runden. Siehe this.

Andernfalls würde ich empfehlen, dass Sie zu GDI + wechseln, mit denen Sie viel einfacher arbeiten können. Mit GDI + können Sie eine Bitmap mit Fließkomma-Genauigkeit zeichnen. Siehe Dokumentation Graphics::DrawImage.

Ich habe in ein paar MFC Active-X-Projekten von GDI auf GDI + gewechselt und es ist überhaupt nicht schwer.

Verwandte Themen