Показать сообщение отдельно
  #1  
Старый 02.12.2012, 20:39
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию Полупрозрачный прямоугольник

Всем здрасьте...

Вот тут бъюсь над такой проблемкой:
Есть PainBox, на который выводится картинка. Надо поверх этой картинки еще нарисовать полупрозрачный цветной прямоугольник (один цвет). Координаты прямоугольника есть (TRect). Сложность в том, что надо нарисовать его быстро. Вариант создания большого битмапа с альфа-каналом и копирования его части на картинку держу как запасной, т.к. размер прямоугольника вычисляется динамически, а еще один огромный битмап в памяти держать не очень хочется.
Есть у кого какие идеи?

ЗЫ. Ограничение - не использовать сторонних доп. библиотек, типа Graphics32 и т.п. Можно использовать DevExpress, бо как он уже в проекте используется.

Код отрисовки:
Код:
procedure TCutImageFrame.pbImagePaint(Sender: TObject);
var
  R, FaceTop, FaceBottom : TRect;
begin
  inherited;

  pbImage.Canvas.StretchDraw(FImageRect,FImage);

  If FHasPoints Then
    Begin
      R := Rect(Min(FStartPt.X,FEndPt.X),Min(FStartPt.Y,FEndPt.Y),Max(FStartPt.X,FEndPt.X),Max(FStartPt.Y,FEndPt.Y));
      pbImage.Canvas.DrawFocusRect(R);

      // Вот эти прямоугольники хочется сделать полупрозрачным цветом.
      GetFaceRects(R,FaceTop,FaceBottom);  // Вычисление координат прямоугольников
      pbImage.Canvas.DrawFocusRect(FaceTop);
      pbImage.Canvas.DrawFocusRect(FaceBottom);

    End;
end;
Ответить с цитированием