我正在尝试编写一个轻量级图像查看应用程序.但是,.NET存在系统内存限制.
当尝试加载大位图(9000 x 9000 px或更大,24位)时,我得到一个System.OutOfMemoryException.这是在具有2GB RAM(其中1.3GB用完)的Windows 2000 PC上.尝试加载文件也需要很长时间.
以下代码生成此错误:
Image image = new Bitmap(filename);
using (Graphics gfx = this.CreateGraphics())
{
gfx.DrawImage(image, new Point(0, 0));
}
Run Code Online (Sandbox Code Playgroud)
这段代码也是如此:
Stream stream = (Stream)File.OpenRead(filename);
Image image = Image.FromStream(stream, false, false);
using (Graphics gfx = this.CreateGraphics())
{
gfx.DrawImage(image, new Rectangle(0, 0, 100, 100), 4000, 4000, 100, 100, GraphicsUnit.Pixel);
}
Run Code Online (Sandbox Code Playgroud)
此外,它就足以做到这一点:
Bitmap bitmap = new Bitmap(filename);
IntPtr handle = bitmap.GetHbitmap();
Run Code Online (Sandbox Code Playgroud)
后一个代码旨在与GDI一起使用.在研究这个问题时,我发现这实际上是一个内存问题,.NET试图在单个内存块中分配两倍的内存.
http://bytes.com/groups/net-c/279493-drawing-large-bitmaps
我从其他应用程序(Internet Explorer,MS Paint等)了解到,可以打开大图像,而且很快.我的问题是,如何在.NET中使用大型位图?
无论如何流式传输它们,还是非内存加载它们?
我如何在c#中创建一个多值字典?
例如Dictionary<T,T,T>
,第一个T是键,其他两个是值.
所以这是可能的: Dictionary<int,object,double>
谢谢
我有以下XSL片段:
<xsl:for-each select="item">
<xsl:variable name="hhref" select="link" />
<xsl:variable name="pdate" select="pubDate" />
<xsl:if test="hhref not contains '1234'">
<li>
<a href="{$hhref}" title="{$pdate}">
<xsl:value-of select="title"/>
</a>
</li>
</xsl:if>
</xsl:for-each>
Run Code Online (Sandbox Code Playgroud)
if语句不起作用,因为我无法计算contains的语法.我怎样才能正确表达xsl:if?
作为Objective-c,cocoa和iPhone开发人员的新手,我强烈希望充分利用语言和框架.
我正在使用的资源之一是斯坦福大学的CS193P课程,他们已经留在网上了.它包括讲义,作业和示例代码,由于课程由Apple开发者提供,我绝对认为它是"从马的嘴里".
课程网站:http:
//www.stanford.edu/class/cs193p/cgi-bin/index.php
第08讲与构建基于UINavigationController的应用程序的任务相关,该应用程序将多个UIViewControllers推送到UINavigationController堆栈.这就是UINavigationController的工作原理.这是合乎逻辑的.但是,幻灯片中有一些关于UIViewControllers之间通信的严厉警告.
我将引用这个严肃的幻灯片:http:
//cs193p.stanford.edu/downloads/08-NavigationTabBarControllers.pdf
第16/51页:
如何不共享数据
- 全局变量或单例
- 这包括您的申请代表
- 直接依赖使您的代码不再可重用
- 而且更难以调试和测试
好.我很失望.不要盲目地将所有用于在viewcontroller之间进行通信的方法扔到app委托中,并引用app delegate方法中的viewcontroller实例.公平的'努力.
再进一步说,我们得到这张幻灯片告诉我们应该做些什么.
第18/51页:
数据流的最佳实践
- 弄清楚究竟需要传达什么
- 定义视图控制器的输入参数
- 要进行备份层次结构的通信,请使用松散耦合
- 为观察者定义通用接口(如委托)
然后,这张幻灯片后面会出现一个占位符幻灯片,然后讲师显然会使用UIImagePickerController的示例演示最佳实践.我希望这些视频可用!:(
好吧,所以...我担心我的objc-fu不是那么强大.我也对上面引用的最后一行感到困惑.我一直在谷歌搜索关于这一点,我发现似乎是一篇体面的文章谈论观察/通知技术的各种方法:http:
//cocoawithlove.com/2008/06/five-approaches-to -listening-observing.html
方法#5甚至表示委托作为一种方法!除了....对象一次只能设置一个委托.所以当我有多个viewcontroller通信时,我该怎么办?
好的,那是设置团伙.我知道我可以通过引用在我的appdelegate中的多个viewcontroller实例轻松地在app委托中执行我的通信方法,但我想以正确的方式做这种事情.
请回答以下问题,帮助我"做正确的事":
iphone cocoa-touch delegates objective-c key-value-observing
我们的项目中有一些文件无法合并,因此在编辑之前必须由用户锁定文件.有没有办法强制用户在编辑之前锁定文件?
我们正在使用Subversion和TortoiseSVN/VisualSVN.
我正在使用一个库,它在编写文件时使用Environment.NewLine作为换行符.我需要它来编写Unix格式的文件,因此想要更改换行符.
我可以更改Environment.NewLine的值吗?
任何其他想法(除了转换创建文件后)?
我有一个带GPS轨道的GPX文件.现在我想计算这条赛道所覆盖的距离.
计算这个的最佳方法是什么?
System.GetMem和System.ReallocMem有什么区别?
ReallocMem的Delphi 2009帮助,与GetMem的描述完全相同.System.FreeMem和System.Dispose如何
我应该对数组使用什么?
type
PMemberDataList = ^TMemberDataList;
TMemberDataList = array[0..MaxClassMembers -1] of PMemberData;
var
FItems: PMemberDataList;
begin
GetMem(FItems, Value * SizeOf(Pointer));
FreeMem(FItems);
end;
Run Code Online (Sandbox Code Playgroud)
要么
begin
ReallocMem(FItems, Value * SizeOf(Pointer));
Dispose(FItems);
end;
Run Code Online (Sandbox Code Playgroud)
解
在人们建议之后,我将FItems声明为记录类型,而不是指向记录的指针,将TMemberDataList声明为动态数组,将SetLength声明为(de)alloc数组,将New/Dispose声明为数据
type
PMemberDataList = ^TMemberDataList;
TMemberDataList = array of PMemberData;
var
Items: TMemberDataList;
Item: PMemberData;
// Add
begin
Setlength(Items, 1);
New(Item);
Items[0]:= Item
end;
// Remove
begin
Dispose(Items[0]);
Setlength(Items, 0);
end;
Run Code Online (Sandbox Code Playgroud) 我在我的解决方案中添加了一个dll项目,并通过可执行项目显式引用它.可执行文件抱怨它无法找到lib.
有任何想法如何设置项目来创建所需的lib文件?并且为什么项目不会创建一个?!?
干杯
注意 我已搜索项目,并且文件未在任何地方创建.
我想使用以下命令重新加载页面:
window.location.reload(true);
Run Code Online (Sandbox Code Playgroud)
但是我收到POSTDATA警告,因为刷新函数想要重新发送以前的POST表单数据.如何在没有此警告的情况下刷新页面?
更新:我无法控制项目!我无法解决POST本身!