Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Создание полупрозрачных изображений с помощью TImage в Delphi

Delphi , Графика и Игры , Изображения

При работе с компонентом TImage в среде разработки Delphi часто возникает необходимость сделать изображение полупрозрачным, чтобы можно было видеть, что находится под ним. В данной статье мы рассмотрим, как изменить уровень прозрачности изображения, используя возможности Object Pascal.

Проблема

На форме у нас есть два компонента TImage, и верхний из них должен быть полупрозрачным, чтобы можно было увидеть элементы, расположенные под ним.

Решение

Для создания полупрозрачного эффекта TImage сам по себе не подходит для альфа-смешивания с другими элементами интерфейса. Однако можно отобразить альфа-смешанное GIF-изображение внутри TImage, используя класс TGIFImage. Но есть более универсальный способ, который заключается в использовании 32-битного битового изображения с поддержкой прозрачности.

Пример кода

Ниже приведен пример кода, который позволяет установить уровень прозрачности для изображения, используя альфа-канал битового изображения:

type
  pRGBQuadArray = ^TRGBQuadArray;
  TRGBQuadArray = ARRAY [0 .. 0] OF TRGBQuad;

procedure SetImageAlpha(Image: TImage; Alpha: Byte);
var
  pscanLine32, pscanLine32_src: pRGBQuadArray;
  nScanLineCount, nPixelCount: Integer;
  BMP1, BMP2: TBitMap;
  WasBitMap: Boolean;
begin
  if Assigned(Image.Picture) then
  begin
    WasBitMap := Not Assigned(Image.Picture.Graphic);
    if not WasBitMap then
      begin
        BMP1 := TBitMap.Create;
        BMP1.Assign(Image.Picture.Graphic);
      end
    else
      BMP1 := Image.Picture.Bitmap;

    BMP1.PixelFormat := pf32Bit;

    BMP2 := TBitMap.Create;
    BMP2.Assign(BMP1);
    BMP1.AlphaFormat := afDefined;
  end;
  for nScanLineCount := 0 to BMP1.Height - 1 do
  begin
    pscanLine32 := BMP1.ScanLine[nScanLineCount];
    pscanLine32_src := BMP2.ScanLine[nScanLineCount];
    for nPixelCount := 0 to BMP1.Width - 1 do
    begin
      pscanLine32[nPixelCount].rgbReserved := Alpha;
      pscanLine32[nPixelCount].rgbBlue := pscanLine32_src[nPixelCount].rgbBlue;
      pscanLine32[nPixelCount].rgbRed := pscanLine32_src[nPixelCount].rgbRed;
      pscanLine32[nPixelCount].rgbGreen := pscanLine32_src[nPixelCount].rgbGreen;
    end;
  end;
  if not WasBitMap then
  begin
    Image.Picture.Assign(BMP1);
    BMP1.Free;
  end;
  BMP2.Free;
end;

procedure TForm3.Button1Click(Sender: TObject);
begin
  SetImageAlpha(Image1, 200);
  SetImageAlpha(Image2, 128);
  SetImageAlpha(Image3, 80);
end;

Использование кода

Создаем несколько процедур, где SetImageAlpha изменяет прозрачность для каждого TImage:

  SetImageAlpha(Image1,255); // Полностью прозрачен для отображения нижнего слоя
  SetImageAlpha(Image2,192); // Более темный прозрачный слой, чем 255, но все еще видит под собой
  SetImageAlpha(Image3,128); // Обычно используемый базовый уровень прозрачности для 50% видимости

Важно

Учтите, что перезапись альфа-канала приведет к потере пиксельной информации, если не создавать копию изображения перед изменением альфа-формата.

Примечание

Необходимо обратить внимание, что TWinControls не могут быть перекрыты, и использование альфа-прозрачности применимо только к 32-битным изображениям.

Таким образом, используя представленный код, вы сможете настроить уровень прозрачности для изображений в компоненте TImage, что позволит создавать сложные и привлекательные интерфейсы в приложениях, написанных на Delphi.

Создано по материалам из источника по ссылке.

В данном контексте описывается процесс создания полупрозрачных изображений с помощью компонента `TImage` в среде разработки Delphi, используя Object Pascal для изменения уровня прозрачности.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Изображения ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-20 22:37:38/0.0037209987640381/0