Перейти к содержанию
  • Регистрация
  • 0
BenTen

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

Вопрос

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

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

Сircle.ClipChildren = True;

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

  • 0

Сверху Image ставит еще один Image с изображением края четырехугольника центр которого прозрачен в виде круга...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

а чем вас не устраивает ellipse в свойстве fill можно выбрать изображение и растянуть  (streach)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 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;

думаю так

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

я через TCircle делал, просто и удобно вроде

Я тоже. Просто вопрос стоял "Как лучше реализовать круглое изображение на базе Timage...".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Алекс если не секрет, в вашем проекте вы какой метод используете?

 

 

Я там видел вы нарезаете в ImageList кругляшки...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

[rustam_d] В десктопной версии - TCircle, в мобильной - TImage (для ListViewItem) и TCircle (для остального).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

С помощью маски можно любую форму.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 пользователей онлайн

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

×
×
  • Создать...