diff --git a/SpectrumView.pas b/SpectrumView.pas index 4e0271a..faf2bd1 100644 --- a/SpectrumView.pas +++ b/SpectrumView.pas @@ -722,8 +722,9 @@ procedure TSpectrumView.DrawSpectrum; var C, GC: TCanvas; i, Yp, W, H, GX: Integer; +{$IFNDEF DARWIN} RowLW: PLongWord; - AMask: LongWord; +{$ENDIF} DBmin, DBmax, dB: Double; VfoX, X1, X2: Integer; TXVfoX, TXX1, TXX2: Integer; @@ -931,13 +932,11 @@ begin if Assigned(FVfoOverlay) then FVfoOverlay.DrawOverlay(FSpectrumBitmap, W, H); - // Восстанавливаем непрозрачность: Canvas-операции (текст/линии со сглаживанием) - // могли занулить альфу. OR маской выставляет альфу в $FF, RGB не меняя. -{$IFDEF DARWIN} - AMask := $000000FF; // ARGB: альфа в байте 0 -{$ELSE} - AMask := $FF000000; // BGRA: альфа в байте 3 -{$ENDIF} + // Восстановление непрозрачности. На Cocoa проверено, что проход не нужен + // (Canvas-операции сохраняют альфу $FF), поэтому там его не делаем. + // На Qt6/win32 бэкенд другой и сглаженные края могут занулять альфу — + // оставляем быстрый dword-OR до проверки на этих платформах. +{$IFNDEF DARWIN} FSpectrumBitmap.BeginUpdate(False); for i := 0 to H - 1 do begin @@ -945,11 +944,12 @@ begin if RowLW = nil then Continue; for Yp := 0 to W - 1 do begin - RowLW^ := RowLW^ or AMask; + RowLW^ := RowLW^ or $FF000000; // BGRA: альфа в байте 3 Inc(RowLW); end; end; FSpectrumBitmap.EndUpdate(False); +{$ENDIF} end; // ────────────────────────────────────────────────────────────────────────────