Nano Hash - криптовалюты, майнинг, программирование

Проблема качества при изменении размера изображений с помощью класса C# Graphics

Я изменяю размер небольших изображений (например, 20x25) на более крупные изображения (например, 150x170). Моя проблема не в качестве, которое, как и ожидалось, имеет некоторое размытие. Моя проблема в том, что граница заключается в том, что граница светлого цвета создается справа и внизу изображения. Есть ли способ, которым это можно удалить?

Мой код следующий:

using (Graphics g = Graphics.FromImage((Image)ResizedImage))
{
    g.CompositingQuality = CompositingQuality.HighQuality;
    g.InterpolationMode = InterpolationMode.HighQualityBicubic;
    g.SmoothingMode = SmoothingMode.HighQuality;

    g.DrawImage(OrigImage, new Rectangle(0, 0, Width, Height),
     new Rectangle(0, 0, OrigCImage.Width, OrigImage.Height), GraphicsUnit.Pixel);
}

Спасибо!


  • Установка g.SmoothingMode здесь ничего не делает, она только для векторных методов рисования, таких как g.DrawLine() или g.DrawEllipse() 14.03.2013

Ответы:


1

Может попробовать добавить

g.PixelOffsetMode = PixelOffsetMode.HighQuality;
06.03.2010
  • Обычно это не решает проблему полностью. Для некоторых изображений вам также потребуется использовать экземпляр ImageAttributes с установленным TileModeXY и передать его в качестве последнего параметра DrawImage. 10.01.2012

  • 2

    Добавьте это утверждение в свой код:

      g.PixelOffsetMode = PixelOffsetMode.Half;
    

    Теперь вы получите изображение, одинаково «светлое» со всех 4 сторон. Я бы предположил, что это не решит вашу проблему. Но это довольно неизбежно, у интерполятора просто заканчиваются пригодные для использования пиксели по краям растрового изображения, чтобы сделать более точное предположение.

    Возможно, вам будет лучше оставить для PixelOffsetMode исходное значение и намеренно нарисовать изображение слишком большим, чтобы краевые эффекты не были видны.

    Это выглядело хорошо:

    protected override void OnPaint(PaintEventArgs e) {
      e.Graphics.CompositingQuality = CompositingQuality.HighQuality;
      e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
      e.Graphics.SmoothingMode = SmoothingMode.HighQuality;
      Image img = Properties.Resources.progress;
      int w = this.ClientSize.Width + this.ClientSize.Width / img.Width;
      int h = this.ClientSize.Height + this.ClientSize.Height / img.Height;
      Rectangle rc = new Rectangle(0, 0, w, h);
      e.Graphics.DrawImage(img, rc);
    }
    
    06.03.2010
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..