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); }
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)); }
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); }
/// <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); }