You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C++ Builder Firemonkey中对内存位图应用特效?

Firemonkey内存位图应用TImage特效实现方案

当然可以。Firemonkey的图形特效(如模糊、亮度调整、色彩矩阵等)本质是通过TFilterEffect派生类处理图形像素数据,并非只能绑定到TImage控件——只要你持有TBitmap类型的内存位图对象,就能直接应用这些特效。

具体实现步骤

  • 步骤1:创建/加载内存位图
    先实例化TBitmap对象,加载现有图片或通过Canvas绘制自定义内容。
  • 步骤2:创建并配置特效
    选择对应TFilterEffect派生类(如TBlurEffect、TBrightnessEffect),设置特效参数(如模糊半径、亮度值)。
  • 步骤3:应用特效并导出结果
    将特效添加到位图的Effects集合,调用ApplyEffects()方法触发渲染,最后保存或使用处理后的位图。

C++ Builder代码示例

void ApplyFilterToMemoryBitmap()
{
    // 初始化内存位图
    TBitmap* MemBmp = new TBitmap();
    try
    {
        // 从文件加载原始图片(也可通过Canvas绘制自定义内容)
        MemBmp->LoadFromFile(L"original_image.png");

        // 创建并配置模糊特效
        TBlurEffect* BlurFx = new TBlurEffect(nullptr);
        try
        {
            BlurFx->Radius = 8; // 设置模糊程度

            // 将特效关联到位图并执行渲染
            MemBmp->Effects->Add(BlurFx);
            MemBmp->ApplyEffects();

            // 保存处理后的位图到文件
            MemBmp->SaveToFile(L"blurred_image.png");
        }
        __finally
        {
            BlurFx->Free(); // 释放特效对象
        }
    }
    __finally
    {
        MemBmp->Free(); // 释放内存位图对象
    }
}

额外说明

  • 支持叠加多个特效:只需往MemBmp->Effects集合中添加多个TFilterEffect对象,一次调用ApplyEffects()即可按顺序应用所有特效。
  • 所有Firemonkey内置特效均适用:包括TBrightnessEffect、TContrastEffect、TColorMatrixEffect、TGrayscaleEffect等。
  • 内存管理注意事项:务必手动释放创建的TBitmap和特效对象,避免内存泄漏;若使用C++ Builder的智能指针(如std::unique_ptr)可简化管理。

内容的提问来源于stack exchange,提问作者Drewski7280

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 14:09:59