问题标签 [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 投票
2 回答
6062 浏览

delphi - 是否可以在 Delphi 中平滑缩放的 TBitmap?

我在具有 256x256 位图的 TImage 上使用 Stretched=True。这将按比例缩小 1、2、4 或 8。正如预期的那样,位图上的文本越远离“1”,就越可怕。我注意到,尽管 Windows 7 资源管理器将位图的缩小版本呈现“更柔和”且更令人愉悦。是否可以以这种方式“模糊”TBitmap?

0 投票
1 回答
893 浏览

delphi - TBitmap.ScanLine[] 执行时间过长

我正在与德尔福合作。我bmp.ScanLine[]在我的代码中使用。我的代码如下:

这里,imgMain 是 TBitmap 类型。我的问题是当我执行这段代码时,在行上花费了太多时间

请告诉我我错在哪里?

0 投票
2 回答
696 浏览

delphi - Delphi 2007 和 2010 在位图上绘图时的区别

以下代码在 Delphi 2007 中按预期工作。它从图像列表中获取位图,在其上绘制一个红色 X,并将新位图添加到同一图像列表的末尾:

在 Delphi 2010 上,使用相同的代码,红色 X 变为透明 X。我需要添加/更改什么才能使其在 Delphi 2010 中按预期工作?谢谢

0 投票
1 回答
1115 浏览

delphi - DIB 到 Tbitmap 代码操作以适应 PNG 图像?

我使用此代码将 DIB 转换为 TBitmap,那么如何操作此代码以适合 PNG 图像(保持其透明度)?我厌倦了将透明属性设置为 true,但似乎代码是为 256 色位图制作的。

代码来源:这里

0 投票
1 回答
747 浏览

delphi - 易于使用的用于 Delphi 6 的 JPEG 到位图转换器,它对内存使用效率很高?

是否有一个易于使用的用于 Delphi 6 的 JPEG 转换器(源代码),它可以将内存缓冲区中的 JPEG 帧快速转换为 DirectShow 兼容的位图,而无需不断重新分配内存?我试图避免将默认 JPEG 单元与 TBitmap 结合使用,因为它为每次转换分配一个新位图,并且每个操作也涉及一些其他初始化/拆卸操作。

我将从 RTP 服务器接收 JPEG 帧,我需要将其转换为位图并通过 DirectShow 过滤器的 FillBuffer() 调用推出。每个帧都将具有完全相同的大小和格式,因为它们是使用预设设置从视频捕获设备流式传输的。因此,如果我可以只分配一次位图,然后将每个传入的 JPEG 帧转换到现有的位图内存区域,我可以避免每秒 25 次重新分配一块内存以及 Delphi 涉及的任何其他辅助数据对象的开销在转换过程中使用的 JPEG 单元与 TBitmap 一起使用。

从 CPU 使用的角度来看,它不必快如闪电。速度足以在不到 1/25 秒的时间内处理 640 x 480 JPEG 帧转换(1/15 以确保安全)。

0 投票
2 回答
2134 浏览

delphi - 如何检查加载到 FMX.TBitmap 的 PNG 图像是否具有 alpha 通道?

我正在将 PNG 图像加载到FMX.Type.TBitmapDelphi-XE2 Update3 FireMonkey HD 应用程序中。如何检查加载的 PNG 图像是否具有 alpha 通道?

目前,如果我加载带有 alpha 通道的图像,它会Bitmap.Scanline[Y]^[X]以 $AABBGGRR 的形式包含 alpha 信息。但是,如果我加载没有 alpha 的 PNG 图像,则所述记录只有 $00BBGGRR 条目(AA = 0),就像具有清晰 alpha 的图像一样。因此出现了问题 - 如何确定它是具有 alpha 完全透明的 RGBA 图像还是 RGB 图像(在这种情况下,我将对其进行处理以使 alpha 完全不透明)。注意:检查所有像素不是一种选择。

FMX TBitmap 没有PixelFormat属性,我也找不到HasAlpha标志。

0 投票
2 回答
4416 浏览

delphi - 如何将 TChart 导出到位图?

我正在使用 Steema Software 和 Delphi 6 的 TeeChart Pro v7.06。在我的项目中有 TChart(其 BottomAxis.Automatic = False)和 TChartScrollBar(滚动)。在 TChart 中有几个系列不适合 TChart 的宽度,所以我使用 TChartScrollBar。

我需要将图表导出到 TBitmap。而且我不知道该怎么做,因为我知道的所有 TChart 方法都只导出 TChart 的可见部分!

有什么方法可以导出整个 TChart,而不仅仅是可见部分?

谢谢!

0 投票
1 回答
580 浏览

delphi - 在 Delphi 6 DirectShow 过滤器中,对 TBitmap 的更改不会出现在渲染图像中,并且会产生大量软页面错误

我有一个用 DSPACK 组件库编写的 Delphi6 DirectShow 过滤器(推送源视频过滤器)。在我的 FillBuffer() 调用中,在将修改后的位图输出到目标媒体样本之前,我在一些简单的代码中遇到了一个真正令人烦恼的问题。代码如下所示。

如您所见,这只是两个简单的循环,它们使用字节指针遍历 24 位位图中的 RGB 值。此代码在非 DirectShow 测试应用程序中运行良好。但是,在我的 DirectShow 过滤器中,无论使用什么值,我都看不到渲染位图中的任何变化。您甚至可以看到一条测试线,我只是将每个字节设置为 0。我仍然看到未修改的图像。为了确保我没有幻像或损坏的位图对象,我添加了一行以在位图上打印一个简单的句子。该句子确实显示在渲染的位图上。

更令人困惑的是,当此代码运行时,我每秒会收到数千个软页面错误,正如任务管理器所报告的那样。如果我禁用此代码,页面错误就会消失。什么可能导致代码这样做?我跟踪了循环,确实看到每行之后字节值都发生了变化,但图像仍然不受影响。

最后,如果有人知道不使用 Scanline 进行像素访问的快速方法,我想知道。我通过 TBitmap.Scanline 进行了跟踪,它调用了 FreeImage。如果可以的话,我想尽量减少内存分配。我不能使用 GR32.TBitmap32,因为我使用的是 Synopse 的快速 jpeg 解码器,它不适用于 TBitmap32 对象。

更新:问题是我在访问 ScanLine 属性之前没有将位图的PixelFormat属性设置为 pf24Bit 。有关更多信息,请参阅此线程:像素修改代码在主应用程序中运行速度很快,在 Delphi 6 DirectShow 过滤器中运行速度非常慢,还有其他问题

0 投票
2 回答
12600 浏览

delphi - Delphi - 如何“就地”裁剪位图?

如果我有一个 TBitmap 并且我想从这个位图中获取一个裁剪的图像,我可以“就地”执行裁剪操作吗?例如,如果我有一个 800x600 的位图,我如何缩小(裁剪)它以使其在中心包含 600x400 图像,即生成的 TBitmap 为 600x400,并由 (100, 100) 和 ( 700、500)在原始图像中?

我需要通过另一个位图还是可以在原始位图中完成此操作?

0 投票
3 回答
4626 浏览

delphi - 如何更改 32 位 TBitmap 中特定颜色的 alpha 值?

当像素包含 32 位 TBitmap 的特定颜色时,我需要更改 alpha 分量的值,我知道ScanLine属性以访问位图数据,但我不知道如何更改每个的 alpha 分量像素。