webForumDet fria alternativet

Generera ut en bild med text men texten blir suddig?

.NET

2 svar · 400 visningar · startad av Lukaspojken

Medlem sedan maj 20011 312 inlägg
Frågan#1

Nedanstående kod använder jag för att generera ut en bild med bokstaven I. Problemet som jag får är att texten blir suddig och bakgrunden innehåller en mängd pixlar i gråton. Hur får jag till så att texten blir skarp samt att bakgrunden inte har några gråa pixlar? Bilden jag testar med är en bild med helt vit bakgrund. Storleken på bilden är 16x16.

using System;
using System.Drawing;
using System.Drawing.Drawing2D;

public partial class Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        System.Drawing.Image ImageMap = System.Drawing.Image.FromFile(Server.MapPath("WhiteBox.jpg"));
        Graphics G = Graphics.FromImage(ImageMap);

        Rectangle Rect = new Rectangle(1, 1, 14, 14);
        Font TextStyle = new Font("Verdana", 11F, FontStyle.Regular);

        StringFormat Format = new StringFormat();
        Format.Alignment = StringAlignment.Center;
        Format.LineAlignment = StringAlignment.Center;

        GraphicsPath path = new GraphicsPath();
        path.AddString("I", TextStyle.FontFamily, (int)TextStyle.Style, TextStyle.Size, Rect, Format);

        SolidBrush fgBrush = new SolidBrush(Color.Black);
        G.FillPath(fgBrush, path);

        ImageMap.Save(Server.MapPath("WhiteBoxWithChar.jpg"));

        TextStyle.Dispose();
        G.Dispose();
        ImageMap.Dispose();
    }
}
Medlem sedan sep. 2005673 inlägg
#2

Har du provat att minska kompressionen på jpg-bilden?

        G.CompositingQuality = CompositingQuality.HighQuality;
        G.SmoothingMode = SmoothingMode.AntiAlias;
        G.InterpolationMode = InterpolationMode.HighQualityBicubic;
        G.PixelOffsetMode = PixelOffsetMode.HighQuality;

Måste det vara en jpg? Blir nog bättre om du sparar det som en gif, det formatet hanterar ju bilder med få färger/enfärgade ytor mycket bättre.

Medlem sedan maj 20011 312 inlägg
#3

Jag fick bort de gråtonade pixlarna i bakgrunden när jag körde gif istället för jpg. Det är en sak kvar och det är att bokstaven är en aning tonad. Kan man få bort det?

Här är den kod jag hittills kört. Jag var tvungen att streama bilden för annars fick jag detta "A Graphics object cannot be created from an image that has an indexed pixel format." Men det är inga problem.

protected void Page_Load(object sender, EventArgs e)
    {
        Bitmap ImageMap;

        using (Stream stream = File.Open(Server.MapPath("WhiteBox.gif"), FileMode.Open))
        {
            ImageMap = new Bitmap(new Bitmap(Image.FromStream(stream)));
        }

        Graphics G = Graphics.FromImage(ImageMap);

        Rectangle Rect = new Rectangle(1, 1, 14, 14);
        Font TextStyle = new Font("Verdana", 11F, FontStyle.Regular);

        StringFormat Format = new StringFormat();
        Format.Alignment = StringAlignment.Center;
        Format.LineAlignment = StringAlignment.Center;

        GraphicsPath path = new GraphicsPath();
        path.AddString("I", TextStyle.FontFamily, (int)TextStyle.Style, TextStyle.Size, Rect, Format);

        SolidBrush fgBrush = new SolidBrush(Color.Black);
        G.FillPath(fgBrush, path);

        G.CompositingQuality = CompositingQuality.HighQuality;
        G.SmoothingMode = SmoothingMode.AntiAlias;
        G.InterpolationMode = InterpolationMode.HighQualityBicubic;
        G.PixelOffsetMode = PixelOffsetMode.HighQuality;

        ImageMap.Save(Server.MapPath("WhiteBoxWithChar.gif"));

        TextStyle.Dispose();
        G.Dispose();
        ImageMap.Dispose();
    }
275 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)
135 ms — ändringar (db)