Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WriteableBitmap.SaveJpeg_C#_C# 4.0_Jpeg - Fatal编程技术网

C# WriteableBitmap.SaveJpeg

C# WriteableBitmap.SaveJpeg,c#,c#-4.0,jpeg,C#,C# 4.0,Jpeg,代码中的wb.SaveJpeg行生成错误:System.Windows.Media.Imaging.WriteableBitmap'不包含“SaveJpeg”的定义,并且找不到接受类型为“System.Windows.Media.Imaging.WriteableBitmap”的第一个参数的扩展方法“SaveJpeg” 我把PresentationCore、PresentationFramework、System.Windows.Forms和WindowsBase作为参考 BitmapImage

代码中的wb.SaveJpeg行生成错误:System.Windows.Media.Imaging.WriteableBitmap'不包含“SaveJpeg”的定义,并且找不到接受类型为“System.Windows.Media.Imaging.WriteableBitmap”的第一个参数的扩展方法“SaveJpeg”

我把PresentationCore、PresentationFramework、System.Windows.Forms和WindowsBase作为参考

BitmapImage image = CaptureImageFromClipBoard();
WriteableBitmap wb = new WriteableBitmap(image);

using (var isf = IsolatedStorageFile.GetUserStoreForApplication())
{
    using (var fs = isf.CreateFile(path + "\\" + filename + ".jpg"))
    {   
        wb.SaveJpeg(fs, wb.PixelWidth, wb.PixelHeight, 10, 100);
    }
}
以下是CaptureImageFromClipBoard的方法:

static public BitmapImage CaptureImageFromClipBoard()
{
    var img = new System.Windows.Controls.Image();
    var imgsrc = Clipboard.GetImage();
    img.Source = new FormatConvertedBitmap(imgsrc, PixelFormats.Bgr32, null, 0);

    JpegBitmapEncoder encoder = new JpegBitmapEncoder();
    MemoryStream memoryStream = new MemoryStream();
    BitmapImage bImg = new BitmapImage();

    encoder.Frames.Add(BitmapFrame.Create(imgsrc));
    encoder.Save(memoryStream);

    bImg.BeginInit();
    bImg.StreamSource = new MemoryStream(memoryStream.ToArray());
    bImg.EndInit();

    memoryStream.Close();

    return bImg;
}

我建议这样做-注意:未经测试,从内存和原始帖子中键入

static public void SaveCapturedImageFromClipBoard(Stream target)
{
    var img = new System.Windows.Controls.Image();
    var imgsrc = Clipboard.GetImage();
    img.Source = new FormatConvertedBitmap(imgsrc, PixelFormats.Bgr32, null, 0);

    JpegBitmapEncoder encoder = new JpegBitmapEncoder();

    encoder.Frames.Add(BitmapFrame.Create(imgsrc));
    encoder.Save(target);
}


为了保存位图,您需要一个BitmapEncoder类。。。就像您在CaptureImageFromClipBoard方法中使用的int一样。可写并不意味着“可保存”-它将允许您在内存中写入位图。我想我在哪里有encoder.Save(memorystream)--我想将其保存到一个物理文件,在它的位置会发生这种情况吗?我所要做的就是把我的图像保存到一个文件中。这是一个糟糕的例子,而且会误导人。img变量的用途是什么?在后面的代码中没有使用它。在我看来,您只需要3行代码——创建编码器、从剪贴板内容添加位图框并保存到目标流。这里的问题是:Clipboard.GetImage方法存在严重缺陷,为了避免获取空白图像,您必须首先将其转换为另一个(临时)图像,或者使用interop实现低级剪贴板功能。我需要再检查一下细节。此外,正如我提到的,它是从内存中输入的,只是对原始帖子的修改。
using (var isf = IsolatedStorageFile.GetUserStoreForApplication())
{
     using (var fs = isf.CreateFile(path + "\\" + filename + ".jpg"))
     {
         SaveCapturedImageFromClipBoard(fs);
     }
}