标签: system.drawing

将System.Drawing.Color转换为System.Windows.Media.Color

System.Drawing.Color drawRedColor = System.Drawing.Color.Red;
System.Windows.Media.Color mediaColor = ?drawRedColor.ToMediaColor();?
Run Code Online (Sandbox Code Playgroud)

.net system.drawing system.windows.media

26
推荐指数
2
解决办法
2万
查看次数

选择System.Drawing.Icon的大小?

我有一个图标,有几个不同的尺寸(16px,32px,64px).我正在呼唤ToBitmap()它,但它总是返回32px图像.如何检索64px?

c# size icons system.drawing

23
推荐指数
3
解决办法
2万
查看次数

System.Drawing.Point和System.Drawing.PointF有什么区别

System.Drawing.Point和之间有什么区别System.Drawing.PointF.你能举两个这样的例子吗?

提前致谢.

c# system.drawing winforms

20
推荐指数
2
解决办法
2万
查看次数

在服务器桌面会话上捕获屏幕

我开发了一个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来发送鼠标移动,希望它能生成桌面图形处理..但是没有. …

.net c# pinvoke system.drawing windows-server-2008

19
推荐指数
2
解决办法
1万
查看次数

无法引用system.drawing.dll

我正在尝试使用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)

c# system.drawing imageresizer

18
推荐指数
1
解决办法
3万
查看次数

当处理非常大的图像时,如何避免位图内存不足:即10.000.000像素及以上

目前我正在开发一个加载非常大的图像的系统,最小宽度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)

c# system.drawing bitmap

18
推荐指数
1
解决办法
2233
查看次数

如何在实例化字体时设置多个FontStyles?

在查看System.Drawing.Font类的构造函数时,有一个参数传递给System.Drawing.FontStyle枚举中定义的FontStyles之一.

即.粗体斜体常规下划线

并且在实例化对象中有Bold,Italic,Underline等的布尔属性,但它们是只读的.

如果我想将我的字体定义为具有Bold和Underline等多种样式,该怎么办?

我怎样才能做到这一点?

c# asp.net system.drawing

17
推荐指数
2
解决办法
2万
查看次数

.NET Image.Save偶尔会生成一个带有错误IDAT块的PNG

我有一个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.但是,我开始认为这就是我需要做的.

.net c# png system.drawing libpng

17
推荐指数
1
解决办法
1310
查看次数

System.Drawing在Windows或ASP.NET服务中

根据MSDN,在Windows服务或ASP.NET服务中使用System.Drawing命名空间中的类并不是一个特别好的主意.现在我正在开发一个类库,它可能需要访问这个特定的命名空间(用于测量字体),但不能保证主机进程不是服务.

现在有一个不太理想的方法,如果System.Drawing不可用,我可以回退,但如果可行的话,我宁愿在System.Drawing中使用类.所以我想要做的是在runtume确定System.Drawing是否安全,如果是,请使用它,否则回到次优选项.

我的问题是:我怎么可能检测System.Drawing是否可以安全使用?

我想我应该

  • 检测当前进程是Windows服务还是ASP.NET服务
  • 检测GDI是否可用
  • 或者,如果可以安全使用,可能有办法询问System.Drawing.dll本身

不幸的是,我无法想出一种方法来实现任何这些方法.有谁有想法吗?

.net c# system.drawing windows-services

16
推荐指数
1
解决办法
1万
查看次数

Silverlight 4.0:如何将byte []转换为图像?

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.还有其他选择

base64 system.drawing bytearray silverlight-4.0

16
推荐指数
1
解决办法
3万
查看次数