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 );
}
}
}