问题标签 [affinetransform]
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.
java - 16位数据双线性插值的Java错误
我在对 16 位数据使用双线性插值时遇到问题。我有两个图像,origImage 和 displayImage。我想使用 AffineTransformOp 通过 AffineTransform 将 origImage 过滤为 displayImage ,这是显示区域的大小。origImage 的类型为 BufferedImage.TYPE_USHORT_GRAY,并具有 sun.awt.image.ShortInterleavedRaster 类型的栅格。这是我现在拥有的代码
为了显示错误,我创建了 2 个渐变图像。一个具有 15 位范围内的值(最大值为 32767),一个具有 16 位范围内的值(最大值为 65535)。下面是两张图
15 位图像
16 位图像
这两个图像以相同的方式创建并且看起来应该相同,但请注意横跨 16 位图像中间的线。起初我认为这是一个溢出问题,但奇怪的是它出现在渐变的中心而不是像素值较高的末端。此外,如果这是一个溢出问题,我会怀疑 15 位图像也会受到影响。
对此的任何帮助将不胜感激。
我只是想知道为什么没有人回答,我是否提供了足够的信息?是否需要更多信息?
下面是我用来生成 AffineTransform 的代码。所有引用的变量都是根据用户输入(鼠标移动)计算得出的,并且应该是正确的(包括我自己在内的很多人都对其进行了测试)。希望这可以帮助解决错误。
我仍然不知道这里发生了什么。我真的很感激可以提供的任何帮助。我还附上了我遇到的真实图像中发生的错误示例,以供更多参考。
这是手部 X 光片中发生的错误
这是一个放大版本,重点放在拇指和食指之间的区域。
再次注意错误不会出现在极白的区域,而是出现在动态范围中间的值上,就像在渐变图像中一样。
我发现了更多信息。我正在调整一些转换,发现如果我只是通过单位矩阵进行过滤,则不会发生该错误。如果我翻译一个整数,它也不会发生。如果我翻译一个非整数量,它确实会发生。如果我缩放 1 以外的任何数量(整数或非整数),也会发生这种情况。希望这会有所帮助。
经过更多的实验,该错误肯定会出现在最大强度一半(65535/2 = 32767.5)之间的边界像素处。它也只发生在这个值上。希望对诊断有帮助!!
应 AlBlue 的要求,这里的代码完全独立于我的可以生成错误的应用程序。请注意,在原始帖子中,我包含了使用以下代码生成的图像渐变,但是我放大了其中一个渐变以更好地显示效果。您应该在 0.5 转换后的图像上看到四次效果,而不是在其他两个图像中的任何一个上。另请注意,在缩放除 1 以外的任何数量时都会出现此错误。只需将 AffineTransform.getTranslateInstance() 替换为 AffineTransform.getScaleInstance(0.9, 0.9) 即可查看该错误。
作为另一个更新,我刚刚在 Fedora 10 上进行了尝试,发现错误仍然存在。
java - Java:使用 AffineTransform 缩放图像时出现线条
我在图像缩放方面遇到问题。当我使用以下代码缩放图像时,它会在图像的底部或右侧以一条线结束。
原始图像
缩放后的图像
有谁知道为什么会出现这条线?
谢谢!
编辑:
添加了完整的方法代码:
方法调用中的 maxWidth 和 maxHeight 参数设置为 SPINNER_MAX_* 常量。
谢谢!
java - 如何使用另一个象限的坐标在 JPanel 上绘制?
我想通过覆盖在 JPanel 上绘制一些形状paintComponent
。我希望能够平移和缩放。平移和缩放很容易使用AffineTransform
和对象setTransform
上的方法Graphics2D
。这样做之后,我可以用“世界坐标”定义形状来轻松绘制形状,g2.draw(myShape)
因此在平移时它可以正常工作,我必须在绘制之前将它们转换为画布/JPanel 坐标。
现在我想改变坐标的象限。从JPanel和电脑经常使用的第四象限到用户最熟悉的第一象限。X 是相同的,但 Y 轴应该向上而不是向下增加。很容易通过以下方式重新定义 origonew Point(origo.x, -origo.y);
但是我怎样才能在这个象限中画出形状呢?我想保留形状的坐标(在世界坐标中定义),而不是将它们放在画布坐标中。所以我需要以某种方式转换它们,或者转换Graphics2D
对象,我想有效地做到这一点。我也可以这样做AffineTransform
吗?
我的绘图代码:
cocoa-touch - 如何让 CGAffineTransformMakeScale 围绕其中心缩小视图?
这应该很容易——当我CGAffineTransformMakeScale
在 a 上UIView
使用width = 0.5
andheight = 0.5
时,它会缩小到左上角。我需要它围绕它的中心收缩。
我怎样才能做到这一点?
java - 如何将 AffineTransform 设置为旋转而不是剪切?
我在使用 Graphics2D 绘图时使用 AffineTransform。我在绘制之前使用它来转换形状。rx 和 ry 应该是旋转的,但是在绘制形状时会剪切而不是旋转。如何强制轮换?我尝试使用默认构造函数,然后调用旋转、缩放和平移,但形状看起来与它们应该看起来的完全不同。
image-processing - 反转仿射变换——如何更新中心坐标?
所以我有一个 3D 图像,它通过仿射变换变成了一个空间。该变换由传统的 4x4 矩阵加上执行变换的中心坐标组成。如何反转该中心点以返回原始空间?我有坐标,但它是一个 1x3 向量(或 3x1,取决于行/列顺序)。我假设要获得适当的逆中心,我需要将向量设为 1x4,但如果是这种情况,我应该将什么放入第四个位置?明显的候选人是 0 和 1,但我不确定这是否是正确的做法。
这个想法是,如果我将图像转换到空间中,然后反转转换,则生成的图像应该是相同的(在重新采样的舍入误差/混叠效果内)。但是,目前,我只是使用相同的中心坐标,这会产生一个偏移了一定量的图像,而不是产生完全相同的图像。那么,我怎样才能改变那个中心点呢?
java - 将任意几何变换应用于 JPanel
我在 JPanel 中有一些 Swing 控件。我希望这个面板出现在由任意仿射变换变换的屏幕上,并且所有控件都保持交互。例如,让我们假设旋转 20 度并缩小到 75% 的正常大小。
我见过的最接近的方法是:http: //www.coderanch.com/t/343261/GUI/java/Applying-affine-transform-JPanel (但不幸的是,这个解决方案不会导致控件被交互的)
还有这篇文章: http ://coding.derkeiler.com/Archive/Java/comp.lang.java.gui/2004-02/0719.html (似乎没有一个很好的解决方案,但也许现在(6 年过去了)情况发生了变化)
math - 将二维正方形旋转到另一个正方形
我有两个正方形,S1 = (x1,y1,x2,y2) 和 S2 = (a1,b1,a2,b2)
我正在寻找 A * S1 = S2 的转换矩阵
据我所知,A 是一个 3x3 仿射矩阵,所以我有 9 个未知值。
如何计算这些值?
谢谢,最好的,维克多
java - 如何在Java中找出仿射变换的矩形是否包含某个点?
我正在尝试制作一个交互式 GUI,但是只要单击 + 拖动该矩形,我就需要移动某个对象。基本上我想知道一个经过仿射变换的矩形是否包含一个特定的点(x,y)。有没有办法做到这一点?我尝试过使用contains()
方法,但它不适用于已仿射变换的矩形。我检查了 Java 教程,但用户交互式 GUI 不使用仿射变换。有人可以向我指出一个教程,该教程允许用户仿射变换某个形状以及仅在单击+拖动形状本身时移动形状。如果没有,我该如何处理?
谢谢。
java - 使用 AffineTransform 将形状缩放/转换为给定的矩形
我正在尝试缩放/翻译 java.awt。使用AffineTransform进行形状,以便在定义的边界矩形中绘制它。
此外,我想在具有“缩放”参数的绘图区域中绘制它。
我尝试了 AffineTransform 的各种串联,但找不到正确的序列。例如,以下解决方案是错误的:
关于正确的 AffineTransform 的任何想法?
非常感谢
皮埃尔