public async Task TestTConvertType() { TRowGenerator <ConvertSchemaFrom> gen = ctx.GetService <TRowGenerator <ConvertSchemaFrom> >(); Assert.IsNotNull(gen); RegisterComponentForEvents(gen); gen.Options = new RowGeneratorOptions <ConvertSchemaFrom>() .GeneratorFor(e => e.Index, e => ETLString.GetIntRandom(1, 100)) .GeneratorFor(e => e.AProperty, e => ETLString.GetAsciiRandomString(20)); gen.AddToJob(job); TLogRow <ConvertSchemaFrom> log1 = ctx.GetService <TLogRow <ConvertSchemaFrom> >(); Assert.IsNotNull(log1); RegisterComponentForEvents(log1); log1.AddInput(job, gen.OnOutput); log1.Mode = TLogRowMode.Table; log1.ShowItemNumber = true; TConvertType <ConvertSchemaFrom, ConvertSchemaTo> ct = ctx.GetService <TConvertType <ConvertSchemaFrom, ConvertSchemaTo> >(); Assert.IsNotNull(ct); RegisterComponentForEvents(ct); ct.AddInput(job, gen.OnOutput); ct.MapperConfiguation(s => s.ForMember(e => e.AnotherProperty, opt => opt.MapFrom(src => $"{src.AProperty}-{src.Index}"))); TLogRow <ConvertSchemaTo> log = ctx.GetService <TLogRow <ConvertSchemaTo> >(); Assert.IsNotNull(log); RegisterComponentForEvents(log); log.AddInput(job, ct.OnOutput); log.Mode = TLogRowMode.Table; log.ShowItemNumber = true; await Start().ContinueWith(t => Thread.Sleep(1000)); }
public void TestServicesName() { var log1 = ctx.GetService <TLogRow <WeatherSchema> >(); Assert.IsNotNull(log1); Assert.AreEqual(log1.Name, "TLogRow-1"); var log2 = ctx.GetService <TLogRow <WeatherSchema> >(); Assert.IsNotNull(log2); Assert.AreEqual(log2.Name, "TLogRow-2"); TConvertType <ConvertSchemaFrom, ConvertSchemaTo> ct = ctx.GetService <TConvertType <ConvertSchemaFrom, ConvertSchemaTo> >(); Assert.IsNotNull(ct); Assert.AreEqual(ct.Name, "TConvertType-1"); }
/// <summary> /// 图片转换 /// </summary> /// <param name="image">原图</param> /// <param name="type">转换类型</param> /// <param name="param">参数值</param> /// <returns>返回新图片</returns> public static Bitmap ConvertTo(Image image, TConvertType type, object param = null) { if (image == null) { throw new ArgumentException("Image Argument can not be empty."); } switch (type) { case TConvertType.LeftRight: return(RevPicLR(image)); case TConvertType.UpDown: return(RevPicUD(image)); } //生成图 var bitmap = new Bitmap(image); var width = bitmap.Width; var height = bitmap.Height; var rect = new Rectangle(0, 0, width, height); //用可读写的方式锁定全部位图像素 var bmpData = bitmap.LockBits(rect, ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb); byte gray; var val = param.ToInt(); unsafe //启用不安全模式 { var p = (byte *)bmpData.Scan0; //获取首地址 var offset = bmpData.Stride - width * 4; switch (type) { case TConvertType.Relief: case TConvertType.Brightness: width -= 1; height -= 1; break; } //二维图像循环 for (var y = 0; y < height; y++) { for (var x = 0; x < width; x++) { switch (type) { case TConvertType.Relief: p[0] = CheckPixel(Math.Abs(p[0] - p[(width + 2) * 4] + 128)); p[1] = CheckPixel(Math.Abs(p[1] - p[(width + 2) * 4 + 1] + 128)); p[2] = CheckPixel(Math.Abs(p[2] - p[(width + 2) * 4 + 2] + 128)); break; case TConvertType.Brightness: p[0] = CheckPixel(p[0] + val); p[1] = CheckPixel(p[1] + val); p[2] = CheckPixel(p[2] + val); break; case TConvertType.Anti: p[0] = (byte)(255 - p[0]); p[1] = (byte)(255 - p[1]); p[2] = (byte)(255 - p[2]); break; case TConvertType.Color: p[2] = (byte)(255 - p[0]); break; case TConvertType.BlackWhite: gray = (byte)((p[0] + p[1] + p[2]) / 3.0f); p[2] = p[1] = p[0] = gray; break; case TConvertType.Grayscale: gray = (byte)((p[0] * 0.114f + p[1] * 0.587f + p[2] * 0.299f) / 3.0f); p[2] = p[1] = p[0] = gray; break; case TConvertType.Trans: if (p[3] > val) { p[3] = (byte)val; } break; case TConvertType.Replace: if (p[3] > 0) { p[2] = p[1] = p[0] = (byte)val; } break; case TConvertType.HSL: if (p[3] > 0) { if (lastColor.R != p[0] || lastColor.G != p[1] || lastColor.B != p[2]) { lastColor = Color.FromArgb(p[2], p[1], p[0]); var result = RGBToHSL(p[2] / 255.0, p[1] / 255.0, p[0] / 255.0); var temp = HSLToRGB(result[0], result[1], result[2] + val * 1.0 / 240); lastHsl[2] = temp.R; lastHsl[1] = temp.G; lastHsl[0] = temp.B; } p[0] = lastHsl[0]; p[1] = lastHsl[1]; p[2] = lastHsl[2]; } break; } p += 4; } p += offset; } } bitmap.UnlockBits(bmpData); return(bitmap); }