Некоторые вопросы, касающиеся работы с изображениями во Flex - PullRequest
1 голос
/ 30 апреля 2011

Вот что я хочу сделать.Изображение загружается по умолчанию при запуске приложения.Существует способ загрузить другое изображение, которое хочет пользователь, указав URL.Когда пользовательское изображение загружено, изображение по умолчанию все еще находится в фоновом режиме, и есть некоторый метод, который будет использоваться для применения некоторых фильтров к изображению в целом (я имею в виду результирующее изображение с изображением по умолчанию и загруженным пользователем изображением).смешанный), а затем я хочу сохранить окончательное изображение в формате JPG или PNG.

Теперь я все еще новичок во Flex, и меня все путают со всеми холстами, управлением изображениями, растровыми данными и т. Д. Где мне нужна помощь, как лучше всего реализовать то, что я хочу?Как загрузить изображение по умолчанию в изображение с помощью url / embed или как BitmapData? Как загрузить второе определенное пользователем изображение?Какой лучший способ смешать два изображения?

1 Ответ

0 голосов
/ 30 апреля 2011

Вы можете оставить изображение по умолчанию как встроенное и получить его 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 instace для локальной файловой системы:

/**
 * 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");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...