gdip image直接在我的本地驱动器中保存intptr

时间:2016-09-13 08:16:01

标签: c# image scanning intptr save-dialog

我有这段代码从扫描仪获取图像文件并将其保存在本地磁盘上:

                            IntPtr img = (IntPtr)pics[i];
                            SetStyle(ControlStyles.DoubleBuffer, false);
                            SetStyle(ControlStyles.AllPaintingInWmPaint, true);
                            SetStyle(ControlStyles.Opaque, true);
                            SetStyle(ControlStyles.ResizeRedraw, true);
                            SetStyle(ControlStyles.UserPaint, true);
                            bmprect = new Rectangle(0, 0, 0, 0);
                            bmpptr = GlobalLock(img);
                            pixptr = GetPixelInfo(bmpptr);
                            Gdip.SaveDIBAs(@"C:\", bmpptr, pixptr);

问题在于Gdip.SaveDIBAs(@"C:\", bmpptr, pixptr);。保存对话框。 enter image description here

我想放弃此对话框并将文件直接保存在我的驱动器中。

**Updated:**



  public static bool SaveDIBAs(string picname, IntPtr bminfo, IntPtr pixdat)
        {
            SaveFileDialog sd = new SaveFileDialog();

            sd.FileName = picname;
            sd.Title = "Save bitmap as...";
            sd.Filter =
                "Bitmap file (*.bmp)|*.bmp|TIFF file (*.tif)|*.tif|JPEG file (*.jpg)|*.jpg|PNG file (*.png)|*.png|GIF file (*.gif)|*.gif|All files (*.*)|*.*";
            sd.FilterIndex = 1;

            return true;
        }
      for (int i = 0; i < pics.Count; i++)
                            {
                                IntPtr img = (IntPtr)pics[i];


                                SetStyle(ControlStyles.DoubleBuffer, false);
                                SetStyle(ControlStyles.AllPaintingInWmPaint, true);
                                SetStyle(ControlStyles.Opaque, true);
                                SetStyle(ControlStyles.ResizeRedraw, true);
                                SetStyle(ControlStyles.UserPaint, true);

                                bmprect = new Rectangle(0, 0, 0, 0);

                                bmpptr = GlobalLock(img);
                                pixptr = GetPixelInfo(bmpptr);

                                SaveDIBAs(@"C:\a.jpg", bmpptr, pixptr);
    }

1 个答案:

答案 0 :(得分:0)

我认为您应该只使用内置的ImageBitmap类型,而不是直接调用gdip.dll的函数。

IntPtr img = (IntPtr)pics[i];
using (Bitmap bmp = Image.FromHBitmap(img))
{
     bmp.Save(@"C:\a.jpg", ImageFormat.Jpeg);
}