private void StartThreadAndWsConnection() { if (GeneralVm.WebSocketConnector.OpenConnection(WebSocketConnection.WebSocket)) { SetConnected(true); //Gibt in LED Controller gespeicherters Licht aus. RgbData SavedRGB = new RgbData(Settings.Default.SelectedColor.R, Settings.Default.SelectedColor.G, Settings.Default.SelectedColor.B); SavedRGB.SendValues(WebSocketConnection.WebSocket); } else { MessageBox.Show("Couldn't reach Websocket-Server. Timeout or wrong port"); SetConnected(false); } }
private static void FlashWhite(WebSocket ws, RgbData rgb, int time) { for (int i = 0; i < 255; i++) { rgb.r = i; rgb.g = i; rgb.b = i; rgb.SendValues(ws); System.Threading.Thread.Sleep(time); if (i == 254) { for (int j = 255; j > 0; j--) { rgb.r = j; rgb.g = j; rgb.b = j; rgb.SendValues(ws); System.Threading.Thread.Sleep(time); } } } }
//todo favorites abspeichern lassen public LEDVM() { RgbData = new RgbData(); }
static unsafe void Hsl2Rgb360(double h, double s, double l, RgbData *prgb) { // Convert 0..360 to 0..1 double r, g, b; Hsl2Rgb(h / 360.0, s, l, &r, &g, &b); prgb->bRed = (byte)(r * 255.0); prgb->bGreen = (byte)(g * 255.0); prgb->bBlue = (byte)(b * 255.0); }
// Skips dst where src has transparent color. // Darkens dst where src has shadow color. // Translates side colors. // NOTE: Performs dst but not src clipping!!! // NOTE: Assumes src and dst BitmapData are PixelFormat.Format24bppRgb public unsafe void SuperBlt8(int xSrc, int ySrc, BitmapData bmdDst, int xDst, int yDst, int cx, int cy, bool fMapSideColors) { // If completely off dst bounds, just return. if ((xDst >= bmdDst.Width || xDst + cx < 0) || (yDst >= bmdDst.Height) || (yDst + cy < 0)) { return; } // Dst clip if (xDst + cx > bmdDst.Width) { cx = bmdDst.Width - xDst; } if (yDst + cy > bmdDst.Height) { cy = bmdDst.Height - yDst; } if (xDst < 0) { cx += xDst; xSrc -= xDst; xDst = 0; } if (yDst < 0) { cy += yDst; ySrc -= yDst; yDst = 0; } BitmapData bmdSrc = m_bm.LockBits( new Rectangle(0, 0, m_bm.Width, m_bm.Height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb); RgbData *prgbSrc = (RgbData *)((byte *)bmdSrc.Scan0 + (ySrc * bmdSrc.Stride) + (xSrc * sizeof(RgbData))); RgbData *prgbDst = (RgbData *)((byte *)bmdDst.Scan0 + (yDst * bmdDst.Stride) + (xDst * sizeof(RgbData))); while (cy-- > 0) { RgbData *prgbDstT = prgbDst; RgbData *prgbSrcT = prgbSrc; for (int x = 0; x < cx; x++) { RgbData rgbSrc = *prgbSrcT++; // Handle shadow color if (rgbSrc.bRed == 156 && rgbSrc.bGreen == 212 & rgbSrc.bBlue == 248) { prgbDstT->bRed = (byte)((prgbDstT->bRed * 60) / 100); prgbDstT->bGreen = (byte)((prgbDstT->bGreen * 60) / 100); prgbDstT->bBlue = (byte)((prgbDstT->bBlue * 60) / 100); prgbDstT++; // Handle transparent color } else if (rgbSrc.bRed == 255 && rgbSrc.bGreen == 0 && rgbSrc.bBlue == 255) { prgbDstT++; // Handle side colors } else if (fMapSideColors) { if (rgbSrc.bRed == 0 && rgbSrc.bGreen == 116 && rgbSrc.bBlue == 232) { *prgbDstT++ = argbSide[0]; } else if (rgbSrc.bRed == 0 && rgbSrc.bGreen == 96 && rgbSrc.bBlue == 196) { *prgbDstT++ = argbSide[1]; } else if (rgbSrc.bRed == 0 && rgbSrc.bGreen == 64 && rgbSrc.bBlue == 120) { *prgbDstT++ = argbSide[2]; } else if (rgbSrc.bRed == 0 && rgbSrc.bGreen == 48 && rgbSrc.bBlue == 92) { *prgbDstT++ = argbSide[3]; } else if (rgbSrc.bRed == 0 && rgbSrc.bGreen == 32 && rgbSrc.bBlue == 64) { *prgbDstT++ = argbSide[4]; } else { *prgbDstT++ = rgbSrc; } // Just copy everything else unaltered } else { *prgbDstT++ = rgbSrc; } } // Advance to next scan line prgbDst = (RgbData *)(((byte *)prgbDst) + bmdDst.Stride); prgbSrc = (RgbData *)(((byte *)prgbSrc) + bmdSrc.Stride); } m_bm.UnlockBits(bmdSrc); }