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

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

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

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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.04.2016, 15:21
Ответы с готовыми решениями:

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

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

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

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

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

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

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

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

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

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

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

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

Отладка: C:\Users\Grenc\Desktop\exe\ffmpeg_test_b cb.exe
Файл базы данных: C:\Users\Grenc\Desktop\release\x32\db\ff mpeg_test_bcb.exe.dd32
Процесс запущен: 00400000 C:\Users\Grenc\Desktop\exe\ffmpeg_test_b cb.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.d ll
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\ff mpeg_test_bcb.exe.dd32 0мс
Отладка остановлена!
0
Модератор
 Аватар для vxg
3403 / 2174 / 353
Регистрация: 13.01.2012
Сообщений: 8,430
04.03.2017, 20:09
leshiy532, если я правильно читаю Это, то до загрузки ffmpeg дело даже не доходит. попробуйте через Dependency Walker на той машине где не работает глянуть, а все ли зависимости он находит

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

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

пишет нет 2 библиотек, но найти их в инете не могу
Миниатюры
Воспроизведение видео с ip камеры  
0
1 / 1 / 0
Регистрация: 24.08.2016
Сообщений: 13
04.03.2017, 20:10
vxg, Да я это и хотел сказать что завершается моментально, не доходя до этой библиотеки
0
Модератор
 Аватар для vxg
3403 / 2174 / 353
Регистрация: 13.01.2012
Сообщений: 8,430
04.03.2017, 20:14
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
vxg, Да, лежат, даже ради интереса закидывал ещё всяких других
0
Модератор
 Аватар для vxg
3403 / 2174 / 353
Регистрация: 13.01.2012
Сообщений: 8,430
06.03.2017, 10:06
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
Модератор
 Аватар для vxg
3403 / 2174 / 353
Регистрация: 13.01.2012
Сообщений: 8,430
06.03.2017, 10:44
альтернативный вариант 2 (пробовал): положить рядом с exe файлы от которых зависит ffmpeg_test.dll
Microsoft.VC90.DebugCRT.manifest
msvcm90d.dll
msvcp90d.dll
msvcr90d.dll
на всякий случай прикрепляю сборку не зависящую от msvcr*.dll
Вложения
Тип файла: rar ffmpeg_test_.rar (2.85 Мб, 66 просмотров)
1
0 / 0 / 2
Регистрация: 25.05.2015
Сообщений: 28
27.01.2018, 12:31
Добавлено через 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
Модератор
 Аватар для vxg
3403 / 2174 / 353
Регистрация: 13.01.2012
Сообщений: 8,430
27.01.2018, 19:16
tiundv, к сожалению я понятия не имею что такое uwp, xaml и не работал с dx
0
0 / 0 / 2
Регистрация: 25.05.2015
Сообщений: 28
27.01.2018, 20:34
А что в храниться в 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
Модератор
 Аватар для vxg
3403 / 2174 / 353
Регистрация: 13.01.2012
Сообщений: 8,430
29.01.2018, 08:22
tiundv, там хранятся строчки с пикселями

Добавлено через 3 минуты
form_bmp_bits, наверное, пойдут параметром pbBuffer
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.01.2018, 08:22
Помогаю со студенческими работами здесь

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

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

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

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

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


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

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

Новые блоги и статьи
Kubernetes с Apache Flink для обработки данных в реальном времени
Mr. Docker 17.05.2025
Kubernetes — это целая философия управления распределёнными приложениями. В отличие от "примитивных" решений вроде Docker Swarm, K8s (как его ласково называют в тусовке DevOps-инженеров) предлагает. . .
Использование декораторов в Python
py-thonny 17.05.2025
Если вы когда-нибудь задумывались о том, как красиво расширить функциональность кода без лишней возни и дублирования, декораторы в Python — та самая волшебная палочка, которую вы искали. По сути, это. . .
Как некоторые отстают в навыках поиска информации в сети. Дублирование страницы открытого адреса в сети.
Hrethgir 17.05.2025
. . . берём бразуер, для многих он является инструментом поиска информации в сети. Понятное дело, что чтобы переходить по сслыкам есть такая фишка - "открыть в новой вкладке", но, представим себе что вы. . .
Реализация многопоточных сетевых серверов на Python
py-thonny 16.05.2025
Когда сталкиваешься с необходимостью писать высоконагруженные сетевые сервисы, выбор технологии имеет критическое значение. Python, со своей элегантностью и высоким уровнем абстракции, может. . .
C# и IoT: разработка Edge приложений с .NET и Azure IoT
UnmanagedCoder 16.05.2025
Мир меняется прямо на наших глазах, и интернет вещей (IoT) — один из главных катализаторов этих перемен. Если всего десять лет назад концепция "умных" устройств вызывала скептические улыбки, то. . .
Гибридные квантово-классические вычисления: Примеры оптимизации
EggHead 16.05.2025
Гибридные квантово-классические вычисления — это настоящий прорыв в подходах к решению сложнейших вычислительных задач. Представьте себе союз двух разных миров: классические компьютеры, с их. . .
Использование вебсокетов в приложениях Java с Netty
Javaican 16.05.2025
HTTP, краеугольный камень интернета, изначально был спроектирован для передачи гипертекста с минимальной интерактивностью. Его главный недостаток в контексте современных приложений — это. . .
Реализация операторов Kubernetes
Mr. Docker 16.05.2025
Концепция операторов Kubernetes зародилась в недрах компании CoreOS (позже купленной Red Hat), когда команда инженеров искала способ автоматизировать управление распределёнными базами данных в. . .
Отражение в C# и динамическое управление типами
stackOverflow 16.05.2025
Reflection API в . NET — это набор классов и интерфейсов в пространстве имён System. Reflection, который позволяет исследовать и манипулировать типами, методами, свойствами и другими элементами. . .
Настройка гиперпараметров с помощью Grid Search и Random Search в Python
AI_Generated 15.05.2025
В машинном обучении существует фундаментальное разделение между параметрами и гиперпараметрами моделей. Если параметры – это те величины, которые алгоритм "изучает" непосредственно из данных (веса. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru