小编M K*_*atz的帖子

快速写下png

摘要

我想尽快写一个.png文件,而不用考虑压缩.也就是说,我不太关心文件大小,但我确实关心写入是否尽快发生.

动机

我正在使用客户端的OpenLayers和后端的python/C++创建基于Web的地图应用程序.当用户在地图上移动时,应用程序需要能够快速绘制动态内容.我有基于图块(256x256图块)和单图像("单图块")版本的工作,但在这两种情况下,后端渲染的最慢部分实际上是将图像保存为png文件(无论是否-disk或in-memory).例如,我可以在大约200毫秒内生成某个视图的"原始","tga"或"tiff"版本,但生成.png版本需要更多的时间,因为.png保存需要几乎整整一秒,而实际保存其他格式的时间是100毫秒或更短(即使"原始"文件是.png文件大小的五倍).此文件节省的时间也远远超过将结果图像从服务器传输到客户端的时间.(我的应用程序的一个重要特性是,通常"后端"将与浏览器在同一台机器上运行,因此传输时间可以忽略不计,即使对于大文件也是如此.)

我以为我可以通过调用快速编写.png(在使用C++中的libpng时)

    png_set_compression_level( png_ptr, 0 );
Run Code Online (Sandbox Code Playgroud)

在调用任何png_write_...函数之前.但是,虽然该调用确实似乎阻止了libpng压缩文件(生成的文件大小与.raw文件大小相同),但它并没有使.png的保存速度明显加快.

请帮忙

我需要为这些图像使用.png,因为我需要它们是基本地图顶部的透明叠加层,我需要的不仅仅是GIF提供的256种颜色.OpenLayers只是使用html img标签,所以我的理解是我只能使用有效的img格式.

我认为有一种方法可以通过不进行任何实际压缩来快速编写.png文件(我知道.png是"始终压缩"但我想这可能包括"空压缩").看起来你应该能够编写一个简单的固定标题,然后是未压缩的数据,然后是一些固定的页脚.或者也许是相同的想法,但是以逐行的方式.关键是我可以非常快速地在内存中通过这个2.5 MB的原始数据循环进行各种循环,并且可以非常快速地将其转储到各种文件格式,所以看起来我应该能够将它转储到固定的,未压缩的.png格式也很快.

听起来不错吗?你知道在哪里可以找到代码的例子吗?

png save processing-efficiency openlayers libpng

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

如何在iPhone/iPad游戏中测量和改善电池使用(Android也)

我的游戏使用了太多电池.与同类游戏相比,我不确切知道它使用了多少,但它使用了太多.玩家抱怨它使用了很多,其中一些人注意到它使他们的设备"运行热".我刚刚开始研究这个问题,并想提出一些理论和实际问题来缩小搜索范围.这主要是关于我的游戏的iOS版本,但可能许多相同的问题影响Android版本.很抱歉要问很多子问题,但它们似乎都是相互关联的,我认为最好把它们放在一起.

附注:我的游戏不进行网络访问(在几个地方称为大电池耗尽)并且在后台不消耗大量电池; 它是前台运行的问题.

(1)我知道有API可以读取电池电量,所以我可以做一些自动化测试.我的问题是:关于需要多长时间(或者可能:大约耗费多少电量)我需要让物品运行以获得可靠的读数?例如,如果它运行10分钟是可靠的吗?如果它排出10%的电池,那可靠吗?或者运行更长时间更好(或者说,看看电池耗电50%需要多长时间)?我在这里问的是电池表的灵敏度/可靠性,所以我知道每次测试需要多长时间.

(2)我试图了解电池使用率高的可能原因.下面列出一些可能的因素.请帮助我了解哪些是最有可能的罪魁祸首:

(2a)和很多游戏一样,我的游戏需要在每个帧上绘制全屏.它的运行速度约为30 fps.我知道Apple说"只需要根据需要刷新屏幕",但我几乎需要绘制每一帧.实际上,我可以将一些工作只绘制到已经改变的屏幕部分,但在我的情况下仍然是屏幕的大部分.在任何情况下,即使我可以将绘图本地化到屏幕的一部分,我仍然每秒进行30次OpenGL交换缓冲区调用,所以我努力画得少一点真的很重要?

(2b)当我绘制屏幕元素时,会有一定量的浮点数学运算(例如,在计算纹理UV坐标中),以及一些(较少)双精度数学运行.与类似的整数运算相比,我不知道它们在电池方面有多贵.我可能会缓存很多这些值而不必重复计算它们,如果那可能是胜利的话.

(2c)渲染场景时,我会进行一定量的纹理切换.我以前只是担心这会使游戏太慢(它没有),但现在我也想知道减少纹理切换是否会减少电池的使用.

(2d)我不确定这对我来说是否实用,但是:我一直在阅读着色器和OpenCL,我想了解我是否要将一些CPU处理卸载到GPU,这是否可能节省电池(除了可能为矢量型操作运行速度更快).或者它可能会在GPU上使用比CPU更多的电池?

我意识到我可以通过禁用游戏的某些部分并进行迭代电池测试运行来缩小哪些因素在起作用(因此问题的第(1)部分).只是因为禁用并不是微不足道的,并且有足够的潜在罪魁祸首,我认为我首先会要求提供一般建议.

android opengl-es power-management ios

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

对ASP.NET站点的更改是否会终止活动会话?

我担心我的用户会话被扫除的可能性.我正在使用默认的ASP.NET会话对象和会话cookie.我知道会话可以超时,我已将会话的超时值设置为几个小时,以避免意外超时.

但至少有两个我担心的案例.

(1)我理解ASP.NET会定期回收运行站点/ Web应用程序的应用程序域(不确定我的所有术语是否正确).在这些回收活动中进行会话吗?

(2)至少在我的开发服务器上,我对站点所做的某些更改(例如,添加新页面)似乎会导致活动会话在重新编译站点(或其中一部分)时丢失.这种情况似乎不会随着每次变化而发生,但有很多变化.我特别关注这对于我的网站上线时可能发生的变化意味着什么.我想知道我可以更新的规则,而不会导致活动会话被杀死.

谢谢你的任何指示.

asp.net asp.net-mvc upgrade

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

iOS/iPhone:在应用程序处于"拒绝"状态时应用程序内购买沙箱损坏?

(参见下面的MAIN THRUST以跳到我问题的主旨.)

我的iOS应用程序在Apple审核流程中被拒绝,原因很简单,很容易解决.

但是,我想给新版本进行一次性测试,包括重新测试我们的应用程序内购买(应用程序中只有一个可购买的项目).

现在,在初次检索产品信息时,应用程序崩溃了.它之前从未以这种方式崩溃,并且自从我们多次成功测试沙盒模式下的应用程序内购买后代码没有改变.(事实上​​,在最初提交的版本与此版本之间没有任何代码发生了修改;修复只是一个info.plist设置更改.)

更复杂的是,我使用Airplay/Marmalade SDK构建应用程序,并使用自己的API和回调机制包装Objective C调用和回调机制.但是,这个包装器非常薄,所以我希望/相信这是一个普通的iOS /应用内购买问题,而不是特定于Marmalade的东西.

所以,正如我所说,它在我调用Marmalade调用产品信息和调用我的(C++)回调的时间之间崩溃.(即,在Marmalade在SKProductsRequest对象上调用[productsRequest start]的时间和调用时间productsRequest:didReceiveResponse()并且Marmalade依次调用我的时间之间.)

主要推动我的问题:

我的应用程序在iTunesConnect上处于"已拒绝"状态.此外,当我在iTunesConnect中查看应用程序内购买项目时,它也被标记为"已拒绝".但是,我已经在审核过程中讨论了我与Apple的应用内购买,我相信应用内购买本身对他们来说很好,唯一剩下的问题是我已经有的小问题修复(这是他们的拒绝细节所说的:只有那一项).

所以:我需要了解,当我的应用程序(及其相关的应用程序内购买)处于此"拒绝"状态,等待我从我那里获得新的二进制文件时,重新测试应用程序内部是否很棘手(或者可能不可能)购买,我最好的行动方案就是重新提交带有次要修复的应用程序并且相信(因为它是在正常测试期间当事情不处于被拒绝状态时工作的相同代码)应用程序的状态一旦Apple重置所有内容以测试新的二进制文件,购买将自行完成.

或者在这一点上我应该做些什么不同的事情让我可以重新测试应用内购买?

我想在iTunesConnect通信中询问Apple,但我不想引入它们的任何复杂性,因为到目前为止审查过程非常快速和有效.

itunesconnect sandbox in-app-purchase appstore-approval ios

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

如何在WPF中使DispatcherTimer事件更顺畅?

在我的WPF应用程序中,用户按下按钮以启动平滑旋转的3D模型,然后让按钮停止旋转.

为此,我创建了一个DispatcherTimer:

DispatcherTimer timer = new DispatcherTimer();
timer.Tick += new EventHandler( timer_Tick );
timer.Interval = new TimeSpan( 0, 0, 0, 0, 30 );
Run Code Online (Sandbox Code Playgroud)

当按下按钮时,我打电话timer.Start(),当按钮松开时我打电话timer.Stop().

timer_Tick函数更改模型的旋转:

    void timer_Tick( object sender, EventArgs e )
    {
        spin = ( spin + 2 ) % 360;
        AxisAngleRotation3D rotation = new AxisAngleRotation3D( new Vector3D( 0, 1, 0 ), spin );
        Transform3D rotate = new RotateTransform3D( rotation );
        model2.Transform = rotate;
    }
Run Code Online (Sandbox Code Playgroud)

我注意到的是,模型在大多数情况下平滑旋转,但经常冻结和口吃,暂停不同的持续时间,有时高达1/4秒.

有没有办法让这更顺畅?我理解通过使用DispatcherTimer(而不是System.Timers.Timer),回调发生在UI线程上.但是为了运行这条线,我必须处于UI威胁之中

        model2.Transform = rotate;
Run Code Online (Sandbox Code Playgroud)

我已经阅读了有关在其他线程上获取计时器回调的各种方法.但似乎最终我必须与UI线程同步才能调用该行.如果我使用Invoke()从System.Timers.Timer回调线程编组到UI线程,那么会给整体更平滑的动画吗?它似乎不应该,因为它必须与UI线程同步,就像DispatcherTimer可能做的那样.对于这个问题,似乎任何设置 …

c# wpf smooth timer dispatchertimer

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

当firebug说它是34时,为什么jquery会为offsetHeight返回0?

所以我有一个div,其内容是在运行时生成的,它最初没有与之关联的高度.当它根据firebug生成时,我可以通过js警告,div仍然具有0的高度.但是,用firebug查看只读属性我可以看到它的偏移高度为34.这个值是我需要.希望它是显而易见的,但如果不是,这个数字是可变的,它并不总是38.

所以,我认为我可以通过jquery做到这一点......

$("#parentDiv").attr('offsetHeight');
Run Code Online (Sandbox Code Playgroud)

或者用直js ...

document.getElementById("parentDiv").offsetHeight;
Run Code Online (Sandbox Code Playgroud)

但返回的所有内容都是0.它是否与偏移高度在此实例中是只读属性这一事实有关?我怎么能得到这个高度?我的意思是萤火虫以某种方式搞清楚它似乎我应该能够.

编辑: 这是div现在的样子......

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML Strict//EN"><META http-equiv="Content-Type" content="text/html; charset=utf-8">

<HTML style="OVERFLOW: hidden; HEIGHT: 100%" xmlns="http://www.w3.org/1999/xhtml"><BODY><FORM id="aspnetForm" name="aspnetForm" action="blah.aspx" method="post"><DIV id="container">

<DIV id="ctl00_BodyContentPlaceHolder_Navigation" style="Z-INDEX: 1; LEFT: 1597px; POSITION: absolute; TOP: 67px">
    <DIV class="TransparentBg" id="TransparentDiv" style="MARGIN-TOP: 10px; MARGIN-RIGHT: 10px; HEIGHT: 94px; TEXT-ALIGN: center">
    </DIV>
    <DIV class="Foreground" id="ForegroundId" style="MARGIN-TOP: 10px; MARGIN-RIGHT: 10px; TEXT-ALIGN: center">
        <DIV id="ctl00_BodyContentPlaceHolder_Navigation1" style="WIDTH: 52px; COLOR: black; HEIGHT: 52px; BACKGROUND-COLOR: transparent; -moz-user-focus: normal">
            <IMG style="FILTER: progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod = scale src='../images/image.gif'); CURSOR: pointer" …
Run Code Online (Sandbox Code Playgroud)

javascript jquery dom

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

在phonegap应用程序中捆绑python"后端"代码

短版:

有没有一种标准方法将Python"后端服务器"类型代码与phonegap客户端应用程序捆绑在一起?

长版:

我有很多应用程序,我正在考虑移植到phonegap.通常,应用程序是用Python编写的.其中一些有Web前端,其中一些是独立的Python应用程序,其接口基于wxpython.

所以每个应用程序都有一些客户端的东西,已经在html + javascript + css,或者我很乐意翻译成html + javascript + css.

对于服务器端,对于某些应用程序,可以将服务器代码保留在服务器上.但对于某些/大多数人来说,我想将服务器端逻辑打包到phonegap应用程序中,因此它可以是一个独立的应用程序.这个要求来自两个需求.一个是这些应用程序中的许多应用程序用于紧急响应,即使在无法使用手机信号塔和其他网络基础设施时也需要工作.另一个很简单,一些应用程序非常简单,并且不保证客户端/服务器架构 - 它们碰巧有很多用Python编写的"后端逻辑"类型代码.

现在,我知道我可以将所有后端Python逻辑移植到javascript,但我希望找到一个解决方案,其中这个相当大的代码库可以保留在Python中.

我的想法是,我可以编写一个实际上包含完整Python解释器的phonegap插件(至少足以处理我的代码库中的大部分内容).(也就是说,iOS和Android都允许本机C代码,所以我应该能够从源代码编译Python - 或者至少编译它 - 或者只是链接到其他人构建的iOS和Android Python库.)

所以在javascript代码中,我可以让客户端调用一些函数,如"InvokeBackEndMethod()".这很像ajax调用,但它不会在网络上调用,而是将查询/ url/message发送到Python插件.我的理解是,phonegap插件可以保持持久状态(例如,数据库插件允许您进行一次调用以打开数据库,然后调用从中读取并关闭它).因此,Python"服务器"代码可以像在真实服务器上一样维护其状态.事实上,Python代码可能正在运行像cherrpy这样的Web框架,因此它真的就像在同一个移动应用程序中运行客户端和服务器一样.

我的问题是:

(1)该计划听起来合理吗?

(2)有人已经解决了这个问题吗?我希望找到一个名为"phonegap server"的项目,它本质上是一个"通用"的PhoneGap扩展,从某种意义上来说它会接受来自客户端的任意调用,并会将这些调用发送给您选择的各种机制:Python,Java,单声道等(即,这种通用的phonegap扩展将被各种语言"插件""扩展",然后这些插件将被用户在给定的任何业务逻辑"扩展"语言).可能大多数人都不需要这样的项目,因为他们没有要求断开连接和/或他们没有"后端"逻辑的大代码库他们' 我想在一个独立的应用程序中部署,但保留原始语言.但似乎有些人必须要这样做,不是吗?

python plugins client-server cordova

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

WMS/WFS服务器:我疯了自己写吗?

我是一个"自己动手"的那种人,但是我想确保我不会因为尝试咬掉比我能咀嚼更多的东西.

我正在编写一个基于浏览器的地图应用程序,需要在最终用户的计算机上运行独立(无互联网连接).也就是说,应用程序是某种服务器,在许多情况下,它将安装在最终用户的计算机上,浏览器将指向某个localhost URL来访问它.

我将在客户端使用MapLayers,服务器端将有一堆特定于应用程序的自定义逻辑,例如以某些自定义方式处理地图上的点击事件,在特定时间在地图上创建各种自定义对象,等等.

对于服务器的"业务逻辑"部分,我很高兴使用带有python的paste/webob.这是一个简单的基础架构,可以让我轻松地放入所有这些自定义逻辑.

我一直在想客户端会与两台服务器进行通信:这个粘贴/ webob业务逻辑服务器,以及一台服务于WMS和WFS地图元素的服务器.所以我看着MapServer和GeoServer处理地图部分......我不高兴.

我不高兴,因为我不想在客户端机器上安装和担心"野兽".对于MapServer,我真的不想安装像Apache这样的成熟的Web服务器,并且必须处理CGI,PHP和MapScript.对于GeoServer,可能(可能)安装Java,并处理GeoServer设置和管理的各种复杂性.

部分原因只是学习曲线问题.如果我可以避免它,我对学习MapServer或GeoServer的复杂性并不是特别感兴趣.我安装了GeoServer,将其指向我的一些数据,并且能够使用GeoServer良好的Web管理员内置的MapLayers预览来查看我的数据.但当我尝试使用我自己的GeoServer指向的MapLayers网页提供真实的数据时,我崩溃了GeoServer.我可能会崩溃服务器只是从客户端发送一些可能是格式错误的请求对我来说是非常令人惊讶的.我可以深入研究GeoServer日志,试图弄清楚我做错了什么,但是......我真的不想花很多时间在那上面.

所以,我正在考虑使用我已经拥有的粘贴/ webob服务器自己实现WMS和WFS接口的部分.事实上,我可能只需要WMS,因为我可以通过一个简单的自定义协议来处理矢量对象,我将这些协议传递给客户端,然后客户端可以使用OpenLayers直接创建和操作对象.

我查看了WMS的规范和示例消息(在WFS上稍微少一点).我自己实现这个协议似乎并不那么困难,特别是因为在这种情况下我完全控制了客户端 - 这不像我需要能够充当通用的WMS或WFS服务器; 我只需要让我自己的OpenLayers客户满意.

我需要WMS服务器的两个主要功能是:

  • 从我提前创建的预渲染瓷砖商店中提供瓷砖(我将使用OpenStreetMap数据预渲染瓷砖,使用mapnik作为渲染引擎;我将使用普通的Google Maps样式瓷砖命名方案存储和访问它们那个OpenLayers预计)

  • 能够服务器修改这些瓦片的版本,其中我在本地存储的某些数据被绘制在瓦片之上.例如,我可能在一个"图层"上有10000个点,在另一个图层上有10000个多边形,当用户激活这些图层时,我将提供相同的基础图块,但是当我提供这些图块时,我将呈现这些附加功能在它们之上,可能我将实现一个简单的缓存方案,以保持这些过度渲染的磁贴一段时间.

所以我的问题是:尽管我知道现有的工具可以做这些事情(MapServer,GeoServer,TileCache等),但实际上我觉得仅仅回应一些简单的WMS消息对我来说就不那么重要了,在python中自己对我的瓷砖进行额外的过度绘图,确保所有内容都能正确投影等.我不需要为这些过度图层绘制花哨的宽街道或任何东西,只需简单的线条,图标和标签.拥有一个只有python的解决方案听起来很简单.

我想如果我需要扩展到支持更多的WMS/WFS协议,或者进行更高级的透支,我可以在那时插入MapServer/GeoServer.

这里有陷阱我不考虑吗?

paste mapserver wms geoserver webob

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

iPhone:如何/是否在新证书中包含我现有的私钥?

精简版:

我是否有必要甚至可能根据我现有的私钥生成新的分发证书,或者对于新应用和应用商店现有应用的更新都没有任何损害,以生成具有新私有的新证书键?

长版:

在我看来,iPhone开发人员计划用户指南中存在关于私钥和分发证书过期的冲突/误导信息.

一方面,它表示你应该保护自己的私钥,并保留一份副本,以便在更换开发者机器时可以在新机器上使用它.我的理解是,你必须抓住你的一个真正的私钥(即你在申请第一个证书时为你的公司生成的第一个私钥),并永久使用它(至少,一旦你部署了一个app,就永远使用它)用它到App Store).

另一方面,它告诉您分发证书在一年后到期,您可以在需要时简单地申请新的分发证书.对我来说有意义的是,如果他们跟着一个开头的段落"因为在请求新证书时使用原始私钥对您来说至关重要,这就是您如何申请从预先创建的证书现有私钥......"但是没有这样的段落,在搜索之后我还没有听说过这样做的方法.

stackoverflow上有这个密切相关的帖子:iPhone分发证书丢失的私钥.什么是解决方案?

该问题的答案似乎表明,当分发证书丢失或过期时,您可以撤消它并创建一个新的分发证书,并且对您当前在应用商店中的应用程序没有任何影响,并且您可以继续发布新的应用程序没有Apple的新证书说"嘿,你和以前不一样."

该帖子未回答的一个关键问题是,是否可以使用与之前发布的应用程序不同的证书/密钥来更新应用程序商店中的现有应用程序.但我在其他地方也听说过这也是可能的.

因此,它可归结为:苹果公司是否误导您的私钥真的是将应用程序标识为来自您公司的东西?它真的只是您的应用程序ID加上您登录开发门户网站的凭据以及识别您的公司和应用程序的itunesconnect吗?

iphone certificate private-key

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

CImg库可以绘制粗线

我一直在使用CImg库,并且很高兴集成和使用它是多么容易.但是,我现在想要绘制粗线(即,多于一个像素的厚度).从API文档中不清楚draw_line函数(这里)如何做到这一点.该函数的第二个版本(就在文档中的第一个版本下面)甚至将纹理作为输入,但同样没有宽度.这样一个综合图书馆没有这个功能似乎很奇怪.也许它应该使用某种转换来完成?我知道我可以使用多边形(即一个矩形,我会使用线的法线来计算多边形的角),但我担心这会明显变慢.

c++ line thickness cimg

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