2012-12-31 114 views
0

我有一个用户控件库,将用作另一个窗口的自定义工具提示,用户控件包含引用目录的图像刷的ImageSource。在窗口内部,我有另一个类将生成一个图像文件到与图像刷相同的目录。创建图像文件时出错

但是运行后我得到一个错误。 调用堆栈只包含外部代码。 '匹配指定绑定约束的'WpfApplication2.MainWindow'类型构造函数的调用引发异常。'行号'4'和行位置'9'

这是我的代码片段。

UserControl1.xaml

<UserControl.Resources> 
    <Style TargetType="Rectangle"> 
     <Setter Property="Fill"> 
      <Setter.Value> 
       <ImageBrush ImageSource="C:\Users\user\Desktop\wpf\WpfApplication2\WpfApplication2\Images/QR.png" Stretch="Fill" /> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</UserControl.Resources> 

DisplayWindow.xaml

xmlns:myToolTip="clr-namespace:WpfControlLibrary2;assembly=WpfControlLibrary2" 

<myToolTip:UserControl1 Visibility="Collapsed" x:Name="customToolTip" Width="468" Height="700" /> 

QRCodeEncoder.cs

public QrCodeEncodercs(string encodeString) 
    { 
     QrEncoder qrEncoder = new QrEncoder(ErrorCorrectionLevel.H); 
     QrCode qrCode = new QrCode(); 
     //const string encodeString = "123"; 
     qrEncoder.TryEncode(encodeString, out qrCode); 

     Renderer renderer = new Renderer(11, System.Drawing.Brushes.Black, System.Drawing.Brushes.White); 
     renderer.CreateImageFile(qrCode.Matrix, @"C:\Users\user\Desktop\wpf\WpfApplication2\WpfApplication2\Images\QR.png\Images\QR.png", 
      ImageFormat.Png); 

    } 

DisplayWindow.xaml.cs

当我运行的构造类以上。上面提到的错误发生了。

qce = new QrCodeEncodercs(videoName); 

实际上发生了什么事?任何指导?提前致谢。

Edit_ __ _InnerException

InnerException: System.Runtime.InteropServices.ExternalException 
    HResult=-2147467259 
    Message=A generic error occurred in GDI+. 
    Source=System.Drawing 
    ErrorCode=-2147467259 
    StackTrace: 
     at System.Drawing.Image.Save(String filename, ImageCodecInfo encoder, EncoderParameters encoderParams) 
     at Gma.QrCodeNet.Encoding.Windows.Controls.Renderer.CreateImageFile(BitMatrix matrix, String fileName, ImageFormat imageFormat) 
     at WpfApplication2.DisplayWindow.QrCodeEncodercs(String encodeString) in c:\Users\user\Desktop\wpf\KinectREAL\WpfApplication2\WpfApplication2\DisplayWindow..xaml.cs:line 127 
     at WpfApplication2.DisplayWindow.PopulateVideoListAndFirstVideo() in c:\Users\user\Desktop\wpf\KinectREAL\WpfApplication2\WpfApplication2\DisplayWindow..xaml.cs:line 157 
     at WpfApplication2.DisplayWindow..ctor() in c:\Users\user\Desktop\wpf\KinectREAL\WpfApplication2\WpfApplication2\DisplayWindow..xaml.cs:line 79 
     at WpfApplication2.MainWindow..ctor() in c:\Users\user\Desktop\wpf\KinectREAL\WpfApplication2\WpfApplication2\MainWindow.xaml.cs:line 45 
    InnerException: 
+0

检查的InnerException –

+0

Hi..Thanks答复。我已经更新了我的内视图。你能检查我吗?我很迷惑。谢谢 – user1884304

+0

检查您是否有权限保存图片的文件夹(http://weblogs.asp.net/anasghanem/archive/2009/02/28/solving-quot-a-generic-error-occurred-in- gdi-quota exception.aspx)也看看这个讨论(http://stackoverflow.com/questions/1053052/a-generic-error-occurred-in-gdi-jpeg-image-to-memorystream) –

回答

0

这些Generic error in GDI+例外有时可能难以理解。我过去经历的一个原因是图像文件的扩展名不正确(例如:使用GIF扩展名保存的JPG)。我的第二个猜测是,你要保存的文件路径中的文件名是无效的。目录是否存在?

如果该文件正在使用中,您可以将其复制到临时目录File.Copy,并获得临时文件名Path.GetTempFilename()

+0

是的,路径存在。我可以使用另一个文件名来保存。我的猜测是imagebrush的图像源保存并打开路径,所以我无法重写该文件。任何想法如何我可以纠正我的问题?无论如何感谢您的回复。 – user1884304

+0

查看我的更新回答 – Echilon

+0

感谢您的回复。我已经设法解决了。 – user1884304

0

经过一番尝试,我设法解决,它迄今为止工作。再次感谢。

System.Windows.Media.Imaging.BitmapImage bi = new System.Windows.Media.Imaging.BitmapImage(); 
     bi.BeginInit(); 
     bi.UriSource = new Uri(@"C:\Users\user\Desktop\wpf\WpfApplication2\WpfApplication2\Images\QR.png", UriKind.RelativeOrAbsolute); 
     bi.CacheOption = System.Windows.Media.Imaging.BitmapCacheOption.OnLoad; 
     bi.EndInit(); 

     image.Source = bi;