325 lines
7.5 KiB
C#
325 lines
7.5 KiB
C#
using System;
|
|
using System.ComponentModel;
|
|
using System.Drawing;
|
|
using System.Windows.Forms;
|
|
|
|
namespace VideoReader;
|
|
|
|
public class UCPictureBox : UserControl
|
|
{
|
|
private Size size = new Size(1280, 720);
|
|
|
|
private Image image;
|
|
|
|
private float scale = 1f;
|
|
|
|
private Point PointImage = new Point(0, 0);
|
|
|
|
public RotateFlipType RotateFlip;
|
|
|
|
private int rotate = 0;
|
|
|
|
private int flip = 0;
|
|
|
|
private Point mousestart;
|
|
|
|
private bool Mousestart;
|
|
|
|
private IContainer components = null;
|
|
|
|
public int Rotate
|
|
{
|
|
get
|
|
{
|
|
return rotate;
|
|
}
|
|
set
|
|
{
|
|
rotate = value;
|
|
RoutFlip();
|
|
}
|
|
}
|
|
|
|
public int Flip
|
|
{
|
|
get
|
|
{
|
|
return flip;
|
|
}
|
|
set
|
|
{
|
|
flip = value;
|
|
RoutFlip();
|
|
}
|
|
}
|
|
|
|
public Image Image
|
|
{
|
|
get
|
|
{
|
|
return image;
|
|
}
|
|
set
|
|
{
|
|
image = value;
|
|
}
|
|
}
|
|
|
|
public Size SizeImage
|
|
{
|
|
get
|
|
{
|
|
return size;
|
|
}
|
|
set
|
|
{
|
|
size = value;
|
|
}
|
|
}
|
|
|
|
public UCPictureBox()
|
|
{
|
|
InitializeComponent();
|
|
((Control)this).DoubleBuffered = true;
|
|
}
|
|
|
|
private void RoutFlip()
|
|
{
|
|
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_001c: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_020f: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_0210: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_003b: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_005a: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_007d: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_00e6: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_010c: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_0132: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_0158: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_017e: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_01a4: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_01c7: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_01ea: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_020d: Unknown result type (might be due to invalid IL or missing references)
|
|
RotateFlipType rotateFlip = (RotateFlipType)0;
|
|
if (rotate == 0 && flip == 1)
|
|
{
|
|
rotateFlip = (RotateFlipType)4;
|
|
}
|
|
else if (rotate == 0 && flip == 2)
|
|
{
|
|
rotateFlip = (RotateFlipType)6;
|
|
}
|
|
else if (rotate == 0 && flip == 3)
|
|
{
|
|
rotateFlip = (RotateFlipType)2;
|
|
}
|
|
else if (rotate == 90 && flip == 0)
|
|
{
|
|
rotateFlip = (RotateFlipType)1;
|
|
}
|
|
else if (rotate == 90 && flip == 1)
|
|
{
|
|
rotateFlip = (RotateFlipType)5;
|
|
}
|
|
else if (rotate == 90 && flip == 2)
|
|
{
|
|
rotateFlip = (RotateFlipType)7;
|
|
}
|
|
else if (rotate == 90 && flip == 3)
|
|
{
|
|
rotateFlip = (RotateFlipType)3;
|
|
}
|
|
else if (rotate == 180 && flip == 0)
|
|
{
|
|
rotateFlip = (RotateFlipType)2;
|
|
}
|
|
else if (rotate == 180 && flip == 1)
|
|
{
|
|
rotateFlip = (RotateFlipType)6;
|
|
}
|
|
else if (rotate == 180 && flip == 2)
|
|
{
|
|
rotateFlip = (RotateFlipType)4;
|
|
}
|
|
else if (rotate == 180 && flip == 3)
|
|
{
|
|
rotateFlip = (RotateFlipType)0;
|
|
}
|
|
else if (rotate == 270 && flip == 0)
|
|
{
|
|
rotateFlip = (RotateFlipType)3;
|
|
}
|
|
else if (rotate == 270 && flip == 1)
|
|
{
|
|
rotateFlip = (RotateFlipType)7;
|
|
}
|
|
else if (rotate == 270 && flip == 2)
|
|
{
|
|
rotateFlip = (RotateFlipType)5;
|
|
}
|
|
else if (rotate == 270 && flip == 3)
|
|
{
|
|
rotateFlip = (RotateFlipType)1;
|
|
}
|
|
RotateFlip = rotateFlip;
|
|
((Control)this).Refresh();
|
|
}
|
|
|
|
public Point rePoint(Point point)
|
|
{
|
|
Point result = default(Point);
|
|
int num = 0;
|
|
int num2 = 0;
|
|
if (Rotate == 0)
|
|
{
|
|
result.X = (int)((float)point.X * scale) + PointImage.X;
|
|
result.Y = (int)((float)point.Y * scale) + PointImage.Y;
|
|
}
|
|
else if (Rotate == 90)
|
|
{
|
|
result.X = (int)((float)point.Y * scale) + PointImage.Y;
|
|
result.Y = size.Height - ((int)((float)point.X * scale) + PointImage.X);
|
|
}
|
|
else if (Rotate == 180)
|
|
{
|
|
result.X = size.Width - ((int)((float)point.X * scale) + PointImage.X);
|
|
result.Y = size.Height - ((int)((float)point.Y * scale) + PointImage.Y);
|
|
}
|
|
else if (Rotate == 270)
|
|
{
|
|
result.X = size.Width - ((int)((float)point.Y * scale) + PointImage.Y);
|
|
result.Y = (int)((float)point.X * scale) + PointImage.X;
|
|
}
|
|
if (Flip == 1 || Flip == 3)
|
|
{
|
|
result.X = size.Width - result.X;
|
|
}
|
|
if (Flip == 2 || Flip == 3)
|
|
{
|
|
result.Y = size.Height - result.Y;
|
|
}
|
|
return result;
|
|
}
|
|
|
|
public void Zoom(bool zoom)
|
|
{
|
|
if (zoom)
|
|
{
|
|
scale += scale / 25f;
|
|
}
|
|
else
|
|
{
|
|
scale -= scale / 25f;
|
|
}
|
|
if (scale > 3f)
|
|
{
|
|
scale = 3f;
|
|
}
|
|
if ((double)scale < 0.1)
|
|
{
|
|
scale = 0.1f;
|
|
}
|
|
((Control)this).Refresh();
|
|
}
|
|
|
|
protected override void OnPaintBackground(PaintEventArgs e)
|
|
{
|
|
//IL_005b: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_0061: Expected O, but got Unknown
|
|
//IL_0063: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_0081: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_0089: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_008f: Invalid comparison between Unknown and I4
|
|
Rectangle rectangle = new Rectangle(PointImage.X, PointImage.Y, Convert.ToInt32((float)((Control)this).Width * scale), Convert.ToInt32((float)((Control)this).Height * scale));
|
|
if (image != null)
|
|
{
|
|
Bitmap val = new Bitmap(image);
|
|
((Image)val).RotateFlip(RotateFlip);
|
|
e.Graphics.Clear(((Control)this).BackColor);
|
|
if ((int)RotateFlip == 0 || (int)RotateFlip == 2)
|
|
{
|
|
e.Graphics.DrawImage((Image)(object)val, new Rectangle(0, 0, ((Control)this).Width, ((Control)this).Height), rectangle.X, rectangle.Y, rectangle.Width, rectangle.Height, (GraphicsUnit)2);
|
|
}
|
|
else
|
|
{
|
|
e.Graphics.DrawImage((Image)(object)val, new Rectangle(0, 0, ((Control)this).Width, ((Control)this).Height), rectangle.X, rectangle.Y, rectangle.Width, rectangle.Height, (GraphicsUnit)2);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
((ScrollableControl)this).OnPaintBackground(e);
|
|
}
|
|
}
|
|
|
|
protected override void OnMouseWheel(MouseEventArgs e)
|
|
{
|
|
if (e.Delta < 0)
|
|
{
|
|
Zoom(zoom: true);
|
|
}
|
|
else
|
|
{
|
|
Zoom(zoom: false);
|
|
}
|
|
}
|
|
|
|
protected override void OnMouseDown(MouseEventArgs e)
|
|
{
|
|
((UserControl)this).OnMouseDown(e);
|
|
Mousestart = true;
|
|
mousestart = e.Location;
|
|
}
|
|
|
|
protected override void OnMouseUp(MouseEventArgs e)
|
|
{
|
|
((Control)this).OnMouseUp(e);
|
|
Mousestart = false;
|
|
}
|
|
|
|
protected override void OnMouseMove(MouseEventArgs e)
|
|
{
|
|
((Control)this).OnMouseMove(e);
|
|
if (Mousestart)
|
|
{
|
|
PointImage.X += mousestart.X - e.X;
|
|
PointImage.Y += mousestart.Y - e.Y;
|
|
mousestart = e.Location;
|
|
if (PointImage.X < 0)
|
|
{
|
|
PointImage.X = 0;
|
|
}
|
|
if (PointImage.Y < 0)
|
|
{
|
|
PointImage.Y = 0;
|
|
}
|
|
((Control)this).Refresh();
|
|
}
|
|
}
|
|
|
|
protected override void OnMouseLeave(EventArgs e)
|
|
{
|
|
((Control)this).OnMouseLeave(e);
|
|
Mousestart = false;
|
|
}
|
|
|
|
protected override void Dispose(bool disposing)
|
|
{
|
|
if (disposing && components != null)
|
|
{
|
|
components.Dispose();
|
|
}
|
|
((ContainerControl)this).Dispose(disposing);
|
|
}
|
|
|
|
private void InitializeComponent()
|
|
{
|
|
((Control)this).SuspendLayout();
|
|
((ContainerControl)this).AutoScaleMode = (AutoScaleMode)0;
|
|
((Control)this).Name = "UCPictureBox";
|
|
((Control)this).ResumeLayout(false);
|
|
}
|
|
}
|