一、前言
继之前的测试代码写成了项目内工具。工具如下:
针对之前宽高遗留的问题,需要原始序列帧图片的宽高为2的次幂。然后根据宽高比、数量曲计算单测个数,最后得到宽高。
//是否是宽图
bool isHor = impWidth > impHeight;
float ratio = isHor ? (float)impWidth / impHeight : (float)impHeight / impWidth;
//根据数量计算单侧个数
float oriCnt = Mathf.Sqrt(len / ratio);
int littleCnt = Mathf.CeilToInt(oriCnt);
int moreCnt = Mathf.CeilToInt(oriCnt * ratio);
int wCnt = isHor ? littleCnt : moreCnt;
//纵向个数
int hCnt = isHor ? moreCnt : littleCnt;
//单张高度
int singleH = Mathf.FloorToInt(outHeight / hCnt);
int singleW = Mathf.FloorToInt(outWidth / wCnt);
以下贴上具体代码:
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
using System.IO;
using System;
using System.Threading;
using System.Threading.Tasks;
using System.Linq;
public class MergeSequenceFrameImage : EditorWindow
{
enum EmImgFormat
{
PNG = 0,
JPG = 1,
TGA = 2
}
static string filePath = "";
static string outPath = "";
static int impWidth;
static int impHeight;
static int outSizeIndex = 0;
static int outWidth = 4096;
static int outHeight = 4096;
public static readonly string[] enumNames = Enum.GetNames(typeof(EmImgFormat));
public static readonly string[] enumSizes = new string[] {
"32","64","128","256","512","1024","2048","4096","8192"
};
static List<Task> task = new List<Task>();
static TaskFactory taskfactory = new TaskFactory();
public void Init()
{
isMerge = false;
minSize = new Vector2(500, 540);
outSizeIndex = enumSizes.Length - 1;
outWidth = outHeight = int.Parse(enumSizes[outSizeIndex]);
}
static EmImgFormat emImgFormat = EmImgFormat.JPG;
static EmImgFormat emOutFormat = EmImgFormat.PNG;
static string[] strImgFormat = new string[]
{
"*.png",
"*.jpg",
"*.tga"
};
static string importImgFormat = "*.jpg";
GUIStyle filePathStyle;
static int curProgress = 0;
static int maxProgress = 1;
static float progress = 0f;
static string proDesc = "";
static bool isMerge = false;
private void OnGUI()
{
GUILayout.BeginVertical();
GUILayout.Space(10.0f);
GUILayout.Label("序列帧图片设置", new GUILayoutOption[] { GUILayout.Width(100) });
GUILayout.Space(