gpt4 book ai didi

java - 在java中旋转图像

转载 作者:行者123 更新时间:2023-12-02 06:13:03 25 4
gpt4 key购买 nike

我有一个高度=576和宽度=768的图像,我将其像素信息存储在矩阵I[高度][宽度]中。现在我想围绕其中心旋转图像。当我们加载图像时,左上角实际上是(0,0)。因此,我将原点设置为中心(384,288)并应用公式:x'=xcos(theta) + ysin(theta) 和 y'= -xsin(theta) +ycos(theta) ( http://en.wikipedia.org/wiki/Transformation_matrix

以下是我的代码:

/*  ROTATION REQUIRED */
for(i2=0;i2<height2;i2++)
{
for(j2=0;j2<width2;j2++)
{
x_origin=j2 + (width2/2);
y_origin=i2 + (height2/2);
x_transformed=(int)(x_origin*Math.cos(radians) + y_origin*Math.sin(radians));
y_transformed= (int)(-x_origin*Math.sin(radians) + y_origin*Math.cos(radians));
x_new = x_transformed- (width2/2);
y_new = y_transformed- (height2/2);
pix=hw1.Image2[i2][j2]; /*pixel info of original image */
hw1.img2.setRGB(x_new, y_new, pix);

当我进行此计算时,我的 y_transformed 结果为负(因此 y_new),因此 setRGB() 函数会抛出坐标超出界限异常。

谁能指导我哪里做错了?

谢谢

最佳答案

旋转图像时,会将角旋转到负 y(以及 X)坐标。考虑将一个正方形绕其中心旋转 45 度。左上角和左上角将伸出它们所在的盒子。

Unrotated square
rotated square

这不是数学上的问题,而是Java图形框架的问题。

以数学方式进行旋转,找到最小的 x 和 y,然后将旋转后的形状平移到足以使 X 和 Y 不再为负值,然后再在 java 图形框架中设置坐标。

或者,不要绘制任何小于 0(X 或 Y)的点,这会从旋转图像中裁剪部分内容。

关于java - 在java中旋转图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21717343/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com