Init
This commit is contained in:
87
MainForm/ZoomFactor.cs
Normal file
87
MainForm/ZoomFactor.cs
Normal file
@@ -0,0 +1,87 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace ImageCompressor
|
||||
{
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 计算保存Zoom的数据
|
||||
/// </summary>
|
||||
class ZoomFactor
|
||||
{
|
||||
static double zoomPercent = 0.1;
|
||||
/// <summary>
|
||||
/// [0.1 - 1]
|
||||
/// 对原图像的最短一边的像素 * value,作为新方形图像的一边像素值。
|
||||
/// </summary>
|
||||
public static double ZoomPercent
|
||||
{
|
||||
get
|
||||
{
|
||||
return zoomPercent;
|
||||
}
|
||||
set
|
||||
{
|
||||
if (value < 0.01) zoomPercent = 0.01;
|
||||
else if (value > 1) zoomPercent = 1;
|
||||
else zoomPercent = value;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 新图像宽度的百分比
|
||||
/// </summary>
|
||||
double widthLocationPercent;
|
||||
/// <summary>
|
||||
/// 新图像高度的百分比
|
||||
/// </summary>
|
||||
double heightLocationPercent;
|
||||
|
||||
|
||||
public Rectangle GetSourceImage(Image image)
|
||||
{
|
||||
int rawImageHeight= image.Height;
|
||||
int rawImageWidth= image.Width;
|
||||
int NewImageX = (int)(rawImageWidth * widthLocationPercent);
|
||||
int NewImageY = (int)(rawImageHeight * heightLocationPercent);
|
||||
int NewImageSize = (int)(Math.Min(rawImageHeight, rawImageWidth) * zoomPercent);
|
||||
return new Rectangle(NewImageX - NewImageSize/2, NewImageY - NewImageSize / 2, NewImageSize, NewImageSize);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取当前缩放数据
|
||||
/// </summary>
|
||||
/// <param name="previewBoxRectangle"></param>
|
||||
/// <param name="location"></param>
|
||||
/// <param name="imageWidth"></param>
|
||||
/// <param name="imageHeight"></param>
|
||||
public ZoomFactor(Rectangle previewBoxRectangle, Point location, int imageWidth, int imageHeight)
|
||||
{
|
||||
double X = location.X; // - previewBoxRectangle.X;
|
||||
double Y = location.Y;// - previewBoxRectangle.Y;
|
||||
if ((double)imageWidth / (double)imageHeight > (double)previewBoxRectangle.Width / (double)previewBoxRectangle.Height)
|
||||
{
|
||||
double truePreviewBoxHeight = previewBoxRectangle.Width * ((double)imageHeight / (double)imageWidth);
|
||||
double offsetY = (previewBoxRectangle.Height - truePreviewBoxHeight) * 0.5;
|
||||
//图像比预览框更宽
|
||||
widthLocationPercent = X / (double)previewBoxRectangle.Width;
|
||||
heightLocationPercent = (Y - offsetY) / truePreviewBoxHeight;
|
||||
}
|
||||
else
|
||||
{
|
||||
double truePreivewBoxWidth = previewBoxRectangle.Height * ((double)imageWidth / (double)imageHeight);
|
||||
double offsetX = (previewBoxRectangle.Width - truePreivewBoxWidth) * 0.5;
|
||||
widthLocationPercent = (X - offsetX) / truePreivewBoxWidth;
|
||||
heightLocationPercent = Y / (double)previewBoxRectangle.Height;
|
||||
}
|
||||
|
||||
//Debug.WriteLine("On Move percent w = {0}, h = {1}", widthLocationPercent, heightLocationPercent);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user