Я хочу обрезать изображение по диагонали. Размер моего изображения 1000x1000. Я создаю пустое изображение и пытаюсь добавить к нему обрезанную часть. Но output.png пуст.
Bitmap bmp1 = new Bitmap("input.png");
GraphicsPath gp = new GraphicsPath();
Point[] P = new Point[]
{
new Point { X = 0, Y = 0 },
new Point { X = 1000, Y = 0 },
new Point { X = 0, Y = 1000 }
};
gp.AddPolygon(P.ToArray());
using (Bitmap bmp0 = (Bitmap)Bitmap.FromFile("output.png"))
using (Graphics G = Graphics.FromImage(bmp1))
{
G.Clip = new Region(gp);
G.DrawImage(bmp0, 0, 0);
G.Save();
}
gp.Dispose();
@Taw не работает.
Чтобы фактически создать пустое изображение, используйте using (Bitmap bmp0 = (Bitmap)Bitmap.FromFile(filename)) using (Bitmap bmp1 = new Bitmap(bmp0.Width, bmp0.Height))
- не работает Это крайне бесполезное утверждение. Мое предложение отлично работает здесь; Попробуйте снова!!
@TaW в выводе я вижу пустое изображение
Вы рисуете заготовку на той же заготовке. Вам нужно использовать входное изображение; извините, я ошибся в именах, используйте свои собственные имена .. - В моем комментарии bmp0 - это входное изображение. Лучше всего называть вещи добрыми именами, такими как bmpIn и bmpOut :-)
вы можете использовать вложенный цикл for. псевдокод может быть таким:
for(int i=1; i<=1000;i++){
for(int j=1;j<= i;i++){
newImage[i][j] = image[i][j];
}
}
Вы не сохраняете растровое изображение, вы «сохраняете» графический объект. Используйте
bmp1.Save("d:\\output2.png", ImageFormat.Png);
— обратите внимание, что вы не можете перезаписать оригинал, так как он все еще используется!