美好的一天
我不知道我的头衔是否正确。抱歉我的英文不好
如何使用c#inoder覆盖两个图片框以获得下面的图像,并在运行时更改上图框的不透明度。
我需要实现的是这样的。我有两个图像,我需要覆盖它们
第一张图片: enter image description here
我有第二张图片,文字为:图片上的另一张文字。 并且文本的位置低于第一图像的文本位置 (我无法上传两张以上的图片,因为我还没有10张图片。)
我需要在下面的图片上做,但使用两个图片框,可以更改不透明度,以便第一个下面的第二个图片框可以看到
和两个图像的输出: enter image description here
我用java创建了输出图像。我知道我可以使用c#运行jar文件。但是用户需要在运行时更改不透明度。那我怎么能这样做呢?
这是我使用的java代码
BufferedImage biInner = ImageIO.read(inner); BufferedImage biOutter = ImageIO.read(outter);
System.out.println(biInner);
System.out.println(biOutter);
Graphics2D g = biOutter.createGraphics();
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f));
int x = (biOutter.getWidth() - biInner.getWidth()) / 2;
int y = (biOutter.getHeight() - biInner.getHeight()) / 2;
System.out.println(x + "x" + y);
g.drawImage(biInner, x, y, null);
g.dispose();
ImageIO.write(biOutter, "PNG", new File(output));
我希望我的问题是可以理解的。谢谢
答案 0 :(得分:0)
在这里,只是一个示例,但blueBox是透明的(0.5):
public sealed partial class Form1 : Form
{
private readonly Bitmap m_BlueBox;
private readonly Bitmap m_YellowBox;
public Form1()
{
InitializeComponent();
DoubleBuffered = true;
m_YellowBox = CreateBox(Color.Yellow);
m_BlueBox = CreateBox(Color.Blue);
m_BlueBox = ChangeOpacity(m_BlueBox, 0.5f);
}
public static Bitmap ChangeOpacity(Image img, float opacityvalue)
{
var bmp = new Bitmap(img.Width, img.Height);
using (var graphics = Graphics.FromImage(bmp))
{
var colormatrix = new ColorMatrix();
colormatrix.Matrix33 = opacityvalue;
var imgAttribute = new ImageAttributes();
imgAttribute.SetColorMatrix(colormatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);
graphics.DrawImage(img, new Rectangle(0, 0, bmp.Width, bmp.Height), 0, 0, img.Width, img.Height,
GraphicsUnit.Pixel, imgAttribute);
}
return bmp;
}
private static Bitmap CreateBox(Color color)
{
var bmp = new Bitmap(200, 200);
for (var x = 0; x < bmp.Width; x++)
{
for (var y = 0; y < bmp.Height; y++)
{
bmp.SetPixel(x, y, color);
}
}
return bmp;
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawImage(m_YellowBox, new Point(10, 10));
e.Graphics.DrawImage(m_BlueBox, new Point(70, 70));
}
}