1 / 1 / 0
Регистрация: 22.04.2016
Сообщений: 40
1

Воспроизведение видео с ip камеры

22.04.2016, 15:21. Показов 54724. Ответов 78
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день!
Решил написать программку, которая отображала бы в окне поток из сети (по протоколу http или rtsp). Главное, чтобы без задержки!
Имеется обычная китайская ip камера 2mp. Программа Onvif отображает поток с этой камеры по rtsp без задержек. И я хочу также. Как это можно реализовать? И можно там, чтобы сделать цифровой zoom с интерполяцией!?

Неделю перекапывал весь интернет и только закопался:
1 - Поставил плагин VLC в borland, но выдает с секундной задержкой. Вариант отпал(
2 - Попробовал вариант с DirectShow.. значит надо установить фильтр для ip камеры:
- RTSP Client DirectShow Source Filter - не получилось добавить в область GraphEdit (М.б. из-за того что у меня Win7 x64)
- IP Camera [JPEG/MJPEG] DirectShow Filter - виснет GraphEdit при добавлении в область (М.б. из-за того что у меня Win7 x64)
- Onvif Filter (HappyTimeSoft) - Программой не удалось открыть поток с ip камеры(выдает ошибку что устройство не может открыть)
3 - Подумал о варианте использовать GStreamer, но не нашел простяцкого описания о реализации этого метода. (Ну этот вариант на крайняк, т.к. хочу, чтобы моя программа была самостоятельной без каких-либо дополнительных программ)

И по всем этим причинам хочу узнать: Может где-то я что-то не дотянул? Как мне воспроизвести видео с ip камеры без задержки, в среде Borland, например!? И можно чтобы потом добавить цифровой zoom с интерполяцией!?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.04.2016, 15:21
Ответы с готовыми решениями:

Запись видео с веб камеры
Новичок в этом деле. Я даже не знаю в какую тему мой вопрос опубликовать. Сейчас набираю теорию...

Захват видео с веб-камеры (C++)
Здравствуйте! Я установил Visual Studio 2015 Community и библиотеку OpenCV 3.1.0 на Windows 10....

DirectShow: захват видео с веб-камеры, воспроизведение
Посоветуйте для начала понятный мануал, что-бы можно было с нуля разобраться (желательно без воды)....

Наложить видео с альфа каналом поверх картинки с камеры, чтобы видео не перекрывало картинку
всем привет! стоит такая задача: есть видео в контейнере .mov, которое содержит альфаканал...

78
1 / 1 / 0
Регистрация: 24.08.2016
Сообщений: 13
04.03.2017, 09:22 41
Author24 — интернет-сервис помощи студентам
Люди...Хелп ... ошибка 0xc0150002

Не могу запустить этот проект на других компьютерах. И не могу понять что ей не хватает. Хотя на моем рабочем ПК всё идет, но там винда стоит уже 6 лет и забита программами.

Ошибка на скрине во вложении.

Может какая часть фрейм ворка не входящий в основной состав или ещё что то.

стоят Microsoft Visual C++ Redistributable 2005, 2008, 2010, 2012, 2013, 2015
Миниатюры
Воспроизведение видео с ip камеры  
0
Модератор
3382 / 2154 / 352
Регистрация: 13.01.2012
Сообщений: 8,371
04.03.2017, 11:41 42
leshiy532, dll все есть?
0
1 / 1 / 0
Регистрация: 24.08.2016
Сообщений: 13
04.03.2017, 15:08 43
vxg, Вот и я думаю что не все, но не знаю, знаю ли я про все что нужны.

Есть все из описания в файле HELP

Установил на другой комп Borland C++ и проект так же не запускается.

Ладно бы если на одном была такая фигня... а нет ведь уже на 4 испытал.. Win7 и Win8
0
Модератор
3382 / 2154 / 352
Регистрация: 13.01.2012
Сообщений: 8,371
04.03.2017, 19:20 44
leshiy532, хотите верьте хотите нет но у меня на всех испытываемых компах запускается) расскажите на какой строке вылетает проект если запустить его в режиме отладки?
0
1 / 1 / 0
Регистрация: 24.08.2016
Сообщений: 13
04.03.2017, 19:29 45
vxg, Вообще не запускается
0
Модератор
3382 / 2154 / 352
Регистрация: 13.01.2012
Сообщений: 8,371
04.03.2017, 19:51 46
leshiy532, вы скачали dll и выполнили пересборку обоих проектов? Какую версию dll скачали?
0
1 / 1 / 0
Регистрация: 24.08.2016
Сообщений: 13
04.03.2017, 19:54 47
vxg, Если я Вас правильно понял ... версия 2.8.6, пересобрал тот же проект что и на работающем компе
0
Модератор
3382 / 2154 / 352
Регистрация: 13.01.2012
Сообщений: 8,371
04.03.2017, 19:57 48
leshiy532, не совсем то что хотел услышать. попробуйте ffmpeg-20160227-git-5156578-win32 - она была последней не имеющей некоторых проблем с совместимостью
0
1 / 1 / 0
Регистрация: 24.08.2016
Сообщений: 13
04.03.2017, 20:04 49
vxg, Нет результата.

может поможет...

Отладка: C:\Users\Grenc\Desktop\exe\ffmpeg_test_bcb.exe
Файл базы данных: C:\Users\Grenc\Desktop\release\x32\db\ffmpeg_test_bcb.exe.dd32
Процесс запущен: 00400000 C:\Users\Grenc\Desktop\exe\ffmpeg_test_bcb.exe
Точка останова по адресу 004012FC установлена!
DLL загружена: 77CE0000 C:\Windows\SysWOW64\ntdll.dll
DLL выгружена: 002A0000
DLL выгружена: 75C40000
DLL выгружена: 002A0000
DLL выгружена: 004A0000
DLL загружена: 75C40000 C:\Windows\SysWOW64\kernel32.dll
DLL загружена: 775C0000 C:\Windows\SysWOW64\KernelBase.dll
DLL загружена: 70960000 C:\Program Files\AVAST Software\Avast\aswhookx.dll
DLL загружена: 71590000 C:\Windows\SysWOW64\apphelp.dll
Строка отладки: «SHIMVIEW: ShimInfo(Complete)\r\n»
DLL загружена: 658C0000 C:\Users\Grenc\Desktop\exe\ffmpeg_test.dll
DLL загружена: 776C0000 C:\Windows\SysWOW64\advapi32.dll
DLL загружена: 77850000 C:\Windows\SysWOW64\comctl32.dll
DLL загружена: 77740000 C:\Windows\SysWOW64\gdi32.dll
DLL загружена: 75ED0000 C:\Windows\SysWOW64\shell32.dll
DLL загружена: 75D80000 C:\Windows\SysWOW64\user32.dll
DLL загружена: 77B40000 C:\Windows\SysWOW64\oleaut32.dll
Процесс завершился с кодом 0xC0150002
Сохранение базы данных в C:\Users\Grenc\Desktop\release\x32\db\ffmpeg_test_bcb.exe.dd32 0мс
Отладка остановлена!
0
Модератор
3382 / 2154 / 352
Регистрация: 13.01.2012
Сообщений: 8,371
04.03.2017, 20:09 50
leshiy532, если я правильно читаю Это, то до загрузки ffmpeg дело даже не доходит. попробуйте через Dependency Walker на той машине где не работает глянуть, а все ли зависимости он находит

Добавлено через 1 минуту
...у вас XE..?
0
1 / 1 / 0
Регистрация: 24.08.2016
Сообщений: 13
04.03.2017, 20:09 51
vxg, Вот ещё запустил программку dependency walker

скрин во вложении

пишет нет 2 библиотек, но найти их в инете не могу
Миниатюры
Воспроизведение видео с ip камеры  
0
1 / 1 / 0
Регистрация: 24.08.2016
Сообщений: 13
04.03.2017, 20:10 52
vxg, Да я это и хотел сказать что завершается моментально, не доходя до этой библиотеки
0
Модератор
3382 / 2154 / 352
Регистрация: 13.01.2012
Сообщений: 8,371
04.03.2017, 20:14 53
leshiy532, дурной вопрос но все таки: avcodec-*.dll avformat-*.dll avutil-*.dll swresample-*.dll swscale-*.dll (вместо звездочек должны быть те номера которые вы использовали при сборке ffmpeg_test.dll) и сама ffmpeg_test.dll лежат рядом с exe?
0
1 / 1 / 0
Регистрация: 24.08.2016
Сообщений: 13
04.03.2017, 20:30 54
vxg, Да, лежат, даже ради интереса закидывал ещё всяких других
0
Модератор
3382 / 2154 / 352
Регистрация: 13.01.2012
Сообщений: 8,371
06.03.2017, 10:06 55
leshiy532, смог воспроизвести на одной из машин ошибку 0xc0150002
причина: нет msvcr*.dll
решение: выполните сборку ffmpeg_test.dll указав в Configuration Properties/C/C++/Code Generation/Runtime Library вместо Multi-threaded Debug DLL (/MDd) значение Multi-threaded Debug (/MTd)
альтернативный вариант (не пробовал): установите Распространяемый пакет Microsoft Visual C++ 2008 (x86)
1
Модератор
3382 / 2154 / 352
Регистрация: 13.01.2012
Сообщений: 8,371
06.03.2017, 10:44 56
альтернативный вариант 2 (пробовал): положить рядом с exe файлы от которых зависит ffmpeg_test.dll
Microsoft.VC90.DebugCRT.manifest
msvcm90d.dll
msvcp90d.dll
msvcr90d.dll
на всякий случай прикрепляю сборку не зависящую от msvcr*.dll
Вложения
Тип файла: rar ffmpeg_test_.rar (2.85 Мб, 62 просмотров)
1
0 / 0 / 2
Регистрация: 25.05.2015
Сообщений: 28
27.01.2018, 12:31 57
Добавлено через 9 минут
Прошу помочь... Решил освоить uwp...
Вообщем пытаюсь воспроизвести видео с помощью directx11 + xaml + ffmpeg...
Есть класс: ipc_t - который написал "VSG"

Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
#include <windows.h>
//---------------------------------------------------------------------------
extern "C" {
#include <libavformat/avformat.h>
#include <libavdevice/avdevice.h>
#include <libswscale/swscale.h>
}
 
#include <stdio.h>
 
class ipc_t
{
public:
    AVFormatContext *format_ctx;
 
    int stream;
 
    AVCodecContext *codec_ctx;
 
    AVFrame *frame;
 
    AVFrame *x_bgr_frame;
 
    SwsContext *x_bgr_ctx;
 
    HANDLE thread_h;
    int terminated;
 
    DWORD proc(void);
 
    void ffmpeg_test_start(char *src);
    void ffmpeg_test_stop(void);
    int ffmpeg_test_get_bmp(void *bmp_bits, int w, int h);
 
 
/********************/
 
 
    HWND hWnd;
     
    int buffer_w, buffer_h;
     
    char *form_bmp_bits;
    HBITMAP form_bmp_h;
     
    void cb(void);
    void create_frame_buffer(void);
    void destroy_frame_buffer(void);
    void init(void);
    void paint(void);
    void uninit(void);
};
 
static DWORD WINAPI global_proc(LPVOID arg)
{
    ipc_t *ipc= (ipc_t *)arg;
    return ipc->proc();
}
 
DWORD ipc_t::proc(void)
{
    AVPacket packet;
    int finished;
    while (!terminated)
    {
        if (av_read_frame(format_ctx, &packet) != 0)
        {
            return 0;
        }
        else if (packet.stream_index == stream)
        {
            if (avcodec_decode_video2(codec_ctx, frame, &finished, &packet) > 0)
            {
                if (finished)
                {
                    cb();
                }
            }
        }
        av_free_packet(&packet);
    }
 
    return 0;
}
 
void ipc_t::ffmpeg_test_start(char *src)
{
    av_register_all();
 
    format_ctx = avformat_alloc_context();
    if (!format_ctx)
    {
        return;
    }
 
    AVDictionary *opts = 0;
    //av_dict_set(&opts, "rtsp_transport", "tcp", 0);
 
    if (avformat_open_input(&format_ctx, src, 0, &opts) != 0)
    {
        return;
    }
 
    if (avformat_find_stream_info(format_ctx, 0) < 0)
    {
        return;
    }
  
    stream = -1;
    for (int i = 0; i < format_ctx->nb_streams; i++)
        if (format_ctx->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO)
        {
            stream = i;
            break;
        }
    if (stream == -1)
    {
        return;
    }
  
    codec_ctx = format_ctx->streams[stream]->codec;
  
    AVCodec *codec = avcodec_find_decoder(codec_ctx->codec_id);
    if (!codec)
    {
        return;
    }
 
    if (avcodec_open2(codec_ctx, codec, 0) != 0)
    {
        return;
    }
 
    frame = av_frame_alloc();
    if (!frame)
    {
        return;
    }
 
    x_bgr_frame = 0;
 
    terminated = 0;
    DWORD thread_id;
    thread_h = CreateThread
    (
        0,
        0,
        global_proc,
        this,
        0,
        &thread_id
    );
}
 
void ipc_t::ffmpeg_test_stop(void)
{
    terminated = 1;
 
    WaitForSingleObject(thread_h, INFINITE);
    CloseHandle(thread_h);
 
    sws_freeContext(x_bgr_ctx);
 
    av_free(x_bgr_frame);
    av_free(frame);
  
    avcodec_close(codec_ctx);
  
    avformat_close_input(&format_ctx);
 
    avformat_free_context(format_ctx);
}
 
int ipc_t::ffmpeg_test_get_bmp(void *bmp_bits, int w, int h)
{
    if (!x_bgr_frame || x_bgr_frame->width != w || x_bgr_frame->height != h)
    {
        sws_freeContext(x_bgr_ctx);
        av_free(x_bgr_frame);
 
        x_bgr_frame = 0;
        x_bgr_ctx = 0;
 
        x_bgr_frame = av_frame_alloc();
        if (!x_bgr_frame)
        {
            return 0;
        }
 
        x_bgr_frame->width = w;
        x_bgr_frame->height = h;
 
        if 
        (
            avpicture_fill((AVPicture *)x_bgr_frame, 0, PIX_FMT_RGB32, w, h) < 0
        )
        {
            return 0;
        }
 
        x_bgr_ctx = sws_getContext(codec_ctx->width, codec_ctx->height, codec_ctx->pix_fmt, w, h, PIX_FMT_RGB32, SWS_BICUBIC, 0, 0, 0);
        if (!x_bgr_ctx)
        {
            return 0;
        }
    }
 
    x_bgr_frame->data[0] = (uint8_t *)bmp_bits;
    x_bgr_frame->data[0] += x_bgr_frame->linesize[0] * (h - 1);
    x_bgr_frame->linesize[0] = -x_bgr_frame->linesize[0];   
    sws_scale(x_bgr_ctx, frame->data, frame->linesize, 0, codec_ctx->height, x_bgr_frame->data, x_bgr_frame->linesize);
    x_bgr_frame->linesize[0] = -x_bgr_frame->linesize[0]; 
 
    return 1;
}
//---------------------------------------------------------------------------
void ipc_t::cb(void)
{
    ffmpeg_test_get_bmp(form_bmp_bits, buffer_w, buffer_h);
    InvalidateRect(hWnd, NULL, FALSE);    
}
//---------------------------------------------------------------------------
void ipc_t::create_frame_buffer(void)
{
    BITMAPINFOHEADER form_bmi_hdr;
    form_bmi_hdr.biSize = sizeof(BITMAPINFOHEADER);
    form_bmi_hdr.biWidth = buffer_w;
    form_bmi_hdr.biHeight = buffer_h;
    form_bmi_hdr.biPlanes = 1;
    form_bmi_hdr.biBitCount = 32;
    form_bmi_hdr.biCompression = BI_RGB;
    form_bmi_hdr.biSizeImage = form_bmi_hdr.biWidth * form_bmi_hdr.biHeight * 4;
    form_bmi_hdr.biXPelsPerMeter = 0;
    form_bmi_hdr.biYPelsPerMeter = 0;
    form_bmi_hdr.biClrUsed = 0;
    form_bmi_hdr.biClrImportant = 0;
 
    form_bmp_h = CreateDIBSection(0, (BITMAPINFO *)&form_bmi_hdr, DIB_RGB_COLORS, (void **)&form_bmp_bits, 0, 0);
}
//---------------------------------------------------------------------------
void ipc_t::destroy_frame_buffer(void)
{
    DeleteObject(form_bmp_h);
}
//---------------------------------------------------------------------------
void ipc_t::init(void)
{
    create_frame_buffer();
 
    ffmpeg_test_start("rtsp://127.0.0.1:8554/");
}
//---------------------------------------------------------------------------
void ipc_t::paint(void)
{
    if (form_bmp_h)
    {
        PAINTSTRUCT ps;
        HDC paint_hdc = BeginPaint(hWnd, &ps);
 
        HDC hdc_1 = CreateCompatibleDC(paint_hdc);
        HDC hdc_2 = CreateCompatibleDC(paint_hdc);
 
        HBITMAP h_1 = CreateCompatibleBitmap(paint_hdc, buffer_w, buffer_h);
        HBITMAP old_h_1 = (HBITMAP)SelectObject(hdc_1, h_1);
 
        HBITMAP old_h_2 = (HBITMAP)SelectObject(hdc_2, form_bmp_h);
        BitBlt(hdc_1, 0, 0, buffer_w, buffer_h, hdc_2, 0, 0, SRCCOPY);
 
        BitBlt(paint_hdc, 0, 0, buffer_w, buffer_h, hdc_1, 0, 0, SRCCOPY);
 
        SelectObject(hdc_1, old_h_1);
        SelectObject(hdc_2, old_h_2);
 
        DeleteObject(h_1);
 
        DeleteDC(hdc_1);
        DeleteDC(hdc_2);
 
        EndPaint(hWnd, &ps);
    }
}
//---------------------------------------------------------------------------
void ipc_t::uninit(void)
{
    ffmpeg_test_stop();
 
    destroy_frame_buffer();
}
//---------------------------------------------------------------------------
ipc_t ipc;
 
LRESULT CALLBACK PictViewWndProc(HWND hWnd, UINT Message, UINT wParam, LONG lParam) {
    switch (Message) {
    case WM_PAINT:
        ipc.paint();
        return 0;
    case WM_DESTROY:
        ipc.uninit();
        PostQuitMessage(0);
        return 0;
    }
    return DefWindowProc(hWnd, Message, wParam, lParam);
}
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow) {
    WNDCLASS WndClass;
    MSG Msg;
    char szClassName[] = "PictView";
 
    WndClass.style = CS_HREDRAW | CS_VREDRAW;
    WndClass.lpfnWndProc = PictViewWndProc;
    WndClass.cbClsExtra = 0;
    WndClass.cbWndExtra = 0;
    WndClass.hInstance = hInstance;
    WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
    WndClass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
    WndClass.lpszMenuName = NULL;
    WndClass.lpszClassName = TEXT("PictView");
 
    if (!RegisterClass(&WndClass)) {
        MessageBox(NULL, TEXT("Can't register class"), TEXT("Error"), MB_OK);
        return 0;
    }
 
    ipc.hWnd = CreateWindow(TEXT("PictView"), TEXT("Picture View"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,
        CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
    if (!ipc.hWnd) {
        MessageBox(NULL, TEXT("Can't create window"), TEXT("Error"), MB_OK);
        return 0;
    }
 
    ShowWindow(ipc.hWnd, nCmdShow);
    UpdateWindow(ipc.hWnd);
 
    RECT rect;
    GetWindowRect(ipc.hWnd, &rect);
    ipc.buffer_w = rect.right - rect.left;
    ipc.buffer_h = rect.bottom - rect.top;
 
    ipc.init();
    while (GetMessage(&Msg, NULL, 0, 0)) {
        TranslateMessage(&Msg);
        DispatchMessage(&Msg);
    }
    return Msg.wParam;
}

пару методов отрисовки из другого класса:
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
// Инециализация
SpriteSheet::SpriteSheet(const std::shared_ptr<DX::DeviceResources>& deviceResources) : m_deviceResources(deviceResources)
{
        m_ipc = std::unique_ptr<FFUtil::ipc_t>(new FFUtil::ipc_t()); // класс ipc_t
    m_bitMap = m_deviceResources->GetD2DTargetBitmap(); // Microsoft::WRL::ComPtr<ID2D1Bitmap> m_bitMap;
        ipc->buffer_w = 200; // передаю ширину
    ipc->buffer_h = 150; // передаю высоту
}
 
// Обновляет контент, который требуется отобразить..
void SpriteSheet::Update(DX::StepTimer const & timer)
{
        BYTE * byteData = new BYTE[sizeof(ipc->form_bmp_bits)];
    *byteData = *(BYTE *)ipc->form_bmp_bits;
    ComPtr<IWICBitmap> iwicBit;
        unsigned int stride = 0;
    stride = 200 * 5;
    unsigned int bufferSize = 200 * stride; // create a buffer of the appropriate size, width 10.
    auto wicFactory = m_deviceResources->GetWicImagingFactory();
    DX::ThrowIfFailed(wicFactory->CreateBitmapFromMemory(200, 150, GUID_WICPixelFormat32bppPBGRA, stride, bufferSize, byteData, &iwicBit));
        auto d2dContext = m_deviceResources->GetD2DDeviceContext();
    DX::ThrowIfFailed(d2dContext->CreateBitmapFromWicBitmap(iwicBit.Get(), nullptr, &m_bitMap));
}
// Прорисовывает кадр на экране.
void SpriteSheet::Render()
{
        if (!m_bitMap) return;
    auto d2dContext = m_deviceResources->GetD2DDeviceContext();
    d2dContext->BeginDraw();
        d2dContext->DrawBitmap(
        m_bitMap.Get(), // Изображение
        &D2D1::RectF(0, 0, m_bitMap->GetSize().width, m_bitMap->GetSize().height), // Место назначения
        1.0f, // Прозрачность
        D2D1_BITMAP_INTERPOLATION_MODE::D2D1_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR, // Интерполяционный режим
        &D2D1::RectF(0.0f, 0.0f, m_bitMap->GetSize().width, m_bitMap->GetSize().height) // Источник
    );
    HRESULT hr = d2dContext->EndDraw(); [COLOR="Red"][B]// Вот здесь выдает ошибку[/B][/COLOR]
    if (hr != D2DERR_RECREATE_TARGET)
    {
        DX::ThrowIfFailed(hr);
    }
}


Выдает ошибку в "HRESULT hr = d2dContext->EndDraw();"
Пробовал менять разные параметры но не могу понять где что не так.....


Добавлено через 15 минут
Как понял я не могу правильно получить изображение.
Можно было бы использовать HBITMAP но UWP не поддерживает "CreateDIBSection" и все остальное из этой библиотеки.

Добавлено через 57 секунд
Поэтому пытаюсь из char* вывести
0
Модератор
3382 / 2154 / 352
Регистрация: 13.01.2012
Сообщений: 8,371
27.01.2018, 19:16 58
tiundv, к сожалению я понятия не имею что такое uwp, xaml и не работал с dx
0
0 / 0 / 2
Регистрация: 25.05.2015
Сообщений: 28
27.01.2018, 20:34 59
А что в храниться в char *form_bmp_bits; ?
Картинка или что?
Пытаюсь перегнать данные из form_bmp_bits в byte * и отрисовать....

Добавлено через 12 минут
В iwic есть метод:
HRESULT CreateBitmapFromMemory (
[ in ] UINT uiWidth, //Ширина нового растрового изображения.
[ in ] UINT uiHeight, //Высота нового растрового изображения.
[ in ] REFWICPixelFormatGUID pixelFormat, //Формат пикселя нового растрового изображения.
[ in ] UINT cbStride, //Число байтов между последовательными линиями сканирования в pbBuffer .
[ in ] UINT cbBufferSize, //Размер pbBuffer .
[ in ] BYTE * pbBuffer, //Буфер, используемый для создания растрового изображения.
[out] IWICBitmap ** ppIBitmap //Указатель, который получает указатель на новое растровое изображение.
);

Некоторые параметры не могу понять как заполнить....
если можете подскажите как можно впихнуть сюда данные из "char *form_bmp_bits"
0
Модератор
3382 / 2154 / 352
Регистрация: 13.01.2012
Сообщений: 8,371
29.01.2018, 08:22 60
tiundv, там хранятся строчки с пикселями

Добавлено через 3 минуты
form_bmp_bits, наверное, пойдут параметром pbBuffer
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.01.2018, 08:22
Помогаю со студенческими работами здесь

Обработка видео с камеры видео наблюдения (для экспертов)
Обработка видео с камеры видео наблюдения (для экспертов) Имеются несколько каналов видео с камер...

дырка для захвата видео с видео камеры
На моем компе стоит Geforce 7600 GS на ней нет порта для видеокамеры как на ноуте:wall: можно ли...

Как сделать так что бы обычное видео из жесткого диска подавалось как видео с вэб-камеры?
кто знает?

Воспроизведение видео
Как в Windows.Forms загрузить видео? Когда я жмякаю на кнопку - &gt; появляется видео и без сигнала...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru