有关Flex中图像处理的一些问题

时间:2011-04-30 07:18:42

标签: flex bitmapdata

这就是我想要做的。运行应用程序时默认加载图像。有一种方法可以通过指定URL来加载用户想要的另一个图像。加载用户定义的图像时,默认图像仍然在后台,并且有一些方法可用于在图像上作为一个整体应用一些过滤器(我的意思是带有默认图像和用户加载图像的结果图像混合)然后我想将最终图像保存为jpg或png。

现在,我仍然是Flex的初学者,并且对所有画布,图像控件,bitmapdata等感到困惑。我想要帮助的是实现我想要的最佳方式是什么?我应该将默认图像加载到带有url / embed的图像中,还是应该将其作为BitmapData加载,如何加载第二个用户定义的图像?什么是混合两个图像的最佳方式?

1 个答案:

答案 0 :(得分:0)

您可以将默认图像保留为嵌入图像,并检索其BitmapData以进一步处理。

加载用户定义的图像后,检索其BitmapData,并在用户定义的图像上绘制嵌入的图像:

/**
 * An embedded image's class (your default image)
 */
[Embed(source="/assets/logo.png")]
public static var Logo:Class;

/**
 * @param bitmapData: The user-defined BitmapData that you want to modify
 * @param matrix: The transofrmation matrix applied to the resulting BitmapData 
 */
public function getCustomBitmapData(bitmapData:BitmapData, matrix:Matrix):BitmapData
{
    // Initialize and drawing the resulting BitmapData's first layer 
    var result:BitmapData = new BitmapData(bitmapData.height, bitmapData.width);
    result.draw(bitmapData, matrix);

    // Load the BitmapData of the embedded Logo image
    var bitmapAsset:BitmapAsset = new Logo();
    var logoBd:BitmapData = bitmapAsset.bitmapData;

    // Draw the logo over the result with an alpha of 0.3
    result.draw(logoBd, matrix, new ColorTransform(1, 1, 1, .3));
    //TODO: You should play with the size of the images, apply filters, etc.

    return result;
}

然后,您可以将生成的BitmapData实例保存到本地文件系统:

/**
 * Save the BitmapData to a local file
 * @param bitmapData: the data to save
 */
public function saveBitmapData(bitmapData:BitmapData):void
{
    // Initialize the encoder
    var pngEncoder:PNGEncoder = new PNGEncoder();
    // Encode the BitmapData and save its byte array
    var imageBytes:ByteArray = pngEncoder.encode(bitmapData);
    // Create a new FileReference:
    var imageFile:FileReference = new FileReference();
    // Save the file:
    imageFile.save(imageBytes, "myimage.png");
}