Получить растровое изображение и нарисовать его в изображение

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

Я сохраняю свой рисунок в растровое изображение следующим образом:

GraphicsPath path = RoundedRectangle.Create(x, y, width, height, corners, RoundedRectangle.RectangleCorners.All);
        g.FillPath(Brushes.LightGray, path);


        g.SetClip(path);

        using (Font f = new Font("Tahoma", 9, FontStyle.Bold))
            g.DrawString(mtb_hotspotData.Text, f, Brushes.Black, textX, textY);
        g.ResetClip();

        bitmap = new Bitmap(width, height, g);

Затем сохраните его:

hs.bitmap = new Bitmap(bitmap);

И, наконец, используйте его:

for (int i = 0; i < imageSequence.Count; i++) {
            Graphics g = Graphics.FromImage(imageSequence[i]);
            //g.CompositingMode = CompositingMode.SourceOver;
            //hotspot.bitmap.MakeTransparent();
            int x = hotspot.coordinates[i].X;
            int y = hotspot.coordinates[i].Y;
            g.DrawImage(hotspot.bitmap, new Point(x, y));
        }


        return imageSequence;

Пока мне не удалось найти ни одной проблемы в этом решении, поэтому я понятия не имею, где неисправность.


person pheno    schedule 11.04.2015    source источник
comment
где у вас расположены эти биты кода?   -  person Ňɏssa Pøngjǣrdenlarp    schedule 11.04.2015
comment
Здесь два класса. Я рисую и сохраняю графику в первом классе (форма для рисования), и есть класс, называемый горячей точкой, где хранится вся информация об этом растровом изображении (растровое изображение, X, Y).   -  person pheno    schedule 11.04.2015
comment
Найти такую ​​вещь бывает непросто. Если бы это был я, я бы добавил некоторый код для сохранения растровых изображений в файл в подходящих местах вашего кода, а затем посмотрел бы, сможете ли вы отследить глупость. также сворачивайте и разворачивайте окно в различных точках, иногда перерисовка не запускается там, где вы ожидаете.   -  person Tony Hopkinson    schedule 11.04.2015
comment
Спасибо, попробую сохранить растровое изображение в файл. Также я должен отметить, что после того, как я рисую растровое изображение в изображение, я генерирую avi-видео из этого изображения (если это что-то меняет)   -  person pheno    schedule 11.04.2015
comment
Поэтому, когда я сохраняю его, он пуст. Разрешение правильное, размер = 165 байт, значок черный, но когда я его открываю, он прозрачный. Следовательно, проблема (или одна из них) заключается в процессе получения изображения из picturebox, верно?   -  person pheno    schedule 11.04.2015
comment
Что такое g точно? Как он создается? Вы создаете растровое изображение после рисования???   -  person TaW    schedule 11.04.2015


Ответы (1)


Вы, кажется, неправильно понимаете отношение объекта Bitmap и объекта Graphics.

  • Объект Graphics не содержит графику; это инструмент, используемый для рисования в растровых изображений.

  • Используемый вами конструктор растровых изображений ( public Bitmap(int width, int height, Graphics g)) на самом деле не соединяет объекты Bitmap и Graphics. Он использует только разрешение dpi из Graphics.

Вы не показываете, как создается ваш Graphics. Если вы хотите рисовать в Bitmap (в отличие от поверхности управления), самый прямой способ:

Bitmap bitmap = new Bitmap(width, height);
bitmap.SetResolution(dpiX, dpiY);  // optional

using (Graphics G = Graphics.FromImage(bitmap ))
{

   // do the drawing..
   // insert all your drawing code here!

}

// now the Bitmap can be saved or cloned..
bitmap.Save(..);
hs.bitmap = new Bitmap(bitmap);  // one way..
hs.bitmap = bitmap.Clone();      // ..or the other

// and finally disposed of (!!)
bitmap.Dispose();
person TaW    schedule 11.04.2015