如何使用TBitmap创建带有自定义文本的设备相关位图?

问题描述 投票:0回答:1

在相机应用程序中,从流式相机检索依赖于位图的位图。通过将位图写入命名管道来捕获帧,在该管道的另一端,ffmpeg检索它们并创建AVI文件。

我将需要创建一个自定义帧(启用自定义文本),并将其作为结果电影中的第一帧。

问题是我如何使用TBitmap(为了方便)到>>

  1. 从头开始创建X by Y单色(8位)位图,自定义文字。我希望背景为白色,文本为是黑色的。 (通常想出了这一步骤,请参阅下文。)

  2. 创建可以写入管道的设备相关位图

  3. 步骤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 ...

c++ bitmap c++builder vcl
1个回答
0
投票

[TBitmap具有PixelFormat属性来设置位深度。

© www.soinside.com 2019 - 2024. All rights reserved.