我具有其中所选择的图像可被放大和OUT的图像控制。
用户可以将一些控件在运行时的图像。 放置控件后,如果用户放大的图像,然后将控件未缩放时,相反,他们相对于它们的图像中的位置移动。 所以控件的位置保持图像上相同,只是图像将被放大。
说一切后,要求是完整的图像由用户添加的控件一起导出。
我已经实现了用下面的代码此功能:
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);
}
现在问题出现了,当我缩放图像,然后单击导出图按钮。 仅放大图像的特定区域之后被显示。 因此,控制的背景(即控制的可见区以外的)图像被改变,而不是按形象。
我附上了进一步澄清图片:
放大前图像:
放大后的图片:
所以在上面的图片,你可以看到控制图像的背景并不如预期。
任何人可以帮助我施加ZOOM后得到正确的背景什?