コード例 #1
0
        public void SimpleCheckerboardWithArbitraryTextData()
        {
            var builder = PngBuilder.Create(2, 2, false);

            builder.SetPixel(new Pixel(255, 0, 12), 0, 0);
            builder.SetPixel(255, 0, 12, 1, 1);

            builder.StoreText("Title", "Checkerboard");
            builder.StoreText("another-data", "bərd that's good and other\r\nstuff");

            using (var memory = new MemoryStream())
            {
                builder.Save(memory);

                memory.Seek(0, SeekOrigin.Begin);

                var visitor = new MyChunkVisitor();

                var read = Png.Open(memory, visitor);

                Assert.NotNull(read);

                var textChunks = visitor.Visited.Where(x => x.header.Name == "iTXt").ToList();

                Assert.Equal(2, textChunks.Count);
            }
        }
コード例 #2
0
        public void SimpleCheckerboard()
        {
            var builder = PngBuilder.Create(2, 2, false);

            var red   = new Pixel(255, 0, 12);
            var black = new Pixel(0, 0, 0, 255, false);

            builder.SetPixel(new Pixel(255, 0, 12), 0, 0);
            builder.SetPixel(255, 0, 12, 1, 1);

            using (var memory = new MemoryStream())
            {
                builder.Save(memory);

                memory.Seek(0, SeekOrigin.Begin);

                var read = Png.Open(memory);

                var left = read.GetPixel(0, 0);
                Assert.Equal(red, left);
                var right = read.GetPixel(1, 0);
                Assert.Equal(black, right);
                var bottomLeft = read.GetPixel(0, 1);
                Assert.Equal(black, bottomLeft);
                var bottomRight = read.GetPixel(1, 1);
                Assert.Equal(red, bottomRight);
            }
        }
コード例 #3
0
        public void BuildMapFromFrdFileNewHiRez()
        {
            PngBuilder pngBuilder = new PngBuilder(BasePath, BLOCK_SIZE, BLOCK_SIZE);

            string fn = "CurRhombus5_2";


            pngBuilder.Build(fn, true);
        }
コード例 #4
0
        public void BuildMapFromFrdFileNew()
        {
            PngBuilder pngBuilder = new PngBuilder(BasePath, BLOCK_SIZE, BLOCK_SIZE);
            //string fn = "MandlebrodtMapInfo (1)";
            //string fn = "Circus1";
            //string fn = "CRhomCenter2";
            string fn = "SCluster2";

            pngBuilder.Build(fn, false);
        }
コード例 #5
0
        public void CanCompressImageUsingPalette()
        {
            var rawBytes = File.ReadAllBytes(GetImageFile("10by9pixelsrgb8bpp.png"));
            var png      = Png.Open(rawBytes);
            var builder  = PngBuilder.FromPng(png);

            var compressed = builder.Save(SaveCompressed);

            Assert.True(compressed.Length < rawBytes.Length, $"Compressed size {compressed.Length} bytes was not smaller than raw size {rawBytes.Length}.");
        }
コード例 #6
0
 /// <summary>
 /// Creates a black & white PNG of the QR code, using 1-bit grayscale.
 /// </summary>
 public byte[] GetGraphic(int pixelsPerModule)
 {
     using (var png = new PngBuilder())
     {
         var size = QrCodeData.ModuleMatrix.Count * pixelsPerModule;
         png.WriteHeader(size, size, 1, PngBuilder.ColorType.Greyscale);
         png.WriteScanlines(DrawScanlines(pixelsPerModule));
         png.WriteEnd();
         return(png.GetBytes());
     }
 }
コード例 #7
0
 private static void CopyPngToBuilder(Png png, PngBuilder builder)
 {
     for (int y = 0; y < png.Height; y++)
     {
         for (int x = 0; x < png.Width; x++)
         {
             var pixel = png.GetPixel(x, y);
             builder.SetPixel(pixel, x, y);
         }
     }
 }
コード例 #8
0
 /// <summary>
 /// Creates a black & white PNG of the QR code, using 1-bit grayscale.
 /// </summary>
 public byte[] GetGraphic(int pixelsPerModule, bool drawQuietZones = true)
 {
     using (var png = new PngBuilder())
     {
         var size = (this.QrCodeData.ModuleMatrix.Count - (drawQuietZones ? 0 : 8)) * pixelsPerModule;
         png.WriteHeader(size, size, 1, PngBuilder.ColorType.Greyscale);
         png.WriteScanlines(this.DrawScanlines(pixelsPerModule, drawQuietZones));
         png.WriteEnd();
         return(png.GetBytes());
     }
 }
コード例 #9
0
 /// <summary>
 /// Creates 2-color PNG of the QR code, using 1-bit indexed color. Accepts 3-byte RGB colors for normal images and 4-byte RGBA-colors for transparent images.
 /// </summary>
 public byte[] GetGraphic(int pixelsPerModule, byte[] darkColorRgba, byte[] lightColorRgba)
 {
     using (var png = new PngBuilder())
     {
         var size = this.m_xCodeData.ModuleMatrix.Count * pixelsPerModule;
         png.WriteHeader(size, size, 1, PngBuilder.ColorType.Indexed);
         png.WritePalette(darkColorRgba, lightColorRgba);
         png.WriteScanlines(this.DrawScanlines(pixelsPerModule));
         png.WriteEnd();
         return(png.GetBytes());
     }
 }
コード例 #10
0
ファイル: QrCodePng.cs プロジェクト: depler/wgconfig
        public byte[] GetBytes()
        {
            using (var png = new PngBuilder())
            {
                var data = Draw();

                png.WriteHeader(scaledSize, scaledSize, 1, 0);
                png.WriteData(data);
                png.WriteEnd();

                return(png.GetBytes());
            }
        }
コード例 #11
0
 public override void Init(MemoryStream imageStream)
 {
     this.imageStream = imageStream;
     readOnlyInstance = Png.Open(this.imageStream);
     writableInstance = PngBuilder.Create(readOnlyInstance.Width, readOnlyInstance.Height, readOnlyInstance.HasAlphaChannel);
     for (var y = 0; y < readOnlyInstance.Height; y++)
     {
         for (var x = 0; x < readOnlyInstance.Width; x++)
         {
             writableInstance.SetPixel(readOnlyInstance.GetPixel(x, y), x, y);
         }
     }
 }
コード例 #12
0
        public void CanCompressImageWithAlphaChannel()
        {
            var file = GetImageFile("pdfpig.png");
            var png  = Png.Open(file);

            var builder = PngBuilder.Create(png.Width, png.Height, png.HasAlphaChannel);

            CopyPngToBuilder(png, builder);

            var sizeRaw = builder.Save().Length;

            var compressed = builder.Save(SaveCompressed);

            File.WriteAllBytes(@"C:\temp\mycompressed.png", compressed);

            Assert.True(compressed.Length < sizeRaw, $"Compressed size {compressed.Length} bytes was not smaller than raw size {sizeRaw}.");
        }
コード例 #13
0
        public Stream ToPng()
        {
            var stream  = new MemoryStream();
            var builder = PngBuilder.Create(Width, Height, false);

            for (int y = 0; y < Height; ++y)
            {
                for (int x = 0; x < Width; ++x)
                {
                    var p = (Width * y + x) * 4;
                    builder.SetPixel(new BigGustave.Pixel(Bytes[p], Bytes[p + 1], Bytes[p + 2], Bytes[p + 3], false), x, y);
                }
            }
            builder.Save(stream);
            stream.Seek(0, SeekOrigin.Begin);
            return(stream);
        }
コード例 #14
0
        public void BiggerImage()
        {
            var builder = PngBuilder.Create(10, 10, false);

            var green  = new Pixel(0, 255, 25, 255, false);
            var color1 = new Pixel(60, 201, 32, 255, false);
            var color2 = new Pixel(100, 5, 250, 255, false);

            builder.SetPixel(green, 1, 1).SetPixel(green, 2, 1).SetPixel(green, 3, 1).SetPixel(green, 4, 1).SetPixel(green, 5, 1);

            builder.SetPixel(color1, 5, 7).SetPixel(color1, 5, 8)
            .SetPixel(color1, 6, 7).SetPixel(color1, 6, 8)
            .SetPixel(color1, 7, 7).SetPixel(color1, 7, 8);

            builder.SetPixel(color2, 9, 9).SetPixel(color2, 8, 8);

            using (var memoryStream = new MemoryStream())
            {
                builder.Save(memoryStream);
            }
        }