Пример #1
0
 public void Decode_32bitTestImages(string path, int w, int h)
 {
     var d = new PngDecoder();
     var pixels = d.Decode(File.ReadAllBytes(path));
     Assert.AreEqual(w, pixels.GetLength(0));
     Assert.AreEqual(h, pixels.GetLength(1));
     Assert.IsNotNull(pixels);
     var e = new PngEncoder(new PngEncoderOptions());
     var encodedPixels = e.Encode(pixels);
     File.WriteAllBytes(Path.ChangeExtension(path, "out.png"), encodedPixels);
 }
Пример #2
0
        public void PngCore()
        {
            using (var memoryStream = new MemoryStream())
            {
                QuantizerBase <Rgba32> quantizer = this.UseOctreeQuantizer
                ? (QuantizerBase <Rgba32>)
                                                   new OctreeQuantizer <Rgba32>()
                : new PaletteQuantizer <Rgba32>();

                var options = new PngEncoder()
                {
                    Quantizer = quantizer
                };
                this.bmpCore.SaveAsPng(memoryStream, options);
            }
        }
        private static string SavePng <TPixel>(TestImageProvider <TPixel> provider, PngColorType pngColorType)
            where TPixel : unmanaged, IPixel <TPixel>
        {
            using (Image <TPixel> sourceImage = provider.GetImage())
            {
                if (pngColorType != PngColorType.RgbWithAlpha)
                {
                    sourceImage.Mutate(c => c.MakeOpaque());
                }

                var encoder = new PngEncoder {
                    ColorType = pngColorType
                };
                return(provider.Utility.SaveTestOutputFile(sourceImage, "png", encoder));
            }
        }
Пример #4
0
 public byte[] GetBytesFromPixels(Rgba32[] pixelArray, int height, int width)
 {
     using (MemoryStream stream = new MemoryStream())
     {
         using (var image = Image.LoadPixelData(pixelArray, width, height))
         {
             PngEncoder pngEncoder = new PngEncoder
             {
                 CompressionLevel = 9,
                 ColorType        = PngColorType.RgbWithAlpha
             };
             image.SaveAsPng(stream, pngEncoder);
             return(stream.ToArray());
         }
     }
 }
Пример #5
0
        public IReadOnlyTexture <byte> Serdes(IReadOnlyTexture <byte> existing, AssetInfo info, AssetMapping mapping, ISerializer s, IJsonUtil jsonUtil)
        {
            if (info == null)
            {
                throw new ArgumentNullException(nameof(info));
            }
            if (s == null)
            {
                throw new ArgumentNullException(nameof(s));
            }

            var paletteId = info.Get(AssetProperty.PaletteId, 0);
            var palette   = Resolve <IAssetManager>()
                            .LoadPalette(new PaletteId(AssetType.Palette, paletteId))
                            .GetUnambiguousPalette();

            if (info.AssetId.Type == AssetType.Font)
            {
                palette    = new uint[256];
                palette[1] = 0xffffffff;
                palette[2] = 0xffcccccc;
                palette[3] = 0xffaaaaaa;
                palette[4] = 0xff777777;
                palette[5] = 0xff555555;
            }

            if (s.IsWriting())
            {
                if (existing == null)
                {
                    throw new ArgumentNullException(nameof(existing));
                }
                var encoder = new PngEncoder();
                var bytes   = Write(encoder, palette, existing);
                s.Bytes(null, bytes, bytes.Length);
                return(existing);
            }
            else // Read
            {
                var decoder       = new PngDecoder();
                var configuration = new Configuration();
                var bytes         = s.Bytes(null, null, (int)s.BytesRemaining);
                using var stream = new MemoryStream(bytes);
                using var image  = decoder.Decode <Rgba32>(configuration, stream);
                return(Read(info.AssetId, palette, image, info.Width, info.Height));
            }
        }
Пример #6
0
        // TODO Move to specfic ImageProcessorService
        private static byte[] CompressImage(IFormFile file)
        {
            using (var stream = file.OpenReadStream())
                using (var image = Image.Load(stream))
                    using (var output = new MemoryStream())
                    {
                        IImageEncoder encoder;

                        #region Content Checking + Compression
                        if (file.ContentType == "image/jpeg")
                        {
                            encoder = new JpegEncoder {
                                IgnoreMetadata = true, Quality = 60
                            };
                        }
                        else if (file.ContentType == "image/png")
                        {
                            encoder = new PngEncoder()
                            {
                                IgnoreMetadata = true, CompressionLevel = 5
                            };
                        }
                        else
                        {
                            throw new NotSupportedException($"File with content type {file.ContentType} is not supported!");
                        }
                        #endregion

                        #region Resizing
                        if (image.Width > image.Height && image.Width > 1920)
                        {
                            var width  = 1920;
                            var height = (int)(image.Height / (image.Width / 1920.0));
                            image.Mutate(i => i.Resize(width, height));
                        }
                        else if (image.Height > 1080)
                        {
                            var height = 1080;
                            var width  = (int)(image.Width / (image.Height / 1080.0));
                            image.Mutate(i => i.Resize(width, height));
                        }
                        #endregion

                        image.Save(output, encoder);
                        return(output.ToArray());
                    }
        }
Пример #7
0
        private static void SaveAsPng(string file, IImage image, byte[] newData)
        {
            var newFile = Path.ChangeExtension(file, ".png");
            var encoder = new PngEncoder();

            using (var fs = File.Create(newFile))
            {
                switch (image.Format)
                {
                case ImageFormat.Rgba32:
                    IS.Image.LoadPixelData <Bgra32>(newData, image.Width, image.Height).Save(fs, encoder);
                    break;

                case ImageFormat.Rgb24:
                    IS.Image.LoadPixelData <Bgr24>(newData, image.Width, image.Height).Save(fs, encoder);
                    break;

                case ImageFormat.Rgba16:
                    IS.Image.LoadPixelData <Bgra4444>(newData, image.Width, image.Height).Save(fs, encoder);
                    break;

                case ImageFormat.R5g5b5:
                    // Turn the alpha channel on for image sharp.
                    for (int i = 1; i < newData.Length; i += 2)
                    {
                        newData[i] |= 128;
                    }
                    IS.Image.LoadPixelData <Bgra5551>(newData, image.Width, image.Height).Save(fs, encoder);
                    break;

                case ImageFormat.R5g5b5a1:
                    IS.Image.LoadPixelData <Bgra5551>(newData, image.Width, image.Height).Save(fs, encoder);
                    break;

                case ImageFormat.R5g6b5:
                    IS.Image.LoadPixelData <Bgr565>(newData, image.Width, image.Height).Save(fs, encoder);
                    break;

                case ImageFormat.Rgb8:
                    IS.Image.LoadPixelData <Gray8>(newData, image.Width, image.Height).Save(fs, encoder);
                    break;

                default:
                    throw new Exception($"ImageSharp does not recognize image format: {image.Format}");
                }
            }
        }
            public async Task SaveAsync_WithNonSeekableStream_IsCancellable()
            {
                using var image = new Image <Rgba32>(4000, 4000);
                var encoder = new PngEncoder()
                {
                    CompressionLevel = PngCompressionLevel.BestCompression
                };

                using var stream = new MemoryStream();
                var asyncStream = new AsyncStreamWrapper(stream, () => false);
                var cts         = new CancellationTokenSource();

                cts.CancelAfter(TimeSpan.FromTicks(1));

                await Assert.ThrowsAnyAsync <TaskCanceledException>(() =>
                                                                    image.SaveAsync(asyncStream, encoder, cts.Token));
            }
Пример #9
0
        /// <summary>
        /// Handles the RunWorkerCompleted event of the renderThread control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="System.ComponentModel.RunWorkerCompletedEventArgs"/> instance containing the event data.</param>
        private void renderThread_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            if (e.Cancelled || e.Result == null)
            {
                return;
            }
            object[]        result     = (object[])e.Result;
            PngEncoder      ei         = (PngEncoder)result[0];
            int             width      = (int)result[1];
            int             height     = (int)result[2];
            Envelope        extent     = (Envelope)result[3];
            OnImageComplete onComplete = (OnImageComplete)result[4];
            BitmapImage     image      = new BitmapImage();

            image.SetSource(ei.GetImageStream());
            onComplete(image, width, height, extent);
        }
Пример #10
0
        public static async Task Run([BlobTrigger("image-blob/{name}", Connection = "AzureWebJobsStorage")] Stream myBlob, string name, [Blob("output-blob/{name}", FileAccess.ReadWrite, Connection = "AzureWebJobsStorage")] CloudBlockBlob outputBlob, ILogger log)
        {
            log.LogInformation($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myBlob.Length} Bytes");

            var width   = 100;
            var height  = 200;
            var encoder = new PngEncoder();

            using (var output = new MemoryStream())
                using (Image <Rgba32> image = Image.Load(myBlob))
                {
                    image.Mutate(x => x.Resize(width, height));
                    image.Save(output, encoder);
                    output.Position = 0;
                    await outputBlob.UploadFromStreamAsync(output);
                }
        }
Пример #11
0
        public static async Task <string> SaveImageIntoBlobContainer(IFormFile file, string reference, int width, int height) //Saves Images
        {
            var requestOption = new BlobRequestOptions()
            {
                ParallelOperationThreadCount     = 8,
                SingleBlobUploadThresholdInBytes = 10 * 1024 * 1024
            };

            CloudStorageAccount cloudStorage = CloudStorageAccount.Parse(_blobconnectionString);
            CloudBlobClient     blobClient   = cloudStorage.CreateCloudBlobClient();

            blobClient.DefaultRequestOptions = requestOption;
            CloudBlobContainer blobContainer = blobClient.GetContainerReference("streamworkblobcontainer");
            CloudBlockBlob     blockBlob     = blobContainer.GetBlockBlobReference(reference);

            blockBlob.DeleteIfExists();

            var encoder = new PngEncoder();

            using (var stream = file.OpenReadStream())
            {
                using (var output = new MemoryStream())
                    using (Image image = Image.Load(stream))
                    {
                        //int currWidth = image.Width;
                        //int currHeight = image.Height;
                        //if ((float)width / height > (float)currWidth / currHeight) // image is too tall relative to its width
                        //{
                        //    int resizeHeight = (int)((float)currHeight / currWidth * width);
                        //    image.Mutate(i => i.Resize(width, resizeHeight).Crop(new Rectangle(0, Math.Abs(resizeHeight - height) / 2, width - 1, height - 1)));
                        //}
                        //else // image is too wide relative to its height, or perfect
                        //{
                        //    int resizeWidth = (int)((float)currWidth / currHeight * height);
                        //    image.Mutate(i => i.Resize(resizeWidth, height).Crop(new Rectangle(Math.Abs(resizeWidth - width) / 2, 0, width - 1, height - 1)));
                        //}

                        image.Save(output, encoder);
                        output.Position = 0;
                        await blockBlob.UploadFromStreamAsync(output);
                    }

                return(blockBlob.Uri.AbsoluteUri + "?" + DateTime.Now);
            }
        }
Пример #12
0
        public byte[] ResizeImage(byte[] imageBytes, int width, int height)
        {
            using (var image = Image.Load(imageBytes, out IImageFormat imageFormat))
                using (var outStream = new MemoryStream())
                {
                    if (width == 0)
                    {
                        width = image.Width;
                    }
                    if (height == 0)
                    {
                        height = image.Height;
                    }
                    image.Mutate(x => x
                                 .Resize(new ResizeOptions()
                    {
                        Size = new Size(width, height),
                        Mode = ResizeMode.Pad
                    })
                                 .BackgroundColor(Rgba32.White));

                    IImageEncoder encoder = null;
                    switch (imageFormat.Name)
                    {
                    case "PNG":
                        encoder = new PngEncoder();
                        break;

                    case "GIF":
                        encoder = new GifEncoder();
                        break;

                    case "BMP":
                        encoder = new BmpEncoder();
                        break;

                    default:
                        encoder = new JpegEncoder();
                        break;
                    }

                    image.Save(outStream, encoder);
                    return(outStream.ToArray());
                }
        }
Пример #13
0
        public void CompressImagePng(string path, int quality, JpegSubsample jpegSubsample)
        {
            using (var image = SixLabors.ImageSharp.Image.Load(path))
            {
                PngEncoder encoder = new PngEncoder();

                encoder.CompressionLevel = 8;
                //JpegEncoder encoder = new JpegEncoder() { Quality = quality, Subsample = jpegSubsample };
                string outputPath = Path.Combine(Path.GetDirectoryName(path), Path.GetFileNameWithoutExtension(path) + "_转换后" + Path.GetExtension(path));
                int    count      = 0;
                while (File.Exists(outputPath))
                {
                    count++;
                    outputPath = Path.Combine(Path.GetDirectoryName(outputPath), Path.GetFileNameWithoutExtension(path) + count.ToString() + Path.GetExtension(outputPath));
                }
                image.Save(outputPath, encoder);
            }
        }
Пример #14
0
        internal static async Task WriteImageToFileAsync(string fileName, Image <Gray8> image, PngBitDepth bitDepth = PngBitDepth.Bit1)
        {
            var outputFolder = await GetOutputFolderAsync();

            var imageFile = await outputFolder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting);

            using (var stream = await imageFile.OpenAsync(FileAccessMode.ReadWrite))
            {
                using (IOutputStream outputStream = stream.GetOutputStreamAt(0))
                {
                    var encoder = new PngEncoder();
                    encoder.ColorType = PngColorType.Grayscale;
                    encoder.BitDepth  = bitDepth;
                    image.Save(outputStream.AsStreamForWrite(), encoder);
                    await outputStream.FlushAsync();
                }
            }
        }
Пример #15
0
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            int height = 512;
            int width  = 512;

            using var image = new Image <Rgba32>(width, height);

            // Renderer.SetLine5(image, 13, 20, 80, 40, Rgba32.Yellow);
            // Renderer.SetLine5(image, 20, 13, 40, 80, Rgba32.White);
            // Renderer.SetLine5(image, 80, 40, 13, 20, Rgba32.Red);

            // Test(image);

            RenderObjFile();

            // int2 p0 = new int2(10, 70);
            // int2 p1 = new int2(50, 160);
            // int2 p2 = new int2(70, 80);
            // int2 p3 = new int2(180, 50);
            // int2 p4 = new int2(150, 1);
            // int2 p5 = new int2(70, 180);
            // int2 p6 = new int2(180, 150);
            // int2 p7 = new int2(120, 160);
            // int2 p8 = new int2(130, 180);
            // Renderer.Triangle(p0, p1, p2, image, Rgba32.Red);
            // Renderer.Triangle(p3, p4, p5, image, Rgba32.White);
            // Renderer.Triangle(p6, p7, p8, image, Rgba32.Gold);

            // int2[] points = new int2[] {new int2(10, 10), new int2(100, 30), new int2(190, 160)};
            // Renderer.Triangle(points, image, Rgba32.Blue);

            // SAVE TO DISK
            var encoder = new PngEncoder()
            {
                CompressionLevel = 1,
            };

            if (!Directory.Exists("output/"))
            {
                Directory.CreateDirectory("output/");
            }
            image.Save("output/image.png", encoder);
        }
Пример #16
0
        public MemoryStream getAsEncodedStream(string type = null, int quality = 90)
        {
            MemoryStream imageStream = new MemoryStream();

            if (type == null)
            {
                type = this.type != "" ? this.type : JPEG.MIME;
            }

            if (type == JPEG.MIME)             // Encode as JPEG
            {
                byte[][,] raster = _bm.ToRaster();

                FluxJpeg.Core.Image jpegImage = new FluxJpeg.Core.Image(new ColorModel {
                    colorspace = ColorSpace.RGB
                }, raster);

                JpegEncoder jpegEncoder = new JpegEncoder(jpegImage, quality, imageStream);
                jpegEncoder.Encode();

                if (_img != null)
                {
                    // strip off any headers that might be left by encoder, etc
                    imageStream = new MemoryStream(((JPEG)_img).stripHeaders(imageStream));

                    if (_preserveHeaders)
                    {
                        imageStream = new MemoryStream(((JPEG)_img).insertHeaders(imageStream));
                    }
                }
            }
            else if (type == PNG.MIME)             // Encode as PNG
            {
                PngEncoder pngEncoder = new PngEncoder(_bm.Pixels, _bm.PixelWidth, _bm.PixelHeight, false, PngEncoder.FILTER_NONE, Deflater.BEST_COMPRESSION);
                byte[]     pngBuffer  = pngEncoder.pngEncode();
                imageStream.Write(pngBuffer, 0, pngBuffer.Length);
            }
            else
            {
                Error(this, null);
                return(null);
            }
            return(imageStream);
        }
Пример #17
0
        public override IImageEncoder CreateEncoder()
        {
            if (BitDepth != null ||
                ColorType != null ||
                CompressionLevel != null ||
                Gamma != null ||
                Threshold != null ||
                QuantizationMethod != null ||
                InterlaceMode != null ||
                ChunkFilter != null ||
                TransparentColorMode != null ||
                IgnoreMetadata)
            {
                var encoder = new PngEncoder
                {
                    BitDepth        = (SharpPngBitDepth?)BitDepth,
                    ColorType       = (SharpPngColorType?)ColorType,
                    Gamma           = Gamma,
                    InterlaceMethod = (SharpPngInterlaceMode?)InterlaceMode,
                    ChunkFilter     = (SharpPngChunkFilter?)ChunkFilter,
                    Quantizer       = ImageSharpUtility.CreateQuantizer(QuantizationMethod),
                    IgnoreMetadata  = IgnoreMetadata
                };

                if (TransparentColorMode != null)
                {
                    encoder.TransparentColorMode = (SharpPngTransparentColorMode)TransparentColorMode.Value;
                }

                if (CompressionLevel != null)
                {
                    encoder.CompressionLevel = (SharpPngCompressionLevel)CompressionLevel;
                }

                if (Threshold != null)
                {
                    encoder.Threshold = Threshold.Value;
                }

                return(encoder);
            }

            return(base.CreateEncoder());
        }
Пример #18
0
        // 이미지를 팔레트화시킨다.
        // 팔레트에는 반드시 검은색과 흰색은 빠지도록 한다.
        static string ExecuteQuantize(string sourceFileName, int maxColor = 30)
        {
            Logger.WriteLine($"Running {nameof(ExecuteQuantize)}");

            var targetFileName = AppendToFileName(sourceFileName, "-Q");

            var quOpts = new QuantizerOptions {
                MaxColors = maxColor
            };
            //var quantizer = new OctreeQuantizer(quOpts);
            var quantizer      = new WuQuantizer(quOpts);
            var config         = Configuration.Default;
            var pixelQuantizer = quantizer.CreatePixelSpecificQuantizer <Rgba32>(config);

            using (var image = Image.Load <Rgba32>(sourceFileName))
                using (var quantizedResult =
                           pixelQuantizer.BuildPaletteAndQuantizeFrame(image.Frames[0], image.Frames[0].Bounds()))
                {
                    var quantizedPalette = new List <Color>();
                    foreach (var p in quantizedResult.Palette.Span)
                    {
                        var c = new Color(p);
                        // 팔레트에 흰색과 검은색은 반드시 빠지도록 한다.
                        if (c != Color.White && c != Color.Black)
                        {
                            quantizedPalette.Add(c);
                        }
                    }

                    using (var stream = new FileStream(targetFileName, FileMode.Create))
                    {
                        var encoder = new PngEncoder
                        {
                            Quantizer = new PaletteQuantizer(quantizedPalette.ToArray()),
                            ColorType = PngColorType.Palette
                        };
                        image.SaveAsPng(stream, encoder);
                        stream.Close();
                    }

                    return(targetFileName);
                }
        }
Пример #19
0
        public static (bool succsseded, string result) UploadImage(IFormFile file, string path, int maxLength = _maxImageLength, int width = (int)ImageWidth.Medium, int height = (int)ImageHeight.Medium, int compression = (int)ImageComperssion.Normal)
        {
            if (!IsImageMimeTypeValid(file) || !IsImageExtentionValid(file))
            {
                return(false, "فرمت عکس صحیح نیست.");
            }

            if (!IsImageSizeValid(file, maxLength))
            {
                return(false, $"سایز عکس باید کمتر از {maxLength} باشد");
            }

            try
            {
                var image         = Image.Load(file.OpenReadStream());
                var resizeOptions = new ResizeOptions()
                {
                    Size = new Size(width, height),
                    Mode = ResizeMode.Crop
                };
                image.Mutate(x => x.Resize(resizeOptions));
                //var encoder = new JpegEncoder()
                //{
                //    Quality = compression
                //};
                var encoder = new PngEncoder()
                {
                    CompressionLevel = PngCompressionLevel.BestCompression,
                };
                var fileName = GetRandomFileName(file);
                var savePath = Path.GetFullPath(Path.Combine(path, fileName));
                //image.Saveasp(savePath, encoder);
                image.SaveAsPng(savePath, encoder);



                return(true, fileName);
            }
            catch (Exception e)
            {
                return(false, e.Message);
            }
        }
Пример #20
0
    public bool Save(string path, int quality, int compression)
    {
        renderCam.Render();

        Reader.Start();
        Reader.WaitForCompletion();

        var data = Reader.GetData();

        var bytes = new byte[16 * 1024 * 1024];
        int length;

        var ext = System.IO.Path.GetExtension(path).ToLower();

        if (ext == ".png")
        {
            length = PngEncoder.Encode(data, videoWidth, videoHeight, Reader.BytesPerPixel, compression, bytes);
        }
        else if (ext == ".jpeg" || ext == ".jpg")
        {
            length = JpegEncoder.Encode(data, videoWidth, videoHeight, Reader.BytesPerPixel, quality, bytes);
        }
        else
        {
            return(false);
        }

        if (length > 0)
        {
            try
            {
                using (var file = System.IO.File.Create(path))
                {
                    file.Write(bytes, 0, length);
                }
                return(true);
            }
            catch
            {
            }
        }
        return(false);
    }
Пример #21
0
        public static void Save(this Image bitmap, IFileSystem fileSystem, UPath path)
        {
            var extension = path.GetExtensionWithDot();

            IImageEncoder format;

            switch (extension)
            {
            case ".png":
                format = new PngEncoder();
                break;

            default:
                throw new NotSupportedException();
            }

            using var fileStream = fileSystem.CreateFile(path);
            bitmap.Save(fileStream, format);
        }
Пример #22
0
        public void InfersColorTypeAndBitDepth <TPixel>(TestImageProvider <TPixel> provider, PngColorType pngColorType, PngBitDepth pngBitDepth)
            where TPixel : struct, IPixel <TPixel>
        {
            using (Stream stream = new MemoryStream())
            {
                var encoder = new PngEncoder();
                encoder.Encode(provider.GetImage(), stream);

                stream.Seek(0, SeekOrigin.Begin);

                var decoder = new PngDecoder();

                Image image = decoder.Decode(Configuration.Default, stream);

                PngMetadata metadata = image.Metadata.GetPngMetadata();
                Assert.Equal(pngColorType, metadata.ColorType);
                Assert.Equal(pngBitDepth, metadata.BitDepth);
            }
        }
Пример #23
0
        public Photo Resize(Photo photo, int maxHeight, int maxWidth)
        {
            Ensure.Any.IsNotNull(photo, nameof(photo));

            using (var image = Image.Load(null, photo.Data))
            {
                if (RequiresResize(image, maxHeight, maxWidth) == false)
                {
                    return(photo);
                }

                var options = new ResizeOptions
                {
                    Mode = ResizeMode.Max,
                    Size = new Size(maxWidth, maxHeight)
                };

                image.Mutate(ctx => ctx.Resize(options));

                var stream = new MemoryStream();

                IImageEncoder encoder;

                if (photo.ContentType == "image/png")
                {
                    encoder = new PngEncoder();
                }
                else if (photo.ContentType == "image/jpeg")
                {
                    encoder = new JpegEncoder();
                }
                else
                {
                    throw new NotSupportedException();
                }

                image.Save(stream, encoder);

                stream.Position = 0;

                return(new Photo(photo, stream));
            }
        }
Пример #24
0
        public static IImageEncoder GetEncoder(EncoderTypes encoderType)
        {
            IImageEncoder encoder;

            switch (encoderType)
            {
            case EncoderTypes.Png:
                encoder = new PngEncoder();
                break;

            case EncoderTypes.Jpeg:
                encoder = new JpegEncoder();
                break;

            default:
                throw new ArgumentException($"Encoder '{ encoderType }' not found!");
            }
            ;
            return(encoder);
        }
        /// <summary>
        /// Saves the image to a given file in PNG format
        /// </summary>
        /// <param name="image">Image to save</param>
        /// <param name="filePath">File to save to, please include .png in path</param>
        public static void SaveImagePng(Image <Rgba32> image, string filePath)
        {
            var filePathAsPng = filePath;
            var fileStream    = new FileStream(filePathAsPng, FileMode.Create);

            try
            {
                var encodingOptions = new PngEncoder();
                encodingOptions.ColorType = PngColorType.RgbWithAlpha;
                image.SaveAsPng(fileStream, encodingOptions);
            }
            catch (Exception ex)
            {
                throw;
            }
            finally
            {
                fileStream.Close();
            }
        }
Пример #26
0
        public static MemoryStream ToStream(Image image, string format)
        {
            var           memoryStream = new MemoryStream();
            IImageEncoder encoder;

            if (format == "jpg" || format == ".jpg")
            {
                encoder = new JpegEncoder
                {
                    Quality = 75
                };
            }
            else
            {
                encoder = new PngEncoder();
            }
            image.Save(memoryStream, encoder);
            memoryStream.Seek(0, SeekOrigin.Begin);
            return(memoryStream);
        }
Пример #27
0
        /// <summary>
        /// Converts the image to a stream, which can be assigned to
        /// a silverlight image control as image source and applies the specified
        /// filter before converting the image. The encoder to use will be created by
        /// the file extension name.
        /// </summary>
        /// <param name="image">The image, which should be converted. Cannot be null
        /// (Nothing in Visual Basic).</param>
        /// <param name="extension">The file extension to create the <see cref="IImageEncoder"/> that
        /// will be used to create an image stream.</param>
        /// <returns>The resulting stream.</returns>
        /// <exception cref="ArgumentException"><paramref name="extension"/> is empty or
        /// contains only blanks.</exception>
        /// <exception cref="ArgumentNullException">
        ///     <para><paramref name="image"/> is null (Nothing in Visual Basic).</para>
        ///     <para>- or -</para>
        ///     <para><paramref name="extension"/> is null (Nothing in Visual Basic).</para>
        /// </exception>
        public static Stream ToStreamByExtension(this ExtendedImage image, string extension)
        {
            Contract.Requires <ArgumentNullException>(image != null, "Image cannot be null.");
            Contract.Requires <ArgumentException>(image.IsFilled, "Image has not been loaded.");
            Contract.Requires <ArgumentException>(!string.IsNullOrEmpty(extension), "Extension cannot be null or empty.");

            IImageEncoder encoder = null;

            foreach (IImageEncoder availableEncoder in Encoders.GetAvailableEncoders())
            {
                if (availableEncoder != null && availableEncoder.IsSupportedFileExtension(extension))
                {
                    encoder = availableEncoder;
                    break;
                }
            }

            if (encoder == null)
            {
                encoder = new PngEncoder();
            }

            MemoryStream memoryStream = null;

            try
            {
                memoryStream = new MemoryStream();
                encoder.Encode(image, memoryStream);

                memoryStream.Seek(0, SeekOrigin.Begin);
            }
            catch
            {
                if (memoryStream != null)
                {
                    memoryStream.Dispose();
                }
                throw;
            }
            return(memoryStream);
        }
Пример #28
0
    public bool SaveAsync(string imgFileName, string timeFileName, int quality, int compression)
    {
        renderCam.Render();
        DateTime renderTime = DateTime.Now;

        Reader.Start();
        Reader.Update(true);

        var data = Reader.GetData();

        var bytes = new byte[16 * 1024 * 1024];
        int length;

        var ext = System.IO.Path.GetExtension(imgFileName).ToLower();

        if (ext == ".png")
        {
            length = PngEncoder.Encode(data, videoWidth, videoHeight, Reader.BytesPerPixel, compression, bytes);
        }
        else if (ext == ".jpeg" || ext == ".jpg")
        {
            length = JpegEncoder.Encode(data, videoWidth, videoHeight, Reader.BytesPerPixel, quality, bytes);
        }
        else
        {
            return(false);
        }

        if (length > 0)
        {
            try
            {
                SaveAsync(bytes, length, imgFileName, timeFileName, renderTime);
                return(true);
            }
            catch
            {
            }
        }
        return(false);
    }
Пример #29
0
        static void Main(string[] args)
        {
            if (args.Length < 2)
            {
                Console.WriteLine("Usage: NFTRFontDump [nftr file] [size]");
            }

            if (!File.Exists(args[0]))
            {
                Console.WriteLine($"{args[0]} not found.");
                Environment.Exit(1);
            }
            Rgba32 color = Rgba32.FromHex("ff00ff");

            try
            {
                color = Rgba32.FromHex(args[1]);
            }
            catch
            {
            }



            Stream nftrData = File.OpenRead(args[0]);
            var    font     = NFTR.Read(nftrData);
            var    dumper   = new NFTRDumper(font, color);

            using (var file = File.OpenWrite(Path.GetFileNameWithoutExtension(args[0]) + ".xml"))
            {
                dumper.GetXmlInfo().Save(file);
            }

            int counter = 0;
            var encoder = new PngEncoder();

            using (var file = File.OpenWrite($"{args[1]}_font_{counter}.png"))
            {
                dumper.GetTextureMapping().Save(file, encoder);
            }
        }
Пример #30
0
        public static byte[] GetXorImageBytesFullColor(this Image <Rgba32> image, IconEntryDescription description, bool asPng = false)
        {
            int bytesPerPixel = description.BitCount / 8;

            if (asPng)
            {
                PngEncoder encoder = new PngEncoder {
                    BitDepth  = PngBitDepth.Bit8,
                    ColorType = (description.BitCount == 32 ? PngColorType.RgbWithAlpha : PngColorType.Rgb)
                };
                using (MemoryStream stream = new MemoryStream())
                {
                    image.SaveAsPng(stream, encoder);
                    stream.Seek(0, SeekOrigin.Begin);
                    return(stream.ToArray());
                }
            }

            Console.WriteLine($"bytesPerPixel = {bytesPerPixel}");
            int stride = description.Width * bytesPerPixel;

            Console.WriteLine($"stride = {stride}");
            byte[] xorImageBytes = new byte[description.Height * stride];
            for (int r = 0; r < description.Height; r++)
            {
                int rowOffset = r * stride;
                for (int c = 0; c < description.Width; c++)
                {
                    int    offset = rowOffset + c * bytesPerPixel;
                    Rgba32 pixel  = image[c, description.Height - 1 - r];
                    xorImageBytes[offset]     = pixel.B;
                    xorImageBytes[offset + 1] = pixel.G;
                    xorImageBytes[offset + 2] = pixel.R;
                    if (bytesPerPixel == 4)
                    {
                        xorImageBytes[offset + 3] = pixel.A;
                    }
                }
            }
            return(xorImageBytes);
        }
Пример #31
0
        public static byte[] UploadImage(string displayMode, int x, int y, int h, int w)
        {
            string path = HttpContext.Current.Server.MapPath("~/AppContent/RenderImages/uploadPlaceholder.png");

            using (AtalaImage image = new AtalaImage(856, 500, PixelFormat.Pixel32bppBgra, Color.Transparent))
            {
                using (AtalaImage uploadImage = new AtalaImage(path))
                {
                    var g = image.GetGraphics();
                    g.DrawImage(uploadImage.ToBitmap(), new Rectangle(x, y, w, h));
                    byte[] data = null;
                    using (MemoryStream m = new MemoryStream())
                    {
                        PngEncoder encoder = new PngEncoder();
                        encoder.Save(m, image, null);
                        data = m.ToArray();
                    }
                    return(data);
                }
            }
        }
        //returns an encoder based on image type
        public static ImageEncoder GetEncoderFromType( ImageType type )
        {
            ImageEncoder encoder = null;
            switch ( type )
            {
                case ImageType.Jpeg:
                    encoder = new JpegEncoder();
                    break;
                case ImageType.Png:
                    encoder = new PngEncoder();
                    break;
				case ImageType.J2k:
					encoder = new Jp2Encoder();
					break;
                case ImageType.Bmp:
                    encoder = new BmpEncoder();
                    break;
                case ImageType.Emf:
                    encoder = new EmfEncoder();
                    break;
                case ImageType.Gif:
                    encoder = new GifEncoder();
                    break;
                case ImageType.Pcx:
                    encoder = new PcxEncoder();
                    break;
                case ImageType.Psd:
                    encoder = new PsdEncoder();
                    break;
                case ImageType.Tga:
                    encoder = new TgaEncoder();
                    break;
                case ImageType.Tiff:
                    encoder = new TiffEncoder();
                    break;
                case ImageType.Wbmp:
                    encoder = new WbmpEncoder();
                    break;
                case ImageType.Wmf:
                    encoder = new WmfEncoder();
                    break;
                case ImageType.Tla:
                    encoder = new TlaEncoder();
                    break;
                default:
                    MessageBox.Show( "当前的图像格式不支持" );
                    break;
            }

            return encoder;
        } 
Пример #33
0
        public WriteableBitmap GetCanvas()
        {
            int titleLength = title.Length + title.Where(c => c >= 0xFF && c != 0x201C && c != 0x201D).Count();
            if (titleLength > 22 && titleLength < 30 ||
                titleLength > 44 && titleLength < 50)
                textfactor = 0.85f;

            var textblock = new TextBlock()
            {
                Text = title,
                TextWrapping = System.Windows.TextWrapping.Wrap,
                Foreground = new SolidColorBrush(Color.FromArgb(255, 255, 255, 255)),
                Width = (int)(size - 2 * hoffset - 2 * textmargin) * textfactor,
                Height = 40,
                MaxHeight = 40,
                TextAlignment = System.Windows.TextAlignment.Left,
                VerticalAlignment = System.Windows.VerticalAlignment.Bottom,
                FontSize = 28
            };
            var b = new Rectangle()
            {
                Width = size,
                Height = (int)(size - 2 * voffset) * 0.43 + voffset,
                Fill = new LinearGradientBrush()
                {
                    EndPoint = new System.Windows.Point(0.5, 1),
                    StartPoint = new System.Windows.Point(0.5, 0),
                    GradientStops = new GradientStopCollection()
                    {
                        new GradientStop() {Offset = 0},
                        new GradientStop() {Offset = 1, Color= Color.FromArgb(0xFF, 0x00, 0x00, 0x00)}
                    }
                }
            };
            var image = new Image()
            {
                Width = size,
                Height = size,
                Source = ImgSrc,
                Stretch = Stretch.UniformToFill
            };
            WriteableBitmap bm = new WriteableBitmap(size, size);
            bm.Render(image, null);
            bm.Render(b, new TranslateTransform()
            {
                X = 0,
                Y = size - voffset - b.ActualHeight
            });
            bm.Render(textblock, new TranslateTransform()
            {
                X = textmargin, //size - hoffset - textmargin - textblock.ActualWidth,
                Y = size - voffset - textmargin - textblock.ActualHeight
            });
            bm.Invalidate();
#if false
            var encoder = new PngEncoder();
            using (var store = IsolatedStorageFile.GetUserStoreForApplication())
            {
                using (var stream = new IsolatedStorageFileStream("shared/shellcontent/" + filename + ".jpg", FileMode.Create, store))
                {
                    bm.SaveJpeg(stream, 336, 336, 0, 80);
                    stream.Close();
                }
            }
#endif

            return bm;
        }
Пример #34
0
        /// <summary>
        /// Determines if the images at the specified paths are equal.
        /// </summary>
        /// <param name="expected">Path to the expected image.</param>
        /// <param name="actual">Path to the actual image.</param>
        /// <param name="message">The message.</param>
        /// <param name="output">The output difference file.</param>
        public static void AreEqual(string expected, string actual, string message, string output)
        {
            var expectedImage = LoadImage(expected);
            var actualImage = LoadImage(actual);

            if (expectedImage == null)
            {
                EnsureFolder(expected);
                File.Copy(actual, expected);
                Assert.Fail("File not found: {0}", expected);
            }

            if (expectedImage.GetLength(0) != actualImage.GetLength(0))
            {
                Assert.Fail("Expected height: {0}\nActual height:{1}\n{2}", expectedImage.GetLength(0), actualImage.GetLength(0), message);
            }

            if (expectedImage.GetLength(1) != actualImage.GetLength(1))
            {
                Assert.Fail("Expected width: {0}\nActual width:{1}\n{2}", expectedImage.GetLength(1), actualImage.GetLength(1), message);
            }

            var w = expectedImage.GetLength(0);
            var h = expectedImage.GetLength(1);
            var differences = 0;
            var differenceImage = new OxyColor[w, h];
            for (int i = 0; i < h; i++)
            {
                for (int j = 0; j < w; j++)
                {
                    if (!expectedImage[j, i].Equals(actualImage[j, i]))
                    {
                        differences++;
                        differenceImage[j, i] = OxyColors.Red;
                    }
                    else
                    {
                        differenceImage[j, i] = actualImage[j, i].ChangeIntensity(100);
                    }
                }
            }

            if (differences > 0)
            {
                if (output != null)
                {
                    for (int i = 0; i < h; i++)
                    {
                        for (int j = 0; j < w; j++)
                        {
                            if (!expectedImage[j, i].Equals(actualImage[j, i]))
                            {
                            }
                        }
                    }

                    EnsureFolder(output);
                    var encoder = new PngEncoder(new PngEncoderOptions());
                    File.WriteAllBytes(output, encoder.Encode(differenceImage));
                }

                Assert.Fail("Pixel differences: {0}\n{1}", differences, message);
            }
        }