Tag: 位图

c#Bitmap.Save transparancy不保存在png中

我正在尝试将具有透明度的Bitmap类保存为具有透明度的png文件。 我没有运气。 位图具有透明度,它只是不保存透明度。 这就是我正在做的事情 位图设置 Bitmap ret = new Bitmap(bWidth, bHeight, System.Drawing.Imaging.PixelFormat.Format32bppArgb); saveing ret.Save(filename, ImageFormat.Png); 我也尝试用文件流保存文件,这没有任何区别。 当图像在图片框中时,透明度存在,但是当我保存时,我只得到一个黑色背景。 我真的不想使用任何第三方代码,他们找到了一种方法,我也想。 谢谢。

C#在另一个位图的alpha通道中复制位图的像素

我有两个位图,一个包含“普通”图像,另一个包含灰度图像。 我的目标只是将灰度图像放在第一个位图的alpha通道中,以便像面具一样使用灰度图像。 我已经看到了一些使用SetPixel来做到这一点的解决方案,但它很慢并且由于内存分配错误而在最终图像上创建了一些奇怪的工件。 因此,可能通过浏览原始位图中的所有像素并从Alpha通道中的灰度位图分配相应像素来实现此目的。 也许使用LockBits像素arrays? 所以我的问题是如何做到这一点? 我特别难以找到如何在alpha通道中分配像素以及如何在灰度位图中获取相应的像素。

C# – 将WPF Image.source转换为System.Drawing.Bitmap

我发现有很多人将BitmapSource转换为Bitmap ,但是ImageSource到Bitmap呢? 我正在制作一个成像程序,我需要从Image元素中显示的图像中提取位图。 有谁知道如何做到这一点? 编辑1: 这是将BitmapImage转换为Bitmap 。 请记住在编译器首选项中设置“unsafe”选项。 public static System.Drawing.Bitmap BitmapSourceToBitmap(BitmapSource srs) { System.Drawing.Bitmap btm = null; int width = srs.PixelWidth; int height = srs.PixelHeight; int stride = width * ((srs.Format.BitsPerPixel + 7) / 8); byte[] bits = new byte[height * stride]; srs.CopyPixels(bits, stride, 0); unsafe { fixed (byte* pB = bits) { IntPtr […]

字节数组到位图图像

我制作此代码以接收图像并将其转换为位图图像,但它不起作用。 这是代码: public void ReceiveImage() { NetworkStream stream = new NetworkStream(socket); byte[] data = new byte[4]; stream.read(data,0,data.length,0) int size = BitConverter.ToInt32(data,0); data = new byte[size]; stream.read(data,0,data.length) MemoryStream imagestream = new MemoryStream(data); Bitmap bmp = new Bitmap(imagestream); picturebox1.Image = bmp; } 它得到: Bitmap bmp = new Bitmap(imagestream); 并给我这个错误: 参数无效

在.net紧凑框架中将图像转换为1 bpp位图

我有一个签名的图像我试图保存为1 bpp位图以节省文件空间。 完整的.NET Framework具有枚举PixelFormat.Format1bppIndexed ,但.NET Compact Framework不支持它。 有没有人发现在Windows Mobile中实现这一目标的方法?

如何检查位图的颜色深度?

我正在开发一个打印图像文件夹的应用程序,包括JPEG和TIFF。 TIFF图像通常为黑白(1bpp)。 加载图像后,我想确定图像是彩色还是黑白或灰度,这样我就可以将图像发送到正确的打印机(彩色打印机或黑白打印机)。 我正在使用Bitmap构造函数image = new Bitmap(filename); 加载图像。 编辑:检查像素深度的答案非常适合B&W。 有关检查图像是否为灰度而不迭代每个像素的任何想法?

将两个图像合并为一个新图像

我有两个不同尺寸的JPEG文件: Image1(宽1,高1) Image2(宽度2,高度2) 我想创建Image3(Width3,Height3),左侧是Image1,右侧是Image2。

C#.NET Bitmap的最大分辨率是多少?

从理论上讲,它应该是65,535 x 65,535,因为你有足够的内存,大约17GB。 但是,创建一个.NET 4.5控制台应用程序来测试它,它会抛出System.ArgumentException:参数无效。 该应用程序是为64位平台构建的。 在具有32GB内存的64位平台上运行。 我能够获得的最大分辨率是22,000 x 22,000像素。 我找不到任何关于此的文件。 奇怪的是,即使在22,000 x 22,000像素,它也不总是有效。 它有时会起作用,它有时会抛出exception。 这让我觉得它与连续的内存分配有关,但是有大约30GB的可用内存。 有没有人有这方面的经验? 如果我想使用100,000 x 100,000像素和更大的图像,那么除了实现我自己的位图之外,最好的方法是什么呢? 编辑:问题不是.NET最大对象大小。 这可以通过针对64位平台,并在应用程序配置中设置gcAllowVeryLargeObjects标志来克服。 通过这种方式,我可以使应用程序使用单个整数数组消耗超过15GB的内存。 到目前为止,答案似乎在于GDI +的底层实现,但我该如何解决它呢?

为什么System.Drawing.Bitmap构造函数中的“stride”必须是4的倍数?

我正在编写一个应用程序,要求我采用专有的位图格式(MVTec Halcon HImage)并将其转换为C#中的System.Drawing.Bitmap。 除了使用“获取指针”function外,我给你的唯一专有function是帮我写文件。 这个function很棒,它给了我一个指向像素数据,宽度,高度和图像类型的指针。 我的问题是当我使用构造函数创建System.Drawing.Bitmap时: new System.Drawing.Bitmap(width, height, stride, format, scan) 我需要指定一个4的倍数的“步幅”。这可能是一个问题,因为我不确定我的函数将被命中的大小位图。 假设我最终得到一个111×111像素的位图,除了在我的图像中添加一个伪列或减去3列之外,我无法运行此function。 有没有办法可以绕过这个限制?

将C#/ .NET中的位图序列化为XML

我想XML-Serialize一个复杂类型(类),它具有System.Drawing.Bitmap类型的属性 。 /// /// Gets or sets the large icon, a 32×32 pixel image representing this face. /// /// The large icon. public Bitmap LargeIcon { get; set; } 我现在已经发现使用默认的XML序列化程序序列化Bitmap不起作用,因为它没有公共无参数构造函数,这对于默认的xml序列化程序是必需的。 我知道以下内容: 有一个解决方法,发布在这里: http : //www.dotnetspider.com/resources/4759-XML-Serialization-C-Part-II-Images.aspx 。 但是,由于这包括添加另一个属性,这在我看来有点像黑客。 sourceforge上还有一个深度XML序列化项目。 我宁愿不想引用另一个项目,也不想广泛调整我的类,只允许这些位图的xml序列化。 有没有办法保持这么简单? 非常感谢,马塞尔