Перейти к содержанию
Fire Monkey от А до Я
  • 0

Как нарисовать круглый TImage


BenTen

Вопрос

Как лучше реализовать круглое изображение на базе Timage, наподобие того, как нарисованы аватары на этом форуме, если изначально изображение имеет прямоугольную форму.

Пробовал сделать Timage дочерним по отношению к TCircle и установить

Сircle.ClipChildren = True;

Не помогает, поскольку область TCircle тоже прямоугольная.

Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Как-то сложновато, хочется попроще и поизящней решение.

Вариант изящный, но пока не понятно, он только с TPath работает или с TCircle тоже будет работать?

Вечером проверю.

Ссылка на комментарий
  • 1
var
  BmpNew     : TBitmap;
begin
    BmpNew := TBitmap.Create;
    BmpNew.SetSize({нужный размер}, {нужный размер});
    BmpNew.Canvas.BeginScene;
    try
      BmpNew.Canvas.Fill.Kind := TBrushKind.Bitmap;
      BmpNew.Canvas.Fill.Bitmap.WrapMode := TWrapMode.TileStretch;
      BmpNew.Canvas.Fill.Bitmap.Bitmap := {ваш битмап};
      BmpNew.Canvas.Clear(0);
      BmpNew.Canvas.FillEllipse(RectF(0, 0, {нужный размер}, {нужный размер}), 1);
    finally
      BmpNew.Canvas.EndScene;
    end;

    TImage{ваш объект}.Bitmap.Assign(BmpNew);
end;

думаю так

Ссылка на комментарий
  • 1

С помощью маски можно любую форму.TBitmap.CreateFromBitmapAndMask().

В результате получим изображение с прозрачностью, в данном случае звезда и прозрачный фон. 

part1.png.a753f2fb1c8591285160d2799ccc1d85.png

procedure TForm1.Button1Click(Sender: TObject);
var
  ImageRes: TResourceStream;
  Result: TBitmap;
  tmpMS : TMemoryStream;
begin
  ImageRes := TResourceStream.Create(HInstance, 'IMAGE', RT_RCDATA);
  try
    Image1.Bitmap.CreateFromStream(ImageRes);
    Image2.Bitmap.LoadFromFile('c:\temp\MaskedBitmap\Images\Mask.png');

    Result := TBitmap.Create;
    Result.CreateFromBitmapAndMask(Image1.Bitmap, Image2.Bitmap);

    // applying alpha channel to Bitmap - workaround. If you can improve write here how
    tmpMS := TMemoryStream.Create;
    Result.SaveToStream(tmpMS);
    Result.LoadFromStream(tmpMS);
    tmpMS.Free;

    Image3.Bitmap.Assign(Result);
  finally
    ImageRes.Free;
    Result.Free;
  end;
end;

 

MaskedBitmap.zip

Изменено пользователем ENERGY
Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...