#define N 4
int a[N][N]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}}
void prt()
{int i,j
for(i=0i<Ni++)
{
for(j=0j<Nj++)
printf("%4d",a[i][j])
printf("\n")
}
}
int main()
{int i,j,k,t
printf("原来的数组:\n")
prt()
for(i=0i<=N/2i++)
for(j=ij<N-i-1j++)
{
t=a[i][j]
a[i][j]=a[j][N-1-i]
a[j][N-1-i]=a[N-1-i][N-1-j]
a[N-1-i][N-1-j]=a[N-1-j][i]
a[N-1-j][i]=t
}
printf("\n顺时针旋转90度后的数组:\n")
prt()
getch()
return 0
}
一般用Graphic2D 来实现
g2d 里有rotate、translate、scale方法
代码片段如下:
@Overridepublic void paintComponent(Graphics g){
Graphics2D g2 = (Graphics2D)g
g2.rotate(Math.toRadians(45))
g2.drawImage(image, 0, 0, this.getWidth(), this.getHeight(), null)
}
import javax.swing.*
import javax.imageio.*
import java.awt.*
import java.awt.image.*
import java.awt.geom.*
import java.io.*
/**
* @author Hardneedl
*/
class ImageTransform extends JFrame {
private static final Dimension minSize = new Dimension(900, 800)
private static final Dimension maxSize = new Dimension(900, 800)
private static final Dimension preferredSize = new Dimension(900, 800)
public Dimension getMaximumSize() {return maxSize}
public Dimension getMinimumSize() {return minSize}
public Dimension getPreferredSize() {return preferredSize}
public String getTitle() {return "Frame Title"}
private class Canvas extends JComponent{
private BufferedImage img
private AffineTransform trans=new AffineTransform()
private void setImage(BufferedImage img){
if(img!=null) this.img = img
if(isVisible()) paintImmediately(0,0,getWidth(),getHeight())
}
private void setRota(double rota){
trans.setToRotation(rota, (getWidth())>>1, ( getHeight() )>>1 )
if(isVisible()) paintImmediately(0,0,getWidth(),getHeight())
}
protected void paintComponent(Graphics g) {
super.paintComponent(g)
g.setColor(Color.BLUE)
g.fillRect(0,0,getWidth(),getHeight())
if (img==null)return
Graphics2D gg= (Graphics2D)g.create()
int iw = img.getWidth(), ih = img.getHeight()
int anchorX = (getWidth()- iw)>>1, anchorY = (getHeight() - ih)>>1
AffineTransform af = gg.getTransform()
af.translate(anchorX, anchorY)
af.concatenate(trans)
gg.drawImage(img,af,this)
gg.dispose()
}
}
private Canvas canvas = new Canvas()
ImageTransform() throws HeadlessException {
init()
doLay()
attachListeners()
}
private void init() {
try {
canvas.setImage(ImageIO.read(new File("1.png")))
canvas.setRota(Math.PI/3)
} catch (IOException e) {
e.printStackTrace()
}
}
private void doLay() {
Container container = getContentPane()
container.add(canvas,BorderLayout.CENTER)
pack()
}
private void attachListeners() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
}
public static void main(String[] args) throws IOException {
new ImageTransform().setVisible(true)
}
}