GDI+ и заливка с помощью методов библиотеки GDI32.dll - C#

Узнай цену своей работы

Формулировка задачи:

Делаю аналог Paint, возникла проблема: необходимо залить область цветом или штрихованной кистью. Заливаю при помощи методов из gdi32.dll, все ок, а затем, при перерисовке, все залитое пропадает, собсно я так думаю, что нужно делать битмап залитой области, а затем помещать его в Graphics при перерисовке формы. При попытке сохранить битмап из панели, сохраняетс только контуры фигуры, а заливка - нет.

Прошу помощи: как можно получить битмап области, которая залита с помощью FillSurface? Заранее спасибо!

Вот кусок кода:
// В случае, еси была нажата кнопка заливки, заливаем область и выход из функции
02.if*(this.IsFilledClicked)
03.{
04.           Graphics g = Graphics.FromHwnd(this.PaintPanel.Handle);
05.           IntPtr hdc = g.GetHdc();
06.         // Получаем индекс текущей кисти
07.          HatchNum =*this.Bcp.brushNum;
08.            // Заливка штриховой кистью
09.           if*(HatchNum < 6)
10.          {
11.               int*num =*this.MainColor.ToArgb();
12.               num=-num;
13.               IntPtr hBrush = CreateHatchBrush(HatchNum,num);
14.               SelectObject(hdc, hBrush);
15.               FillSurface(hdc, e.X, e.Y, GetPixel(hdc, e.X, e.Y), 1);
16.               g.ReleaseHdc(hdc);
17.              DeleteObject(hBrush);
18.          }
19.          // СОхраняет все, кроме заливки
20.         this.PaintPanel.DrawToBitmap(bmp,*new*Rectangle(0, 0, bmp.Width, bmp.Height));
21.         bmp.Save(@"NewBmp1.bmp");
22.         g.Dispose();
23.         return;

Решение задачи: «GDI+ и заливка с помощью методов библиотеки GDI32.dll»

textual
Листинг программы
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
 
namespace WindowsFormsApplication34
{
    public partial class frmMain : Form
    {
        public frmMain ( )
        {
            InitializeComponent();
            this.Paint += new PaintEventHandler( frmMain_Paint );
        }
 
        void frmMain_Paint ( object sender, PaintEventArgs e )
        {
            using ( var brush = new HatchBrush( HatchStyle.DottedGrid, Color.Red, Color.Black ) )
                e.Graphics.FillRectangle( brush, this.ClientRectangle );
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.733 из 5
Похожие ответы