ScreenOper
/// <summary>
/// 屏幕操作类
/// Add by 2017-07-25
/// 1、屏幕生成Image 方法
/// 2、Image按百分比压缩 方法
/// 3、Image根据指定像素生成方法
/// </summary>
public class ScreenOper
{
[DllImport("user32.dll")]
static extern bool GetCursorInfo(out CURSORINFO pci); private const Int32 CURSOR_SHOWING = 0x00000001;
[StructLayout(LayoutKind.Sequential)]
struct POINT
{
public Int32 x;
public Int32 y;
} [StructLayout(LayoutKind.Sequential)]
struct CURSORINFO
{
public Int32 cbSize;
public Int32 flags;
public IntPtr hCursor;
public POINT ptScreenPos;
}
/// <summary>
/// 屏幕截图方法
/// 1、将整个屏幕截图
/// 2、并画出鼠标形状
/// </summary>
/// <returns></returns>
public static Image ScreenToImg()
{
Image myimage = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
Graphics g = Graphics.FromImage(myimage);
g.CopyFromScreen(new Point(, ), new Point(, ), new Size(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height));
CURSORINFO pci;
pci.cbSize = Marshal.SizeOf(typeof(CURSORINFO));
GetCursorInfo(out pci);
System.Windows.Forms.Cursor cur = new System.Windows.Forms.Cursor(pci.hCursor);
cur.Draw(g, new Rectangle(pci.ptScreenPos.x - , pci.ptScreenPos.y - , cur.Size.Width, cur.Size.Height));
return myimage;
} /// <summary>
/// 将图片按百分比压缩,flag取值1到100,越小压缩比越大
/// </summary>
/// <param name="iSource"></param>
/// <param name="outPath"></param>
/// <param name="flag"></param>
/// <returns></returns>
public static bool ImgZip(Image iSource, string outPath, int flag)
{
ImageFormat tFormat = iSource.RawFormat;
EncoderParameters ep = new EncoderParameters();
long[] qy = new long[];
qy[] = flag;
EncoderParameter eParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qy);
ep.Param[] = eParam;
try
{
ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageDecoders();
ImageCodecInfo jpegICIinfo = null; jpegICIinfo = arrayICI.Where(c => c.FormatDescription.Equals("JPEG")).FirstOrDefault(); if (jpegICIinfo != null)
iSource.Save(outPath, jpegICIinfo, ep);
else
iSource.Save(outPath, tFormat);
}
catch
{
return false;
}
iSource.Dispose();
return true;
} /// <summary>
/// 将图片按百分比压缩,flag取值1到100,越小压缩比越大
/// </summary>
/// <param name="iSource">原图片</param>
/// <param name="flag">1-100</param>
/// <returns></returns>
public static Image ImgZip(Image iSource, int flag)
{
Image img;
MemoryStream mStream = new MemoryStream();
ImageFormat tFormat = iSource.RawFormat;
EncoderParameters ep = new EncoderParameters();
long[] qy = new long[];
qy[] = flag;
EncoderParameter eParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qy);
ep.Param[] = eParam;
try
{
ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageDecoders();
ImageCodecInfo jpegICIinfo = null;
jpegICIinfo = arrayICI.Where(c => c.FormatDescription.Equals("JPEG")).FirstOrDefault();
if (jpegICIinfo != null)
iSource.Save(mStream, jpegICIinfo, ep);
img = Image.FromStream(mStream);
mStream.Close();
}
catch
{
return iSource;
}
iSource.Dispose();
return img;
}
/// <summary>
/// 将图片根据像素生成
/// </summary>
/// <param name="srcImage"></param>
/// <returns></returns>
public static Image SetImageSize(Image srcImage, int dWidth, int dHeight)
{
Image ob;
try
{
//按比例缩放
Size tem_size = new Size(srcImage.Width, srcImage.Height);
int sW = , sH = ;
if (tem_size.Width > dHeight || tem_size.Width > dWidth)
{
if ((tem_size.Width * dHeight) > (tem_size.Height * dWidth))
{
sW = dWidth;
sH = (dWidth * tem_size.Height) / tem_size.Width;
}
else
{
sH = dHeight;
sW = (tem_size.Width * dHeight) / tem_size.Height;
}
}
else
{
sW = tem_size.Width;
sH = tem_size.Height;
} ob = new Bitmap(dWidth, dHeight);
Graphics g = Graphics.FromImage(ob);
g.Clear(Color.WhiteSmoke);
g.CompositingQuality = CompositingQuality.HighQuality;
g.SmoothingMode = SmoothingMode.HighQuality;
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.DrawImage(srcImage, new Rectangle((dWidth - sW) / , (dHeight - sH) / , sW, sH), , , srcImage.Width, srcImage.Height, GraphicsUnit.Pixel);
g.Dispose();
}
catch (Exception)
{
return null;
}
return ob;
}
}
ScreenOper的更多相关文章
随机推荐
- Mybatis-Plus 实战完整学习笔记(九)------条件构造器核心用法大全(上)
一.Mybatisplus通用(公共方法)CRUD,一共17种(3.0.3版),2.3系列也是这么多,这个新版本一定程度进行了改造和删减. 二.构造器UML图(3.0.3)-----实体包装器,主要用 ...
- DOM3级的变化
由于存在跨浏览器开发问题所以不推荐使用: 兼容性: event.key 包含所按下键的字符 event.char 属性IE9和safari和chrome并不支持 event.location 返回所按 ...
- Sprinig泛型依赖注入
在父类中建立关系 (spring4.x以上版本) package com.spring.annotation.generic; import org.springframework.beans.fac ...
- Jack Straws(poj 1127) 两直线是否相交模板
http://poj.org/problem?id=1127 Description In the game of Jack Straws, a number of plastic or wood ...
- OpenGL中的渐变颜色绘图(应力可视化)
#include <GL/glut.h> #include <iostream> #include <cmath> using namespace std; ; ; ...
- spring处理线程并发
http://www.open-open.com/bbs/view/1320130410702
- scikit-FEM-mesh
# -*- coding: utf-8 -*- """ “Mesh”模块包含了有限元网格的不同类型. See the following implementations: ...
- Python自动化开发 - select模块
介绍: IO-多路复用:监听多个socker对象是否有变化,包括可读.可写.发送错误 Python中的select模块专注于I/O多路复用,提供了select poll epoll三个方法(其中后两个 ...
- 走上模拟道路 HDU4891
http://vjudge.net/contest/view.action?cid=51327#problem/D Description Yoda: May the Force be with yo ...
- 3.怎样将ASP.NET MVC应用程序发布到IIS
这一篇,教大家怎么将ASP.NET MVC应用程序发布到本地或者IIS中.打开上一篇创建的ASP.NET MVC 5.0应用程序.[PS:上一篇--->2.第一个ASP.NET MVC 5.0应 ...