BinaryFileVisualizer.Model.DrawBitmap C# (CSharp) Method

DrawBitmap() private method

private DrawBitmap ( ) : void
return void
        private void DrawBitmap()
        {
            bitmap.Lock();

            var bitmapLinePosition = bitmap.BackBuffer;
            var bitmapStride = bitmap.BackBufferStride;
            var bitmapWidth = bitmap.Width;
            var fileLineBytes = 3L * viewSize.Width;
            var filePosition = fileLineBytes * scrollPosition;
            long remainLineBytes;
            var bitmapFullLines = Math.Min(bitmap.Height, Math.DivRem(fileLength, fileLineBytes, out remainLineBytes) - scrollPosition);

            for (var y = 0; y < bitmapFullLines; ++y)
            {
                var bitmapOffset = 0;

                for (var x = 0; x < bitmapWidth; ++x)
                {
                    DrawPixel(bitmapLinePosition, bitmapOffset, filePosition);

                    bitmapOffset += 4;
                    filePosition += 3;
                }

                bitmapLinePosition += bitmapStride;
            }

            if (bitmapFullLines < bitmap.Height && remainLineBytes > 0)
            {
                long remainBytes;
                var fullPixels = Math.DivRem(remainLineBytes, 3, out remainBytes);
                var bitmapOffset = 0;

                for (var x = 0; x < fullPixels; ++x)
                {
                    DrawPixel(bitmapLinePosition, bitmapOffset, filePosition);

                    bitmapOffset += 4;
                    filePosition += 3;
                }

                if (remainBytes == 1)
                {
                    byte r;

                    fileAccessor.Read(filePosition, out r);

                    WriteColor(bitmapLinePosition, bitmapOffset, r, 0, 0, byte.MaxValue / 3);
                }
                else if (remainBytes == 2)
                {
                    byte r, g;

                    fileAccessor.Read(filePosition, out r);
                    fileAccessor.Read(filePosition + 1, out g);

                    WriteColor(bitmapLinePosition, bitmapOffset, r, g, 0, byte.MaxValue / 3 * 2);
                }

                // Set remain pixels to zeroes.
                var bitmapBytesEnd = bitmap.BackBuffer + bitmapStride * bitmap.PixelHeight;

                for (var p = bitmapLinePosition + bitmapOffset + 4; p != bitmapBytesEnd; p += 4)
                {
                    WriteColor(p, 0, 0, 0, 0, 0);
                }
            }

            bitmap.AddDirtyRect(new Int32Rect(0, 0, bitmap.PixelWidth, bitmap.PixelHeight));

            bitmap.Unlock();
        }