我正在使用 Delphi 库 Graphics32 在屏幕上绘制音频图形,然后在音频中表示一系列句点。
该图非常简单:黑色背景,音频波形填充浅灰色。
现在的句点是使用FillRectTS
半透明颜色绘制的矩形。我正在寻找一种方法(希望是一种简单的方法)使用像 Multiply 这样的混合模式来绘制它,所以音频波形是获得颜色的那个,而背景仍然是黑色。我在TBitmap32
类中没有找到任何允许我这样做的函数(例如,g32_Interface 单元)。
这需要在绘制音频波形之后完成,因为按需重绘这个非常耗时,并且周期是用户在运行时定义的,因此无法直接使用颜色绘制音频波形。
这是一个小例子,说明它是怎样的,我希望它如何:
现在绘制句点的代码(我需要更改的方面)如下:
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
get是根据不同条件(是否选择事件,以及事件类型)所需的透明度,但最后的想法是相同的。这段代码的绘制类似于上图的第一部分。
Delphi 或 C++Builder 中的解决方案(或想法)对我来说很好。
更新
我已经直接在 Graphics32 代码上实现了这个,使用它已经提供的任何颜色混合例程,它解决了我的需求。它是一组额外的 FillRect 函数,它采用另一个参数供混合模式使用。如果它还活着,我会尝试将它纳入官方项目......