在相机应用程序中,从流式相机检索依赖于位图的位图。通过将位图写入命名管道来捕获帧,在该管道的另一端,ffmpeg检索它们并创建AVI文件。
我将需要创建一个自定义帧(启用自定义文本),并将其作为结果电影中的第一帧。
问题是我如何使用TBitmap(为了方便)到>>
从头开始创建X by Y单色(8位)位图,自定义文字。我希望背景为白色,文本为是黑色的。 (通常想出了这一步骤,请参阅下文。)
创建可以写入管道的设备相关位图
步骤1:以下代码创建一个TBitmap并在其上写入文本,并使用TImage在VCL表单上显示:
int w = 658; int h = 492; TBitmap* bm = new TBitmap(); bm->Width = w; bm->Height = h; bm->Canvas->Font->Name = "Tahoma"; bm->Canvas->Font->Size = 8; int textY = 10; string info("some Text"); bm->Canvas->TextOut(10, textY, info.c_str()); Image1->Picture->Bitmap->Handle = bm->Handle;
以上基本上完成了步骤1,尽管我不知道如何为TBitmap指定位深。
无论如何,编写代码需要一个与设备有关的位图,并且只将其传递给指定大小的无符号char缓冲区;例如
unsigned long numWritten; WriteFile(mPipeHandle, pImage, size, &numWritten, NULL);
其中pImage是指向无符号字符缓冲区(位图)的指针,大小是此缓冲区的长度。
在这一步上,很多“卡住了,因为我看不到如何将TBitmap转换(?)到设备相关的位图,然后将其作为缓冲区检索?
在相机应用程序中,从流式相机检索依赖于位图的位图。通过将位图写入命名管道来捕获帧,在管道的另一端,ffmpeg ...
[TBitmap
具有PixelFormat
属性来设置位深度。