Можно ли скруглить углы ID2D1Bitmap или IWICBitmapSource?

У меня есть квадратная картинка, края которой я хотел бы закруглить. Я сделал это с помощью System Bitmap и GraphicsPath, но здесь все по-другому. Пример фото

Что у меня есть

Напишите обычный прямоугольник

То, что мне нужно

Заклинание закругления углов

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

Код, который я использую для обрезки углов изображения в С#.

public static Image RoundCorners(string fileName, int cornerRadius)
{
    var image = CreateImageFromGame(fileName); //Получаем растр

    if (image is not null)
    {
        cornerRadius *= 2;
        Bitmap roundedImage = new(image.Width, image.Height);
        GraphicsPath gp = new();
        gp.AddArc(0, 0, cornerRadius, cornerRadius, 180, 90);
        gp.AddArc(0 + roundedImage.Width - cornerRadius, 0, cornerRadius, cornerRadius, 270, 90);
        gp.AddArc(0 + roundedImage.Width - cornerRadius, 0 + roundedImage.Height - cornerRadius, cornerRadius, cornerRadius, 0, 90);
        gp.AddArc(0, 0 + roundedImage.Height - cornerRadius, cornerRadius, cornerRadius, 90, 90);
        using (Graphics gr = Graphics.FromImage(roundedImage))
        {
            gr.SmoothingMode = SmoothingMode.HighQuality;
            gr.SetClip(gp);
            gr.DrawImage(image, 0, 0, image.Width, image.Height);
        }

        return roundedImage;
    }

    return null;
}

Конкретные действия, которые я должен попробовать или закодировать

Вы должны использовать ID2D1Effect с шейдером.

Michael Chourdakis 06.04.2023 03:19

@MichaelChourdakis Не могли бы вы посоветовать мне, где я могу посмотреть на это более подробно и яснее? Чтобы лучше понять, что вы подразумеваете под "ID2D1Effect с шейдером"

Aloex 06.04.2023 03:26

это не легко. Вы должны использовать ID2D1DeviceContext в качестве цели рендеринга, которая может создавать эффекты. Затем вам нужно создать собственный эффект (learn.microsoft.com/en-us/windows/win32/direct2d/custom-eff‌​ects ), передав шейдер, который это делает. Вам нужно больше узнать о HLSL и тому подобном.

Michael Chourdakis 06.04.2023 05:24

Не уверен, что вы имеете в виду именно «скругление краев», вам нужен эффект виньетки? learn.microsoft.com/en-us/windows/win32/direct2d/… или опубликуйте входные и желаемые выходные изображения

Simon Mourier 06.04.2023 07:54

Хотите ли вы нарисовать контур указанного прямоугольника со скругленными углами? Если это так, я предлагаю вам попробовать использовать угол ID2D1RenderTarget::DrawRoundedRect

Jeaninez - MSFT 06.04.2023 08:26

@SimonMourier Я добавил пример, который использую для обрезки углов в С#. Возможно ли что-то подобное на D2D1?

Aloex 06.04.2023 18:36

Можете ли вы поместить изображение того, что вы ожидаете, ввод и вывод?

Simon Mourier 06.04.2023 19:16

@SimonMourier Да, я добавил картинки. Как видите, углы были закруглены.

Aloex 06.04.2023 22:40

@SimonMourier Может быть, мне нужно сделать пиксели в углах изображения прозрачными, чтобы добиться эффекта закругленного изображения? Если да, не могли бы вы помочь, как я могу сделать это в D2D1?

Aloex 07.04.2023 04:23

Это должно быть выполнимо, у вас есть ID2D1Bitmap или IWicBitmapSource в качестве входных данных? Какой язык?

Simon Mourier 07.04.2023 08:05

@SimonMourier Да, я получаю его прямо из игры и могу конвертировать в эти форматы. Пишу на c# с помощью WinAPI dll, но перекинуть что-то с c++ на c# не проблема. На данный момент я получаю System Bitmap и выполняю код, который я написал выше «RoundCorners». Могу ли я сделать это на D2D1Bitmap или IWicBitmapSource?

Aloex 07.04.2023 17:59
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
11
104
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

Вы можете обратиться к документам:

Как создать растровую кисть

@Aloex У вас есть новости по этой проблеме? Не могли бы вы проверить мой ответ?

Jeaninez - MSFT 14.04.2023 11:13

Другие вопросы по теме