Tag: 图像处理

设置BMP / JPG文件的像素颜色

我正在尝试设置图像的给定像素的颜色。 这是代码片段 Bitmap myBitmap = new Bitmap(@”c:\file.bmp”); for (int Xcount = 0; Xcount < myBitmap.Width; Xcount++) { for (int Ycount = 0; Ycount < myBitmap.Height; Ycount++) { myBitmap.SetPixel(Xcount, Ycount, Color.Black); } } 每次我收到以下exception: 未处理的exception:System.InvalidOperationException:具有索引像素格式的图像不支持SetPixel。 bmp和jpg文件都抛出exception。

拜耳订购抖动

我正在为几个月前制作的Paint.net更新一个插件,它被称为模拟颜色深度,它将图像中的颜色数量减少到选定的BPP,并且很长一段时间它已经包含了抖动但是从未订购过抖动并且我认为这将是一个很好的补充,因此我开始在互联网上搜索有用的东西,我最终在这个维基页面http://en.wikipedia.org/wiki/Ordered_dithering ,并试图按照伪代码编写 for (int y = 0; x < image.Height; y++) { for (int x = 0; x < image.Width; x++) { Color color = image.GetPixel(x, y); color.R = color.R + bayer8x8[x % 8, y % 8]; color.G = color.G + bayer8x8[x % 8, y % 8]; color.B = color.B + bayer8x8[x % 8, y […]

在.NET中加载Canon .CR2文件

我正在尝试使用C#处理Canon RAW .CR2文件。 我的代码如下: BitmapDecoder bmpDec = BitmapDecoder.Create(new Uri(origFile), BitmapCreateOptions.DelayCreation, BitmapCacheOption.None); BitmapEncoder bmpEnc = new BmpBitmapEncoder(); bmpEnc.Frames.Add(bmpDec.Frames[0]); Stream ms = new MemoryStream(); bmpEnc.Save(ms); Image srcImage = Bitmap.FromStream(ms); 前几行似乎毫无障碍地运行,但线路 bmEnc.Save(ms); 只是挂起而没有完成,也没有提出任何例外。 有人有这个成功吗?

收缩图像时如何才能获得更好的效果

我正在用c#缩小图像,我将我的方法与Photoshop cs5中的最佳方法进行了比较,无法复制它。 在PS我使用bicubic锐化,看起来非常好。 但是,当尝试在c#中做同样的事情时,我得不到高质量的结果。 我尝试了双三次插值以及HQ双三次,平滑模式HQ /无/ AA。 合成模式,我尝试了大约50种不同的变化,每一种都非常接近右边的图像。 你会注意到她背面和标题周围的像素化,以及作者的名字不太好。 (左边是PS,右边是c#。) 似乎c#bicubic即使平滑设置为无,也会进行太多平滑处理。 我一直在玩以下代码的许多变体: g.CompositingQuality = CompositingQuality.HighQuality; g.InterpolationMode = InterpolationMode.HighQualityBicubic; g.PixelOffsetMode = PixelOffsetMode.None; g.SmoothingMode = SmoothingMode.None; 编辑:这里要求的是起始图像(1mb)。

如何获取“System.Drawing.Image”的文件大小

我目前正在编写一个系统,用于存储大约140,000个ish图像的元数据,这些图像存储在传输到云存储的传统图像库中。 我使用以下内容获取jpg数据… System.Drawing.Image image = System.Drawing.Image.FromFile(“filePath”); 我对图像处理很新,但这对于获取宽度,高度,宽高比等简单值很好,但我无法解决的是如何检索以字节为单位表示的jpg的物理文件大小。 任何帮助将非常感激。 谢谢 最终解决方案包括图像的MD5哈希以供稍后比较 System.Drawing.Image image = System.Drawing.Image.FromFile(filePath); if (image != null) { int width = image.Width; int height = image.Height; decimal aspectRatio = width > height ? decimal.divide(width, height) : decimal.divide(height, width); int fileSize = (int)new System.IO.FileInfo(filePath).Length; using (System.IO.MemoryStream stream = new System.IO.MemoryStream(fileSize)) { image.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg); Byte[] imageBytes […]

如何在没有大内存分配的情况下显示快速更新的图像?

我在超声波机器上有一个WPF应用程序,它以高达每秒30帧的速度显示用C ++生成的超声图像。 据我所知,在WPF中显示图像的正常过程是为您的图像创建一个BitmapSource,并为您的图像设置Source,然后使其无效并显示。 由于BitmapSources没有实现IDisposable,使用这种方法迫使我每秒创建30个BitmapSources。 对于具有32bppArgb格式的640×480图像,这是每秒分配大约30MB /秒的内存,然后每10秒进行一次垃圾处理,导致可见的延迟。 显然不是一个可以接受的解决方案。 我目前的解决方案是: 在C ++中:我在托管C ++中创建一个System.Drawing.Bitmap(WinForms位图),从指针填充图片做一个memcpy,使用Graphics对象做我需要的一些额外的绘图,并将其传递给C#/ WPF在ImageReceived事件期间。 在C#中, Image.Source设置为BitmapBuffer生成的源,这是访问位图源的原始数据的一种黑客方式:请参阅此链接。 我做了一个CopyMemory的P / Invoke来将Bitmap.Scan0中的数据复制到BitmapBuffer中。 然后我使Image无效以更新屏幕,然后Dispose()Drawing.Bitmap对象释放内存。 虽然这种方法已经工作了一段时间,但它似乎非常黑客,我发现很难相信除了通过reflection之外没有其他“适当”的方法来做到这一点。 问题:有更好的方法吗?

如何按比例调整.NET中任何类型的图像大小?

可以以独立于图像类型(bmp,jpg,png等)的方式按比例调整图像大小吗? 我有这个代码并知道缺少某些东西(但不知道是什么): public bool ResizeImage(string fileName, string imgFileName, ImageFormat format, int width, int height) { try { using (Image img = Image.FromFile(fileName)) { Image thumbNail = new Bitmap(width, height, img.PixelFormat); Graphics g = Graphics.FromImage(thumbNail); g.CompositingQuality = CompositingQuality.HighQuality; g.SmoothingMode = SmoothingMode.HighQuality; g.InterpolationMode = InterpolationMode.HighQualityBicubic; Rectangle rect = new Rectangle(0, 0, width, height); g.DrawImage(img, rect); thumbNail.Save(imgFileName, format); […]

合并两个图像以在C#.Net中创建单个图像

我有一个要求,其中我需要使用C#.Net将两个不同的png / jpeg图像合并成单个图像。 将在源图像上定义特定位置,其中我需要插入另一图像。 任何人都可以建议一些链接?

我们能以编程方式比较相同分辨率的不同图像吗?

是否有一种良好可靠的方法来比较相同格式和相同分辨率的图像并获得它们之间的差异? 在最好的情况下,我正在寻找可以进行比较的图像的一些数字表示,因为我必须比较许多图像。

反转图像返回黑色图像

我想反转一个Image对象。 目前我的代码如下所示: private Image Invert(Image img) { var bmpPicture = new Bitmap(img.Width, img.Height); var iaPicture = new ImageAttributes(); var cmPicture = new ColorMatrix { Matrix00 = -1, Matrix11 = -1, Matrix22 = -1 }; iaPicture.SetColorMatrix(cmPicture); var gfxPicture = Graphics.FromImage(img); var rctPicture = new Rectangle(0, 0, img.Width, img.Height); gfxPicture.DrawImage(img, rctPicture, 0, 0, img.Width, img.Height, GraphicsUnit.Pixel, iaPicture); […]