小编Ric*_*oss的帖子

从流加载图像而不保持流打开

是否可以使用System.Drawing.Image的FromStream方法而不必在图像的生命周期内保持流打开?

我有它加载了一堆从资源文件工具栏的图形,使用的组合应用程序Image.FromStreamAssembly.GetManifestResourceStream.

我遇到的问题是在Windows 7上工作正常,在Windows XP上,如果禁用链接到其中一个图像的用户界面元素,应用程序将崩溃.在Windows 7上,图像以灰度渲染.在XP上,它因内存不足异常而崩溃.

经过大量的脱毛后,我终于将它追溯到图像的初始加载.当然,如果我创建任何实现的对象IDisposable也在同一个方法中被销毁,我将它包装在using语句中,例如

using (Stream resourceStream = assembly.GetManifestResourceStream(resourceName))
{
   image = Image.FromStream(resourceStream);
}
Run Code Online (Sandbox Code Playgroud)

如果我删除using语句以便不处理流,则应用程序不再在XP上崩溃.但我现在有一堆"孤儿"流 - 图像存储在命令类中,这些图像在处理时正确处理图像,但原始流不是.

我检查了文档,FromStream确认流需要保持打开状态.为什么这个没有在Windows 7开发系统上崩溃和烧毁是一个谜!

我真的不希望这个流徘徊,我当然不希望存储对这个流以及图像的引用,以便我以后可以处理它.我只需要那个流一次,所以我想摆脱它:)

是否有可能创建图像,然后杀死那里的流?

c# image stream out-of-memory

14
推荐指数
1
解决办法
9751
查看次数

如何在不包含指数表示法的情况下获得浮点值

在C#中,是否可以在float上执行ToString并在不使用指数的情况下获取值?

例如,请考虑以下事项:

float dummy;

dummy = 0.000006F;

Console.WriteLine(dummy.ToString());
Run Code Online (Sandbox Code Playgroud)

这给出了输出

6E-06
Run Code Online (Sandbox Code Playgroud)

但是,我的意思是

0.000006
Run Code Online (Sandbox Code Playgroud)

我能找到的最接近的是使用"F"限定符,但是我需要指定小数位数,否则值将被舍入.

实际上是否有一种自动执行此操作的方法,或者我需要加载一些时髦的逻辑来修剪零或计算出所需的小数位数.

谢谢;
理查德莫斯

c# floating-point tostring

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

为什么Graphics.DrawImage裁剪我的图像的一部分?

如果你考虑下面的图像,它是一个相当基本的图标,大小为32x32.图标周围是一个透明的矩形,虽然我在测试时用纯色填充了四个角.

来源图片

现在考虑一下这个代码,它只是绘制图像,但规模更大:

protected override void OnPaint(PaintEventArgs e)
{
  base.OnPaint(e);

  e.Graphics.InterpolationMode = InterpolationMode.NearestNeighbor;
  e.Graphics.DrawImage(Properties.Resources.icon_32a, new RectangleF(0, 0, 512, 512), new RectangleF(0, 0, 32, 32), GraphicsUnit.Pixel);
}
Run Code Online (Sandbox Code Playgroud)

请注意,我正在绘制完整的图像,我不会尝试以任何方式裁剪它,只需将其放大即可.

最后,这是测试给我的输出:

画的例子

注意问题?顶行和左列中的一半像素消失了.如果我然后尝试在此顶部覆盖一个网格,它看起来非常糟糕,因为网格正确对齐,但图像不是.即使只是将大小加倍到64,64引入了第一行/列裁剪.

注意,我也尝试偏移目标矩形,以防它在0,0之前绘制,但事实并非如此.

我也试过使用不同的插值模式,但据我所知,引起模糊的头痛,像素仍然被裁剪,所以我不相信这是由于插值模式.

我也试图使用不同的图形模式,但除了它似乎没有帮助的事实,我还是需要坚持使用像素.

出于好奇,我再次尝试使用96dpi的新图像副本并获得相同的效果,因此我认为这不是源图像的分辨率.

抓住吸管而Rectangle不是使用RectangleF也没有效果.

任何人都可以提供任何线索,说明为什么这种明显的作物正在发生?

谢谢;

c# graphics gdi+ drawimage

9
推荐指数
1
解决办法
4563
查看次数

在VS2012上使用Regionerate,或替代插件

我倾向于使用Regionerate来重新组织我的代码文件.我唯一的问题是我无法在VS2012注册.我完全放弃了VS2010而转而支持VS2012,因为只需运行一个宏来重新组织代码文件就不用担心了.我之前从未尝试过编写VS插件,所以我对对象模型或者如何注册并不熟悉 - 似乎旧的插件比VS2010扩展更复杂!我还查看了WIX设置XML并尝试复制注册表项无济于事.

有没有人知道如何在VS2012中注册Regionerate,或者是否有提供相同功能的替代(免费和维护!)扩展?

add-in visual-studio-2010 region visual-studio-2012

8
推荐指数
2
解决办法
3017
查看次数

根据成对点划分矩形

示例http://xthlegion.co.uk/images/dividerectangle.png 示例http://xthlegion.co.uk/images/dividerectangle2.png

如果您考虑上面的图像,您可以看到它们由一个大的矩形组成,该矩形通过用户定义的坐标对分解成较小的矩形(示例图像中的每一对都用不同的颜色标识).

我想要做的是通过仅定义连接来获得那些矩形的坐标.边缘被视为显式连接.订单无关紧要.

有没有人知道这样做的算法的名称(我确定有一个有花哨的名字!)或者有一些示例C#代码?我一直在努力尝试这样做一段时间,但我没有成功.又一次全数学失败了!

更新:
我想我会根据收到的评论快速更新这个问题.

  1. 线必须是直的,因此每对坐标将在一个轴上对齐
  2. 坐标必须从边缘或另一对的交叉点开始.第二个坐标必须以类似的方式结束.任何不开始/结束彼此连接的"孤儿"坐标都是非法的,我现在应该忽略它们,一旦我终于开始接触,就应该可以进行抢断.
  3. 虽然在这个例子中,所有的对都或多或少地整齐地划分了矩形,但实际情况并非如此,并且可能有许多线条创建许多尺寸的矩形.

第二次更新 - 它的工作原理:)
示例http://xthlegion.co.uk/images/dividerectangle3.png

c# algorithm math

8
推荐指数
1
解决办法
1147
查看次数

为什么"我"被"ı"取代

我收到了一个应用程序的崩溃报告,该应用程序尝试从之前编写的文件中读取XML.在请求用户将文件发送给我之后,我将其与应该写的文件进行了比较,发现了一个我之前没有遇到过的奇怪问题.

一些(但不是全部)i角色已被替换为?- 无点的我.例如,一个名为"title"的节点很好,但名为"initialdirectory"的节点有第一个被替换,第二个被单独留下,即?nitialdirectory.

直到今天,我甚至都不知道有这样一个角色,但现在我做了,我只是不知道它是如何编写的那样 - XML是XmlWriter用UTF8编码编写的.只是一般的日常写作,没有什么复杂的.

我通常(好吧,因为得到Resharper并且它在跳过参数StringComparison.OrdinalIgnoreCase时对我大吼大叫)在做IndexOf等时使用,但我在编写数据时应该如何做到这一点我不知所措,除非我应该开始改变线程文化.

以前有没有人遇到类似的问题,如果有的话,最好的方法是什么?

c# xml culture localization

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

为什么Bitmap.LockBits在VM上失败

在部署之前,我使用XP VM和Vista VM对我的应用程序进行烟雾测试.这两款VM都使用32位色.不确定它是否有任何区别,但我正在使用VirtualBox.每台机器还分配2GB内存,2个处理器.XP有128MB的视频RAM,Vista 256(在每种情况下我可以设置它们的最大值).运行机器的桌面有6个内核和16GB内存.同样,不确定这些信息是否相关但谁知道.

以下是我使用的扩展方法,以便将一个Bitmap像素转换为可以直接使用的像素.因为,毕竟我们需要速度.速度是我们所需要的.油腻,速度快!和Bitmap.GetPixel是相反的.

public static ArgbColor[] GetPixels(this Bitmap bitmap)
{
  ArgbColor[] results;
  int width;
  int height;
  BitmapData bitmapData;

  width = bitmap.Width;
  height = bitmap.Height;
  results = new ArgbColor[width * height];
  bitmapData = bitmap.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);

  unsafe
  {
    ArgbColor* pixelPtr;

    pixelPtr = (ArgbColor*)(void*)bitmapData.Scan0;

    for (int row = 0; row < height; row++)
    {
      for (int col = 0; col < width; col++)
      {
        results[row * width + col] = *pixelPtr;

        pixelPtr++;
      }
    } …
Run Code Online (Sandbox Code Playgroud)

c# graphics gdi+ bitmap lockbits

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

重新呈现ReactJS组件会挂起浏览器

我一直在尝试使用ReactJS创建基于组件的UI,而不是我通常的一百万个全局函数,变量和不可重用标记的slapdash方法.到目前为止,我真的很喜欢React,但我遇到了绊脚石.

请考虑以下组件布局

EventView
  EventViewSidebar
    EventViewList
      EventViewListRow
  EventViewDetail
Run Code Online (Sandbox Code Playgroud)

在此布局中,EventViewListRow每个唯一键存在多次出现.单击EventViewListRow应该更新的实例EventViewDetail以及该项目的详细信息.

这是render顶级EventView组件的功能:

render: function () {
    return (
      <div className="event-view row-fluid">

          <div className="event-view__sidebar col-md-4">
            <EventViewSidebar projectId={this.state.projectId} />
          </div>

          <div className="event-view__content col-md-8" id="eventDetail">

          </div>

      </div>
    );
}
Run Code Online (Sandbox Code Playgroud)

这是EventViewDetail组件

var EventViewDetail = React.createClass({

    getInitialState: function () {
        return { eventId: 0 };
    },

    render: function () {
        if (this.state.eventId === 0) {
            return (<h3>Nothing selected</h3>);
        }
        else {
            return (
          <div>
              {this.state.eventId}
          </div> …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs react-jsx

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

是否有支持字典类型操作的LinkedList集合

我最近在分析一个应用程序,试图弄清楚为什么某些操作非常慢.我的应用程序中的一个类是基于LinkedList的集合.这是一个基本的大纲,只显示了几种方法,并删除了一些绒毛:

  public class LinkInfoCollection : PropertyNotificationObject, IEnumerable<LinkInfo>
  {

    private LinkedList<LinkInfo> _items;

    public LinkInfoCollection()
    {
      _items = new LinkedList<LinkInfo>();
    }

    public void Add(LinkInfo item)
    {
      _items.AddLast(item);
    }

    public LinkInfo this[Guid id]
    { get { return _items.SingleOrDefault(i => i.Id == id); } }

  }
Run Code Online (Sandbox Code Playgroud)

该集合用于在单个列表中存储超链接(由LinkInfo类表示).但是,每个超链接还有一个指向它的超链接列表,以及它指向的超链接列表.基本上,它是一个网站的导航地图.因为这意味着当链接回到彼此时你可以进行无限递归,我将它实现为一个链表 - 据我所知,它意味着每个超链接,无论多少次被另一个超链接引用,只有永远只有一个对象的副本.

上例中的ID属性是GUID.

随着冗长的描述,我的问题很简单 - 根据分析器,当为一个相当小的网站构建这个地图时,上面提到的索引器被称为不少于27906次.这是一笔非凡的金额.如果真的有必要多次调用,我仍然需要解决,但同时,我想知道是否有更有效的方法来执行索引器,因为这是分析器识别的主要瓶颈(同样假设它没有说谎!).我仍然需要链表行为,因为我当然不希望这些超链接的多个副本浮动在我的内存周围,但我也需要能够通过一个唯一的密钥访问它们.

有没有人有任何关于提高这个索引器性能的建议.我还有另一个使用URI而不是GUID的索引器,但由于构建传入/传出链接是由GUID完成的,因此问题较小.

谢谢; 理查德莫斯

c# dictionary linked-list

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