Tag: alpha transparency

ImageList上的32位图像

我有以下图片: 我正在从资源中读取它,放入ImageList,然后从ImageList读取它以在我的控件表面上绘制。 但是当我这样做时,图像似乎松散了有关alpha通道的信息: 以下是所有相关的代码: Program.cs中 Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); MainForm.cs ilFilters = new ImageList() { ColorDepth = ColorDepth.Depth32Bit, ImageSize = new Size(16, 16) }; // (…) if (info.Icon != null) { if (info.Icon.Width == 16 && info.Icon.Height == 16) { ilFilters.Images.Add(info.Icon); index = ilFilters.Images.Count – 1; } } 我实际上在( info.Icon )和之后( ilFilters.Images[0] )将图像保存到图像列表中。 第一个版本是正确的,第二个 – 已损坏。 好像ImageList损坏了图像。 […]

是否可以将两个重叠的PictureBox控件与透明图像一起使用?

有两个重叠的PictureBox控件 ,我试图让图片框的透明区域让下面的控件(在z顺序中)可见。 即使在尝试微软的建议之后 ,我也无法获得理想的结果。 这就是我目前所拥有的: 这就是我想要的: 所以我的问题是: 用两个相互重叠的PictureBox控件(或另一种方式)实现我想要的结果,让透明区域透过? 更新: 实际上我通过使用这个问题“ 使用C#WinForms透明图像 ”的答案解决了它。

C# – 在背景图像(alpha通道)上绘制顶部图像 – WinForm

我有这个带有alpha通道的topimage,我需要将这个图像放在另一个背景图像上,而顶部图像的alpha通道显然保持完整。 现在我已经看过Canvas的一些教程,但我的项目似乎没有认识到Canvas。 任何人都知道为什么我不能使用Canvas或如何将这两个图像放在一起?

使用自定义背景颜色将带alpha通道的图像复制到剪贴板?

代码: private void Foo(Canvas canvas) { // The content is a bit larger… Size size = new Size(canvas.ActualWidth * 1.1, canvas.ActualHeight * 1.2); // Create a render bitmap and push the surface to it RenderTargetBitmap renderBitmap = new RenderTargetBitmap( (int)size.Width, (int)size.Height, 96d, 96d, PixelFormats.Pbgra32 ); renderBitmap.Render(canvas); // Then copy to clipboard Clipboard.SetImage(renderBitmap); } 我需要的 : […]

Photoshop喜欢透明图像上的背景

我正在为我的课程项目制作一个图形编辑器,我想这样做,例如当用户将图片加载到编辑器中或者在PictureBox中绘制某些东西时,所有的alpha部分都显示为棋盘状的背景。 我的想法是,当我创建一个具有透明背景设置的PictureBox时,我在它后面创建另一个,将BackColor设置为白色并在水平和垂直方向上交替添加灰色图像50×50。 这是解决问题的好方法吗? 如果,不是吗?你有什么建议吗? 例如,在Photoshop中,我创建图像1600×1600。 当我缩放到某个级别时,它缩小了框并添加了更多的框来填充图像。 如果你使用类似程序的Photoshop你知道我的意思。 现在,我将如何实现同样的效果?

在C#中使用原生HBitmap,同时保留alpha通道/透明度

假设我从本机Windows函数中获取HBITMAP对象/句柄。 我可以使用Bitmap.FromHbitmap(nativeHBitmap)将其转换为托管位图,但如果原生图像具有透明度信息(alpha通道),则此转换会丢失它。 有关此问题的Stack Overflow有几个问题。 使用来自这个问题的第一个答案的信息( 如何使用GDI +绘制ARGB位图? ),我写了一段代码,我尝试过并且有效。 它基本上使用GetObject和BITMAP结构获取本机HBitmap宽度,高度和指向像素数据位置的指针,然后调用托管Bitmap构造函数: Bitmap managedBitmap = new Bitmap(bitmapStruct.bmWidth, bitmapStruct.bmHeight, bitmapStruct.bmWidth * 4, PixelFormat.Format32bppArgb, bitmapStruct.bmBits); 据我所知(如果我错了,请纠正我),这不会将实际像素数据从原生HBitmap复制到托管位图,它只是将托管位图指向来自原生HBitmap的像素数据。 我不会在另一个图形(DC)或另一个位图上绘制位图,以避免不必要的内存复制,尤其是对于大位图。 我可以简单地将此位图分配给PictureBox控件或Form BackgroundImage属性。 它工作正常,使用透明度正确显示位图。 当我不再使用位图时,我确保BackgroundImage属性不再指向位图,并且我同时配置了托管位图和本机HBitmap。 问题:你能告诉我这个推理和代码是否正确。 我希望我不会得到一些意想不到的行为或错误。 我希望我能正确释放所有内存和对象。 private void Example() { IntPtr nativeHBitmap = IntPtr.Zero; /* Get the native HBitmap object from a Windows function here */ // Create the BITMAP structure and […]

如何在不失去透明度的情况下将图像转换为图标?

我有PNG图像,我需要在显示之前将其转换为图标。 这就是我做的方式: public Icon ImageToIcon(Image imgTest) { Bitmap bitmap = new Bitmap(imgTest); Icon icoTest; IntPtr iPtr = bitmap.GetHicon(); icoTest = (Icon) Icon.FromHandle(iPtr).Clone(); return icoTest; } 这样做后我失去了透明度,alpha透明图像没有按预期渲染….这可以解决吗?

使用Graphics.DrawImage()以透明度/ Alpha通道绘制图像

我正在复制一张图片。 (我的实际代码是调整图像大小,但这与我的问题无关。)我的代码看起来像这样。 Image src = … using (Image dest = new Bitmap(width, height)) { Graphics graph = Graphics.FromImage(dest); graph.InterpolationMode = InterpolationMode.HighQualityBicubic; graph.DrawImage(src, 0, 0, width, height); dest.Save(filename, saveFormat); } 除非从具有透明度(例如GIF)或Alpha通道(例如PNG)的图像加载src否则这似乎很有效。 如何让DrawImage()将透明度/ alpha通道传输到新图像,然后在保存文件时保留它们?