public void ArrayToList() { PixelList.Clear(); foreach (CustomPixel p in Pixel2DArray) { PixelList.Add(p); } }
/// <summary> /// Constructeur /// </summary> /// public LedMatrixContext() { if (Environment.MachineName != "PC-BENOIT") { PixelStrip = new DotStarStrip(NbrLed); } Pixels = new PixelList(Largeur, Hauteur); }
/// <summary> /// SetÞixelFrame /// </summary> /// <param name="frame"></param> /// <param name="pixels"></param> public void SetÞixelFrame(int frame, PixelList pixels, int slide, bool fadeOut) { using (Image image = Image.FromFile(FileName)) { List <byte[]> frames = new List <byte[]>(); if (FrameCount > 1) { foreach (Bitmap bitmap in ParseFrames((Bitmap)image)) { frames.Add(BitmapToByte(bitmap)); } } else { frames.Add(BitmapToByte((Bitmap)image)); } Couleurs = new CouleurList(frames); } int heightOffset = (pixels.Hauteur - Height) / 2; int widthOffset = (pixels.Largeur - Width) / 2; int newLine = pixels.Largeur - Width; int pixelOffset = heightOffset * pixels.Largeur + widthOffset + 1; int frameCourant = frame % FrameCount; foreach (Couleur couleur in Couleurs.Where(c => c.FrameCompteur == frameCourant)) { if (fadeOut) { if (couleur.Position % Width >= slide) // Pour faire l'effet du slide vers la gauche { if (pixels.Find(p => p.Position == couleur.Position + pixelOffset - slide) is Pixel pixel) { pixel.Couleur = couleur; } } } else { if (couleur.Position % Width < Width - slide) // Pour faire l'effet du slide de la droite { if (pixels.Find(p => p.Position == couleur.Position + pixelOffset + slide) is Pixel pixel) { pixel.Couleur = couleur; } } } //Changement de ligne if (couleur.Position % Width == Width - 1) { pixelOffset += newLine; } } }
/// <summary> /// Constructeur /// </summary> public LedMatrixContext() { PixelStrip = new DotStarStrip(NbrLed); Pixels = new PixelList(Largeur, Hauteur); Util.SetAnimation(); Util.SetMeteoImg(); Util.UpdateMeteo(); //Animations = new AnimationList("Images"); //MeteoImgs = new AnimationList("MeteoImg"); }
/// <summary> /// SetÞixelFrame /// </summary> /// <param name="frame"></param> /// <param name="pixels"></param> public void SetÞixelFrame(int frame, PixelList pixels, int slide, bool fadeOut = false) { int heightOffset = (pixels.Hauteur - Height) / 2; int widthOffset = (pixels.Largeur - Width) / 2; int newLine = pixels.Largeur - Width; int pixelOffset = heightOffset * pixels.Largeur + widthOffset + 1; int frameCourant = frame % FrameCount; foreach (Couleur couleur in Couleurs.Where(c => c.FrameCompteur == frameCourant)) { if (fadeOut) { if (couleur.Position % Width >= slide) // Pour faire l'effet du slide vers la gauche { if (pixels.SingleOrDefault(p => p.Position == couleur.Position + pixelOffset - slide) is Pixel pixel) { pixel.Couleur = couleur.Color; } } } else { if (couleur.Position % Width < Width - slide) // Pour faire l'effet du slide de la droite { if (pixels.SingleOrDefault(p => p.Position == couleur.Position + pixelOffset + slide) is Pixel pixel) { pixel.Couleur = couleur.Color; } } } //Changement de ligne if (couleur.Position % Width == Width - 1) { pixelOffset += newLine; } } }
/// <summary> /// TetrisAnimation /// </summary> private static void TetrisAnimation(PixelList pixels, TetrisPieceList tetrisPieces) { pixels.BackGround(1); if (tetrisPieces.Any()) { for (int anime = 0; anime < 10; anime++) { foreach (TetrisPiece pieceTombe in tetrisPieces) { if (pixels.GetCoordonnee(pieceTombe.X, pieceTombe.Y) is Pixel pixel) { if (anime % 2 == 0) { foreach (TetrisPiece piece in tetrisPieces) { piece.Couleur = Couleur.Noir; } } else { foreach (TetrisPiece piece in tetrisPieces) { piece.Couleur = piece.TmpCouleur; } } pixel.SetColor(pieceTombe.Couleur); } } Util.SetLeds(); using ManualResetEventSlim waitHandle = new ManualResetEventSlim(false); waitHandle.Wait(TimeSpan.FromMilliseconds(40)); } } }