我正在尝试为移动设备编写位图编辑器(即Photoshop的有限版本).用户的文档由大约1000x500大小的~4位图组成.
我想要一个尽可能简单的强大而高效的撤销/重做系统.我的目标是大约0.2秒来撤消或重做编辑.我正在寻找关于我目前的预期方法或我可以使用的一些新想法的一些反馈.我认为我所拥有的东西太复杂了,所以我对继续进行谨慎,所以只要知道我能做的最好就会很好.
我已经尝试了使用Command模式和Memento模式的组合来实现我的撤销/重做系统.到目前为止我得出的一些结论是:
我没有足够的内存,我不能足够快地将内存写入磁盘,以便在许多情况下使用纪念品支持上一个命令的"未执行"操作,例如,如果用户很快就进行了几次单独的绘画操作,我就不会能够存储表示用户绘制内容的位图,而不会让用户等待保存它们.
如果我将文档恢复到其初始状态并重放除最后一个命令之外的所有命令以实现撤销,即使是适量的命令,例如重放10个绘画笔划或5个涂抹笔划需要~1秒,这也太慢了呆滞.
我可以通过将整个文档定期保存到磁盘并在播放命令之前恢复到此检查点来解决前一点.为了比上一个检查点更进一步撤消,我们在此之前重新加载检查点并重放命令.
方法2有3个工作正常,除了保存整个文档变得越来越慢,因为添加了更多的图层,并且它已经慢了4位图(等待5到10秒).因此,我需要修改3,以便我只保存自上次以来发生的变化.
由于许多命令仅在一个层上运行,因此仅保存自上一个检查点以来已修改的层是有意义的.例如,如果我有3个初始层,我已经指出可以保存检查点的位置,那么我的命令堆可能看起来像这样.
(Checkpoint1: Save layer 1, 2 and 3.)
Paint on layer 1
Paint on layer 1
(Checkpoint2: Save layer 1. Reuse saved layers 2 and 3 from Checkpoint1.)
Paint on layer 2
Paint on layer 2
(Checkpoint3: Save layer 2. Reuse saved layers 1 and 3 from Checkpoint2.)
Paint on layer 3
Paint on layer 3
Flip layer 3 horizontally.
(Checkpoint4: Save layer 3. Reuse saved layers 1 and 2 from Checkpoint3.)
Resize …Run Code Online (Sandbox Code Playgroud) 我希望进入Flash游戏开发(来自XNA),但我不太确定我愿意为昂贵的Adobe Flash软件提供服务.我注意到有免费的"Flex"SDK.
有什么不同?如果我使用Adobe Flash开发Flash游戏,我是否可以使用免费的Flex SDK开发Flash游戏并以与我相同的方式将其提交到游戏门户?
我不久前刚开始使用python进行编程,而且在税收和金钱问题上,我无法弄清楚舍入问题.我似乎无法得到小数,总是四舍五入到最接近的百分位.例如,在我们的州,销售需求为9.5%,因此购买5美元将使税收为0.48美元,但实际上为0.475美元.我已经尝试过math.ceil,但似乎只适用于最接近的整数.是否有一种简单的方法可以对任意数千位数进行舍入?(例如.471将转为.48)
谢谢
当有人将图像上传到我们的网站时,我一直收到此警告:
警告:imagecreatefromjpeg()[function.imagecreatefromjpeg]:gd-jpeg:JPEG库报告不可恢复的错误:在第220行的/home/pathremoved/includes/snapsutils.php中
警告:imagecreatefromjpeg()[function.imagecreatefromjpeg]:'/ tmp/phpiw4MFk'不是220行/home/pathremoved.php中的有效JPEG文件
警告:imagesx():提供的参数不是222行/home/pathremoved.php中的有效图像资源
警告:imagesy():提供的参数不是223行/home/pathremoved.php中的有效图像资源
警告:imagecreatetruecolor()[function.imagecreatetruecolor]:第240行/home/pathremoved.php中的图像尺寸无效
警告:imagecopyresampled():提供的参数不是第242行/home/pathremoved.php中的有效图像资源
这只发生在某些图像上,在任何程序中打开都可以,它甚至上传到我在localhost上的网站版本没有问题...我google了一下,但没有发现任何结论...
注意php upload_max大小为5M,post_max_size为5M.这不是上传或内存问题.我已经测试了4M图像没有问题.
任何帮助赞赏.
我目前有一个API调用,以格式返回给我一个日期/时间: 2010-10-10T07:54:01.878926
我可以假设这是GMT吗?我还将其转换为NSDate对象.有没有办法利用本地iPhone时间重新计算时间?
到目前为止,我使用Haskell XML工具包HXT看到的所有示例都runX用于执行解析器.runX在IO monad中运行.有没有办法在IO之外使用这个XML解析器?对我来说似乎是一个纯粹的操作,不明白为什么我被迫在IO里面.
我有一个Ajax调用,它更新了数据库中的5,000条记录,因此这需要花费很多时间.我有一个Ajax"正在加载图片",显示正在发生的事情,但我正在寻找一种更好的方式来显示"正在更新50的5000 ...","更新200的5000",或类似的东西.
在不执行5000个不同帖子的情况下,在Ajax/jQuery中执行此类操作的最佳方法是什么?
我需要从开始到结束两次读取一个流.
但是以下代码抛出ObjectDisposedException: Cannot access a closed file异常.
string fileToReadPath = @"<path here>";
using (FileStream fs = new FileStream(fileToReadPath, FileMode.Open))
{
using (StreamReader reader = new StreamReader(fs))
{
string text = reader.ReadToEnd();
Console.WriteLine(text);
}
fs.Seek(0, SeekOrigin.Begin); // ObjectDisposedException thrown.
using (StreamReader reader = new StreamReader(fs))
{
string text = reader.ReadToEnd();
Console.WriteLine(text);
}
}
Run Code Online (Sandbox Code Playgroud)
为什么会这样?什么是真的处置?为什么操纵StreamReader会以这种方式影响相关的流?期望可以多次读取可搜索流是不合逻辑的,包括几个StreamReaders?
在我的地图中我有:
Component(
x => x.ExposureKey,
m => {
m.Map(x => x.AsOfDate).Not.Nullable();
m.Map(x => x.ExposureId).Length(30).Not.Nullable();
}
).Unique();
Run Code Online (Sandbox Code Playgroud)
HBM的相关产出是
<component name="ExposureKey" insert="true" update="true" optimistic-lock="true" class="Some.Namespace.CreditExposureKey, Some.Namespace, Version=0.0.0.0, Culture=neutral, PublicKeyToken=aaaaaaaaaaaaaaaa">
<property name="AsOfDate" type="System.DateTime, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<column name="AsOfDate" not-null="true"/>
</property>
<property name="ExposureId" type="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<column name="ExposureId" length="30" not-null="true"/>
</property>
</component>
Run Code Online (Sandbox Code Playgroud)
这unique="true"在component定义中显然是缺失的.
为什么会这样?
我最近拂去了我的一个旧的Ruby on Rails项目.在过去,我从来没有遇到任何问题通过所有测试,但现在有一个测试,给我以下错误:
ActiveRecord :: StatementInvalid:Mysql :: Error:#HY000非法混合排序(latin1_swedish_ci,IMPLICIT)和(utf8_general_ci,COERCIBLE)操作'=':SELECT*FROM cards WHERE(cards.l1_description ='是'AND cards.l2_word = '')
所以我去我的测试数据库并询问:
mysql> use flashcard_test
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show full columns from cards;
+----------------+--------------+-------------------+------+-----+---------+----------------+---------------------------------+---------+
| Field | Type | Collation | Null | Key | Default | Extra | Privileges | Comment |
+----------------+--------------+-------------------+------+-----+---------+----------------+---------------------------------+---------+
| id | int(11) | NULL | NO | PRI …Run Code Online (Sandbox Code Playgroud) adobe ×1
ajax ×1
algorithm ×1
apache-flex ×1
c# ×1
collation ×1
components ×1
file-upload ×1
flash ×1
haskell ×1
hxt ×1
idisposable ×1
image ×1
iphone ×1
jquery ×1
localization ×1
mysql ×1
nhibernate ×1
nsdate ×1
objective-c ×1
optimization ×1
php ×1
progress-bar ×1
python ×1
stream ×1
streamreader ×1
undo ×1
upload ×1