Esempio n. 1
0
        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));
        }
Esempio n. 2
0
        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");
        }
Esempio n. 3
0
        /// <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);
        }