【发布时间】:2018-07-21 06:45:19
【问题描述】:
Bitmap image = ReadBitmap("image.png");
Bitmap imageCopy = new Bitmap(image);
Bitmap canvas = new Bitmap(imageCopy.Width+100, imageCopy.Height);
// From this bitmap, the graphics can be obtained, because it has the right PixelFormat
using(Graphics g = Graphics.FromImage(canvas))
{
// Draw the original bitmap onto the graphics of the new bitmap
g.DrawImage(image, 0, 0);
}
// Use tempBitmap as you would have used originalBmp
InputPictureBox.Image = image;
OutputPictureBox.Image = canvas;
我没看懂这段c#代码的输出。
原始图像未放置在正确的位置。它应该在(0, 0)。
另外,我需要黑色背景。
那么,发生了什么以及如何纠正这个问题?
【问题讨论】:
-
此代码将源图像复制到新的图像容器中。目标容器的大小在其 X 维度上增加 100 像素。然后将源图像复制到新容器中。由于只指定了原点,源图像被扭曲以适合它的容器。源图像保持不变。两个图像都传递给 PictureBoxes。图像在控件上的呈现方式取决于控件的 SizeMode(缩放、拉伸、自动调整大小...)。 我需要黑色背景:在图像副本上?如果是这样,您在绘制时已经完全填满了画布)。
-
此外,没有任何图像被释放,源图像将被 GDI+ 锁定(在图像(及其流)为
Disposed()之前,您无法触摸基础文件。您应该解释预期的结果是什么。是否可以在图像的左右两侧创建一个更大的 Canvas,作为图像的黑框? -
@Jimi 由于只指定了原点,源图像被扭曲以适应它的容器。不。图像是用它的原件绘制的> 尺寸。如果他指定了宽度和高度 g.DrawImage(image, 0, 0, canvas.Width, canvas.Height)
-
您的图片框中有 zoom。将其更改为正常。
-
@γηράσκω δ' αεί πολλά διδασκόμε 是的,也许 distorted 不是首选词。放大(有点失真)。但也应该被裁剪(Y 维度)。
标签: c# .net winforms image-processing gdi+