webForumDet fria alternativet

Bredd på bild

2 svar · 234 visningar · startad av DavidB

DavidBMedlem sedan jan. 20001 372 inlägg
#1

Tjena

Jag håller på att skapa en bild med en text och jag använder då
följande kod:

string text = "blabla text";

PrivateFontCollection pfc = new PrivateFontCollection();
pfc.AddFontFile(Server.MapPath("/fonts/circulat.ttf"));
Font regFont = new Font(pfc.Families[0],16,FontStyle.Regular,GraphicsUnit.Pixel);

SolidBrush sb = new SolidBrush(Color.Black);
PointF pf = new PointF(0,0);

Bitmap pic = new Bitmap(200,regFont.Height);
Graphics g = Graphics.FromImage(pic);
g.Clear(ColorTranslator.FromHtml("#FFFFFF"));
g.TextRenderingHint = TextRenderingHint.AntiAlias;
g.SmoothingMode = SmoothingMode.AntiAlias;
g.DrawString(text,regFont,sb,pf);

Response.ContentType = "image/jpeg";
pic.Save(Response.OutputStream, ImageFormat.Jpeg);
pic.Dispose();

Nu är det så att jag på nåt sätt vill räkna fram hur stor
bildens bredd och höjd kommer vara så jag slipper skapa en bild
som är förstor eller förliten så att inte texten visas, texten
kommer ju variera beroende på olika omständigheter.

Få ut höjden har jag löst genom regFont.Height, så det
är bara bredden kvar. Måste jag gå in manuellt och mäta bredden
på respektive bokstav och lagra detta för att sedan dela upp
strängen och addera bredden på de bokstäver som finns? Detta
känns ganska omständigt så jag undrar helt enkelt om det finns
någon bättre metod?

Sen undrar jag även om det går att få bakgrunden på bilden
transparent har försökt med

g.Clear(Color.Transparent);

och ändrat formatet från jpeg till gif men hela bilden har bara
blivit svart.

renholmMedlem sedan apr. 20012 266 inlägg
#2

Hoppas följande kan hjälpa dig med första problemet
http://www.dotnet247.com/247reference/msgs/39/198205.aspx

Det andra vet jag tyvärr inte...

DavidBMedlem sedan jan. 20001 372 inlägg
#3

tackar, det var precis vad jag letade efter men nu har det uppsått ett annat problem.

Har nu följande kod:

Bitmap tmpPic = new Bitmap(1,1);
Graphics e = Graphics.FromImage(tmpPic);
SizeF PicSize = e.MeasureString(text, regFont);
Bitmap pic = new Bitmap(Convert.ToInt32(PicSize.Width),Convert.ToInt32(PicSize.Height));
Graphics g = Graphics.FromImage(pic);

ovanstående kod fungerar helt utan problem. dock så känns det lite osmidigt att skapa två Bitmap och två Graphics objekt för att få det att fungera.

Dessa tre rader räcker ju för att få fram alla värden men de går inte att använda på detta sätt eftersom den första raden behöver objektet som skapas på 3:e raden för att köras vilket i sin tur behöver 2:a raden för att köras vilken i sin tur kräver behöver första raden för att köras. Finns det någon annan lösning än den ovanför och i så fall hur skulle den se ut?

SizeF PicSize = g.MeasureString(text, regFont);
Bitmap pic = new Bitmap(Convert.ToInt32(PicSize.Width),Convert.ToInt32(PicSize.Height));
Graphics g = Graphics.FromImage(pic);
131 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)