Frage

Ich entwickle eine Anwendung WPF Inhalte dynamisch zu machen, einschließlich Text und Bilder von WPF in jpg-Dateien. Ich bin derzeit die RenderTargetBitmap Klasse, um die Arbeit zu erledigen. Alles funktioniert wie erwartet, aber die Qualität der erbrachten Schriftart ist schrecklich. Ich verstehe, dass der RenderTargetBitmap nicht die Cleartype nicht verwendet, sondern ein Grau Anti-Aliasing, die Art mit kleinen Schriftart blury. Aber ich bin mit großen Schriften, die größer als 30 Punkte, und die Ergebnisse sind völlig inakzeptabel. Gibt es irgendeine Art von Abhilfe für dieses Problem?

[Update]

Der Kodex I bin mit unten aufgeführt. Wie erwartet es auf jedem Rendering-Ereignis des CompositionTarget aufgerufen wird.

void CompositionTarget_Rendering(object sender, EventArgs e)
        {
            prefix = "";
            if (counter < 10)
            {
                prefix = "000";
            }
            else if (counter < 100)
            {
                prefix = "00";
            }
            else if (counter < 1000)
            {
                prefix = "0";
            }

            Size size = new Size(MainCanvas.Width, MainCanvas.Height);
            MainCanvas.Measure(size);
            MainCanvas.Arrange(new Rect(size));


            RenderTargetBitmap bmp = new RenderTargetBitmap(imgWidth, imgHeight, 96d, 96d, PixelFormats.Default);
            bmp.Render(MainCanvas);

            JpegBitmapEncoder encoder = new JpegBitmapEncoder();
            encoder.QualityLevel = 90;
            encoder.Frames.Add(BitmapFrame.Create(bmp));
            string file = basePath + prefix + counter.ToString() + "_testpic.jpg";
            using (Stream stm = File.Create(file))
            {
                encoder.Save(stm);
            }
            counter++;
        }

Hier sind einige Beispiele für die resultierenden Bilder: alt text http://www.randomnoise.org/temp/testpic_v1.jpg alt text http://www.randomnoise.org/temp/testpic_v2.jpg

Vielen Dank im Voraus.

War es hilfreich?

Lösung 2

Ok, ich fand schließlich eine Lösung. Gustavo Sie waren auf dem richtigen Weg. Das Problem war, dass der Hauptbehälter, den ich versuche, als Bitmap zu machen, wurde von dem Mutterbehälter verzerrt wird. Die Lösung war den Hauptbehälter auf eine Leinwand hinzuzufügen, das nicht eine Layout-Engine hat, dass seine Kinder verzerrt. Ich brauche noch etwas mehr experimentieren zu tun, aber es sieht sehr vielversprechend aus. Offenbar Rendertargetbitmap nicht wie verzerrte Schriftarten überhaupt.

Andere Tipps

Versuchen Sie folgendes:

int height = (int)border.ActualHeight;
int width = (int)border.ActualWidth;
RenderTargetBitmap bmp = new RenderTargetBitmap(width, height, 96, 96, PixelFormats.Pbgra32);
bmp.Render(border);

Grenze zu sein, was Sie versuchen, als Bitmap zu speichern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top