This commit is contained in:
2026-02-02 21:56:45 +08:00
commit 320550399d
24 changed files with 4551 additions and 0 deletions

87
MainForm/ZoomFactor.cs Normal file
View 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);
}
}
}