高手们帮我看看:
由数据库中提取存储图形的字段转换成图形,出现上图错位、变色的现象,是什么原因?
效果图如附图谢谢!提取的是sybase15数据库中的资料

解决方案 »

  1.   

    转图的代码:
    #region //存图
    /// <summary>
    /// 图形转换
    /// </summary>
    /// <param name="connStr">连接字符串</param>
    protected void PicOut(string connStr)
    {
    OdbcConnection oDconn = new OdbcConnection(connStr); string fn = "";
    string pth = "";
                    string cmdSet = "set textsize 2147483647";
                    string sltStr = "set rowcount 60 SELECT FNAME, FLEN,FDAT FROM FCGRAPH where FNAME like '%SB%' order by RT desc ";
                    OdbcCommand ocmdSet = new OdbcCommand(cmdSet, oDconn);
    OdbcCommand cmd = new OdbcCommand(sltStr,oDconn);
                    oDconn.Open(); int m = 0;
    #region
    try
    {
                        ocmdSet.ExecuteNonQuery();                OdbcDataReader odr =cmd.ExecuteReader();
    while(odr.Read())
    {
                            int ln = (int)odr["FLEN"];
                            if(ln > 20000)
                            {
    fn = (string)odr["FNAME"];
    pth  = pthSGMT + fn.Trim().Remove(9,1).Remove(0,1) + ".GIF";
    FileInfo fi = new FileInfo(pth);
    FileStream myStream = fi.Open(FileMode.Create);
    byte[] myBt = (Byte[])odr["FDAT"];                                foreach (byte a in myBt)
                                    {
                                        myStream.WriteByte(a);
                                    }
       myStream.Dispose(); string dt = DateTime.Now.ToString();
                                    string[] shwMsg = new string[] { fn.Trim().Remove(9, 1).Remove(0, 1) + ".GIF", dt };
    listView1.Items.Add(new ListViewItem(shwMsg));
    if(chkbRedu.Checked == true)
    {
    mkDir(pthSGMT.Insert(pthSGMT.Length -1,rd));
    //图形缩小部分,但效果都不理想
    reducePic2(pth,m_width);
    }
                            }
    m++;
    }
                        odr.Dispose();                }
    catch(Exception e)
    {
                        lgw.WriteLog("航路图提取", e.Message);
    }
    finally
    {
                        oDconn.Close();                   
    }
    #endregion
    statusBar1.Panels[2].Text = "现在正在处理航路图"; }
      

  2.   

    是否字节变量的长度超过了int型的最大值?
      

  3.   

    回复:zhoufoxcn 数据库中的文件格式没有明确,但是我将他们转化成JPG、GIF、BMP均可,程序以前是访问unix下的Sybase12的数据库,已经使用很多年了,转化成GIF,一点问题也没有。
    目前因为同样的数据库被转到了Linux下Sybase15的库中,开始转时,图像只有上面一寸左右高度能够显示,下面的什么也没有,后来请教高手后,在查询之前先进行了“set textsize 2147483647”的动作,目前转图中有5%左右的图像出现上面图像的现象,其它大部分图形正常。
    另外,有一个有价值的线索:我在每次提取、保存时,出现异常的图 不固定,有时是这张,使用覆盖的模式保存,下一次或许这张好了,另外一张原来好的可能出现了问题。请高手们帮忙诊断一下原因?
    为什么错位?
    为什么变色?是哪里的长度设定?还是