Einzelnen Beitrag anzeigen

hboy

Registriert seit: 16. Jan 2004
364 Beiträge
 
#1

Subpixel/Alignmentfehler von StretchBlt?

  Alt 20. Jan 2011, 00:52
Seit ich halftoning bei StretchBlt für mich entdeckt habe, beschäftigt mich das im angehängten Bild gezeigte verhalten. Beim Hochskalieren (hier 600%) neigt die Funktion dazu, sich leicht zu vertun, was dazu führt, dass die Ausgabe nicht am grün dargestellten Zielrechteck (darübergezeichnet zum debugging) endet sondern etwas davor aussetzt. Dennoch werden dann schwarze Linien oder Rahmen gezeichnet. Dies tritt bei allen Bildgrößen mehr oder weniger unberechenbar auf, bei manchen Zoomstufen funktioniert die Routine hingegen wieder akzeptabel.

Bei sehr großen Zoomstufen scheint StretchBlt der Meinung zu sein, dass die Pixelung wohl so gewollt sei und die Interpolation wird abgeschaltet. Das führt dazu, dass - je nach Detailgrad des Bildes - mit ODER ohne Glättung gezeichnet wird.

Delphi-Quellcode:
        CreateHalftonePalette(buffer.Canvas.Handle);
        SetStretchBltMode(buffer.canvas.Handle, STRETCH_HALFTONE);
        SetBrushOrgEx(buffer.Canvas.Handle,0,0,nil); // avoid brush misalignment
mit GetStretchBltMode(dest.Canvas.Handle) = STRETCH_HALFTONE überprüfe ich vor dem Zeichnen nochmals, ob alles geklappt hat, aber der Zeichenmodus ist mehr oder weniger willkürlich nicht korrekt.

Habe ich etwas übersehen? Danke schonmal für die Hilfe!



ps. http://connect.microsoft.com/VisualS...ails-smoothing Mist!
pps. http://support.microsoft.com/kb/269585/en-us?fr=1 na danke. Okay, als nächstes werde ich wohl versuchen, das Bild in Kacheln zu segmentieren und stückweise zu rendern. Qualität aus dem Hause Microsoft sei dank.
Miniaturansicht angehängter Grafiken
stretchblt_subpixel.png  
Power is nothing without TControl

Geändert von hboy (20. Jan 2011 um 01:10 Uhr)
  Mit Zitat antworten Zitat