问题标签 [tbitmap]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
896 浏览

c++builder - 在其中心旋转方形 TBitmap

我试图找到最简单的方法来旋转并TBitmap在其中心显示所需的任何给定角度。它TBitmap是正方形的,只要旋转位图的中心点保持不变,任何可能发生的剪切都不重要。图像非常小,只有大约 50 x 50 像素,所以速度不是问题。这是我到目前为止将 a 旋转TBitmap到 90 度的代码,这很简单,任何角度的事情都不那么简单。

请参阅修改后的代码...这允许旋转,但副本会创建一个模糊的图像,并且旋转点位于左上角。

0 投票
1 回答
99 浏览

delphi - TBitmap 在不相关的图形代码之后丢失了 Clipping 区域

请考虑以下代码:


DrawBorder中,如果我只设置 Form1 的 Tag 而没有设置 Caption,那么 FBitmap 的剪切区域在整个绘图代码中都会被保留和尊重。FBitmap 将如下所示:

在此处输入图像描述

但是如果设置了 Form1 的标题,那么 FBitmap 将失去它的剪切区域,看起来像这样:

在此处输入图像描述

所以似乎在 Form1 的 Caption 设置后,FBitmap 失去了它的剪辑区域。发生这种情况时,WindowOrigins(通过 SetWindowOrgEx 设置)也会丢失。

0 投票
1 回答
678 浏览

delphi - CreateDIBitmap:捕获的黑色图像

我在这个C++ 示例的基础上构建了下面这段代码的一部分,目标是在捕获时不显示主窗体的屏幕截图。

我的麻烦是因为我通过以下代码捕获了黑屏:


这是我的完整代码:

放大单位:


版:

我最近在下面尝试了这种替代方法,但生成了无效的 bmp 文件。

参考

0 投票
1 回答
849 浏览

delphi - Delphi / C++ builder Windows 10 1709 位图操作极慢

有人遇到过这个问题吗?:

它出现在 Windows 10 更新构建 1709 之后。经过一些系统运行时间 - 几个小时 - 位图加载,图像列表项添加变得非常缓慢。一个 256x256 的 BMP 加载时间超过 10 秒……在执行此操作时,它会 100% 占用一个 CPU 内核。因此,可以在几秒钟内正常启动的已编译应用程序现在可以在几分钟内启动!

我经常使用休眠/恢复。显示驱动程序已有一年多的历史,因此这不是问题。

对此有何评论?

更新:我发现使用 Canvas.Pixels 的代码会发生这种情况,因此可以更改,但速度仍然非常慢。

更新 2:替换为 Scanline 操作加快了速度。最近的 Windows 补丁一定让 Canvas.Pixels 在大量使用时变得非常缓慢。

0 投票
0 回答
120 浏览

png - 访问 32 位 TBitmap 中的像素

我正在使用 C++Builder 10.2 Tokyo 开发 VCL Windows 桌面应用程序。

我有以下尝试从 TBitmap 对象中读取像素,以便进行进一步的基于像素的操作。但是,即使代码正确识别 32 位格式并相应地创建位图图像,我也无法使用 TBitmap::ScanLine 读出正确的像素信息。

使用的图像不是黑色的,但从 pBMP 读取的 RGB 值全部为零,Alpha 值为 6、17、34 等。这似乎是损坏或未初始化的数据。

而Pixel的定义如下:

0 投票
1 回答
98 浏览

delphi - 需要一种方法来计算 tcanvas 中实际绘图项的范围

我正在使用paintbox组件使用矩形、多边形和其他画布方法绘制各种形状。用户创建绘图后,我想保存位图以在列表框中使用。问题是绘图可能只使用画布的一小部分,并且列表框中的结果图像会非常小,除非我通过仅选择油漆框原始画布的已使用部分来调整其大小。所以问题是我如何确定画布的哪一部分已被使用,以便我只能提取画布的那部分以加载到位图中以在列表框中显示?

(注意:我在上面进行了编辑以澄清问题)

实际程序有一个画框 (200x200) 和一个图像 (32 x 32)。图像使用Bitmap1.Canvas.CopyRect(Dest, PaintBox1.Canvas, Source);. 如果在 200x200 的paintbox.canvas 中,paintbox 中的绘图只有 20x20,那么在 Image.canvas 中生成的位图在 32x32 的 image.canvas 中将非常小。我需要放大它,这意味着我必须确定颜料盒中使用区域的实际大小并更改“CopyRec”中的源大小。

0 投票
1 回答
1786 浏览

delphi - Delphi中,TBitmap.Monochrome和.PixelFormat如何影响.ScanLine的格式?

我想将具有 Mono8 格式(单色 8 位)位图的给定缓冲区分配给位图。然后我将生成的位图分配给 TImage 组件以显示它。图片是结果显示的屏幕截图。

以下代码有效,但似乎有点浪费:

正确的灰度图像

我宁愿使用我尝试过的 pf8Bit 格式的位图:

如果 MonoChrome 为真,则图片只有预期宽度的 1/4 左右,其余为白色。

单色+白色

如果 MonoChrome 为 false,则图片具有预期的宽度,但左侧 1/4 为单色,其余部分包含虚假颜色。

单色+假色

我显然错过了一些东西,但是什么?

编辑:位图只有预期大小的 1/4 的效果显然是在显示之前将其转换为 JPEG 以保存的副作用(我没有在上面显示的代码,mea culpa)。所以问题只是我没有为位图设置单色调色板。

0 投票
1 回答
63 浏览

c++ - 锁定后我应该解锁 TBitmap 画布吗?

我想绘制一个本地TBitmap并返回它。因为我在主线程之外,所以我必须在使用前锁定画布。(TBitmap 是如何线程安全的

我是否必须解锁画布,或者TBitmap析构函数会为我做这件事?在位图上绘制后在此功能中解锁画布是否安全,并在我想读取位图时再次锁定它,或者如果我这样做可以清除画布吗?

0 投票
1 回答
319 浏览

c++ - 如何在 C++ Builder 中使用 DrawTransparentBitmap()

只是想弄清楚如何在 C++ Builder 中使用 DrawTransparent 来绘制带有 alpha 通道的位图或 tbitmap,以便绘制的图像与背景图像是半透明的。

我在这个地方和这个网站上到处找,但除了这个和 DrawTransparentBitmap 都存在的注释之外找不到任何东西。

在帮助中列出如下:

但是没有代码示例。编译器无法识别过程名称,并且它不会作为 tbitmap 的方法出现...

我还是 C++ 的新手,我真的可以在这方面使用一些帮助......

0 投票
1 回答
226 浏览

graphics - 更快地绘制具有比例和 alpha 通道的 tbitmap

以下代码复制一个大位图,将其与正确的背景混合,然后绘制一个带有裁剪区域的半透明图像以节省绘制时间......图像在数组中并预缩放......

基于我对 C++ 和 Builder 图形的有限知识,这已经通过几个级别的优化......

编辑:更新代码... blend();

//-----------------EDIT 3 当前版本 1/18