您的位置:首页 > 其它

方法自身实现异部调用和WinForm上图片切换效果

2009-03-16 16:28 681 查看
以下的代码图片的切换效果已经出来了,但是奇慢无比,本来打算在循环内部加入"Thread.Sleep(n);",但是不用加也很慢。看来C#实现漂亮的图片切换效果我是不行了,希望那位前辈给帮一下忙。


private void SwitchImage(PictureBox pb,Image img,bool isAsync) {

//异步调用

if (isAsync) {

Thread t = new Thread(delegate(object o) {

SwitchImage((PictureBox)(((System.Collections.Stack)o).Pop()),

(Image)(((System.Collections.Stack)o).Pop()),

(bool)(((System.Collections.Stack)o).Pop())

);

});

System.Collections.Stack st = new System.Collections.Stack(3);

st.Push(false);

st.Push(img);

st.Push(pb);

t.Start(st);

return;

}

float opacity = 0;

float[][] nArray ={ new float[] {1, 0, 0, 0, 0},

new float[] {0, 1, 0, 0, 0},

new float[] {0, 0, 1, 0, 0},

new float[] {0, 0, 0, opacity, 0},

new float[] {0, 0, 0, 0, 1}

};

while (opacity < 1){

opacity += 0.1F;

nArray[3][3] = opacity;

ColorMatrix matrix = new ColorMatrix(nArray);

ImageAttributes attributes = new ImageAttributes();

attributes.SetColorMatrix(matrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);

Bitmap resultImage = new Bitmap(img.Width, img.Height);

Graphics g = Graphics.FromImage(resultImage);

g.DrawImage(img, new Rectangle(0, 0, img.Width, img.Height), 0, 0, img.Width, img.Height, GraphicsUnit.Pixel, attributes);

pb.Image = resultImage;

//Thread.Sleep(100);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: