Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.71/58: Рейтинг темы: голосов - 58, средняя оценка - 4.71
 Аватар для Vlad_IT
1452 / 360 / 61
Регистрация: 03.04.2010
Сообщений: 2,096

AVI из BMP, или как создать видео из множества картинок-кадров

04.02.2011, 13:17. Показов 11938. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! У меня есть что-то типа.

C++
1
2
3
4
5
6
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
Image1->Picture->LoadFromClipboardFormat(CF_BITMAP, Clipboard()->GetAsHandle(CF_BITMAP),0);
//Как мне сделать так что-бы изображение из Image1 превращалось в видео и все время по таймеру добавлялось по кадру?
//Например как создать видео? И туда добавлять по кадру из Image1? 
}
А потом сохранить видео на диск.
Буду рад за помощь.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.02.2011, 13:17
Ответы с готовыми решениями:

Получить видео AVI из bmp картинок
Задача : получить видео из bmp картинок. Тема измусоленная но задача в другом. По этой ссылке ...

Получить видео AVI из bmp картинок
Здравствуйте. Помогите пожалуйста решить уже вроде как решенный вопрос..) Есть bmp картинки. Как с них сделать AVI видео? Пытаюсь по...

Анимация из множества кадров-картинок
Приветствую. Делаю программу на bat, которая создает из кадров PNG в GIF-анимацию. Но есть загвоздка при создании анимации: 1....

28
1090 / 588 / 121
Регистрация: 11.11.2008
Сообщений: 1,544
04.02.2011, 13:33
читай тут
следующий код создает AVI из пяти битмапов (1.bmp, 2.bmp, ... 5.bmp) и WAV-ки:

C++
1
2
3
4
5
6
7
8
9
const char *fns[] = {"1.bmp","2.bmp","3.bmp","4.bmp","5.bmp"};
HAVI avi = CreateAvi("test.avi",1000,NULL); // 1000ms is the period between frames
for (int i=0; i<sizeof(fns)/sizeof(fns[0]); i++)
{ HBITMAP hbm=(HBITMAP)LoadImage(NULL,fns[i],IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
  AddAviFrame(avi,hbm);
  DeleteObject(hbm);
}
AddAviWav(avi,"wav.wav",SND_FILENAME);
CloseAvi(avi);
1
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
04.02.2011, 13:38
а при чем тут буфер обмена ? он что - безразмерный и может хранить тысячи картинок ?
а принцип верный - брать картинки из стопки и показывать по таймеру, а вот в цикле я не пробовал
C++
1
2
3
4
for (int i = 0; int = 1000; i++) {
  Image->Picture->LoadFromFile(filename+i);
  Sleep(42);
}
1
 Аватар для Vlad_IT
1452 / 360 / 61
Регистрация: 03.04.2010
Сообщений: 2,096
04.02.2011, 14:02  [ТС]
Я просто получаю изображение с веб камеры вот этим способом
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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#include <vfw.h>
#pragma hdrstop
#include <Clipbrd.hpp>
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
HWND hWndC;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
 hWndC=capCreateCaptureWindow("",WS_CHILD, this->Left, this->Top, this->Width, this->Height, this->Handle, 11011);
capDriverConnect (hWndC,0);
Timer1->Enabled=true;
 
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
  capDriverDisconnect(hWndC);
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Close();        
}
//---------------------------------------------------------------------------
 
 
 
void __fastcall TForm1::SpeedButton2Click(TObject *Sender)
{
  Image1->Visible = false;
  Image2->Visible = true;
   SpeedButton2->Enabled = false;
    SpeedButton1->Enabled = true;
 
 
}
//---------------------------------------------------------------------------
 
 
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
 Image1->Visible = true;
 Image2->Visible = false;
  SpeedButton2->Enabled = true;
    SpeedButton1->Enabled = false;
}
//---------------------------------------------------------------------------
 
 
//---------------------------------------------------------------------------
И теперь думаю как мне получить не изображение, а видео.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
04.02.2011, 14:06
Получение видео с web-камеры
1
 Аватар для Vlad_IT
1452 / 360 / 61
Регистрация: 03.04.2010
Сообщений: 2,096
04.02.2011, 16:54  [ТС]
LK, Вы меня не правильно поняли. Изображение я уже получаю, но как мне его не в буфер кинуть, а создать avi и туда записать?
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
04.02.2011, 17:37
имхо, это Вы меня не поняли - Вам уже ответили
Цитата Сообщение от AntonChik
const char *fns[] = {"1.bmp","2.bmp","3.bmp","4.bmp","5.bmp" };
- только вместо
"1.bmp","2.bmp","3.bmp","4.bmp","5.b mp
у вас должно быть что-то типа
C++
1
bitmap->LoadFromClipboardFormat()
из этой темы Получение видео с web-камеры , имхо ...
0
3 / 5 / 0
Регистрация: 09.12.2012
Сообщений: 104
12.09.2014, 00:01
А как создавать авишку из хранящихся в памяти картинок?
То есть из них:
C++
1
ResultAnimationImages=new Graphics::TBitmap*[bufi2+1-bufi1];
Добавлено через 1 час 54 минуты
Пробую таким образом сделать:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void __fastcall TForm1::Button46Click(TObject *Sender)
{
Graphics::TBitmap *KAPTUHKA;
KAPTUHKA=new Graphics::TBitmap;
 
const char *fns[]={"1.bmp","2.bmp","3.bmp","4.bmp","5.bmp"};
HAVI avi=CreateAvi("Animation.avi",PrSettings->Graphic_Results_AnimationDelay,NULL);
for (int i=0;i<sizeof(fns)/sizeof(fns[0]);i++)
{
    // KAPTUHKA->LoadFromFile(IntToStr(i+1)+".bmp");
    KAPTUHKA->LoadFromFile("1.bmp");
    HBITMAP hbm=(HBITMAP)KAPTUHKA; // LoadImage(NULL,fns[i],IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
    AddAviFrame(avi,hbm);
    DeleteObject(hbm);
}
AddAviWav(avi,"wav.wav",SND_FILENAME);
CloseAvi(avi);
}
Не работает ... ошибок нет ... файл создается пустой (0 байт).
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33378 / 21502 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
12.09.2014, 01:59
C++
1
2
    KAPTUHKA->LoadFromFile(fns[i]);
    HBITMAP hbm=KAPTUHKA->Handle;
1
3 / 5 / 0
Регистрация: 09.12.2012
Сообщений: 104
12.09.2014, 23:04
Получилось! Вот этот код работает:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void __fastcall TForm1::Button46Click(TObject *Sender)
{
Graphics::TBitmap *KAPTUHKA;
KAPTUHKA=new Graphics::TBitmap;
 
const char *fns[]={"1.bmp","2.bmp","3.bmp","4.bmp","5.bmp"};
HAVI avi=CreateAvi("Animation.avi",PrSettings->Graphic_Results_AnimationDelay,NULL);
for (int i=0;i<sizeof(fns)/sizeof(fns[0]);i++)
{
    KAPTUHKA->LoadFromFile(IntToStr(i+1)+".bmp");
    HBITMAP hbm=KAPTUHKA->Handle;
    AddAviFrame(avi,hbm);
    DeleteObject(hbm);
}
AddAviWav(avi,"wav.wav",SND_FILENAME);
CloseAvi(avi);
}
Он читает картинки с диска в переменную KAPTUHKA. Так как я в своей программе использую этот же тип данных (класс) для создания анимации, то именно так и сделал. А теперь я хочу из готовой анимации, то есть из массива картинок замутить AVI файлик:

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
void __fastcall TForm1::Button43Click(TObject *Sender)
{
// Создаем figure
Graphics::TBitmap *figure;
figure=new Graphics::TBitmap;
// Проверка, есть ли анимация
if (ResultAnimationN>0)
{
    bufi1=0;
    HAVI avi=CreateAvi("Animation.avi",100,NULL); // PrSettings->Graphic_Results_AnimationDelay,NULL);
    while (bufi1<ResultAnimationN)
    {
        figure=ResultAnimationImages[bufi1];
        HBITMAP hbm=figure->Handle;
        AddAviFrame(avi,hbm);
        DeleteObject(hbm);
        bufi1++;
    }
    AddAviWav(avi,"wav.wav",SND_FILENAME);
    CloseAvi(avi);
    ErrorMessage1="Ура! Анимация создана. ";
    Form7->ShowModal();
}
else
{
    ErrorMessage1="Ошибка. ";
    Form7->ShowModal();
}
}
Сама анимация на форме проверялась - все работает ... но! AVI файл создается пустым ...

Добавлено через 29 минут
Даже такой код не работает, хотя совершенно нежелательно сохранять картинки ...

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
void __fastcall TForm1::Button43Click(TObject *Sender)
{
// Проверка
if (ResultAnimationN>0)
{    
    {
        Graphics::TBitmap *figure;
        figure=new Graphics::TBitmap;
        bufi1=0;
        HAVI avi=CreateAvi("Animation_v2.avi",100,NULL);
        while (bufi1<ResultAnimationN)
        {
            ResultAnimationImages[bufi1]->SaveToFile("Temp.bmp");
            figure->LoadFromFile("Temp.bmp");
            HBITMAP hbm=figure->Handle;
            AddAviFrame(avi,hbm);
            DeleteObject(hbm);
            bufi1++;
        }
        AddAviWav(avi,"wav.wav",SND_FILENAME);
        CloseAvi(avi);
        ErrorMessage1=Ура! Сделали анимашку. ";
        Form7->ShowModal();
    }
}
else
{
    ErrorMessage1="Ошибка. ";
    Form7->ShowModal();
}
}
Добавлено через 1 минуту
Лишние скобки, т.к. я ими разделил 3 способа

Добавлено через 3 часа 31 минуту
Налепил вот это вот:

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
void __fastcall TForm1::Button43Click(TObject *Sender)
{
// Го го го
if (ResultAnimationN>0)
{    
    {
        Graphics::TBitmap *figure;
        figure=new Graphics::TBitmap;
        Word MyFormat;
        THandle AData;
        HPALETTE APalette;
        bufi1=0;
        HAVI avi=CreateAvi("Animation_v3.avi",100,NULL);
        while (bufi1<ResultAnimationN)
        {
            ResultAnimationImages[bufi1]->SaveToClipboardFormat(MyFormat,AData,APalette);
            Clipboard()->SetAsHandle(MyFormat,AData);
            //...
            if(Clipboard()->HasFormat(CF_BITMAP))
            {
                try
                {
                    figure->LoadFromClipboardFormat(CF_BITMAP,Clipboard()->GetAsHandle(CF_BITMAP),0);
                }
                catch (...)
                {
                    ErrorMessage1="Ну не работает. ";
                    Form7->ShowModal();
                }
            }
            else
            {
                ErrorMessage1="Там не картинка. ";
                Form7->ShowModal();
            }
            //...
            // figure->LoadFromClipboardFormat(CF_BITMAP,Clipboard()->GetAsHandle(CF_BITMAP),0);
            HBITMAP hbm=figure->Handle;
            AddAviFrame(avi,hbm);
            DeleteObject(hbm);
            bufi1++;
        }
        AddAviWav(avi,"wav.wav",SND_FILENAME);
        CloseAvi(avi);
        ErrorMessage1="Все сделано! Ура, товарищи! ";
        Form7->ShowModal();
    }
}
else
{
    ErrorMessage1="Ошибка. ";
    Form7->ShowModal();
}
}
Но не работает

Добавлено через 39 минут
Короче, чтобы не путать никого ... помогите создать AVI файл из

C++
1
ResultAnimationImages=new Graphics::TBitmap*[bufi2+1-bufi1];
динамически создаваемого массива картинок. Без сохранения картинок на диск.

Добавлено через 6 часов 58 минут
Не хочется сохранять тучу картинок а затем из них стряпать видос и удалять картинки ... порой этого нельзя будет сделать.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33378 / 21502 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
13.09.2014, 01:43
Цитата Сообщение от Gendalf147 Посмотреть сообщение
помогите создать AVI файл из динамически создаваемого массива картинок
Нормально файл создается, не выдумывай:

C++
1
2
3
4
5
6
7
8
9
10
class TForm1 : public TForm
{
__published: // IDE-managed Components
    // ...
 
private: 
        Graphics::TBitmap **ResultAnimationImages;
public: 
    __fastcall TForm1(TComponent* Owner);
};
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
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    ResultAnimationImages = new Graphics::TBitmap*[3];
    for (int i = 0; i < 30; i++)
    {
        ResultAnimationImages[i] = new Graphics::TBitmap;
        ResultAnimationImages[i]->LoadFromFile(String().sprintf(L"D:\\test\\cat_%d.bmp", i));
    }
}
 
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
    for (int i = 0; i < 30; i++)
        delete ResultAnimationImages[i];
    delete [] ResultAnimationImages;
}
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    HAVI avi = CreateAvi(L"D:\\test\\test.avi", 400, NULL);
    for (int i = 0; i < 30; i++)
    {
        HBITMAP hbm = ResultAnimationImages[i]->Handle;
        AddAviFrame(avi,hbm);
    }
    // AddAviWav(avi,"wav.wav",SND_FILENAME);
    CloseAvi(avi);
}
, в результате имею нормальный AVI-файл, который прекрасно проигрывается VLC Player-ом. При увеличении frameperiod-а да, возникают проблемы, сначала файл начинает подвисать, потом вообще перестает отображаться этим плеером. А VirtualDub, к примеру, нормально отображает созданное видео с любым фреймрейтом...
0
3 / 5 / 0
Регистрация: 09.12.2012
Сообщений: 104
13.09.2014, 11:44
Я не выдумываю!

Вот этот код - я уже писал, он работает (чтение картинок с диска):

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void __fastcall TForm1::Button45Click(TObject *Sender)
{
Graphics::TBitmap **ResultAnimation;
ResultAnimation=new Graphics::TBitmap*[5];
int i=0;
while (i<5)
{
    ResultAnimation[i]=new Graphics::TBitmap;
    ResultAnimation[i]->LoadFromFile(IntToStr(i+1)+".bmp");
    i++;
}
{
    HAVI avi=CreateAvi("Animation.avi",500,NULL);
    for (int i=0;i<5;i++)
    {
        HBITMAP hbm=ResultAnimation[i]->Handle;
        AddAviFrame(avi,hbm);
        DeleteObject(hbm);
    }
    AddAviWav(avi,"wav.wav",SND_FILENAME);
    CloseAvi(avi);
}
}
А вот этот код не работает (картинки я сам рисую):

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
void __fastcall TForm1::Button47Click(TObject *Sender)
{
Graphics::TBitmap **ResultAnimation;
ResultAnimation=new Graphics::TBitmap*[5];
int i=0;
while (i<5)
{
    ResultAnimation[i]=new Graphics::TBitmap;
    ResultAnimation[i]->Width=500;
    ResultAnimation[i]->Height=800;
    ResultAnimation[i]->Canvas->Rectangle(40,60,400-20*i,370-10*i);
    i++;
}
{
    HAVI avi=CreateAvi("Animation.avi",500,NULL);
    for (int i=0;i<5;i++)
    {
        HBITMAP hbm=ResultAnimation[i]->Handle;
        AddAviFrame(avi,hbm);
        DeleteObject(hbm);
    }
    AddAviWav(avi,"wav.wav",SND_FILENAME);
    CloseAvi(avi);
}
}
Добавлено через 1 минуту
В своей программе я у картинки каждый пиксел закрашиваю ... тут для упрощения сделал так.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33378 / 21502 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
13.09.2014, 11:57
Вот эту строку добавь:
C++
1
2
3
4
        ResultAnimation[i] = new Graphics::TBitmap;
        ResultAnimation[i]->PixelFormat = pf24bit; // <---
        ResultAnimation[i]->SetSize(500, 800);
        ResultAnimation[i]->Canvas->Rectangle(40, 60, 400 - 20*i, 370 - 10*i);
, и все заработает. Про framerate не забудь, при 500 не все проигрыватели будут видео отображать...
1
3 / 5 / 0
Регистрация: 09.12.2012
Сообщений: 104
13.09.2014, 13:13
О боги! Великолепно!

C++
1
ResultAnimation[i]->PixelFormat=pf24bit;
И нет проблем . Спасибо!
0
6 / 6 / 0
Регистрация: 13.05.2012
Сообщений: 593
24.11.2016, 17:57
А какие либы использовать для функции CreateAvi("test.avi",1000,NULL); ?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33378 / 21502 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
24.11.2016, 18:29
oleg rus, это avi_utils, в первом ответе есть ссылка, по которой лежат и header, и cpp-файлы
1
6 / 6 / 0
Регистрация: 13.05.2012
Сообщений: 593
24.11.2016, 18:36
Или вот это HAVI что такое?

Добавлено через 1 минуту
volvo, Да с той функцией уже разобрался, вот это HAVI что?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33378 / 21502 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
24.11.2016, 19:28
oleg rus, ну в h-файле же написано, самой первой строкой:
C++
1
DECLARE_HANDLE(HAVI);
, то есть, это тоже хендл, такой же, как HWND или HRGN, но при включенной опции STRICT обеспечивает более строгую проверку типов (все хендлы несовместимы по присваиванию друг с другом)
1
6 / 6 / 0
Регистрация: 13.05.2012
Сообщений: 593
24.11.2016, 19:53
volvo, Спасибо что объяснил,не суди строго я только учусь.

Добавлено через 19 минут
AVI получилось но не воспроизводится в WindowsMediaPlayer.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33378 / 21502 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
24.11.2016, 19:58
Я с WMP и не пробовал, никогда его не использовал. В VLC - работало (сейчас проверить не могу: под Windows бываю очень редко)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.11.2016, 19:58
Помогаю со студенческими работами здесь

Создание видео из последовательных картинок (кадров)
Коротко: Заканчиваю базу в Access 2000, цель которой вести учет деятельности в маленьком коллективе. Чисто для того, чтобы облегчить...

Как получить кадр bmp из avi?
Как получить кадр bmp из avi?

Сохранение нескольких картинок(3000-4000 штук) в видеофайл(.mov или .avi)
Здравствуйте! Я тут решил некое количество картинок(без звука) сохранить в видеофайл! Мысль в том, чтобы получать картинку и сразу-же...

Извлечение кадров из *.avi файла
нужно извлечь кадры из *.avi файла делаю так: // izvlechenie_cadra.cpp: определяет точку входа для консольного приложения. // ...

Интерактивный экспорт кадров из AVI
Прошу уважаемых форумчан решить следующую проблему. Нужно создать программу, которая бы в удобном для пользователя виде могла выводить из...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru