问题标签 [image-manipulation]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
delphi - 如何在代码中有效地旋转位图
有没有比简单地使用倒置坐标进行嵌套循环更快的方法将大位图旋转 90 度或 270 度?
位图为 8bpp,通常为 2048x2400x8bpp
目前我通过简单地复制参数反转来做到这一点,大致(伪代码:
(实际上我用指针来做,速度更快,但幅度大致相同)
GDI 对于大图像非常慢,并且纹理(GF7 卡)的 GPU 加载/存储时间与当前 CPU 时间相同。
任何提示,指针?就地算法甚至会更好,但速度比就地更重要。
目标是德尔福,但它更像是一个算法问题。SSE(2) 向量化没问题,这对我来说在汇编程序中编码已经足够大了
跟进尼尔斯的回答
- 图像 2048x2700 -> 2700x2048
- 编译器 Turbo Explorer 2006 已开启优化。
- Windows:电源方案设置为“始终开启”。(重要!!!!)
- 机器:Core2 6600 (2.4 GHz)
使用旧程序的时间:32 毫秒(第 1 步)
步长为 8 的时间:12ms
步长为 16 的时间:10 毫秒
步长 32+ 的时间:9ms
同时我还在 Athlon 64 X2 (5200+ iirc) 上进行了测试,那里的速度比原来的四倍多一点(80 到 19 毫秒)。
加速是值得的,谢谢。也许在夏天的几个月里,我会用 SSE(2) 版本来折磨自己。但是我已经考虑过如何解决这个问题,我想我会用完 SSE2 寄存器来直接实现:
所以 8x8 需要 9 个寄存器,但 32 位 SSE 只有 8 个。无论如何,这是夏天的事情:-)
请注意,指针的事情是我出于本能而做的,但它实际上可能有一些东西,如果你的尺寸没有硬编码,编译器就不能把 mul 变成一个班次。虽然现在 muls an sich 很便宜,但它们也会产生更多的注册压力 afaik。
代码(通过从“naieve”rotate1 实现中减去结果来验证):
更新 2 泛型
我试图在 Delphi XE 中将此代码更新为泛型版本。我因为 QC 99703 失败了,论坛的人已经确认它也存在于 XE2 中。请投票给它:-)
更新 3 泛型 现在可以在 XE10 中使用
更新 4
在 2017 年,我在8x8 立方体的 8bpp 图像的汇编器版本上做了一些工作,以及关于 shuffle 瓶颈的相关SO 问题,Peter Cordes 慷慨地帮助了我。这段代码仍然有一个错过的机会,并且仍然需要另一个循环平铺级别再次将多个 8x8 块迭代聚合成更大的伪迭代,例如 64x64。现在又是整行了,这很浪费。
.net - 在 .NET(使用 GDI+)中创建逼真的荧光笔的最佳方法是什么?
如何使用 GDI+ 在 .NET 中创建逼真的荧光笔(模拟真实世界的荧光笔)?它旨在用于图形对象而不是可选文本。
使用透明画笔(带 alpha 通道)无法完成这项工作,因为画笔覆盖区域下方的所有内容都变得“模糊”,我希望“前景”(主要是文本)保持清晰(保持颜色)。
仅对背景区域使用 ColorMap 可以工作,但这需要大量代码来确定背景区域和某个阈值(我可以从第一个像素或右上角像素或其他东西中选择背景)。
为区域着色的 ColorMatrix 似乎也是一种选择,但我看到与透明画笔解决方案相同的问题(我不是 ColorMatrices 方面的专家,所以我可能会忽略一些东西)。
我想我需要前景色和背景色的动态阈值,但这可能会降低荧光笔的可用性。
我可以同时使用填充“选定”区域的解决方案或类似刷子的解决方案。
c# - 我在哪里可以找到 C# 的不清晰蒙版?
我一直在尝试找到一个代码片段来在 C# 中做一个非锐化掩码,但找不到一个有效或完整的。我找到了一个 PHP 版本,但我想在 C# 中找到一个,然后再进行从 PHP 转换的所有艰苦工作。
我只是一个初学者。谁能指出我正确的方向?
c# - 将 GD-Sharp 流转换为位图
我目前正在尝试 GD-Sharp 并希望将图形转换为位图而不将其保存到图像文件中。
保存到流的 GD-Sharp 方法是
bool GB.Save(流输出);
使用流保存是
由于位图支持流,它如何将 GD-Sharp 转换为位图?谢谢。
iphone - UIImage Rotation 自定义度数
我一直在使用此示例中的代码来提供帮助,并且效果很好。 http://www.platinumball.net/blog/2009/03/30/iphone-uiimage-rotation-and-mirroring/
我无法锻炼如何在 0 到 360 之间旋转自定义度数......
c++ - 如何进入图像处理编程?
我怎样才能做一些简单的事情,比如以编程方式操作图像?(我猜是用 C++ ..) jpgs/png/gif .....
iphone - 如何在 iPhone 上旋转图像?
如何在 iPhone 编程中旋转图像?
php - 使用 PHP 从提交的 URL 复制 Digg 的图像建议
所以我正在寻找关于如何最好地复制在 digg 上看到的功能的想法。本质上,您提交您感兴趣页面的 URL,然后挖掘 DOM 以查找所有 IMG 标签(可能只选择一些高于特定高度/宽度的标签),然后从中创建一个缩略图并询问您哪个您想代表您的提交。
虽然那里发生了很多事情,但我主要对从提交页面检索图像的最佳方法感兴趣。
c# - 图像重映射算法
我一直在开发(过去 3 个小时)我正在用 C# 做的一个小项目,以帮助我选择一个家。
具体来说,我将犯罪统计数据叠加在谷歌地图上,以找到一个不错的社区。
这是一个例子: http: //otac0n.com/Demos/prospects.html
现在,我手动找到了 Lat 和 Lng 以匹配示例中显示的地图的角落,但我还有一些地图要叠加。
我的新应用程序允许我选择一个地标并指向图像以将 Pixel 与 LatLng 联系起来。就像是:
所以,我收集了一个像素/纬度组合列表,现在想变换图像(使用仿射或非仿射变换)。
这里的目标是让每条街道都排成一行。给定一张好的地图,唯一必要的转换是旋转以使地图从北到南排列(现在我会对此感到满意)。但我不知道从哪里开始。
有人有在 C# 中进行图像转换的经验吗?我如何找到合适的旋转来使地图水平?
在解决了制作精良的地图的情况后,我最终希望能够叠加手绘地图。这显然会导致最终图像的严重失真,并且可能超出第一次迭代的范围。但是,我不想开发一个将来无法扩展到该系统的系统。
image-processing - 检查图像特征对齐
我用 C# 编写了自己的软件来执行显微镜成像。请参阅此屏幕截图。
在那里可以看到的图像是相同的样本,但通过物理上不同的探测器记录。这些图像完全对齐对我的实验至关重要。我认为最简单的方法是以某种方式混合/减去这两个位图,但这并没有给我带来好的结果。因此,我正在寻找一种更好的方法来做到这一点。
指出图像作为强度数组存在于内存中并转换为位图以在屏幕上绘画到我自己编写的图像控件可能很有用。
我将不胜感激任何帮助!