我試圖在Windows窗體應用程序上創建一個動畫位圖。一個計時器對象被設置爲100ms的間隔,並且代碼的工作原理是這樣的:運行幾幀後,位圖動畫停止工作
我有一個2560x2560位圖,它是我的地圖,名爲'pb'的圖片框包含此地圖,圖片框的大小爲800x800與圖像拉伸參數,以提供更好的分辨率。我有一個包含火炬幀的7個元素的位圖數組。這個想法是,我將當前火炬位圖繪製到地圖上,將'pb'圖像設置爲地圖並調用無效過程來重繪它。然後,將繪製到其上的火炬的位圖恢復爲原始地圖位圖'org_btm'。
的代碼如下:
private void animationtick_Tick(object sender, EventArgs e)
{
using (Graphics g = Graphics.FromImage(btm))
{ g.DrawImage(torch_anim[torch_anim_c], new Point(20*64, 20*64)); }
pb.Image = btm;
pb.Invalidate();
btm = org_btm;
if (torch_anim_c < 6)
{
torch_anim_c++;
}
else
{
torch_anim_c = 0;
}
pb.Invalidate();
}
'torch_anim_c' 是位圖陣列的索引計數器。 所以發生的問題是,火炬工作的第一個幾幀,並停止工作後,被困在1幀,當我運行代碼調試器中斷點時,它表明代碼運行,即使當圖像卡住了,程序響應其他功能仍在工作。 你有什麼想法如何解決這個問題? 預先感謝您。
我有被卡住的火炬動畫地圖的一個片段: Torch Stuck Snippet
編輯:在「點()」是20 * 64,因爲火炬的尺寸爲64×64,它是在20位和地圖40 * 40瓦。
在'pb.Invalidate();'之前,檢查'pb.InvokeRequired'是否爲'true'。 –
問題仍然存在,因爲它是:( – Deivis
其實,我刪除了代碼行,我做了'torch_anim [i] .maketransparent(Color.FromArgb(255,255,255,255));'這似乎解決了卡住的問題,我不知道沒有任何線索爲什麼,但是我仍然需要使動畫透明 – Deivis