diff --git a/src/ImageSharp.Drawing/ImageSharp.Drawing.csproj b/src/ImageSharp.Drawing/ImageSharp.Drawing.csproj
index 351764bb9..259ae4b0f 100644
--- a/src/ImageSharp.Drawing/ImageSharp.Drawing.csproj
+++ b/src/ImageSharp.Drawing/ImageSharp.Drawing.csproj
@@ -40,7 +40,7 @@
All
-
+
..\..\ImageSharp.ruleset
diff --git a/src/ImageSharp/Image.FromStream.cs b/src/ImageSharp/Image.FromStream.cs
index 41ac7757e..112b8a109 100644
--- a/src/ImageSharp/Image.FromStream.cs
+++ b/src/ImageSharp/Image.FromStream.cs
@@ -201,7 +201,7 @@ namespace ImageSharp
{
config = config ?? Configuration.Default;
- Image img = WithSeekableStream(stream, s => Decode(stream, options, config));
+ Image img = WithSeekableStream(stream, s => Decode(s, options, config));
if (img != null)
{
@@ -238,7 +238,7 @@ namespace ImageSharp
stream.CopyTo(ms);
ms.Position = 0;
- return action(stream);
+ return action(ms);
}
}
}
diff --git a/tests/ImageSharp.Tests/Image/ImageLoadTests.cs b/tests/ImageSharp.Tests/Image/ImageLoadTests.cs
index ddb9414cc..10b0cbb94 100644
--- a/tests/ImageSharp.Tests/Image/ImageLoadTests.cs
+++ b/tests/ImageSharp.Tests/Image/ImageLoadTests.cs
@@ -86,6 +86,20 @@ namespace ImageSharp.Tests
}
+ [Fact]
+ public void LoadFromNoneSeekableStream()
+ {
+ NoneSeekableStream stream = new NoneSeekableStream(this.DataStream);
+ Image img = Image.Load(stream);
+
+ Assert.NotNull(img);
+ Assert.Equal(TestFormat.GlobalTestFormat, img.CurrentImageFormat);
+
+
+ TestFormat.GlobalTestFormat.VerifyDecodeCall(this.Marker, null, Configuration.Default);
+
+ }
+
[Fact]
public void LoadFromStreamWithType()
{
diff --git a/tests/ImageSharp.Tests/Image/NoneSeekableStream.cs b/tests/ImageSharp.Tests/Image/NoneSeekableStream.cs
new file mode 100644
index 000000000..bc36b60eb
--- /dev/null
+++ b/tests/ImageSharp.Tests/Image/NoneSeekableStream.cs
@@ -0,0 +1,50 @@
+using System;
+using System.IO;
+
+namespace ImageSharp.Tests
+{
+ internal class NoneSeekableStream : Stream
+ {
+ private Stream dataStream;
+
+ public NoneSeekableStream(Stream dataStream)
+ {
+ this.dataStream = dataStream;
+ }
+
+ public override bool CanRead => this.dataStream.CanRead;
+
+ public override bool CanSeek => false;
+
+ public override bool CanWrite => false;
+
+ public override long Length => this.dataStream.Length;
+
+ public override long Position { get => this.dataStream.Position; set => throw new NotImplementedException(); }
+
+ public override void Flush()
+ {
+ this.dataStream.Flush();
+ }
+
+ public override int Read(byte[] buffer, int offset, int count)
+ {
+ return this.dataStream.Read(buffer, offset, count);
+ }
+
+ public override long Seek(long offset, SeekOrigin origin)
+ {
+ throw new NotImplementedException();
+ }
+
+ public override void SetLength(long value)
+ {
+ throw new NotImplementedException();
+ }
+
+ public override void Write(byte[] buffer, int offset, int count)
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
\ No newline at end of file