亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C#使用游標實現(xiàn)補間函數(shù)

 更新時間:2022年02月21日 16:22:39   作者:RunnerDNA  
這篇文章主要為大家詳細介紹了C#使用游標實現(xiàn)補間函數(shù),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

補間可以實現(xiàn)兩個圖形之間顏色、形狀、大小、位置等的線性變化。

例如A...AB...BC...C,其中A、B、C是三幅圖片,兩個A的寬分別是10cm和50cm,兩個A之間共5幀,那么使用補間操作后,A圖片的寬分別是10cm、20cm、30cm、40cm、50cm,B和C圖片的寬度計算同理。對于A...ABC...C或者A...ABBC...C這種情況,B不進行補間操作。

下面新建一個控制臺處理程序,添加圖片類ImageClass.cs。

public class ImageClass
{
? ? //寬
? ? public int Width { get; set; }
? ? //高
? ? public int Height { get; set; }
? ? //模擬判斷是否是同一張圖片
? ? public string Path { get; set; }
? ? public ImageClass(int _width,int _height,string _path)
? ? {
? ? ? ? Width = _width;
? ? ? ? Height = _height;
? ? ? ? Path = _path;
? ? }
}

新建圖片幀類ImgFrameClass.cs。

public class ImgFrameClass
{
? ? public ImageClass FramesImg { get; set; }
? ? public int Frames { get; set; }//圖片位于的幀數(shù)
?
? ? public ImgFrameClass(ImageClass _frameImg, int _frames)
? ? {
? ? ? ? FramesImg = _frameImg;
? ? ? ? Frames = _frames;
? ? }
}

新建補間算法類,需要引用Newtonsoft.Json。

using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
?
namespace TweenDemo
{
? ? public class Utility
? ? {
? ? ? ? public static List<ImgFrameClass> SetTween(List<ImgFrameClass> _imgFrameList)
? ? ? ? {
? ? ? ? ? ? List<ImgFrameClass> imgFrameResultList = new List<ImgFrameClass>();
? ? ? ? ? ? List <ImgFrameClass> imgFrameList = DeepCopyWithSerialization(_imgFrameList);
? ? ? ? ? ? //定義兩個游標,初始化為相鄰游標
? ? ? ? ? ? int b = 0, a = 1;
? ? ? ? ? ? int len = imgFrameList.Count;
? ? ? ? ? ? //存在相同元素的個數(shù)
? ? ? ? ? ? int count = 0;
? ? ? ? ? ? string samePath = string.Empty;
? ? ? ? ? ? while (a < len)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? ImgFrameClass itemb = imgFrameList[b];
? ? ? ? ? ? ? ? ImgFrameClass itema = imgFrameList[a];
?
? ? ? ? ? ? ? ? while (b >= 0 && a < len && (imgFrameList[b].FramesImg.Path == imgFrameList[a].FramesImg.Path))
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? samePath = imgFrameList[b].FramesImg.Path;
? ? ? ? ? ? ? ? ? ? while (a < len && (imgFrameList[a].FramesImg.Path == samePath))
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? a++;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? count = count + 2;
? ? ? ? ? ? ? ? }
?
? ? ? ? ? ? ? ? if (count != 0)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ImgFrameClass tweenStartItem = imgFrameList[b];
? ? ? ? ? ? ? ? ? ? ImgFrameClass tweenStopItem = imgFrameList[a - 1];
? ? ? ? ? ? ? ? ? ? //添加初始圖片
? ? ? ? ? ? ? ? ? ? imgFrameResultList.Add(tweenStartItem);
?
? ? ? ? ? ? ? ? ? ? ImageClass tweenStartImg = DeepCopyWithSerialization(tweenStartItem.FramesImg);
? ? ? ? ? ? ? ? ? ? ImageClass tweenStopImg = DeepCopyWithSerialization(tweenStopItem.FramesImg);
? ? ? ? ? ? ? ? ? ? double tweenFrame = tweenStopItem.Frames - tweenStartItem.Frames;
? ? ? ? ? ? ? ? ? ? double tweenImgW = (double)(tweenStopImg.Width - tweenStartImg.Width) / tweenFrame;
? ? ? ? ? ? ? ? ? ? double tweenImgH = (double)(tweenStopImg.Height - tweenStartImg.Height) / tweenFrame;
?
? ? ? ? ? ? ? ? ? ? int coutStart = tweenStartItem.Frames;
? ? ? ? ? ? ? ? ? ? int coutStop = tweenStopItem.Frames;
? ? ? ? ? ? ? ? ? ? //插入補間圖片
? ? ? ? ? ? ? ? ? ? for (int i = coutStart + 1; i < coutStop; i++)
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ImageClass tweenAddImg = new ImageClass((int)(tweenStartImg.Width + tweenImgW * (i - coutStart)), (int)(tweenStartImg.Height + tweenImgH * (i - coutStart)),samePath);
? ? ? ? ? ? ? ? ? ? ? ? imgFrameResultList.Add(new ImgFrameClass(tweenAddImg,i));
? ? ? ? ? ? ? ? ? ? }
?
? ? ? ? ? ? ? ? ? ? //添加末尾圖片
? ? ? ? ? ? ? ? ? ? imgFrameResultList.Add(tweenStopItem);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? else
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? imgFrameResultList.Add(imgFrameList[b]);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? //不滿足則正常移動游標,都向前移動一個,相同元素的個數(shù)置0
? ? ? ? ? ? ? ? b = a++;
? ? ? ? ? ? ? ? count = 0;
? ? ? ? ? ? }
? ? ? ? ? ? return imgFrameResultList;
? ? ? ? }
?
? ? ? ? public static T DeepCopyWithSerialization<T>(T obj)
? ? ? ? {
? ? ? ? ? ? string json = JsonConvert.SerializeObject(obj);
? ? ? ? ? ? T copy = JsonConvert.DeserializeObject<T>(json);
? ? ? ? ? ? return copy;
? ? ? ? }
? ? }
}

模擬生成AAAAABBBBCBB結構的數(shù)據(jù),Main函數(shù)如下:

static void Main(string[] args)
{
? ? //模擬生成測試數(shù)據(jù)
? ? List<ImgFrameClass> imgFrameList = new List<ImgFrameClass>();
? ? imgFrameList.Add(new ImgFrameClass(new ImageClass(10, 10, "A"),1));
? ? imgFrameList.Add(new ImgFrameClass(new ImageClass(50, 50, "A"), 5));
? ? imgFrameList.Add(new ImgFrameClass(new ImageClass(10, 10, "B"), 6));
? ? imgFrameList.Add(new ImgFrameClass(new ImageClass(80, 80, "B"), 9));
? ? imgFrameList.Add(new ImgFrameClass(new ImageClass(10, 10, "C"), 10));
? ? imgFrameList.Add(new ImgFrameClass(new ImageClass(10, 10, "B"), 11));
? ? imgFrameList.Add(new ImgFrameClass(new ImageClass(30, 30, "B"), 12));
?
? ? List<ImgFrameClass> imgFrameResultList = Utility.SetTween(imgFrameList);
? ? foreach (ImgFrameClass item in imgFrameResultList)
? ? {
? ? ? ? Console.WriteLine(string.Format("Img{0},width:{1},height:{2}", item.FramesImg.Path, item.FramesImg.Width, item.FramesImg.Height));
? ? }
? ? Console.ReadLine();
}

運行結果:

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 深入理解C#之繼承

    深入理解C#之繼承

    這篇文章主要介紹了c# 繼承的相關資料,文中講解的非常細致,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下,希望能給你帶來幫助
    2021-07-07
  • C#中DateTimePicker默認值顯示為空的問題

    C#中DateTimePicker默認值顯示為空的問題

    這篇文章主要介紹了C#中DateTimePicker默認值顯示為空的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • C#實現(xiàn)飛行棋小游戲

    C#實現(xiàn)飛行棋小游戲

    這篇文章主要為大家詳細介紹了C#實現(xiàn)飛行棋小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • Unity實現(xiàn)坦克模型

    Unity實現(xiàn)坦克模型

    這篇文章主要為大家詳細介紹了Unity實現(xiàn)坦克模型,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C#實現(xiàn)字符串倒序的寫法

    C#實現(xiàn)字符串倒序的寫法

    這篇文章主要為大家詳細介紹了C#實現(xiàn)字符串倒序的多種寫法,以LINQ寫法最為簡潔,感興趣的朋友可以參考一下
    2016-05-05
  • C#實現(xiàn)對數(shù)組進行隨機排序類實例

    C#實現(xiàn)對數(shù)組進行隨機排序類實例

    這篇文章主要介紹了C#實現(xiàn)對數(shù)組進行隨機排序類,實例分析了C#數(shù)組與隨機數(shù)操作技巧,非常具有實用價值,需要的朋友可以參考下
    2015-03-03
  • 漢字轉拼音縮寫示例代碼(Silverlight和.NET 將漢字轉換成為拼音)

    漢字轉拼音縮寫示例代碼(Silverlight和.NET 將漢字轉換成為拼音)

    本篇文章主要介紹了漢字轉拼音縮寫示例代碼(Silverlight和.NET 將漢字轉換成為拼音) 需要的朋友可以過來參考下,希望對大家有所幫助
    2014-01-01
  • C#實現(xiàn)FTP傳送文件的示例

    C#實現(xiàn)FTP傳送文件的示例

    這篇文章主要介紹了C#實現(xiàn)FTP傳送文件的示例,幫助大家更好的理解和學習c#的使用,感興趣的朋友可以了解下
    2020-12-12
  • c# 使用WebRequest實現(xiàn)多文件上傳

    c# 使用WebRequest實現(xiàn)多文件上傳

    這篇文章主要介紹了c# 使用WebRequest實現(xiàn)多文件上傳的方法,幫助大家更好的理解和學習使用c#,感興趣的朋友可以了解下
    2021-03-03
  • 深入理解c#多態(tài)

    深入理解c#多態(tài)

    這篇文章主要介紹了c#多態(tài)的相關知識,文中代碼非常詳細,幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-06-06

最新評論