我有一个图像控件,其中选择的图像可以放大和缩小。
用户可以在运行时对图像进行一些控制。放置控件后,如果用户放大图像,则控件不会缩放,而是相对于它们在图像中的位置移动。所以控件的位置在图像上保持不变,只是图像会被缩放。
说了这么多,要求是导出完整的图像以及用户添加的控件。
我已经使用以下代码实现了此功能:
Bitmap bmpCopy = new Bitmap(picEditIsdDiagram.Image);
Graphics canvas = Graphics.FromImage(bmpCopy);
canvas.InterpolationMode = InterpolationMode.HighQualityBicubic;
try
{
foreach (Control MeasurementSymbol in picEditIsdDiagram.Controls)
{
if (MeasurementSymbol is DevExpress.XtraEditors.HScrollBar || MeasurementSymbol is DevExpress.XtraEditors.VScrollBar)
{
continue;
}
Bitmap bmpControl = new Bitmap(MeasurementSymbol.Width, MeasurementSymbol.Height);
MeasurementSymbol.DrawToBitmap(bmpControl, new Rectangle(Point.Empty, bmpControl.Size));
bmpControl.MakeTransparent(Color.Transparent);
canvas.DrawImage(
bmpCopy,
new Rectangle(0, 0, bmpCopy.Width, bmpCopy.Height),
new Rectangle(0, 0, bmpCopy.Width, bmpCopy.Height),
GraphicsUnit.Pixel
);
canvas.DrawImage(bmpControl, ((UcMeasurementSymbol)MeasurementSymbol).PointInImage);
canvas.Save();
}
FolderBrowserDialog save = new FolderBrowserDialog();
save.RootFolder = Environment.SpecialFolder.Desktop;
if (save.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
int count = 1;
string destinationPath = save.SelectedPath + "\\" + IsdDiagram.Isd.Name + " - " + IsdDiagram.Name + ".Jpeg";
while (File.Exists(destinationPath))
{
destinationPath = save.SelectedPath + "\\" + IsdDiagram.Isd.Name + " - " + IsdDiagram.Name + " [" + count++.ToString() + "].Jpeg";
}
bmpCopy.Save(destinationPath, ImageFormat.Jpeg);
SERVICE.NMessageBox.Show("Complete Diagram saved successfully in Jpeg format", "Image Saved", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
catch (Exception ex)
{
SERVICE.NMessageBox.Show("Error exporting complete Diagram. Error :" + ex.Message.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
现在,当我缩放图像时出现问题,然后单击“导出图表”按钮。缩放后仅显示图像的特定区域。因此,控件的背景(即控件的可见区域之外)图像已更改,并且与图像不同。
我附上图片以作进一步说明:
缩放前的图像:
缩放后的图像:
所以在上面的图片中,你可以看到Control图片的背景并不像预期的那样。
即使在应用 ZOOM 之后,任何人都可以帮助我获得正确的背景吗?