System.Drawing.Color drawRedColor = System.Drawing.Color.Red;
System.Windows.Media.Color mediaColor = ?drawRedColor.ToMediaColor();?
Run Code Online (Sandbox Code Playgroud) 我有一个图标,有几个不同的尺寸(16px,32px,64px).我正在呼唤ToBitmap()它,但它总是返回32px图像.如何检索64px?
System.Drawing.Point和之间有什么区别System.Drawing.PointF.你能举两个这样的例子吗?
提前致谢.
我开发了一个GUI测试框架,可以按计划对我们公司网站进行集成测试.当某些内容失败时,它会截取桌面的屏幕截图等.这在专用Windows Server 2008上的登录用户上无人值守.
问题是在我已断开远程桌面会话的桌面上截取屏幕截图.我得到以下异常:
System.ComponentModel.Win32Exception (0x80004005): The handle is invalid
at System.Drawing.Graphics.CopyFromScreen(Int32 sourceX, Int32 sourceY, Int32 destinationX, Int32 destinationY, Size blockRegionSize, CopyPixelOperation copyPixelOperation)
at System.Drawing.Graphics.CopyFromScreen(Point upperLeftSource, Point upperLeftDestination, Size blockRegionSize)
at IntegrationTester.TestCaseRunner.TakeScreenshot(String name) in C:\VS2010\IntegrationTester\IntegrationTester\Config\TestCaseRunner.cs:line 144
at IntegrationTester.TestCaseRunner.StartTest() in C:\VS2010\IntegrationTester\IntegrationTester\Config\TestCaseRunner.cs:line 96
Run Code Online (Sandbox Code Playgroud)
该TakeScreenshot()方法是这样的:
public static void TakeScreenshot(string name)
{
var bounds = Screen.GetBounds(Point.Empty);
using (Bitmap bitmap = new Bitmap(bounds.Width, bounds.Height))
{
using (Graphics g = Graphics.FromImage(bitmap))
{
g.CopyFromScreen(Point.Empty, Point.Empty, bounds.Size);
}
bitmap.Save("someFileName", ImageFormat.Jpeg);
}
}
Run Code Online (Sandbox Code Playgroud)
我确保屏幕保护程序设置为"无",没有超时.我还实现了一段代码,它可以执行一些pinvokes来发送鼠标移动,希望它能生成桌面图形处理..但是没有. …
我正在尝试使用ImageResizer调整图像大小,但不断收到编译错误
"错误1类型'System.Drawing.Bitmap'在未引用的程序集中定义.您必须添加对程序集'System.Drawing'的引用
搜索解决方案我发现几个类似的问题,解决方案是引用system.drawing.dll以便能够处理图像,但当我尝试通过以下方式引用它时:
右键单击项目 - >添加引用 - >选择COM - >找到system.drawing.dll
但是这给了我另一个错误,说"activeX类型库system.drawing.tlb是从.NET程序集导出的,不能作为参考添加.而是添加对.NET的引用"
而这就是我下一步该做什么的傻眼.
编辑:
我得到错误的代码
public void resizeImage(String originalFile, String thumb)
{
ResizeSettings r = new ResizeSettings();
r.MaxHeight = 200;
r.MaxWidth = 200;
ImageBuilder.Current.Build(originalFile, thumb, r);//this is where i get the first error
}
Run Code Online (Sandbox Code Playgroud) 目前我正在开发一个加载非常大的图像的系统,最小宽度x高度= = 10.000.000像素.
但是用户上传图像的比例通常与我们的要求比率不匹配,因此我必须将其裁剪为适当的比例,但是当使用System.Drawing位图裁剪它时,我总是得到SytemOutOfMemory异常.
我尝试使用正确的RectangleF但没有运气的Bitmap.Clone和Graphic.DrawImage.
反正有没有得到outofmemory异常,或者System.Drawing库有什么替代方法可以轻松完成这项任务吗?
我的代码从用户上传文件加载图像:
var fileBinary = new byte[stream.Length];
stream.Read(fileBinary, 0, fileBinary.Length);
stream.Position = 0;
var fileExtension = Path.GetExtension(fileName);
using (Image image = Image.FromStream(stream, false, false))
{
//validation and check ratio
CropImage(image, PORTRAIT_RATIO, fileExtension);
}
Run Code Online (Sandbox Code Playgroud)
而CropImage功能:
//Crop Image from center with predefine ratio
private byte[] CropImage(Image sourceImg, float ratio, string fileExtension)
var height = sourceImg.Height;
var width = sourceImg.Width;
var isPortrait = width < height;
RectangleF croppingRec = new RectangleF();
float positionX = 0;
float positionY = …Run Code Online (Sandbox Code Playgroud) 在查看System.Drawing.Font类的构造函数时,有一个参数传递给System.Drawing.FontStyle枚举中定义的FontStyles之一.
即.粗体斜体常规下划线
并且在实例化对象中有Bold,Italic,Underline等的布尔属性,但它们是只读的.
如果我想将我的字体定义为具有Bold和Underline等多种样式,该怎么办?
我怎样才能做到这一点?
我有一个C#/ .NET实用程序,我写了从磁盘加载PNG图像
Bitmap b = Bitmap.FromStream(new MemoryStream(File.ReadAllBytes(filename))) as Bitmap;
Run Code Online (Sandbox Code Playgroud)
对它们执行多次转换(旋转,缩放,alpha),然后根据应用的转换将生成的PNG图像保存回具有不同文件名的磁盘
b.Save(outputName, ImageFormat.Png);
Run Code Online (Sandbox Code Playgroud)
我已经使用该实用程序成功编写了数千个PNG.但是,偶尔有一个PNG无法加载到使用libpng的单独程序中.在该程序中,libpng给出错误"找到太多IDAT"
查看PNG文件会在IEND块之前的文件末尾显示"流氓"IDAT块.一个这样的IDAT块(以及下面的IEND块)在十六进制编辑器中看起来像这样.这些是文件中的最后24个字节.
IDAT: 0x00 0x00 0xFF 0xF4 0x49 0x44 0x41 0x54 0x35 0xAF 0x06 0x1E
IEND: 0x00 0x00 0x00 0x00 0x49 0x45 0x4e 0x44 0xAE 0x42 0x60 0x82
Run Code Online (Sandbox Code Playgroud)
IDAT块长度显示为0xFFF4.但是,很明显,IDAT块中没有那么多字节(甚至文件也没有.)
还有其他人遇到过这个问题吗?我可以用以下几种方法之一解决问题.我可以手动编辑PNG文件以删除最后一个IDAT块(或将其大小设置为0.)我可以运行修复损坏的PNG的辅助程序.但是,我想要一个C#/ .NET解决方案,我可以轻松地将其添加到我的原始程序中.理想情况下,我想要一个不需要我重新打开PNG作为二进制文件的解决方案; 检查IDAT坏块; 并重写PNG.但是,我开始认为这就是我需要做的.
根据MSDN,在Windows服务或ASP.NET服务中使用System.Drawing命名空间中的类并不是一个特别好的主意.现在我正在开发一个类库,它可能需要访问这个特定的命名空间(用于测量字体),但不能保证主机进程不是服务.
现在有一个不太理想的方法,如果System.Drawing不可用,我可以回退,但如果可行的话,我宁愿在System.Drawing中使用类.所以我想要做的是在runtume确定System.Drawing是否安全,如果是,请使用它,否则回到次优选项.
我的问题是:我怎么可能检测System.Drawing是否可以安全使用?
我想我应该
不幸的是,我无法想出一种方法来实现任何这些方法.有谁有想法吗?
public Image Base64ToImage(string base64String)
{
// Convert Base64 String to byte[]
byte[] imageBytes = Convert.FromBase64String(base64String);
MemoryStream ms = new MemoryStream(imageBytes, 0,
imageBytes.Length);
// Convert byte[] to Image
ms.Write(imageBytes, 0, imageBytes.Length);
System.Drawing.Image image = System.Drawing.Image.FromStream(ms, true);
return image;
}
Run Code Online (Sandbox Code Playgroud)
我想将byte []转换为图像,但Silverlight不支持System.Drawing.Image.还有其他选择