标签: system.drawing

从WPF应用程序窗口获取位图?

Winforms System.Windows.Forms.Control类有一个实例方法"DrawToBitmap",我认为它在各种情况下都非常有用.我想知道是否有一种从WPF应用程序获取System.Drawing.Bitmap的等效方法?

我意识到我可以做一些P/Invoke的东西来获取应用程序窗口,但是我不喜欢这个,因为它不能很好地适应64位转换,并且不允许我只渲染子控件,如DrawToBitmap确实.

谢谢,理查德

wpf system.drawing bitmap winforms

5
推荐指数
1
解决办法
2989
查看次数

在WinForms中绘制垂直堆叠的文本

最好使用一个Graphics对象,如何绘制一个字符串,使字符仍然正常,但是垂直堆叠?

.net c# text system.drawing winforms

5
推荐指数
1
解决办法
1165
查看次数

.net Drawing.Graphics.FromImage()返回空白的黑色图像

我正在尝试在asp.net中重新调整上传的jpeg

所以我去:

Image original = Image.FromStream(myPostedFile.InputStream);
int w=original.Width, h=original.Height;

using(Graphics g = Graphics.FromImage(original))
{
 g.ScaleTransform(0.5f, 0.5f); ... // e.g.
 using (Bitmap done = new Bitmap(w, h, g))
 {
  done.Save( Server.MapPath(saveas), ImageFormat.Jpeg );
  //saves blank black, though with correct width and height
 }
}
Run Code Online (Sandbox Code Playgroud)

这节省了处女黑色jpeg我给它的任何文件.虽然如果我将输入图像流立即带入done位图,它会重新压缩并保存它,如:

Image original = Image.FromStream(myPostedFile.InputStream);
using (Bitmap done = new Bitmap(original))
{
 done.Save( Server.MapPath(saveas), ImageFormat.Jpeg );
}
Run Code Online (Sandbox Code Playgroud)

我必须用g制作一些魔法吗?

upd:我试过了:

Image original = Image.FromStream(fstream);
int w=original.Width, h=original.Height;
using(Bitmap b = new Bitmap(original)) //also tried new Bitmap(w,h) …
Run Code Online (Sandbox Code Playgroud)

asp.net graphics upload system.drawing rescale

5
推荐指数
1
解决办法
5894
查看次数

在.NET中将元数据写入PNG图像

我看到了几个问题,询问如何从图像中读取元数据,但我没有看到很多人询问如何编写元数据.基本上,我需要将一个元数据项("ImageDescription")添加到我正在动态生成的PNG图像中(创建一个Bitmap对象并在程序上生成其中的所有内容).

在将文件写入磁盘之前或之后,使用.NET向图像添加元数据的最佳方法是什么?

.net vb.net png system.drawing metadata

5
推荐指数
1
解决办法
1815
查看次数

图像在C#中调整大小 - 确定调整大小尺寸(高度和宽度)的算法

我需要缩小高度或宽度大于预定义像素值的图像.

我编写了一些代码来查看原始图像,检查宽度,高度或高度和宽度是否大于最大宽度/最大高度设置.

我现在需要根据后一个值的最大值找出要调整大小的尺寸.

例如:如果图像是900h x 300w和MAX高度是700h我需要调整高度700和宽度????< - 这是我需要计算的..

创建和保存图像文件很简单,超出了本文的范围:

// First I get the max height and width allowed:

int resizeMaxHeight =  int.Parse(Utility.GetConfigValue("ResizeMaxHeight")); // in config: 700px
int resizeMaxWidth =  int.Parse(Utility.GetConfigValue("ResizeMaxWidth"));  //  in config: 500px

// Save original: 
try
{
    filebase.SaveAs(savedFileName);
}
catch (System.IO.DirectoryNotFoundException ex)
{
    Logger.Instance.LogException(ex, 0, "FileTransfer");
}

// Determin original dimensions:
Image image = System.Drawing.Image.FromFile(Server.MapPath(savedFileName));

int resizeHeight, resizeWidth;
bool doResize = true;

// both height and width are greater …
Run Code Online (Sandbox Code Playgroud)

c# system.drawing image-manipulation bitmap image-processing

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

在C#中使用DrawString对文本进行对齐

我在一个System.Drawing.Graphics物体上画文字.我正在使用该DrawString方法,使用文本字符串,a Font,a Brush,a bounding RectangleF和a StringFormat参数.

调查一下StringFormat,我发现我可以将它的Alignment属性设置为Near,CenterFar.但是我还没有找到将它设置为Justified的方法.我怎样才能做到这一点?

谢谢您的帮助!

c# system.drawing

5
推荐指数
1
解决办法
4585
查看次数

DrawToBitmap - System.ArgumentException:参数无效

我创造了一个Label,有时我正在使用.DrawToBitmap().我不知道为什么,但在我运行我的程序一段时间后(.DrawToBitmap()经常调用)我得到了异常:

System.ArgumentException: Parameter is not valid.
   at System.Drawing.Bitmap..ctor(Int32 width, Int32 height, PixelFormat format)
   at System.Drawing.Bitmap..ctor(Int32 width, Int32 height)
Run Code Online (Sandbox Code Playgroud)

不知怎的,我不能经常调用这个函数.如果我从根本上尝试这个:

while(true)
{

  System.Windows.Forms.Label label = new Label();

  label.Font = new Font("Arial", 20);
  label.Text = "test";

  try
  {
    Bitmap image = new Bitmap(300, 500);
    label.DrawToBitmap(image, label.ClientRectangle);
  }
  catch (Exception e)
  {
    Console.WriteLine(e);
  }
}
Run Code Online (Sandbox Code Playgroud)

我得到了5-6秒(1000-2000个电话)的异常.问题是什么?怎么避免这个?

编辑:谢谢你们的想法Dispose()- 不知何故,如果我使用它,一切都很完美label.即使我不在Bitmap上使用它也没关系.这两个答案都很棒,我只能接受其中一个:(

.net c# system.drawing bitmap

5
推荐指数
1
解决办法
9990
查看次数

我可以在system.drawing中添加一个控件,例如按钮吗?

    using System.Drawing;
    using System.Drawing.Drawing2D;

    namespace WindowsFormsApplication1
    {      
        [Serializable]
        public class GMapBaloonTool: GMapToolTip, ISerializable
        {
            public float Radius = 10f;   
            public GMapBaloonTool(GMapMarker marker)
                : base(marker)
            {
                Stroke = new Pen(Color.FromArgb(140, Color.Navy));
                Stroke.Width = 3;
                this.Stroke.LineJoin = LineJoin.Round;
                this.Stroke.StartCap = LineCap.RoundAnchor;    
                Fill = Brushes.Pink;
            }
Run Code Online (Sandbox Code Playgroud)

上面的代码,使工具提示改变其颜色.
在此输入图像描述

我正在使用gMaps.net在winforms C#中创建自定义谷歌地图.我正在努力添加一个标记+ onClick事件,它将显示来自DVR的视频输入.
唯一的问题是,内置的GMapsToolTip只显示字符串,虽然我有一个activeX作为摄像头的控件.
我需要的是在工具提示中显示相机(activeX).在伟大的地图上的论坛上
看到这个.创作者说我可以制作自定义工具提示.
所以我要问的是,是否可以使用此system.drawing命名空间创建/添加控件?
如果可能的话,请告诉我如何......
如果不知道,如果你知道其他任何方式,请告诉我.

            public override void OnRender(Graphics g)
            {
                System.Drawing.Size st = g.MeasureString(Marker.ToolTipText, Font).ToSize();
                System.Drawing.Rectangle rect = new System.Drawing.Rectangle(Marker.ToolTipPosition.X, Marker.ToolTipPosition.Y - st.Height, st.Width + …
Run Code Online (Sandbox Code Playgroud)

c# system.drawing winforms gmap.net

5
推荐指数
1
解决办法
891
查看次数

如何在.NET/C#中的右键菜单上绘制?

我正在开发一个辅助技术应用程序(在C#中),它将信息叠加在当前打开的窗口之上.它检测可点击的元素,并标记它们.

为此,我正在创建一个无边框透明窗口,TopMost设置为"true",并在其上绘制标签.这意味着在当前应用程序前面总会有一个窗口悬停,我可以在其上绘制标签.

问题是,这个窗口不包括右键菜单 - 只包括其他窗口.当用户右键单击时,将在叠加层上方绘制上下文菜单.

我需要能够在右键单击菜单中标记元素,但我无法在当前实现的基础上绘制它.有人知道解决方案吗?

编辑:这是绘制叠加层的相关代码.我在表单设计器中设置了表单选项,而不是代码明确,所以我不确定它会有多大帮助.我删除了与绘图无关的代码或表单本身:

public partial class OverlayForm : Form
{
    public OverlayForm()
    {

    }

    protected override void OnPaint(PaintEventArgs eventArgs)
    {
        base.OnPaint(eventArgs);
        Graphics graphics = eventArgs.Graphics;
        Brush brush = new SolidBrush(this.labelColor);
        foreach (ClickableElement element in this.elements)
        {
            Region currentRegion = element.region;
            graphics.FillRegion(brush, currentRegion);
        }
    }    
}
Run Code Online (Sandbox Code Playgroud)

.net c# system.drawing winforms

5
推荐指数
1
解决办法
449
查看次数

如何在C#/ WPF/WinForms中将WMF渲染到BitMap时启用消除锯齿功能?

这样做时,为什么线路等不会被消除锯齿?

using (var myGraphics = Graphics.FromImage(bitmap))
{
myGraphics.CompositingQuality = CompositingQuality.HighQuality;
myGraphics.SmoothingMode = SmoothingMode.HighQuality;
myGraphics.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;

myGraphics.Clear(backgroundColor);

myGraphics.EnumerateMetafile(m_metafile, new Point(0, 0), m_metafileDelegate);
}
Run Code Online (Sandbox Code Playgroud)

委托函数如下所示:

private bool MetafileCallback(EmfPlusRecordType recordType, int flags, int dataSize, IntPtr data, PlayRecordCallback callbackData)
{
        byte[] dataArray = null;
        if (data != IntPtr.Zero)
        {
            // Copy the unmanaged record to a managed byte buffer 
            // that can be used by PlayRecord.
            dataArray = new byte[dataSize];
            Marshal.Copy(data, dataArray, 0, dataSize);
        }

        m_metafile.PlayRecord(recordType, flags, dataSize, dataArray);

        return true;
}
Run Code Online (Sandbox Code Playgroud)

我是否需要覆盖特定类型的PlayRecord以获得抗锯齿功能? …

c# system.drawing wmf metafile .emf

5
推荐指数
1
解决办法
1042
查看次数