Tag: 图像处理

使用Aforge.Net将灰度图像转换为黑白图像

我是Aforge.Net的新手,我正在寻找一种将灰度图像转换为黑白图像的方法。 我真的找不到任何支持吗? 我设法通过应用灰度滤镜将普通图像转换为GrayScale。 但我无法找到关于黑白转换的任何信息 请有人帮我一把。

从内存中显示RGBA图像

我有一个包含RGBA编码图像的C#字节数组。 在WPF中显示此图像的最佳方法是什么? 一种选择是从字节数组创建一个BitmapSource并将其附加到Image控件。 但是,创建BitmapSource需要一个用于RGBA32的PixelFormat,这在Windows中似乎不可用。 byte[] buffer = new byte[] { 25, 166, 0, 255, 90, 0, 120, 255 }; BitmapSource.Create(2, 1, 96d, 96d, PixelFormats.Bgra32, null, buffer, 4 * 2); 我绝对不想在我的字节数组中交换像素。

System.ArgumentException:参数无效

我有一个页面发送html5canvas数据,编码为base64 bmp图像(使用此算法http://devpro.it/code/216.html )到服务器端进程,将其转换为System.Drawing.Image对象和做一些操作。 在我的本地环境中,这很好用,但在我的ec2实例上,我收到以下错误: System.ArgumentException:参数无效。 在System.Drawing.Image.FromStream(Stream stream,Boolean useEmbeddedColorManagement,Boolean validateImageData)中的System.Drawing.Image.FromStream(Stream stream,Boolean useEmbeddedColorManagement) 我的代码如下: System.Drawing.Image image = null; string b64string = “…”; byte[] sf = Convert.FromBase64String(b64string ); using (MemoryStream s = new MemoryStream(sf, 0, sf.Length)) { image = System.Drawing.Image.FromStream(s, false); } … 这是一个包含我正在测试的样本b64string的文本文件: https ://docs.google.com/leaf?id = 0BzVLGmig1YZ3MTM0ODBiNjItNzk4Yi00MzI5LWI5ZWMtMzU1OThlNWEyMTU5 &hl = en_US 我也试过以下内容并得到了相同的结果: System.Drawing.ImageConverter converter = new System.Drawing.ImageConverter(); image […]

Bitmap.Maketransparent函数的结果不同

我的问题是我想让图像背景透明。 以下function对我来说很好,但在不同的机器上测试时,我发现有很多神器颜色,透明度不像我的机器和其他机器那样清晰。 我正在使用调试版本,测试是在发布版本上完成的。 但即使使用发布版本,我们也会在不同的计算机上看到不同 Image CreateTransparentBackgroundImage(Image image) { using (Bitmap tempBitmap = new Bitmap(image.Width, image.Height, System.Drawing.Imaging.PixelFormat.Format32bppPArgb)) { var g = Graphics.FromImage(tempBitmap); Rectangle rec = new Rectangle(0 ,0,image.Width, image.Height); g.DrawImage(image,rec, 0, 0,image.Width,image.Height, GraphicsUnit.Pixel); tempBitmap.MakeTransparent(System.Drawing.Color.White); g.Dispose(); return (Image)tempBitmap.Clone(); } } 任何帮助将非常感激。

将BMP转换为内存中的PNG,以便在.Net中粘贴剪贴板

这个类似问题的答案都需要保存文件。 但是,我正在尝试转换文件,然后将其复制到剪贴板。 如何将位图(或任何图像)转换为PNG而不将其保存到文件系统? 更新: 我正在尝试将图像粘贴到应用程序中(在本例中为Evernote)。 当您将图像复制到剪贴板(例如,通过浏览器)时,它会记住它的图像格式,当您将其粘贴时,它将创建具有相同格式的图像。 例如,如果您复制PNG,它将粘贴PNG。 如果您复制JPG,它将粘贴JPG等。 我正在尝试拍摄当前在剪贴板中的任何图像,将其缩放到我想要的大小,然后将其作为PNG保存在剪贴板中,这样当它粘贴到Evernote时,它将创建一个PNG。 当我在浏览器中复制PNG图像时,我看到以下格式: HTML FORMAT , CF_BITMAP , CF_DIB , CF_DIBV5 。 我不确定这些Evernote中哪一个用于粘贴。 我的印象是它是CF_BITMAP ,但在阅读下面的评论后,我猜它正在使用其他格式之一。 如何将图像放在剪贴板中,粘贴时将其视为PNG?

如何在窗口电话8.1中改进性能方法GetThumbnailAsync

我在窗口电话8.1中写了一个函数来显示文件夹上的图像(假设我在这个文件夹中有大约60个图像 )。 问题是函数GetThumbnailAsync()在创建流来获取bitmapImage时需要很长时间 。 这是我的代码 //getFileInPicture is function get all file in picture folder List lstPicture = await getFileInPicture(); foreach (var file in lstPicture) { var thumbnail = await file.GetThumbnailAsync(Windows.Storage.FileProperties.ThumbnailMode.PicturesView,50); var bitmapImage = new BitmapImage(); bitmapImage.DecodePixelWidth = (int)(ScreenWidth / 4); await bitmapImage.SetSourceAsync(thumbnail); g_listBitmapImage.Add(bitmapImage); //g_listBitmapImage is a list of bitmapImage } 我是测试, 发现问题是函数GetThumbnailAsync花了这么长时间 。 如果我有大约60张图片,则需要大约15秒来完成此function(我在lumia 730中测试)。 […]

如何发现图像中的所有像素都是灰度级,或者每个像素的R,G,B值相等

请不要引用此问题如何检查位图的颜色深度? 或如何检查图片是否为灰度 因为即使所有独特颜色都是灰度级或小于256且每个像素可以是24位或32位,图像也可以是每像素24/32位。 如何找到图像Bitmap.GetPixel(x, y)中的像素具有相等的R,G,B值,以便我可以查看图像中的所有像素是否位于灰度范围内。 因为灰度像素的R,G,B值相同。 或者有没有更好的方法来查找图像是否为灰度? 我正在编写一个代码来压缩16/24/32位图像的大小,这样如果图像有256种独特的颜色,则将其更改为8位图像并保存。 首先,我计算每个像素高于8的图像中的唯一颜色。 如果图像中的独特颜色小于或等于256那么 如果所有独特颜色都在灰度范围内,则将其转换为灰度 否则,如果任何颜色不是灰度,则将图像转换为8 BPP uint UniqueColors(Bitmap Bitmap) { try { List lstColors = new List(); if (null == Bitmap) return 0; for (int iCount = 0; iCount < Bitmap.Height; iCount++) for (int iCounter = 0; iCounter < Bitmap.Width; iCounter++) if (!lstColors.Contains(Bitmap.GetPixel(iCounter, iCount).ToArgb())) lstColors.Add(Bitmap.GetPixel(iCounter, iCount).ToArgb()); Bitmap.Dispose(); return […]

垂直翻转字节数组中位图的算法

我正在通过Mono For Android为Android中的便携式蓝牙打印机编写一个用于打印位图的课程。 我的类用于从流中获取像素数据,以便可以以正确的格式将其发送到打印机。 现在这个类很简单,它只读取每个像素的高度,宽度和位数。 使用它读取的偏移量并将像素数据返回给打印机。 现在我只使用每像素1位黑白图像。 我正在使用的位图是Windows格式。 这是原始图像: 这是打印的结果,第一张图片没有任何变换。 第二个是使用以下代码修改BitArray的结果: BitArray bits = new BitArray(returnBytes); BitArray flippedBits = new BitArray(bits); for (int i = 0, j = bits.Length – 1; i < bits.Length; i++, j–) { flippedBits[i] = bits[j]; } 我的问题是: 当我使用字节数组时,如何垂直翻转图像。 我无法找到执行此操作的算法,所有示例似乎都建议使用我无法使用的已建立的图形库。 编辑: 我的位图保存在一维数组中,第一行是字节,第二行是第三,等等。

从C#中的位图创建一个全新的位图副本

我需要从另一个位图获得位图的深层副本。 现在,大多数解决方案都是这样的 ,这不是一个深层次的副本 。 这意味着当我锁定原始位图时,副本也会被锁定,因为克隆是原始位图的浅表副本 。 现在以下似乎对我有用,但我不确定它是否适用于所有情况。 public static Bitmap GetCopyOf(Bitmap originalImage) { Rectangle rect = new Rectangle(0, 0, originalImage.Width, originalImage.Height); Bitmap retrunImage = new Bitmap(originalImage.Width, originalImage.Height, originalImage.PixelFormat); BitmapData srcData = originalImage.LockBits(rect, ImageLockMode.ReadOnly, originalImage.PixelFormat); BitmapData destData = retrunImage.LockBits(rect, ImageLockMode.WriteOnly, originalImage.PixelFormat); int dataLength = Math.Abs(srcData.Stride) * srcData.Height; byte[] data = new byte[dataLength]; Marshal.Copy(srcData.Scan0, data, 0, data.Length); […]

在WPF中为部分透明图像着色

如何在不牺牲性能的情况下对WPF中的图像进行着色/着色(使用MVVM)? 纯粹的XAML解决方案将是理想的,因为修改代码中的位图将导致大量更改图像的性能损失。 图像由多个简单形状组成,因此无法使用路径。