如题,谢谢!!!
解决方案 »
- datagridview怎么设置列头对齐,列值对齐
- 如何检测datagridview控件中含有checkbox列
- 【分享】发两个关于文件遍历的小程序
- 找初学者共同进阶?
- 在线等,帮帮忙吧!最后五十分了!
- vs2005中开发smartClient的问题
- 菜鸟提问!如何实现在同一个c#windows应用程序中从一个form 跳到另一个 form 呢?
- 调用Response.writefile("a.htm"),本页面中自己的中文字符是乱码
- 求,在C#导入C++的DLL.
- 崩溃,崩溃再问关于数据保存的问题。
- winform 高级特效的问题。 (framework1.1)
- 一道这样的题,我是这样理解下,大家讨论下
System.IO.FileStream fs = new System.IO.FileStream
(path,
System.IO.FileMode.Open);
byte[] byteBuffer = new byte[fs.Length];
还有网上有个复制文件进度的,速度超慢,不知道是什么原因
this.axSceneControl1.LoadSxFile(@"G:\LADATA\3D\JCJD.sxd");
这就是加载地图的方法
MemoryStream ms = new MemoryStream( fs.Length );
const int BUF_LENGTH = 1024;
byte[] bBuffer = new byte[BUF_LENGTH];
int nTotalLength, nReadLength;
nTotalLength = nReadLength = 0;
// Read image
do
{
nReadLength = fs.Read( bBuffer, 0, BUF_LENGTH );
if( nReadLength > 0 )
{
ms.Write( bBuffer, 0, nReadLength );
nTotalLength += nReadLength;
}
if( nReadLenth < BUF_LENGTH )
break;
}while( nTotalLength < fs.Length );// Set your image
yourPicture.Image = Image.FromStream( ms );// Release streamer
ms.Close();
fs.Close();
1.创建对应待加载图像文件文件流(System.IO.FileStream fs)
2.根据文件大小创建字节数组byte[] byteBuffer = new byte[fs.Length];
3.通过循环将fs中的内容复制到byteBuffer中,并在复制过程中控制进度条显示进度(通过进度条的Value属性);
4.创建缓冲区流(System.IO.MemoryStream ms),将byteBuffer作为ms的构造参数来构造它.
5.通过ms创建一个新的Bitmap对象(Bitmap对象有构造函数是接受Stream参数的).
6.将刚刚创建的Bitmap对象传递给PictureBox的Image属性,完成加载.
*注:因为ms是在内存中的,所以加载速度很快.注意在文件加载完毕后要释放byteBuffer数组,否则将占据大量内存.
如果你说的那个控件只提供了下面这样的接口:
this.axSceneControl1.LoadSxFile(@"G:\LADATA\3D\JCJD.sxd");
那估计不好实现.PictureBox之所以可以,是因为我们在它的外部控制了加载进度(加载进内存),实际上还是没有干预也没有获取PictureBox通过Image属性加载图像的进度.所以,如果你的这个控件只能通过文件路径这一种方式加载图片的话可能是没有办法的.
{
pictureBox1.LoadAsync(Application.StartupPath + "\\img\\1.jpg");
} private void pictureBox1_LoadProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
}