Tag: bitmapimage

创建BitmapImage WPF

我有一个包含我需要在屏幕上显示的图像数据的ushort [],当我创建一个Windows.System.Drawing.Bitmap,并将其转换为BitmapImage时,这感觉就像一个缓慢无助的方式来做到这一点。 有没有人创建ushort []的BitmapImage的最快方法是什么? 或者从数据中另外创建一个ImageSource对象? 谢谢, 埃蒙·

旋转BitmapImage

我想旋转位图图像我写了一些代码,它的工作原理 TransformedBitmap TempImage = new TransformedBitmap(); TempImage.BeginInit(); TempImage.Source = MyImageSource; // MyImageSource of type BitmapImage RotateTransform transform = new RotateTransform(90); TempImage.Transform = transform; TempImage.EndInit(); image1.Source = TempImage; 但我希望MyImageSource得到这个修改,因为就像那样,如果我再次点击按钮没有任何事情发生,这是正常的,它得到我的图像的第一种forms,我也希望它采取这种forms,因为我必须保存后修改它。 为什么我要这样做: 我有一些tiff图像阅读其中一些可能是不正确的forms我想添加翻转90°用户点击它直到图像返回到正确的forms,当他点击翻转图像将被保存(更换)以用户选择的实际forms在磁盘上

BitmapImage DecodePixelWidth奇怪的行为

我在显示大量图像时遇到了一些性能问题,我发现问题是当我真的只需要一个小于1/4大小的图像时,正在使用全分辨率图像。 所以我在BeginInit和EndInit之间添加了一行来将DecodePixelWidth设置为200,这是我在布局中需要的最大宽度。 我的表现不再是问题,但有些图像非常小,绝对不会接近200像素宽。 大多数图像似乎都能正确显示,并且似乎没有任何押韵或理由太小而且工作正常。 我认为这可能是由于图像原始尺寸的差异,但结果没有模式。 我尝试将宽度高达600,然后允许有问题的图像以200的正确宽度显示,但性能会受到影响。 在这一点上,我甚至不确定从哪里开始寻找,并且真的很感激能够向正确的方向迈进。 编辑:下面有关图像以及我如何使用它们的更多信息。 大多数图像大约是1000X1500,尽管有些图像有1000×1513等奇数尺寸。 所有图像都是JPEG。 目前,每个图像都放在我设计的自定义用户控件中,没有什么太花哨的只是它周围的背景和一些文本。 然后将每个用户控件放置在其自己的行/列中的网格中。 网格位于滚动查看器内,因此用户可以滚动列表。 这可能不是实现我正在寻找的最佳方式,但它是我快速提出的,它在大多数情况下都有效。 我很乐意切换到另一种显示方法,如果它能以更简单或更简洁的方式完成我想要的。 预期的结果是电影浏览应用程序。 将有一个可滚动的电影列表,每个电影都表示为自己的图块,包括标题,电影海报,流派信息,评级和描述。 此列表将对各种项目进行排序。 有关电影的信息存储在另一台机器上的sql数据库中。 图像最初存储在另一台计算机上,但在本地复制以提高性能。 编辑:我已经能够通过不使用DecodePixelWidth来解决问题,而是以所需的大小保存图像的副本,这提高了性能。 Youngjae建议不使用DecodePixelWidth以及他提到使用虚拟化列表,这使我得到了以下关于创建虚拟化包装面板的文章,这些文章应解决任何其他性能问题。 这篇文章是针对silverlight的,但据我所知,silverlight基本上是wpf的淡化版本,如果它在silverlight中工作,它应该在wpf中工作。 将它转换为我的用途应该不会太难。 第1部分 – MeasureOverride 第2部分 – ArrangeOverride 第3部分 – 动画 第4部分 – 虚拟化

C#加载JPG文件,解压缩BitmapImage

我试图从JPG中提取BitmapImage。 这是我的代码: FileStream fIn = new FileStream(sourceFileName, FileMode.Open); // source JPG Bitmap dImg = new Bitmap(fIn); MemoryStream ms = new MemoryStream(); dImg.Save(ms, ImageFormat.Jpeg); image = new BitmapImage(); image.BeginInit(); image.StreamSource = new MemoryStream(ms.ToArray()); image.EndInit(); ms.Close(); 图像以0×0图像返回,这当然意味着它不起作用。 我该怎么做呢?

如何将WriteableBitmap转换为BitmapImage?

BitmapImage bitmapImage = new BitmapImage(new Uri(“arka_projects_as_logo.png”, UriKind.Relative)); Image uiElement = new Image() { Source = bitmapImage }; ScaleTransform t = new ScaleTransform() { ScaleX = 0.2, ScaleY = 0.2 }; WriteableBitmap writeableBitmap = new WriteableBitmap(uiElement,t); 我想将此转换的结果(writeableBitmap)插入到System.Windows.Controls.Image中。 我这样做的时候: Image arkaImage = new Image() { Source = writeableBitmap }; arkaImage根本没有显示。 有什么办法可以让它发挥作用?

C#Windows 8 Store(Metro,WinRT)Byte数组到BitmapImage

我正在开发一个将filter应用于图像的Windows 8 Metro应用程序。 我有一个网络版的应用程序,并希望移植它。 但是众所周知,WinRT没有.NET提供的所有好处:/ 目前我在字节数组上应用filter,我想保持这种方式,因为它超快! 因此,在过去的几天里,我一直在寻找将StorageFile转换为byte []然后将byte []转换为BitmapImage的方法。 到目前为止,我已经成功完成了第一个(StorageFile到byte [])。 我是这样做的: public async Task ImageFileToByteArray(StorageFile file) { IRandomAccessStream stream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read); BitmapDecoder decoder = await BitmapDecoder.CreateAsync(stream); PixelDataProvider pixelData = await decoder.GetPixelDataAsync(); return pixelData.DetachPixelData(); } 这段代码返回一个byte[] ,其中包含像素数据BGRA。 这是棘手的部分。 我无法成功将字节数组转换为BitmapImage。 我搜遍了所有的地方,很多人建议使用WriteableBitmap,但这对我没什么好处。 我还发现了一些应该起作用的代码片段……但它们没有。 我尝试过的解决方案之一是使用InMemoryRandomAccessStream,如下所示: public async Task ByteArrayToBitmapImage(Byte[] pixels) { var stream = new InMemoryRandomAccessStream(); await […]

如何将图像放在C#中字节的图片框中

我有一个字节数组,其中包含位图格式的图像二进制数据。 如何在C#中使用PictureBox控件显示它? 我通过下面列出的几个post,但不确定我是否需要将字节数组转换为其他内容,然后再将其发送到图片框。 我很感激你的帮助。 谢谢! 如何将图像放在图片框中从位图 加载Picturebox图像从内存?

BitmapSource到BitmapImage

我需要将Clipboard.GetImage() ( BitmapSource )的内容解析为BitmapImage 。 有谁知道怎么做?

正确的方法来配置BitmapSource

你应该怎么处理BitmapSource? // this wont work because BitmapSource doesnt implement IDisposable using(BitmapSource bitmap = new BitmapImage(new Uri(“myimage.png”))) { }

垃圾收集无法回收BitmapImage?

我有一个应用程序(WPF),它创建了大量的BitmapImages(如25000)。 看起来像框架使用一些内部逻辑,所以在创建之后消耗大约300 MB的内存(150虚拟和150物理)。 这些BitmapImages将添加到Image对象中,并将它们添加到Canvas中。 问题是,当我释放所有那些图像时,内存不会被释放。 我怎样才能释放回忆? 应用程序很简单:Xaml 代码隐藏 const int size = 25000; BitmapImage[] bimages = new BitmapImage[size]; private void Button_Click(object sender, RoutedEventArgs e) { var paths = Directory.GetFiles(@”C:\Images”, “*.jpg”); for (int i = 0; i < size; i++) { bimages[i] = new BitmapImage(new Uri(paths[i % paths.Length])); var image = new Image(); image.Source = bimages[i]; […]