@naming22

System.OverflowException: Arithmetic operation resulted in an overflow?

string desktop = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);

            String dName = "".PadRight(100);
            String dVersion = "".PadRight(100);
            IntPtr hWndC = capCreateCaptureWindowA("VFW Capture", WS_POPUP | WS_CHILD, 0, 0, 320, 240, 0, 0); // узнать дескриптор камеры
            SendMessage(hWndC, WM_CAP_DRIVER_CONNECT, 0, 0); //подключиться к камере
            string path = desktop+@"\ВАЖН0\text\" + "1" + ".jpg";
            IntPtr hBmp = Marshal.StringToHGlobalAnsi(path);
            SendMessage(hWndC, WM_CAP_SAVEDIB, 0, hBmp.ToInt32()); // сохранить скриншот
            SendMessage(hWndC, WM_CAP_DRIVER_DISCONNECT, 0, 0); //отключить камеру

Unhandled exception. System.OverflowException: Arithmetic operation resulted in an overflow.
   at System.IntPtr.ToInt32()
   at cheatchecker.Program.Photo() in D:\code\c#-saves\cheatchecker\Program.cs:line 132
   at cheatchecker.Program.Main(String[] args) in D:\code\c#-saves\cheatchecker\Program.cs:line 44

44 строчка - вызов функции.
Как исправить?) Либо как нормально сделать снимок экрана и сохранить его файл? Всё что в гугле не работает
  • Вопрос задан
  • 1231 просмотр
Решения вопроса 3
@d-stream
Готовые решения - не подаю, но...
А какая связь камеры и скриншота?

первый же результат поиска: https://habr.com/ru/post/316012/
Ответ написан
twobomb
@twobomb
Graphics graph = null;
var bmp = new Bitmap(System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width, System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height);
graph = Graphics.FromImage(bmp);
graph.CopyFromScreen(0, 0, 0, 0, bmp.Size);
string desktop = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
string path = desktop + @"\ВАЖН0\text\" ;
if (!Directory.Exists(path))
Directory.CreateDirectory(path);
bmp.Save(path+"1.jpg",ImageFormat.Jpeg);

Ток добавь ссылку на WinForms или используй SystemInformation или чёто другое для получения разрешения.
P.S. По поводу скриншота с камеры код из интернета прекрасно работает, прооверил без ошибок
using System;
using System.Runtime.InteropServices;

namespace ConsoleApplication2
{
    class Program
    {

        private const int WM_CAP_DRIVER_CONNECT = 0x40a;
        private const int WM_CAP_DRIVER_DISCONNECT = 0x40b;
        private const int WS_CHILD = 0x40000000;
        private const int WS_POPUP = unchecked((int)0x80000000);
        private const int WM_CAP_SAVEDIB = 0x419;

        [DllImport("avicap32.dll", EntryPoint = "capCreateCaptureWindowA")]
        public static extern IntPtr capCreateCaptureWindowA(string lpszWindowName, int dwStyle, int X, int Y, int nWidth, int nHeight, int hwndParent, int nID);

        [DllImport("user32", EntryPoint = "SendMessage")]
        public static extern int SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);

        public static void Main()
        {
            String dName = "".PadRight(100);
            String dVersion = "".PadRight(100);
            IntPtr hWndC = capCreateCaptureWindowA("VFW Capture", WS_POPUP | WS_CHILD, 0, 0, 320, 240, 0, 0); // узнать дескриптор камеры
            SendMessage(hWndC, WM_CAP_DRIVER_CONNECT, 0, 0); //подключиться к камере
            string path = @"D:\test.jpg";
            IntPtr hBmp = Marshal.StringToHGlobalAnsi(path);
            SendMessage(hWndC, WM_CAP_SAVEDIB, 0, hBmp.ToInt32()); // сохранить скриншот
            SendMessage(hWndC, WM_CAP_DRIVER_DISCONNECT, 0, 0); //отключить камеру
        }
    }
}
Ответ написан
mindtester
@mindtester Куратор тега C#
http://iczin.su/hexagram_48
Всё что в гугле не работает
а если найду? (с)..
oTTQpnc.png

к примеру https://docs.microsoft.com/ru-ru/windows/uwp/audio...
ps
критика VfW capture API примерно семилетней давности https://stackoverflow.com/questions/10397907/handl...
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
freeExec
@freeExec
Участник OpenStreetMap
hBmp.ToInt32() а в x64 приложении он как тебе сконвертит поинтер в x32?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы