GDIP изображение сохранить непосредственно Intptr на моем локальном диске
У меня есть этот код, чтобы получить файл изображения со сканера и сохранить его на локальном диске:
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);
Диалог сохранения.
Я хочу отказаться от этого диалога и сохранить файл прямо на моем диске.
**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 ответ
Я думаю, что вы должны просто использовать встроенный Image
а также Bitmap
типы вместо непосредственного вызова функций gdip.dll
,
IntPtr img = (IntPtr)pics[i];
using (Bitmap bmp = Image.FromHBitmap(img))
{
bmp.Save(@"C:\a.jpg", ImageFormat.Jpeg);
}