Java 旋转缓冲区图像

Java 旋转缓冲区图像,java,image,bufferedimage,Java,Image,Bufferedimage,我在遵循一本教科书,在某一点上陷入了困境 这是一个控制台应用程序 我有以下带有旋转图像方法的类: 公共类{ 公共彩色图像旋转图像(彩色图像){ int height=theImage.getHeight(); int width=theImage.getWidth(); //必须创建新的obj实例以帮助旋转 ColorImage rotImage=新的ColorImage(高度、宽度); 对于(int y=0;y

我在遵循一本教科书,在某一点上陷入了困境

这是一个控制台应用程序

我有以下带有旋转图像方法的类:

公共类{
公共彩色图像旋转图像(彩色图像){
int height=theImage.getHeight();
int width=theImage.getWidth();
//必须创建新的obj实例以帮助旋转
ColorImage rotImage=新的ColorImage(高度、宽度);
对于(int y=0;y
旋转是有效的,但我必须创建一个新的彩色图像(下面的类),这意味着我正在创建一个新的对象实例(rotImage),并丢失我传入的对象(theImage)的状态。目前,这并不是什么大问题,因为ColorImage并没有容纳太多,但如果我想让它容纳的状态,比如说,它已经应用的旋转次数,或者一个我正在丢失的东西列表

下面的课是课本上的

公共类ColorImage扩展了BuffereImage{
公共彩色图像(BuffereImage图像){
super(image.getWidth()、image.getHeight()、TYPE_INT\u RGB);
int width=image.getWidth();
int height=image.getHeight();
对于(int y=0;y

我的问题是,如何旋转传入的图像以保持其状态?

除非您将自己限制为方形图像或180°旋转,否则您需要一个新对象,因为尺寸会发生变化。BuffereImage对象一旦创建,其尺寸是恒定的

如果我想让它保存状态,比如说,它已经应用的旋转次数,或者我正在失去的东西列表

您可以创建另一个类来保存其他信息以及ColorImage/BuffereImage,然后将ColorImage/BuffereImage类本身限制为仅保存像素。例如:

class ImageWithInfo {
    Map<String, Object> properties; // meta information
    File file; // on-disk file that we loaded this image from
    ColorImage image; // pixels
}
class ImageWithInfo{
映射属性;//元信息
File File;//在我们从中加载此映像的磁盘文件上
彩色图像;//像素
}
然后可以自由替换像素对象,同时保留其他状态。这样做通常是有帮助的。简而言之,这意味着不扩展类,而是创建一个单独的类,将原始类作为字段包含


还请注意,您的书中的轮换实现似乎主要用于学习目的。没关系,但是,如果您操作非常大的图像或以动画速度连续旋转图形,则会显示其性能限制。

如果您不将其包装到对象中,就像您正在做或发明自己的图像格式,或做类似速记的事情,并将状态信息隐藏在已使用的格式中,您真的无法做到。@arynaq I我想你的意思是“隐写术”。@EJP我非常肯定:D@DHT奇怪的教科书。旋转图像的正确方法是使用
java.awt.AffineTransform。
@EJP Objects First with java-一个使用BlueJYes的实用介绍,这似乎是唯一的方法。我特别欣赏额外的信息,“BuffereImage对象的尺寸,一旦创建,就会保持不变。”这确实让人大开眼界。