我正在使用Delphi库Graphics32在屏幕上绘制音频图形,然后表示音频中一系列的时间段。该图形相当简单:黑色背景,音频波形填充浅灰色。目前的时间段是使用半透明颜色用FillRectTS绘制的矩形。我正在寻找(希望是简单的)一种使用类似于Multiply的混合模式来绘制它的方法,这样音频波形就会变成彩色,而背景仍旧是黑色。我没有找到任何在TBitmap32类(例如g32_Interface单元)中允许我执行此操作的函数。需要在绘制音频波形之后完成此操作,因为按需重新绘制非常费时,而时间段在运行时由用户定义,因此无法直接使用颜色绘制音频波形。下面是绘制周期的当前代码,我需要更改的部分。
Delphi或C++Builder中的解决方案(或想法)对我来说都可以。 更新 我直接在Graphics32代码上实现了这个功能,使用它已经提供的任何颜色混合例程,并且它满足了我的需求。这是一组额外的FillRect函数,它需要另一个参数来使用混合模式。如果官方项目仍然存在,我将尝试将其加入其中。
TColor32 ColorDibujado = Color == 0 ? GetColorDeTipoEvento(PeriodoADibujar->Evento->TipoEvento) : Color;
if (PeriodoADibujar->Habilitado == false)
ColorDibujado = (ColorDibujado & 0x00ffffff) | 0xAf000000;
Gr32::TRect area;
area.Left = (PeriodoADibujar->PosicionInicioRelativa * (double)LimitesDestino.Width()) / Proporcion + PosX;
area.Right = (PeriodoADibujar->PosicionFinRelativa * (double)LimitesDestino.Width()) / Proporcion + PosX;
area.Top = LimitesDestino.Top;
area.Bottom = LimitesDestino.Bottom;
MapaDestino->FillRectTS(area, ColorDibujado);
ColorDibujado
根据不同的条件(事件是否被选中以及事件类型)获取所需的透明度,但最终的想法是相同的。该代码绘制的图形类似于上面图形的前半部分。Delphi或C++Builder中的解决方案(或想法)对我来说都可以。 更新 我直接在Graphics32代码上实现了这个功能,使用它已经提供的任何颜色混合例程,并且它满足了我的需求。这是一组额外的FillRect函数,它需要另一个参数来使用混合模式。如果官方项目仍然存在,我将尝试将其加入其中。