///
将容器内容转成图片导出,这里的controller就是this
///
</summary>
private
void
OutTheControllerToPic()
{
Bitmap
bitmap =
new
Bitmap
(
this
.Width,
this
.Height);
DrawToBitmap(
this
, bitmap,
new
Rectangle
(0, 0,
this
.Width,
this
.Height));
bool
isSave =
true
;
SaveFileDialog
saveImageDialog =
new
SaveFileDialog
();
saveImageDialog.Title =
"图片保存"
;
saveImageDialog.Filter =
@"png|*.png|jpeg|*.jpg|bmp|*.bmp|gif|*.gif"
;
if
(saveImageDialog.ShowDialog() ==
DialogResult
.OK)
{
string
fileName = saveImageDialog.FileName.ToString();
if
(fileName !=
""
&& fileName !=
null
)
{
string
fileExtName = fileName.Substring(fileName.LastIndexOf(
"."
) + 1).ToString();
System.Drawing.Imaging.
ImageFormat
imgformat =
null
;
if
(fileExtName !=
""
)
{
switch
(fileExtName)
{
case
"jpg"
:
imgformat = System.Drawing.Imaging.
ImageFormat
.Jpeg;
break
;
case
"bmp"
:
imgformat = System.Drawing.Imaging.
ImageFormat
.Bmp;
break
;
case
"gif"
:
imgformat = System.Drawing.Imaging.
ImageFormat
.Gif;
break
;
case
"png"
:
imgformat = System.Drawing.Imaging.
ImageFormat
.Png;
break
;
default
:
MessageBox
.Show(
"只能存取为: jpg,bmp,gif,png 格式"
);
isSave =
false
;
break
;
}
}
//默认保存为JPG格式
if
(imgformat ==
null
)
{
imgformat = System.Drawing.Imaging.
ImageFormat
.Jpeg;
}
if
(isSave)
{
try
{
bitmap.Save(fileName, imgformat);
MessageBox
.Show(
"图片已经成功保存!"
);
}
catch
{
MessageBox
.Show(
"保存失败,你还没有截取过图片或已经清空图片!"
);
}
}
}
}
}
[
DllImport
(
"user32.dll"
, CharSet =
CharSet
.Auto)]
public
static
extern
int
SendMessage(
IntPtr
hWnd,
int
msg,
int
wParam,
int
lParam);
[
DllImport
(
"user32.dll"
, CharSet =
CharSet
.Auto)]
public
static
extern
IntPtr
SendMessage(
HandleRef
hWnd,
int
msg,
IntPtr
wParam,
IntPtr
lParam);
[
DllImport
(
"gdi32.dll"
, CharSet =
CharSet
.Auto, SetLastError =
true
, ExactSpelling =
true
)]
public
static
extern
bool
BitBlt(
HandleRef
hDC,
int
x,
int
y,
int
nWidth,
int
nHeight,
HandleRef
hSrcDC,
int
xSrc,
int
ySrc,
int
dwRop);
///
<summary>
///
支持呈现到指定的位图。
///
</summary>
public
static
Bitmap
DrawToBitmap(
Control
control,
Bitmap
bitmap,
Rectangle
targetBounds)
{
if
(bitmap ==
null
)
{
throw
new
ArgumentNullException
(
"bitmap"
);
}
if
(((targetBounds.Width <= 0) || (targetBounds.Height <= 0)) || ((targetBounds.X < 0) || (targetBounds.Y < 0)))
{
throw
new
ArgumentException
(
"targetBounds"
);
}
Bitmap
image =
new
Bitmap
(control.Width, control.Height, bitmap.PixelFormat);
using
(
Graphics
graphics =
Graphics
.FromImage(image))
{
IntPtr
hdc = graphics.GetHdc();
SendMessage(
new
HandleRef
(control, control.Handle), 0x317, hdc, (
IntPtr
)30);
using
(
Graphics
graphics2 =
Graphics
.FromImage(bitmap))
{
IntPtr
handle = graphics2.GetHdc();
BitBlt(
new
HandleRef
(graphics2, handle), 0, 0, control.Width, control.Height,
new
HandleRef
(graphics, hdc), targetBounds.X, targetBounds.Y,
0xcc0020);
graphics2.ReleaseHdcInternal(handle);
}
graphics.ReleaseHdcInternal(hdc);
}
return
image;
}