コード例 #1
0
ファイル: ImageGenerator.cs プロジェクト: Andrxx/ImageBuilder
        // 1 парс json в модель
        // дорисовка rect backColor
        // линии и картинки обработать.



        //в конструкторе проводим анализ переданных данных, и определяем объем отрисовки
        public static ResultModel CreateImage(ImageModel m)
        {
            Bitmap   img     = null;
            Graphics drawing = null;
            var      res     = new ResultModel();

            try
            {
                img     = new Bitmap(m.Width, m.Height);
                drawing = Graphics.FromImage(img);

                //paint the background
                if (!String.IsNullOrEmpty(m.BackColor))
                {
                    drawing.Clear(System.Drawing.ColorTranslator.FromHtml(m.BackColor));
                }

                if (m.Texts != null)
                {
                    foreach (var r in m.Texts)
                    {
                        var        color     = System.Drawing.ColorTranslator.FromHtml(r.Color);
                        Brush      textBrush = new SolidBrush(color);
                        RectangleF rectangle = new RectangleF(r.X, r.Y, r.Width, r.Height);
                        if (!string.IsNullOrEmpty(r.BackColor))
                        {
                            SolidBrush _brush = new SolidBrush(System.Drawing.ColorTranslator.FromHtml(r.BackColor));
                            drawing.FillRectangle(_brush, rectangle);
                        }
                        var fontFamily = !String.IsNullOrEmpty(r.FontFamily) ? r.FontFamily : "Arial";
                        var font       = new Font(fontFamily, (float)r.FontSize);
                        drawing.DrawString(r.Text, font, textBrush, rectangle);
                    }
                }

                if (m.Lines != null)
                {
                    foreach (var l in m.Lines)
                    {
                        var color = System.Drawing.ColorTranslator.FromHtml(l.Color);
                        Pen pen   = new Pen(color, l.Thickness);
                        drawing.DrawLine(pen, l.X1, l.Y1, l.X2, l.Y2);
                        pen.Dispose();
                    }
                }

                if (m.Pictures != null)
                {
                    foreach (var p in m.Pictures)
                    {
                        drawing.DrawImage(Image.FromFile(p.Path), new RectangleF(p.X, p.Y, p.Width, p.Height));
                    }
                }

                var path = HttpContext.Current.Server.MapPath(m.Path);
                img.Save(@"D:\\Test3.jpg");
                res = new ResultModel {
                    Msg = "", Result = true
                };
            }
            catch (Exception ex)
            {
                var msg = ex.Message;
                if (ex.InnerException != null)
                {
                    msg += " / Inner: " + ex.InnerException.Message;
                }
                res = new ResultModel {
                    Result = false, Msg = msg
                };
            }
            finally
            {
                if (img != null)
                {
                    img.Dispose();
                }
                if (drawing != null)
                {
                    drawing.Dispose();
                }
            }
            return(res);
        }
コード例 #2
0
ファイル: ImageGenerator.cs プロジェクト: Andrxx/ImageBuilder
        public static ResultModel CreateImageFromJSON(string json)
        {
            var res = new ResultModel();
            var m   = new ImageModel {
            };

            // заполняем m из json
            try
            {
                JObject jObject    = JObject.Parse(json);
                JObject imageModel = (JObject)jObject.SelectToken("$.ImageModel");
                m = JsonConvert.DeserializeObject <ImageModel>(imageModel.ToString());
                //парсим массив текста
                JArray imageTexts = (JArray)jObject.SelectToken("$.ImageText");
                m.Texts = new List <ImageText>();
                if (imageTexts != null)
                {
                    foreach (JObject jo in imageTexts)
                    {
                        ImageText imageText = JsonConvert.DeserializeObject <ImageText>(jo.ToString());
                        m.Texts.Add(imageText);
                    }
                }
                //парсим массив картинок
                JArray imagePictures = (JArray)jObject.SelectToken("$.ImagePicture");
                m.Pictures = new List <ImagePicture>();
                foreach (JObject jo in imagePictures)
                {
                    ImagePicture imagePicture = JsonConvert.DeserializeObject <ImagePicture>(jo.ToString());
                    m.Pictures.Add(imagePicture);
                }
                //парсим массив линий
                JArray imageLines = (JArray)jObject.SelectToken("$.ImageLine");
                m.Lines = new List <ImageLine>();
                foreach (JObject jo in imageLines)
                {
                    ImageLine imageLine = JsonConvert.DeserializeObject <ImageLine>(jo.ToString());
                    m.Lines.Add(imageLine);
                }

                //парсим массив объектов
                JArray imageObjects = (JArray)jObject.SelectToken("$.ImageObject");
                m.Objects = new List <ImageObject>();
                if (imageObjects != null)
                {
                    foreach (JObject jo in imageObjects)
                    {
                        ImageObject imageObject = JsonConvert.DeserializeObject <ImageObject>(jo.ToString());
                        m.Objects.Add(imageObject);
                    }
                }
            }
            catch (Exception ex)
            {
                var msg = ex.Message;
                if (ex.InnerException != null)
                {
                    msg += " / Inner: " + ex.InnerException.Message;
                }
            }

            res = CreateImage(m);
            return(res);
        }