public FileSystemImage(int width, int height, string saveToBmp)
        {
            filePath   = saveToBmp;
            fileStream = File.Open(saveToBmp, FileMode.Create, FileAccess.Write, FileShare.None);
            using (var bw = new System.IO.BinaryWriter(fileStream, Encoding.UTF8, true))
            {
                var bheader = new DcmBITMAPFILEHEADER();
                bheader.bfOffBits   = 54;
                bheader.bfReserved1 = 0;
                bheader.bfReserved2 = 0;
                bheader.bfSize      = (uint)(54 + width * height * 4);
                bheader.bfType      = 19778;

                var binfo = new DcmBITMAPINFOHEADER();
                binfo.biBitCount     = 32;
                binfo.biClrImportant = 0;
                binfo.biClrUsed      = 0;
                binfo.biCompression  = DcmBitmapCompressionMode.BI_RGB;

                binfo.biWidth         = width;
                binfo.biHeight        = height;
                binfo.biPlanes        = 1;
                binfo.biSize          = 40;
                binfo.biSizeImage     = 0;
                binfo.biXPelsPerMeter = 3978;
                binfo.biYPelsPerMeter = 3978;
                var hd = DcmStructToBytes(bheader);
                var bd = DcmStructToBytes(binfo);
                bw.Write(hd);
                bw.Write(bd);
            }
        }
        public override bool Render(int components, bool bRorate90, string saveToPath)
        {
            //  var format = components == 4 ? PixelFormat.Format32bppArgb : PixelFormat.Format32bppRgb;
            var _pixels = this.pixels;

            using (var fs = new System.IO.FileStream(saveToPath, System.IO.FileMode.Create, System.IO.FileAccess.Write))
                using (var bw = new System.IO.BinaryWriter(fs))
                {
                    var bheader = new DcmBITMAPFILEHEADER();
                    bheader.bfOffBits   = 54;
                    bheader.bfReserved1 = 0;
                    bheader.bfReserved2 = 0;
                    bheader.bfSize      = (uint)(54 + _pixels.ByteSize);
                    bheader.bfType      = 19778;

                    var binfo = new DcmBITMAPINFOHEADER();
                    binfo.biBitCount     = 32;
                    binfo.biClrImportant = 0;
                    binfo.biClrUsed      = 0;
                    binfo.biCompression  = DcmBitmapCompressionMode.BI_RGB;
                    if (bRorate90)
                    {
                        //----旋转90度, 其它参数不变
                        binfo.biHeight = this.width;
                        binfo.biWidth  = this.height;
                    }
                    else
                    {
                        binfo.biWidth  = this.width;
                        binfo.biHeight = this.height;
                    }

                    binfo.biPlanes        = 1;
                    binfo.biSize          = 40;
                    binfo.biSizeImage     = 0;
                    binfo.biXPelsPerMeter = 3978;
                    binfo.biYPelsPerMeter = 3978;
                    var hd = DcmStructToBytes(bheader);
                    var bd = DcmStructToBytes(binfo);

                    bw.Write(hd);
                    bw.Write(bd);

                    if (false == bRorate90)
                    {
                        for (int i = this.height; i > 0; i--)
                        {
                            //int[] rawData = new int[ScaledData.Width];
                            //Buffer.BlockCopy(_pixels.Data, (i - 1) * ScaledData.Width, rawData, 0, ScaledData.Width);
                            for (int j = 0; j < this.width; j++)
                            {
                                int    ax = _pixels[(i - 1) * this.width + j];
                                byte[] ar = BitConverter.GetBytes(ax);
                                bw.Write(ar);
                            }
                        }
                    }
                    else
                    {
                        for (int i = 0; i < this.width; i++)
                        {
                            for (int j = 0; j < this.height; j++)
                            {
                                int    aw = _pixels[j * this.width + i];
                                byte[] ar = BitConverter.GetBytes(aw);
                                bw.Write(ar);
                            }
                        }
                    }
                    bw.Flush();
                    bw.Close();
                    fs.Close();
                    return(true);
                }
        }
        public override bool Render(int components, System.IO.MemoryStream bw, out int w, out int h, bool bRorate90)
        {
            w = this.width;
            h = this.height;
            var _pixels = this.pixels;
            {
                var bheader = new DcmBITMAPFILEHEADER();
                bheader.bfOffBits   = 54;
                bheader.bfReserved1 = 0;
                bheader.bfReserved2 = 0;
                bheader.bfSize      = (uint)(54 + _pixels.ByteSize);
                bheader.bfType      = 19778;

                var binfo = new DcmBITMAPINFOHEADER();
                binfo.biBitCount     = 32;
                binfo.biClrImportant = 0;
                binfo.biClrUsed      = 0;
                binfo.biCompression  = DcmBitmapCompressionMode.BI_RGB;
                if (bRorate90)
                {
                    //----旋转90度, 其它参数不变
                    h = this.width;
                    w = this.height;
                }
                else
                {
                    w = this.width;
                    h = this.height;
                }

                binfo.biPlanes        = 1;
                binfo.biSize          = 40;
                binfo.biSizeImage     = 0;
                binfo.biXPelsPerMeter = 3978;
                binfo.biYPelsPerMeter = 3978;
                var hd = DcmStructToBytes(bheader);
                var bd = DcmStructToBytes(binfo);

                bw.Write(hd, 0, hd.Length);
                bw.Write(bd, 0, bd.Length);



                if (false == bRorate90)
                {
                    for (int i = this.height; i > 0; i--)
                    {
                        //int[] rawData = new int[ScaledData.Width];
                        //Buffer.BlockCopy(_pixels.Data, (i - 1) * ScaledData.Width, rawData, 0, ScaledData.Width);
                        for (int j = 0; j < this.width; j++)
                        {
                            int    ax = _pixels[(i - 1) * this.width + j];
                            byte[] ar = BitConverter.GetBytes(ax);
                            bw.Write(ar, 0, 3);
                        }
                    }
                }
                else
                {
                    for (int i = 0; i < this.width; i++)
                    {
                        for (int j = 0; j < this.height; j++)
                        {
                            int    aw = _pixels[j * this.width + i];
                            byte[] ar = BitConverter.GetBytes(aw);
                            bw.Write(ar, 0, 3);
                        }
                    }
                }
                bw.Flush();

                return(true);
            }
        }