public override void Write(byte[] buffer, int offset, int count) { if (_disposed) { throw new ObjectDisposedException(); } if (!_canWrite) { throw new NotSupportedException(); } // argument validation in interop layer int bytesWritten; lock (_nativeFileStream) { // we check for count being != 0 because we want to handle negative cases // as well in the interop layer while (count != 0) { bytesWritten = _nativeFileStream.Write(buffer, offset, count, NativeFileStream.TimeoutDefault); if (bytesWritten == 0) { throw new IOException(); } offset += bytesWritten; count -= bytesWritten; } } }
internal static void CompareImage(Image from, Image to, string file = null) { // Check that description is identical to original image loaded from the disk. Assert.AreEqual(from.Description, to.Description, "Image description is different for image [{0}]", file); // Check that number of buffers are identical. Assert.AreEqual(from.PixelBuffer.Count, to.PixelBuffer.Count, "PixelBuffer size is different for image [{0}]", file); // Compare each pixel buffer for (int j = 0; j < from.PixelBuffer.Count; j++) { var srcPixelBuffer = from.PixelBuffer[j]; var dstPixelBuffer = to.PixelBuffer[j]; // Check only row and slice pitch Assert.AreEqual(srcPixelBuffer.RowStride, dstPixelBuffer.RowStride, "RowPitch is different for index [{0}], image [{1}]", j, file); Assert.AreEqual(srcPixelBuffer.BufferStride, dstPixelBuffer.BufferStride, "SlicePitch is different for index [{0}], image [{1}]", j, file); var isSameBuffer = Utilities.CompareMemory(srcPixelBuffer.DataPointer, dstPixelBuffer.DataPointer, srcPixelBuffer.BufferStride); if (!isSameBuffer) { var stream = new NativeFileStream("test_from.dds", NativeFileMode.Create, NativeFileAccess.Write, NativeFileShare.Write); stream.Write(srcPixelBuffer.DataPointer, 0, srcPixelBuffer.BufferStride); stream.Close(); stream = new NativeFileStream("test_to.dds", NativeFileMode.Create, NativeFileAccess.Write, NativeFileShare.Write); stream.Write(dstPixelBuffer.DataPointer, 0, dstPixelBuffer.BufferStride); stream.Close(); } Assert.True(isSameBuffer, "Content of PixelBuffer is different for index [{0}], image [{1}]", j, file); } }