Почему мое растровое изображение сохраняет JPG с черными полосами с обеих сторон? - PullRequest
1 голос
/ 05 января 2012

В моей программе есть сплитконтейнер в форме.На Panel1 есть кнопка, которая при нажатии должна сохранить панель 2 как изображение (в идеале, jpg).У меня есть пара проблем с кодом, который я использую.

private void btnSave_Click(object sender, EventArgs e)
    {          
        Bitmap bmp = new Bitmap(splitContainer1.Panel2.Width * 2, splitContainer1.Panel2.Height);
        splitContainer1.Panel2.DrawToBitmap(bmp, splitContainer1.Panel2.Bounds);
        bmp.Save(@"C:\Test.jpg",System.Drawing.Imaging.ImageFormat.Jpeg);
    }

Вот вопросы с моим кодом, которые мне интересны.

  1. , если я использую его какя правильно сохраняю jpg файл, но он содержит дополнительный черный цвет по сторонам. enter image description here
  2. Если я изменю последнюю строку кода, чтобы пропустить System.Drawing.Imaging.ImageFormat.Jpeg, я получукартина с двумя прозрачными коробками с обеих сторон, что все еще не то, что я хочу.(Они понятны, но они все еще там).enter image description here

Как я могу сохранить только jpg-файл без дополнительной области вокруг панели?

РЕДАКТИРОВАТЬ: Несколько человек указали на мой вызов Splitcontainer1.panel2.width* 2. Если я не умножу ширину на два, я получу только половину фактической панели2, как показано ниже, и у нее все еще есть нежелательные черные полосы / прозрачные полосы: enter image description here

1 Ответ

4 голосов
/ 05 января 2012

Похоже, вы явно делаете растровое изображение слишком широким:

splitContainer1.Panel2.Width * 2

Просто сделай это:

splitContainer1.Panel2.Width

Кроме того, вы неправильно указываете границы. они представляют прямоугольник внутри растрового изображения для рисования. Ваш вызов, вероятно, должен быть:

Bitmap bmp = new Bitmap(splitContainer1.Panel2.Width, splitContainer1.Panel2.Height);
splitContainer1.Panel2.DrawToBitmap(bmp, new Rectangle(0,0,splitContainer1.Panel2.Bounds.Width,splitContainer1.Panel2.Bounds.Height));
...