21. juli 2004 - 18:14Der er
27 kommentarer og 1 løsning
Generering af billede ud fra et gif-billede og "tegn-selv"
Jeg skal have genereret et billede hvor jeg loader en trøje ind og tegner på lidt på den før at jeg streamer det ud til klienten.
Trøjen jeg loader ind er et gif-billede, så det der skal streames ud er selvfølgelig også af formatet gif.
Det trælse er nu, at når jeg tegner på billedet bliver det utrolig dårlig kvalitet når det streames til klienten. Hvis jeg kører samme køre, bare uden at tegne på billedet (altså at loade det og streame det til klienten), så fejler kvaliteten ikke nogen.
Er der noget specielt med opløsninger o.lign. jeg skal tage højde for?
try { imgMain = (Bitmap)Bitmap.FromFile(imagePath); } catch (FileNotFoundException) { imgMain = new Bitmap(300, 472); Graphics gr = Graphics.FromImage(imgMain); gr.DrawString("File not found", new Font(FontFamily.GenericSerif, 20, FontStyle.Bold), Brushes.Red, new Point(75, 200), StringFormat.GenericDefault); imgMain.Save(Response.OutputStream, ImageFormat.Gif); return; }
Graphics g;
try { g = Graphics.FromImage(imgMain); } catch { Bitmap tmp = new Bitmap(imgMain.Width, imgMain.Height);
g = Graphics.FromImage(tmp); g.FillRectangle(Brushes.Transparent, 0, 0, tmp.Width, tmp.Height); g.DrawImage(imgMain, new Rectangle(0, 0, tmp.Width, tmp.Height), 0, 0, tmp.Width, tmp.Height, GraphicsUnit.Pixel);
imgMain = tmp; }
//Tegn på billedet Point newPoint = new Point(p.X+(s.Width/2-25/2), p.Y+(s.Height/2-25/2)); g.DrawEllipse(Pens.Black, newPoint.X, newPoint.Y, 25, 25); g.DrawString("Her", new System.Drawing.Font(FontFamily.GenericSerif, 9, FontStyle.Bold), Brushes.Black, new Point(newPoint.X+1, newPoint.Y+5));
//Gem til klient imgMain.Save(Response.OutputStream, ImageFormat.Gif);
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
Det havde du så ikke :o) Men bortset fra det tror den måde at lave transparens holder... Jeg tror du skal lave noget tmp.MakeTransParent(enellerandenfarve);
jeg har prøvet det med MateTransparent, men det laver samme nummer... det der skulle være transparent bliver bare sort :( hvis jeg fylder med farven Cyan, bliver baggrunden rigtig nok Cyan. Når jeg så bruger tmp.MakeTransparent(Colors.Cyan), så bliver det bare sort igen :(
som du kan se, så har jeg fået kvaliteten på billedet til at være ok nu. Jeg endte valgte at gemme som png istedet (b.Save(Response.OutputStream, ImageFormat.Png);), og vupti, så kom det fineste billede frem.
Jeg håbede også at det med transarency også ville virke, men ak nej :( Har fundet en KB-article omkring at ændre på farvepaletten i et billede, men jeg må godt nok indrømme, at jeg fatter kegle af det. Jeg havde fået opfattelsen af, at det kun var med gif-billeder at der var problemer på grund af noget licens-gejl, men jeg kan altså heller ikke få det til at virke med png.
Ja det ser ikke ud til at gøre nogen forskel.... Vil du have billedet, så du kan prøve det ? (du kan både få en photoshop-fil, og den producerede gif. Jeg tror det har en noget at sige hvordan dit "grundbillede" er lavet).
for satan da... nu har jeg prøvet at smide den Quanti-et_eller_andet på, og sørme om der ikke ser underværker. Allerede da jeg kiggede på sourcen til den, kunne jeg se at han havde gang i noget med billedets palette og Alpha-channel, og det var lige præcis det at KB-articlen fra MS omhandlede. Så bevar mig vel om jeg ikke fik lidt kriller i maven og fik fat på med at teste det ;)
kan du lave en Graphics-object ud fra dit billede uden den brokker sig? Det kan jeg nemlig ikke, og jeg tror det er der den går gal. Jeg får en fejl ala "cannot create graphics-object from indexed picture", og det er derfor jeg bliver nødt til at have denne try-catch:
Graphics g;
try { g = Graphics.FromImage(imgMain); } catch { Bitmap tmp = new Bitmap(imgMain.Width, imgMain.Height); g = Graphics.FromImage(tmp); g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
Et umiddelbart workaround er self. at holde sig fra de formater når man laver billedet, men man kan jo muligvis trixe det i koden også (måske ved at oprette et nyt billede med det rigtig pixelformat, og så smide det originale billede der... Jeg har ikke prøvet det, men mon ikke det kan lade sig gøre).
ja... problemet er bare, at jeg får alle billederne direkte fra kunden, og vores grafiker har allerede tæsket 405 stykker igennem for at farvelægge dem, så jeg tror ikke lige han har lyst til at skulle igennem dem allesammen igen for at gemme dem i det rigtige pixel-format. Næsten gang de skal have en tur, og han er blevet lidt bedre til scripting i PhotoShop, bliver de nok konverteret til .png ;)
jeps, så er jeg tilbage på pinden... du må meget undskylde ventetiden, men der har været en del at se til i forbindelse med at jeg skal flytte til ålborg for at læse Datalogi.
ja, dine links viste sig at være helt uundverlige, og nu virker det bare som det skal :) tak for det... så hvis du lige smider et svar :)
I lige måde :) nu hvor tingene er ved at falde lidt til ro kunne det være jeg kom lidt mere på eksperten igen ;)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.