【问题标题】:How to scale and clip a BitmapImage in Flex 4.5如何在 Flex 4.5 中缩放和裁剪 BitmapImage
【发布时间】:2011-11-06 05:06:27
【问题描述】:

这是我的问题,我需要将图像缩放和剪辑成正方形大小的图块以放入图块列表。这是我希望它的工作方式:

  1. 我希望我的所有图块都为 300px x 300px。

  2. 对于每个图像,我想使用“信箱” scaleMode 缩放较短的边(宽度或高度)以适应图块(以便保持纵横比)。

  3. 然后我想将图像定位在中心,并剪掉两侧或顶部和底部留下的任何东西。

这里有一个例子来帮助澄清:

  • 我有一个宽度=600 像素、高度=1200 像素的图像。首先,我想将图像缩放为 width=300px 和 height=600px(注意保持纵横比),然后将图像垂直居中并将图像裁剪为 300 x 300。

这可能吗?这实际上是在许多基于照片的网站中显示方形缩略图的一种非常标准的方式,但我找不到让它在 flex 中工作的方法。

任何帮助将不胜感激,谢谢!

2012 年 6 月更新

以防万一有人现在发现此线程,此问题已在最新版本的 Flex SDK 中得到解决。在火花图像对象上有一个新的“缩放”缩放模式,它完全符合我在这里的要求。

【问题讨论】:

    标签: apache-flex actionscript-3 flex4.5


    【解决方案1】:

    拍摄您的大图并在BitmapData 上使用缩放和重新定位进行绘制:

    const zoom:Number = Math.max(THUMB_WIDTH/image.width, THUMB_HEIGHT/image.height);
    const x:int = (THUMB_WIDTH - image.width*zoom)/2;
    const y:int = (THUMB_HEIGHT - image.height*zoom)/2;
    var matrix:Matrix = new Matrix;
    matrix.scale(zoom, zoom);
    matrix.translate(x, y);
    
    var _thumbBitmap:BitmapData = new BitmapData(THUMB_WIDTH, THUMB_HEIGHT, false, 0xFFFFFF);
    _thumbBitmap.draw(image, matrix, null, null, null, true);
    

    然后将生成的BitmapData 分配给BitmapImage 的源。

    更多:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/BitmapData.html#draw%28%29 http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/spark/primitives/BitmapImage.html#source

    【讨论】:

    • 感谢这段精彩且非常有用的编码。只有两个小问题:1)我们需要使用 Math.max 而不是 Math.min,否则整个图像都适合缩略图。 2) 此外,matrix.translate 必须在缩放之后应用,否则图像将无法正确居中。除此之外,它的效果非常好。
    • 好的,这是有用的注释,我编辑了答案。如果您觉得有帮助,请不要忘记检查答案是否正确。
    • 有没有机会告诉我如何扩展 Image 类,以便我可以添加一个名为“fillAndClip”的新 scaleMode,并像这样绘制它?我真的很感激... :-)
    • @tom__26,您应该重写两个受保护的方法 - measureupdateDisplayList。第一个计算 ui 对象的大小,第二个 - 应用更改并绘制结果图像。看BitmapImage的源码,不复杂,很直接。
    • 谢谢,我试试。我只是希望我可以覆盖 Inspectable 属性“scaleMode”,以便我可以添加另一个值....我对 flex 还是有点陌生​​ :-)
    猜你喜欢
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-21
    • 2017-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多