以下是我原来的VB代码,现在搞C#,不知道应该怎么转了,55555555555
代码功能是:读取Olympus相机当前预览图像并显示到picPreview(PictureBox控件)
请高人帮忙转一下C#代码,谢谢!!!!!!Private Sub UpdatePreview()
    Dim lngPicSize As Long
    Dim lngFileNum As Long
    Dim lngC As Long
    Dim strFileName As String
    
    Err.Clear
    On Error GoTo FunError
    
    Rye1.Preview 0   //Rye1是Olympus的相机接口控件
    Rye1.propCurrentPicture(0) = 0    lngPicSize = Rye1.propPicSize(0)
    If lngPicSize <> 0 Then
        ReDim bytPicbuff(lngPicSize) As Byte
        Rye1.GetPreview 0, lngPicSize, bytPicbuff
        ///////////////////////////////////////////////////////////
        //主要是这一段不知道怎么转????????/////////////////
        ///////////////////////////////////////////////////////////
        lngFileNum = FreeFile
        strFileName = "BET_Photo_Preview.jpg"
        Open strFileName For Random As lngFileNum Len = 1
        For lngC = 1 To lngPicSize
            Put lngFileNum, lngC, bytPicbuff(lngC - 1)
        Next
        Close lngFileNum
 
        Set picPreview.Picture = LoadPicture(strFileName)
        ///////////////////////////////////////////////////////////
        ///////////////////////////////////////////////////////////
        ///////////////////////////////////////////////////////////
    End If
FunError:
    If Err.Number <> 0 Then
        MsgBox Err.Number
    End If
End Sub

解决方案 »

  1.   

    Sample code as follows:
    yourPictureBox.Image = Image.From( yourImageFileName );//Such as "BET_Photo_Preview.jpg"
      

  2.   

    Knight94(愚翁) :我不会的是以下这段,能帮忙给转一下吗?        lngFileNum = FreeFile
            strFileName = "BET_Photo_Preview.jpg"
            Open strFileName For Random As lngFileNum Len = 1
            For lngC = 1 To lngPicSize
                Put lngFileNum, lngC, bytPicbuff(lngC - 1)
            Next
            Close lngFileNum
      

  3.   

    Sample code as follows:
    FileStream fs = new FileStream( yourFile, FileMode.OpenOrCreate );
    for( long i = 0; i < lngPicSize; i++ )
        fs.WriteByte( bytPicbuff[ i - 1] );
    fs.Flush();
    fs.Close();
      

  4.   

    Sorry!
    yourPictureBox.Image = Image.FromFile( yourImageFileName );//Such as "BET_Photo_Preview.jpg"
      

  5.   

    Knight94(愚翁) : 执行到以下句时报错“内存不足”,5555555555555555555picPreview.Image=Image.FromFile(strFileName);
      

  6.   

    Knight94(愚翁) : 只有几百K,原VB程序都能正常运行
      

  7.   

    private void UpdatePreview()
    {
    int intPicSize;
    string strFileName="BET_Photo_Preview.jpg"; try
    {
    Rye1.Preview(0);
    Rye1.set_propCurrentPicture(0,0); intPicSize=Rye1.get_propPicSize(0);
    if(intPicSize!=0)
    {
    byte[] bytPicbuff=new byte[intPicSize];
    Rye1.GetPreview(0,intPicSize,bytPicbuff);
    FileStream fs = new FileStream(strFileName,FileMode.OpenOrCreate );
    for(int i=0;i<intPicSize;i++)
    {
    fs.WriteByte(bytPicbuff[i]);
    }
    fs.Flush();
    fs.Close();
    picPreview.Image=Image.FromFile(strFileName); }
    }
    catch(Exception ex)
    {
    MessageBox.Show(ex.Message);
    }
    }
      

  8.   

    单步跟踪一下,你看一下
    Rye1.GetPreview(0,intPicSize,bytPicbuff);
    这句操作完后,bytPicbuff是否有数据。
      

  9.   

    然后看看fs.Close();关闭后
    是否有图片文件产生。
      

  10.   

    Rye1.GetPreview(0,intPicSize,bytPicbuff);
    这句操作完后,bytPicbuff好像没数据,数组值全为0会是什么原因????
      

  11.   

    你对比一下我的VB代码,VB运行是正常的
      

  12.   

    Rye1.GetPreview的参数类型是如何的
      

  13.   

    void AxRye.GetPreview(int nCamNo,int nBuffSize,object varBuffer)
      

  14.   

    那可能此函数无法修改byte数组的值。
      

  15.   

    to 但VB下运行正常呀?是参数类型的问题,在vb可能用byref来定义的varBuffer
      

  16.   

    哦,是不是不能在C#中用这个OCX
      

  17.   

    不是的,c#中进行引入后,在原先的com基础上包了一层。
      

  18.   

    你可以看看vb.net是否能成功调用
      

  19.   

    Knight94(愚翁) :这个问题有空我再请教你,谢谢了,结帖