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

关闭TMediaPlayer后屏幕残留视频帧,TPNGImage无法正常显示求助

问题解决:关闭TMediaPlayer后立即显示PNG图像

问题分析

关闭TMediaPlayer后视频最后一帧残留、PNG无法正常显示,核心原因有两点:

  • TMediaPlayer关闭后,其渲染窗口并未立即从屏幕上移除,覆盖了下层的Image控件
  • Image控件执行StretchDraw后未触发强制重绘,导致绘制的图像没有同步刷新到屏幕

修复方案

1. 调整MediaPlayer关闭与Image显示的逻辑顺序

先隐藏并关闭MediaPlayer,再显示Image并直接触发重绘,无需依赖定时器:

void CSensory_Test::play_stop()
{
    // 先隐藏MediaPlayer,避免窗口残留
    Form_Main->pForm_pg->MediaPlayer1->Visible = false;
    Form_Main->pForm_pg->MediaPlayer1->Close();
    // 显示Image并立即调用重绘函数
    Form_Main->pForm_pg->Image_qmian->Visible = true;
    ReDrowMyself();
}

2. 优化ReDrowMyself函数,强制触发控件重绘

绘制完成后调用Update(),确保图像立即刷新到屏幕:

void CSensory_Test::ReDrowMyself()
{
    if(Form_Main->pForm_pg == NULL) {
        return;
    }

    if(Form_Main->pForm_pg->Image_qmian->Visible)
    {
       try
       {
           Form_Main->pForm_pg->MediaPlayer1->Visible = false;
           Form_Main->pForm_pg->MediaPlayer1->Close();
       }
       catch(...)
       {
       }
    }
    
    TRect myrect(0,0,g_qm_width,g_qm_height);
    Form_Main->pForm_pg->Image_qmian->Canvas->StretchDraw(myrect,gqmGraphic);
    // 强制Image控件立即刷新绘制内容
    Form_Main->pForm_pg->Image_qmian->Update();
}

3. 额外保障:确保Image控件处于最上层

如果MediaPlayer窗口仍有残留,手动将Image控件置于顶层:

// 在play_stop函数显示Image后添加
Form_Main->pForm_pg->Image_qmian->BringToFront();

4. 适配高分辨率PNG绘制

针对2160*3840的PNG,提前设置Image控件属性适配尺寸,避免拉伸异常:

// 可在Form初始化时设置
Form_Main->pForm_pg->Image_qmian->Stretch = true;
Form_Main->pForm_pg->Image_qmian->Width = g_qm_width;
Form_Main->pForm_pg->Image_qmian->Height = g_qm_height;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 15:17:24