/// <summary> /// /// </summary> /// <param name="image"></param> /// <param name="swap"></param> /// <returns></returns> internal Image Tawawa(Image image, bool dark = true, bool swap = false) { Bitmap src = AddinUtils.CloneImage(image) as Bitmap; if (image.PixelFormat != PixelFormat.Format32bppArgb) { src = Accord.Imaging.Image.Clone(image as Bitmap, PixelFormat.Format32bppArgb); } Accord.Imaging.UnmanagedImage dst = Accord.Imaging.UnmanagedImage.FromManagedImage(src); if (!dark && !swap) { #region Tawawa Blue for (int h = 0; h < dst.Height; h++) { for (int w = 0; w < dst.Width; w++) { Color pcSrc = dst.GetPixel(w, h); double y = 0; y = pcSrc.R * 0.25 + pcSrc.G * 0.65 + pcSrc.B * 0.25; y = y / 255 * 200 + 55; if (y > 255) { y = 255; } int iy = (int)Math.Round(y); int r = (int)Math.Round(iy > 85 ? ((y - 85) / 255 * 340) : 0); int g = iy; int b = iy > 135 ? 255 : g + 120; Color pcDst = Color.FromArgb(pcSrc.A, r, g, b); dst.SetPixel(w, h, pcDst); } } #endregion } else if (dark && !swap) { #region Tawawa Dark Blue for (int h = 0; h < dst.Height; h++) { for (int w = 0; w < dst.Width; w++) { Color pcSrc = dst.GetPixel(w, h); double y = 0; y = pcSrc.R * 0.25 + pcSrc.G * 0.60 + pcSrc.B * 0.15; y = y / 255 * 200 + 55; if (y > 255) { y = 255; } int iy = (int)Math.Round(y); int r = (int)Math.Round(iy > 85 ? ((y - 85) / 255 * 340) : 0); int g = iy; int b = iy > 135 ? 255 : g + 120; Color pcDst = Color.FromArgb(pcSrc.A, r, g, b); dst.SetPixel(w, h, pcDst); } } #endregion } else if (!dark && swap) { #region Tawawa Orange for (int h = 0; h < dst.Height; h++) { for (int w = 0; w < dst.Width; w++) { Color pcSrc = dst.GetPixel(w, h); double y = 0; y = pcSrc.R * 0.33 + pcSrc.G * 0.55 + pcSrc.B * 0.20; y = y / 255 * 200 + 55; if (y > 255) { y = 255; } int iy = (int)Math.Round(y); int r = (int)Math.Round(iy > 85 ? ((y - 85) / 255 * 340) : 0); int g = iy; int b = iy > 135 ? 255 : g + 120; Color pcDst = Color.FromArgb(pcSrc.A, b, g, r); dst.SetPixel(w, h, pcDst); } } #endregion } else { #region Tawawa Dark Orange for (int h = 0; h < dst.Height; h++) { for (int w = 0; w < dst.Width; w++) { Color pcSrc = dst.GetPixel(w, h); double y = 0; y = pcSrc.R * 0.3 + pcSrc.G * 0.59 + pcSrc.B * 0.11; y = y / 255 * 200 + 55; if (y > 255) { y = 255; } int iy = (int)Math.Round(y); int r = (int)Math.Round(iy > 85 ? ((y - 85) / 255 * 340) : 0); int g = iy; int b = iy > 135 ? 255 : g + 120; Color pcDst = Color.FromArgb(pcSrc.A, b, g, r); dst.SetPixel(w, h, pcDst); } } #endregion } Bitmap dstBmp = dst.ToManagedImage(); //var filter = new Accord.Imaging.Filters.BrightnessCorrection(10); //filter.ApplyInPlace( dstBmp ); AddinUtils.CloneExif(image, dstBmp); src.Dispose(); dst.Dispose(); return(dstBmp); }