Beispiel #1
0
        public void ManagedStreamReadsOffsetChunkCorrectly()
        {
            var data = new byte[1024];

            for (int i = 0; i < data.Length; i++)
            {
                data[i] = (byte)(i % byte.MaxValue);
            }

            var stream          = new MemoryStream(data);
            var skManagedStream = new SKManagedStream(stream);

            var offset = 768;

            skManagedStream.Position = offset;

            var buffer = new byte[data.Length];
            var taken  = skManagedStream.Read(buffer, buffer.Length);

            Assert.AreEqual(data.Length - offset, taken);

            var resultData = data.Skip(offset).Take(buffer.Length).ToArray();

            resultData = resultData.Concat(Enumerable.Repeat <byte>(0, offset)).ToArray();
            Assert.AreEqual(resultData, buffer);
        }
        public void ManagedStreamReadsChunkCorrectly()
        {
            var data = new byte[1024];
            for (int i = 0; i < data.Length; i++)
            {
                data[i] = (byte)(i % byte.MaxValue);
            }

            var stream = new MemoryStream(data);
            var skManagedStream = new SKManagedStream(stream);

            skManagedStream.Rewind();
            Assert.AreEqual(0, stream.Position);
            Assert.AreEqual(0, skManagedStream.Position);

            var buffer = new byte[data.Length / 2];
            skManagedStream.Read(buffer, buffer.Length);

            CollectionAssert.AreEqual(data.Take(buffer.Length), buffer);
        }
Beispiel #3
0
        public void ReadIsCorrect(int dataSize, int readSize, int finalPos, int expectedReadSize)
        {
            var data = new byte[dataSize];

            for (var i = 0; i < data.Length; i++)
            {
                data[i] = (byte)(i % byte.MaxValue);
            }

            var stream        = new MemoryStream(data);
            var managedStream = new SKManagedStream(stream);

            var buffer = new byte[dataSize * 2];

            var actualReadSize = managedStream.Read(buffer, readSize);

            Assert.Equal(expectedReadSize, actualReadSize);
            Assert.Equal(finalPos, managedStream.Position);
            Assert.Equal(data.Take(readSize), buffer.Take(actualReadSize));
            Assert.All(buffer.Skip(actualReadSize), i => Assert.Equal(0, i));
        }
Beispiel #4
0
        public void ManagedStreamReadsChunkCorrectly()
        {
            var data = new byte[1024];

            for (int i = 0; i < data.Length; i++)
            {
                data[i] = (byte)(i % byte.MaxValue);
            }

            var stream          = new MemoryStream(data);
            var skManagedStream = new SKManagedStream(stream);

            skManagedStream.Rewind();
            Assert.AreEqual(0, stream.Position);
            Assert.AreEqual(0, skManagedStream.Position);

            var buffer = new byte[data.Length / 2];

            skManagedStream.Read(buffer, buffer.Length);

            Assert.AreEqual(data.Take(buffer.Length), buffer);
        }
        public void ManagedStreamReadsOffsetChunkCorrectly()
        {
            var data = new byte[1024];
            for (int i = 0; i < data.Length; i++)
            {
                data[i] = (byte)(i % byte.MaxValue);
            }

            var stream = new MemoryStream(data);
            var skManagedStream = new SKManagedStream(stream);

            var offset = 768;

            skManagedStream.Position = offset;

            var buffer = new byte[data.Length];
            var taken = skManagedStream.Read(buffer, buffer.Length);

            Assert.AreEqual(data.Length - offset, taken);

            var resultData = data.Skip(offset).Take(buffer.Length).ToArray();
            resultData = resultData.Concat(Enumerable.Repeat<byte>(0, offset)).ToArray();
            CollectionAssert.AreEqual(resultData, buffer);
        }
Beispiel #6
0
 /// <summary>
 /// ѹËõͼƬ
 /// </summary>
 /// <param name="stream">ÎļþÁ÷</param>
 /// <param name="savePath">±£´æ·¾¶</param>
 /// <param name="maxSize">ͼƬ×î´ó¿í¸ß</param>
 /// <param name="quality">ѹËõÂÊ</param>
 /// <param name="imageFormat">Òª±£´æµÄͼƬ¸ñʽ</param>
 public ImageHelper Compress(Stream stream, ref string savePath, Size?maxSize = null, int quality = 80, ImageFormat?imageFormat = null)
 {
     if (savePath.EndsWith(".gif", StringComparison.OrdinalIgnoreCase))
     {
         using (var inputStream = new SKManagedStream(stream))
         {
             var buffer = new byte[inputStream.Length];
             inputStream.Read(buffer, buffer.Length);
             System.IO.File.WriteAllBytes(savePath, buffer);
         }
         return(this);
     }
     using (var inputStream = new SKManagedStream(stream))
     {
         using (var original = SKBitmap.Decode(inputStream))
         {
             if (imageFormat == null)
             {
                 if (original.Info.IsOpaque)
                 {
                     imageFormat = ImageFormat.Jpeg;
                     savePath    = savePath.Replace(".png", ".jpg");
                 }
                 else
                 {
                     imageFormat = ImageFormat.Png;
                     savePath    = savePath.Replace(".jpg", ".png");
                 }
             }
             SKBitmap bitmap;
             if (maxSize != null && !maxSize.Value.IsEmpty && (original.Width > maxSize.Value.Width || original.Height > maxSize.Value.Height))
             {
                 int width, height;
                 if (original.Width > original.Height)
                 {
                     var size = maxSize.Value.Width;
                     width  = size;
                     height = original.Height * size / original.Width;
                 }
                 else
                 {
                     var size = maxSize.Value.Height;
                     width  = original.Width * size / original.Height;
                     height = size;
                 }
                 bitmap = original.Resize(new SKImageInfo(width, height), SKBitmapResizeMethod.Lanczos3);
             }
             else
             {
                 bitmap = original;
             }
             using (var image = SKImage.FromBitmap(bitmap))
             {
                 using (var output = File.OpenWrite(savePath))
                 {
                     image.Encode((SKEncodedImageFormat)imageFormat.Value, quality)
                     .SaveTo(output);
                 }
             }
         }
     }
     return(this);
 }