Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.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# 位图未将图像保存到内存流_C#_Memory_Bitmap_Stream_Bitmapimage - Fatal编程技术网

C# 位图未将图像保存到内存流

C# 位图未将图像保存到内存流,c#,memory,bitmap,stream,bitmapimage,C#,Memory,Bitmap,Stream,Bitmapimage,这里需要一点帮助。我有一个应用程序,我正在创建的mergies两张照片在一起。问题是当我试图将位图转换为bitmpaimage以在屏幕上显示结果时。据我所知,图像没有保存到“NwImg.save(memory,ImageFormat.Jpeg);”的内存流中,有什么想法吗 //The Code //bitmap to bitmapimage conversion using (MemoryStream memory = new MemoryStream()

这里需要一点帮助。我有一个应用程序,我正在创建的mergies两张照片在一起。问题是当我试图将位图转换为bitmpaimage以在屏幕上显示结果时。据我所知,图像没有保存到“NwImg.save(memory,ImageFormat.Jpeg);”的内存流中,有什么想法吗

 //The Code   
    //bitmap to bitmapimage conversion
            using (MemoryStream memory = new MemoryStream())
            {//NwImg is type Bitmap, and at this point i checked properties and values did copy over from the merging
                NwImg.Save(memory, ImageFormat.Jpeg);//here image NwImg.save is suppose to transfer to memory
                memory.Position = 0;
                Nwbi.StreamSource = memory;//memory stream is showing null
                Nwbi.CacheOption = BitmapCacheOption.OnLoad;

            }
我不知道这是否有问题,但NwImg表示一个位图,它是通过在jpeg上合并png图像创建的。我没有读到任何关于这件事的文章,但我想我会在那里读到的

///这是david要求的所有代码 //主c#


变量“memory”在执行该行时注释为“memory stream is showing null”的行上不可能为null,因为它肯定是在上面的“using”块4行中分配的。我猜您在方法中过早地设置了调试器断点。尝试将断点放在分配
Nwbi.CacheOption
的行上,看看调试器是否会告诉您所期望的内容。

您需要更改一些内容,以便代码能够正常工作

  • 使用以下代码进行位图到位图图像的转换

    using (MemoryStream memory = new MemoryStream())
    {
        NwImg.Save(memory, ImageFormat.Jpeg);
        memory.Position = 0;
        Nwbi = new BitmapImage();
        Nwbi.BeginInit();
        Nwbi.StreamSource = memory;
        Nwbi.CacheOption = BitmapCacheOption.OnLoad;
        Nwbi.EndInit();
    }
    
  • 在Pic类中,替换这些行

    //Save to current picture
    Bitmap NewImage = new Bitmap(BottomImage.Width, BottomImage.Height, canvas);
    return NewImage;
    
    对此

    return BottomImage;
    
    由于您正在使用的位图类重载,因此不会基于图形对象创建新位图,而只是基于其分辨率(这将导致生成空图像)。因此,由于您绘制底部图像位图,因此只需返回该图像


  • 您可以发布合并图像的代码吗?在您的
    apply\u单击
    ,在创建位图之前,您不会倒带
    outStream
    。这可能是个问题。另外,我怀疑如果您将行
    ResultPhoto.Source=Nwbi
    在前面的
    中使用
    块,事情将开始工作。只是猜测而已。我认为内存流是在实际加载图像之前被处理的。嘿,吉姆,“倒带”是什么?查看了msdn上的memorystream类,没有看到任何关于rewind的内容。我还跟踪了调试中的值,问题在using语句中,请参见上面的第一个代码块。“rewind”表示查找回文件的开头。将位置设置为0。这是一个常见的术语,当时计算机存储在磁带上,要想找到文件的开头,需要倒带磁带。它好像被卡住了。或者它最终从词典中消失了,“内存流显示为空”是什么意思?你是说如果你检查变量
    内存
    ,它会显示
    null
    ?那似乎。。。不太可能。请解释一下,它是空的。我第一次运行时没有中断,注意到图像没有更新,然后我在代码中向后运行了几次,此时我丢失了图像,Nwbi在使用Ank YOU SO DAVID之外显示null!!!!!它是有效的!!!!!我将不得不阅读更多关于图像的内容,我真的不知道从阅读库中可以看出graphic就是这么做的。再次感谢。
    using (MemoryStream memory = new MemoryStream())
    {
        NwImg.Save(memory, ImageFormat.Jpeg);
        memory.Position = 0;
        Nwbi = new BitmapImage();
        Nwbi.BeginInit();
        Nwbi.StreamSource = memory;
        Nwbi.CacheOption = BitmapCacheOption.OnLoad;
        Nwbi.EndInit();
    }
    
    //Save to current picture
    Bitmap NewImage = new Bitmap(BottomImage.Width, BottomImage.Height, canvas);
    return NewImage;
    
    return BottomImage;