调整图像的比例

迈克·奥廷克(Mike Ottink)

我必须为我的学校项目进行处理。因此,我将图片加载到一个数组中,然后在一个新类中添加另一个数组,每次创建该类时,我都会将图片放入该数组中。每次创建该类时,我都会将图像放置在不同的位置,并且效果很好,但一旦尝试调整这些图像的比例,它也会同时调整其他类中图像的比例。我认为它会更改所有这些图像的比例,因为它会更改我的第一个数组中图像的比例,并且我不会创建新的图像。有办法解决这个问题吗?这是我的代码。这是我加载图像的地方:

class ItemLoader
{
  PImage[] itemArray;
  ArrayList itemCollection; 
  String itemType;
  int amountOfFrames;
  int amountOfItems = 1;

  ItemLoader()
  {
    itemCollection = new ArrayList();
    LoadImage();
  }

  void LoadImage()
  {
    for(int ii = 0; ii < amountOfItems; ii++)
    {
     AssignItemType(ii);
     itemArray = new PImage[amountOfFrames];

      for(int i = 0; i < amountOfFrames; i ++)
      {
        String filenaam = itemType + nf(i, 5) + ".png";
        itemArray[i] = loadImage(filenaam);
      }
    itemCollection.add(itemArray);
    }
  }

  void AssignItemType(int itemNumber)
  {
    switch(itemNumber)
    {
      case 0: itemType = "Leaves"; amountOfFrames = 21;
      break;

      case 1: itemType = "Apple";
      break;

      case 2: itemType = "Bannana";
      break;

      case 3: itemType = "Pear";
      break;

      case 4: itemType = "Cherry";
      break;

      case 5: itemType = "Owl";
      break;

      case 6: itemType = "Bird";
      break;
    }
  }
}

然后这是当我创建该类的实例时:

itemList.add(new ItemSpawn(randomX,randomY,0, strokeThickness,itemLoader.itemCollection));

这是我遍历数组以对图像进行动画处理的地方:

class ItemSpawn
{
  PImage[] animationFrames;
  PImage lastFrame;
  float frameCounter;

  int x_loc;
  int y_loc;
  float ImageScale = 0;
  int ImageRotation = 0;  

 ItemSpawn(int x_loc_par, int y_loc_par, int _itemType, float _strokeSize, ArrayList _tempArray)
 {
  animationFrames = (PImage[]) _tempArray.get(_itemType);
  x_loc = x_loc_par;
  y_loc = y_loc_par;
  ApplyScaleRotation();
 }

  void ApplyScaleRotation()
  {
    ImageScale = 0.5;
    ImageRotation = int(random(0,360));

    for(int i = 0; i < animationFrames.length; i++)
    {
      animationFrames[i].resize(int(animationFrames[i].width * ImageScale), int(animationFrames[i].height * ImageScale));
    }    
  }

  void LoopAnimation()
  {
  int convertCount = int(round(frameCounter));

    if(convertCount < animationFrames.length - 1)
    {
     image(animationFrames[convertCount],x_loc - (animationFrames[convertCount].width/2) ,y_loc - (animationFrames[convertCount].height/2));
     frameCounter += 0.4;

    }else
    {
      image(animationFrames[animationFrames.length - 1],x_loc - (animationFrames[convertCount].width/2),y_loc - (animationFrames[convertCount].height/2));
    }
  }
}
普尔兹梅克·赫特尔

在您的代码中,ItemSpawn类的每个对象都使用相同的 PImage[]数组。当您在一个ItemSpawn实例中更改图像时-所有其他实例均会看到此更改。

每个ItemSpawn对象都应具有图像的专用副本-然后它可以安全地修改图像。

考虑这样的简化类:

class X {
    int[] array;

    X(int[] array) {
        this.array = array;
    }
    void modify() {
        array[0] = 99;
    }
}

我们可以使用相同的数组创建2个此类的不同对象(x1和x2)

int[] values = {1,2,3,4};
X x1 = new X(values);
X x2 = new X(values);

接下来x1修改数组:

x1.modify();

println(x1.array[0]);   // output: 99
println(x2.array[0]);   // output: 99

解决方案是为类的PImage[]每个对象创建数组的深层副本ItemSpawn

ItemSpawn(int x_loc_par, int y_loc_par, int _itemType, float _strokeSize, ArrayList _tempArray)
{

  // old:
  // animationFrames = (PImage[]) _tempArray.get(_itemType);

  // new:
  PImage[] images = _tempArray.get(_itemType);
  animationFrames = new PImage[images.length];  // create new array with the same length

  // copy all images
  for (int i = 0; i < images.length; i++) {
      PImage img = images[i];
      animationFrames[i] = img.get();  // returns copy of this image
  }
  ...
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

调整图像的比例

来自分类Dev

在Firefox中按比例调整图像大小

来自分类Dev

如何调整图像尺寸以保持比例

来自分类Dev

自动调整图像大小以适合比例,但不拉伸

来自分类Dev

保持按钮位置与调整图像大小成比例

来自分类Dev

使用Python调整图像大小,同时保持其比例

来自分类Dev

在Matlab中调整图像大小(绘制正方形/比例)

来自分类Dev

调整UIBarButtonItem的Imageview的大小,以便按比例缩小图像(iOS)

来自分类Dev

调整为屏幕宽度约束比例的背景图像

来自分类Dev

Facebook图像调整大小而不会丢失其比例

来自分类Dev

调整图像大小,保持比例,并有尺寸限制

来自分类Dev

html:调整文本大小以与图像保持相同比例

来自分类Dev

调整一个大小后,用鼠标调整其余图像的大小,并保持比例

来自分类Dev

iOS如何根据实际图像比例调整图像大小并指定自定义大小?

来自分类Dev

如何使用Laravel中的Intervention图像处理库以自定义比例调整图像大小

来自分类Dev

iOS如何根据实际图像比例调整图像大小并指定自定义大小?

来自分类Dev

DataGridView-比例调整

来自分类Dev

如果图像大于文本框,如何调整图像大小,但如果图像小于文本框,则不增加缩放比例

来自分类Dev

Bootstrap的img-circle CSS类将图像大小调整为其他比例

来自分类Dev

如何使网站(图像/表格)按比例调整大小以适合屏幕尺寸

来自分类Dev

我们可以在不调整大小的情况下对图像使用缩放比例吗?

来自分类Dev

如何将图像的宽度和高度调整为100 x 100的保留比例?

来自分类Dev

按比例调整由图像组成的水平无序列表菜单的大小

来自分类Dev

在Qt中的鼠标移动事件上调整矩形的png图像的大小/比例

来自分类Dev

如何使用ffmpeg调整视频大小,缩小比例并放置在稍大的静态图像中?

来自分类Dev

根据图像距div底部的距离按比例调整margin-top

来自分类Dev

背景图像以调整大小为中心,缩放比例保持不变

来自分类Dev

如何使用可调整大小的jQuery在x和y轴上以正确的比例调整图像大小

来自分类Dev

根据屏幕比例调整大小

Related 相关文章

  1. 1

    调整图像的比例

  2. 2

    在Firefox中按比例调整图像大小

  3. 3

    如何调整图像尺寸以保持比例

  4. 4

    自动调整图像大小以适合比例,但不拉伸

  5. 5

    保持按钮位置与调整图像大小成比例

  6. 6

    使用Python调整图像大小,同时保持其比例

  7. 7

    在Matlab中调整图像大小(绘制正方形/比例)

  8. 8

    调整UIBarButtonItem的Imageview的大小,以便按比例缩小图像(iOS)

  9. 9

    调整为屏幕宽度约束比例的背景图像

  10. 10

    Facebook图像调整大小而不会丢失其比例

  11. 11

    调整图像大小,保持比例,并有尺寸限制

  12. 12

    html:调整文本大小以与图像保持相同比例

  13. 13

    调整一个大小后,用鼠标调整其余图像的大小,并保持比例

  14. 14

    iOS如何根据实际图像比例调整图像大小并指定自定义大小?

  15. 15

    如何使用Laravel中的Intervention图像处理库以自定义比例调整图像大小

  16. 16

    iOS如何根据实际图像比例调整图像大小并指定自定义大小?

  17. 17

    DataGridView-比例调整

  18. 18

    如果图像大于文本框,如何调整图像大小,但如果图像小于文本框,则不增加缩放比例

  19. 19

    Bootstrap的img-circle CSS类将图像大小调整为其他比例

  20. 20

    如何使网站(图像/表格)按比例调整大小以适合屏幕尺寸

  21. 21

    我们可以在不调整大小的情况下对图像使用缩放比例吗?

  22. 22

    如何将图像的宽度和高度调整为100 x 100的保留比例?

  23. 23

    按比例调整由图像组成的水平无序列表菜单的大小

  24. 24

    在Qt中的鼠标移动事件上调整矩形的png图像的大小/比例

  25. 25

    如何使用ffmpeg调整视频大小,缩小比例并放置在稍大的静态图像中?

  26. 26

    根据图像距div底部的距离按比例调整margin-top

  27. 27

    背景图像以调整大小为中心,缩放比例保持不变

  28. 28

    如何使用可调整大小的jQuery在x和y轴上以正确的比例调整图像大小

  29. 29

    根据屏幕比例调整大小

热门标签

归档