现在我的表单上有一个PictureBox
的表单。我正在使用两个部分透明的图像,并尝试将一个放在另一个上面。
这是我的方法:
// METHOD #1 //
Image img1 = Image.FromFile(@"C:\sideMenuWide.png");
Image img2 = Image.FromFile(@"C:\labelPointer.png");
picBox.Image = CombineImages(img1, img2);
// METHOD #2 //
Image imgA = RBS.Properties.Resources.sideMenuWide;
Image imgB = RBS.Properties.Resources.labelPointer;
picBox.Image = CombineImages(imgA, imgB);
和CombineImage函数:(我没有写这个函数,只修改了)
public static Bitmap CombineImages(Image imgA, Image imgB)
{
//a holder for the result (By default, use the first image as the main size)
Bitmap result = new Bitmap(imgA.Size.Width, imgA.Size.Height);
//use a graphics object to draw the resized image into the bitmap
using (Graphics graphics = Graphics.FromImage(result))
{
//set the resize quality modes to high quality
graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
//draw the images into the target bitmap
graphics.DrawImage(imgA, 0, 0, imgA.Width, imgA.Height);
graphics.DrawImage(imgB, 100, 70, imgB.Width, imgB.Height);
}
return result;
}
方法#1 按照我想要的方式工作,在imgA上完美地显示imgB。
方法#2 但显示imgA很好,但imgB非常微弱。
关于如何克服这个问题的任何想法?我希望能够使用Resources执行此操作,而不必从文件中提取。
答案 0 :(得分:0)
如果文件在加载时有效,但资源没有,则听起来像resx构建过程或ResourceManager正在做一些不受欢迎的事情。我会尝试嵌入文件并直接从流中读取它们,而不是依靠ResourceManager为您完成。
在解决方案资源管理器中,添加现有文件将文件添加到项目中。获取添加文件的属性并将其设置为 Embedded Resource = 。 (不要将其添加到resx文件中)
在您的代码中,您现在可以获得包含文件数据的流:
Stream instream = Assembly.GetExecutingAssembly().
GetManifestResourceStream("RBS.labelPointer.png"));
(提示:编译器为嵌入式资源生成一个钝名称,因此在添加文件后,您可以添加临时代码来调用Assembly.GetExecutingAssembly()。GetManifestResourceNames()以获取所有文件的列表并查找您感兴趣的文件)
从流中加载位图/图像:
Image img2 = new Bitmap(inStream);