C#中,如何利用一個任意多邊形生成區域Region物件?如何從一個任意多邊形區域物件反求出其對應的多邊形物件或對應的頂點集?希望能給出示例代碼。
uj5u.com熱心網友回復:
點集合在public static List<Dot> dots = new List<Dot>();每個點位置有了,怎么用都可以了,這里判斷頂點,畫了個外框。點集合是按照顏色判斷取得的
r:237, g:28, b:36
臨時寫的,繁瑣較亂,就這么個意思了
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
namespace Test_c
{
public partial class Form1 : Form
{
public class Dot
{
public Point point;
public Dot(Point p) { point = p; }
}
public static List<Dot> dots = new List<Dot>();
PictureBox picture;
int top = 0, left = 0, right = 0, bottom = 0;
public Form1()
{
InitializeComponent();
picture = new PictureBox()
{
Size = new Size(200, 200),
Location = new Point(50, 50),
Image = Image.FromFile("img.png"),
};
picture.Paint += Picture_Paint;
this.Controls.Add(picture);
}
private void Picture_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
Pen pen = new Pen(Color.Black, 3);
g.DrawRectangle(pen, left, top, right-left, bottom-top);
}
private void button1_Click(object sender, EventArgs e)
{
Bitmap bmp = ReplaceToColor(237, 28, 36, new Bitmap("img.png"), 255, 0);
top = dots.Min(d => d.point.Y);
left = dots.Min(d => d.point.X);
right = dots.Max(d=>d.point.X);
bottom = dots.Max(d=>d.point.Y);
picture.Invalidate();
}
public Bitmap ReplaceToColor(int tr, int tg, int tb, Bitmap src, int opacity, int trans)
{
int w = src.Width;
int h = src.Height;
Bitmap dstBitmap = new Bitmap(src.Width, src.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
System.Drawing.Imaging.BitmapData srcData = src.LockBits(new Rectangle(0, 0, w, h), System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
System.Drawing.Imaging.BitmapData dstData = dstBitmap.LockBits(new Rectangle(0, 0, w, h), System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
unsafe
{
byte* pIn = (byte*)srcData.Scan0.ToPointer();
byte* pOut = (byte*)dstData.Scan0.ToPointer();
byte* p;
int stride = srcData.Stride;
int r, g, b;
for (int y = 0; y < h; y++)
{
for (int x = 0; x < w; x++)
{
p = pIn;
b = pIn[0];
g = pIn[1];
r = pIn[2];
pOut[1] = (byte)g;
pOut[2] = (byte)r;
if (r == tr && g == tg && b == tb)
{
dots.Add(new Dot(new Point(x, y)));
pOut[3] = (byte)trans;
}
else
{
pOut[3] = (byte)opacity;
}
pOut[0] = (byte)b;
pIn += 4;
pOut += 4;
}
pIn += srcData.Stride - w * 4;
pOut += srcData.Stride - w * 4;
}
src.UnlockBits(srcData);
dstBitmap.UnlockBits(dstData);
return dstBitmap;
}
}
}
}

uj5u.com熱心網友回復:
GraphicsPathuj5u.com熱心網友回復:
示例代碼中的Region都沒有出現啊?uj5u.com熱心網友回復:
第一問的應對思路:點集——>GraphicsPath——>區域。uj5u.com熱心網友回復:
路過學習學習,uj5u.com熱心網友回復:
路過的,學習學習,幫頂一下轉載請註明出處,本文鏈接:https://www.uj5u.com/net/26229.html
標籤:C#
上一篇:gridControl1 Winform怎么橫向合并呢?誰知道
下一篇:網頁讀取身份證讀卡器資訊
