diff --git a/src/OpenJpegDotNet/IO/Reader.cs b/src/OpenJpegDotNet/IO/Reader.cs index de87d9d..3f8f756 100644 --- a/src/OpenJpegDotNet/IO/Reader.cs +++ b/src/OpenJpegDotNet/IO/Reader.cs @@ -147,7 +147,7 @@ private static ulong Read(IntPtr buffer, ulong bytes, IntPtr userData) unsafe { var buf = (Buffer*)userData; - var bytesToRead = (int)Math.Min((ulong)buf->Length, bytes); + var bytesToRead = (int)Math.Min((ulong)(buf->Length - buf->Position), bytes); if (bytesToRead > 0) { NativeMethods.cstd_memcpy(buffer, IntPtr.Add(buf->Data, buf->Position), bytesToRead); @@ -233,4 +233,4 @@ private void Dispose(bool disposing) } -} \ No newline at end of file +} diff --git a/src/OpenJpegDotNet/Util/ImageHelper.cs b/src/OpenJpegDotNet/Util/ImageHelper.cs index 9272052..57119d9 100644 --- a/src/OpenJpegDotNet/Util/ImageHelper.cs +++ b/src/OpenJpegDotNet/Util/ImageHelper.cs @@ -133,7 +133,7 @@ public static Image FromBitmap(Bitmap bitmap) break; case PixelFormat.Format8bppIndexed: channels = 1; - colorSpace = ColorSpace.Srgb; + colorSpace = ColorSpace.Gray; byteAllocated = 1; break; default: @@ -189,7 +189,22 @@ public static Image FromBitmap(Bitmap bitmap) { for (var i = 0; i < channels; i++) { - var target = image.Components[i].Data; + // need to fix the colorspace + IntPtr target; + if (channels >= 3) { + if (i == 0) { + target = image.Components[2].Data; // B-R + } else if (i == 1) { + target = image.Components[1].Data; // G-G + } else if (i == 2) { + target = image.Components[0].Data; // R-B + } else { + target = image.Components[i].Data; + } + } else { + target = image.Components[i].Data; + } + var pTarget = (int*)target; var source = (byte*)scan0; source += i; diff --git a/src/openjpeg b/src/openjpeg index 37ac30c..39e8c50 160000 --- a/src/openjpeg +++ b/src/openjpeg @@ -1 +1 @@ -Subproject commit 37ac30ceff6640bbab502388c5e0fa0bff23f505 +Subproject commit 39e8c50a2f9bdcf36810ee3d41bcbf1cc78968ae