Пример #1
0
        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;
                }
            }
        }
Пример #2
0
        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);
            }
        }