示例#1
0
        private void ResetPreview()
        {
            // chargement de la miniature : on doit parcourir les 2 databases et afficher les perso checked
            Bitmap temp_image = new Bitmap(Cuts.GetAt(selectedRow).Thumbnail.Background.OriginalString);

            int      width    = temp_image.Width;
            int      height   = temp_image.Height;
            float    sizeChar = width / 38.4F;
            Graphics g        = Graphics.FromImage(temp_image);

            g.InterpolationMode  = InterpolationMode.High;
            g.SmoothingMode      = SmoothingMode.HighQuality;
            g.SmoothingMode      = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
            g.CompositingQuality = CompositingQuality.HighQuality;

            //create the outline of the text



            System.Drawing.FontFamily f = new System.Drawing.FontFamily("Arial");
            SolidBrush drawBrush        = new SolidBrush(System.Drawing.Color.White);

            System.Drawing.Pen pen       = new System.Drawing.Pen(System.Drawing.Color.Black, 5);
            PointF             drawPoint = new PointF(width / 4 - (TeamOne.TeamName.Length * sizeChar) / 2, height * 3 / 4);
            GraphicsPath       p         = new GraphicsPath();

            //write team name 1

            p.AddString(
                TeamOne.TeamName,       // text to draw
                f,                      // or any other font family
                (int)System.Drawing.FontStyle.Regular,
                g.DpiY * sizeChar / 72, // em size
                drawPoint,              // location where to draw text
                new StringFormat());    // set options here (e.g. center alignment)
            g.DrawPath(pen, p);
            g.FillPath(drawBrush, p);


            //write team name 2
            drawPoint.X = temp_image.Width - width / 4 - (TeamTwo.TeamName.Length * sizeChar) / 2;
            GraphicsPath p2 = new GraphicsPath();

            //write team name 1
            p2.AddString(
                TeamTwo.TeamName,       // text to draw
                f,                      // or any other font family
                (int)System.Drawing.FontStyle.Regular,
                g.DpiY * sizeChar / 72, // em size
                drawPoint,              // location where to draw text
                new StringFormat());    // set options here (e.g. center alignment)
            g.DrawPath(pen, p2);
            g.FillPath(drawBrush, p2);

            //multiplicateur de position
            List <int> posTab = new List <int>();

            // on vérifie une fois le tableau pour savoir combien de cases sont cochées
            for (int i = 0; i < DbCharOne.Count; i++)
            {
                if (DbCharOne[i].IsPlayed)
                {
                    posTab.Add(i);

                    Debug.Write(Cuts.GetAt(selectedRow).Thumbnail.TeamOne.DataBase[i].Name + ": ");
                    Debug.WriteLine(Cuts.GetAt(selectedRow).Thumbnail.TeamOne.DataBase[i].IsPlayed);
                }
            }
            // on parcours la liste des cases cochées
            for (int i = 0; i < posTab.Count; i++)
            {
                Character temp_char = DbCharOne[posTab[i]];
                int       nb_char   = posTab.Count;
                //afficher la miniature a gauche
                Bitmap char_picture = new Bitmap(temp_char.PictureUri.OriginalString);


                //mise a echelle
                int    newWidth     = (int)((char_picture.Width / (nb_char + 1)) * ((float)width / 1920));
                int    newHeight    = (int)((char_picture.Height / (nb_char + 1)) * ((float)width / 1920));
                Bitmap Smaller_char = new Bitmap(char_picture, new System.Drawing.Size(newWidth, newHeight));
                //Smaller_char.MakeTransparent();


                Rectangle rect = new Rectangle(width * (i + 1) / (2 + 2 * nb_char) - Smaller_char.Width / 2, height / 2 - (Smaller_char.Height) * 2 / 3, Smaller_char.Width, Smaller_char.Height);
                //image.WritePixels(rect, Data.Scan0, Data.Stride,100000);
                g.DrawImage(Smaller_char, rect);
            }

            posTab.Clear();

            // on vérifie une fois le tableau pour savoir combien de cases sont cochées
            for (int i = 0; i < DbCharTwo.Count; i++)
            {
                if (DbCharTwo[i].IsPlayed)
                {
                    posTab.Add(i);
                }
            }
            // on parcours la liste des cases cochées
            for (int i = 0; i < posTab.Count; i++)
            {
                Character temp_char = DbCharOne[posTab[i]];
                int       nb_char   = posTab.Count;
                //afficher la miniature a gauche

                Bitmap char_picture = new Bitmap(temp_char.PictureUri.OriginalString);
                int    newWidth     = (int)((char_picture.Width / (nb_char + 1)) * ((float)width / 1920));
                int    newHeight    = (int)((char_picture.Height / (nb_char + 1)) * ((float)width / 1920));
                Bitmap Smaller_char = new Bitmap(char_picture, new System.Drawing.Size(newWidth, newHeight));
                //Smaller_char.MakeTransparent();

                Smaller_char.RotateFlip(RotateFlipType.RotateNoneFlipX);


                Rectangle rect = new Rectangle(width - (width * (i + 1) / (2 + 2 * nb_char)) - Smaller_char.Width / 2, height / 2 - (Smaller_char.Height) * 2 / 3, Smaller_char.Width, Smaller_char.Height);
                //image.WritePixels(rect, Data.Scan0, Data.Stride,100000);
                g.DrawImage(Smaller_char, rect);
            }
            //change pas grand chose
            g.Dispose();


            IntPtr hBitmap = temp_image.GetHbitmap();

            try
            {
                var img_src = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
                    hBitmap, IntPtr.Zero, Int32Rect.Empty,
                    System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
                WriteableBitmap wb   = new WriteableBitmap(img_src);
                var             imgs = new ImageSend(wb);
                Messenger.Default.Send(imgs);
            }
            finally
            {
                DeleteObject(hBitmap);
            }



            //change pas grand chose
            temp_image.Dispose();
        }
        private void ResetPreview(ImageSend imgs)
        {
            image = imgs.image;

            Preview.Source = image;
        }