这就是我想要做的。运行应用程序时默认加载图像。有一种方法可以通过指定URL来加载用户想要的另一个图像。加载用户定义的图像时,默认图像仍然在后台,并且有一些方法可用于在图像上作为一个整体应用一些过滤器(我的意思是带有默认图像和用户加载图像的结果图像混合)然后我想将最终图像保存为jpg或png。
现在,我仍然是Flex的初学者,并且对所有画布,图像控件,bitmapdata等感到困惑。我想要帮助的是实现我想要的最佳方式是什么?我应该将默认图像加载到带有url / embed的图像中,还是应该将其作为BitmapData加载,如何加载第二个用户定义的图像?什么是混合两个图像的最佳方式?
答案 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");
}