C# Измененные изображения имеют черные границы

a{return a*a;};

Компиляция с:

gcc -D"a=main()" so.c

Расширяется до:

main() {
    return main()*main();
}
12
задан Camilo Martin 15 February 2013 в 12:15
поделиться

4 ответа

Попробуйте:

graphic.CompositingMode = CompositingMode.SourceCopy;
7
ответ дан 2 December 2019 в 04:33
поделиться

Это потому, что выборка была сделана с краев фотографии.

3
ответ дан 2 December 2019 в 04:33
поделиться

Как следующее работает для вас? Это код, который я использовал для того же. Основное различие, которое я замечаю, заключается в том, что я не использую SetResolution (и предполагаю, что ввод и вывод квадратные, поскольку это было для меня).

/// <summary>
/// Resizes a square image
/// </summary>
/// <param name="OriginalImage">Image to resize</param>
/// <param name="Size">Width and height of new image</param>
/// <returns>A scaled version of the image</returns>
internal static Image ResizeImage( Image OriginalImage, int Size )
{
    Image finalImage = new Bitmap( Size, Size );

    Graphics graphic = Graphics.FromImage( finalImage );

    graphic.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighSpeed;
    graphic.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighSpeed;
    graphic.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;

    Rectangle rectangle = new Rectangle( 0, 0, Size, Size );

    graphic.DrawImage( OriginalImage, rectangle );

    return finalImage;
}
2
ответ дан 2 December 2019 в 04:33
поделиться

Это из-за сглаживания (смешивания с фоном) краев при рисовании изображения.

Вы могли бы нарисовать его дважды, один раз без и один со сглаживанием включен. Или вы можете нарисовать его немного больше. Или, если известен исходный цвет фона, вы можете сначала заполнить изображение цветом фона.

1
ответ дан 2 December 2019 в 04:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: