Unity之合并多张图片为一张大图(二)

 

一、前言

继之前的测试代码写成了项目内工具。工具如下:

针对之前宽高遗留的问题,需要原始序列帧图片的宽高为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(
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值