Задача: сохранить картинку (например, снимок мувиклипа) из флеш-ролика на компьютер пользователя средствами ActionScript 2.0.
Да, проблема... Но если вам требуется только возможность последующей загрузки данного изображения в флеш-ролик, то тогда проблемы нет. Будем использовать SharedObject и BitmapData.
Код ActionScript 2.0:
/*
импортируем класс BitmapData
*/
import flash.display.BitmapData;
/*
создаём локальный общий объект для хранения данных
*/
var so:SharedObject = SharedObject.getLocal("myimage", "/");
/*
функция для сохранения картинки
в качестве параметра указываем мувиклип, изображение которого надо сохранить
*/
function save_image(mov, num) {
var bitmapData:BitmapData = new BitmapData(mov._width, mov._height);
bitmapData.draw(mov);
var arr:Array = new Array();
for (i=0; i<=mov._width; i++) {
for (j=0; j<=mov._height; j++) {
arr.push(bitmapData.getPixel(i, j));
}
}
so.data.arr = arr;
so.data.w = mov._width;
so.data.h = mov._height;
}
/*
функция для загрузки картинки
*/
function load_image(num) {
if (so.data.arr != undefined && so.data.w != undefined && so.data.h != undefined) {
var arr:Array = so.data.arr;
var w = so.data.w;
var h = so.data.h;
var count = 0;
var bitmapData:BitmapData = new BitmapData(w, h);
for (i=0; i<=w; i++) {
for (j=0; j<=h; j++) {
bitmapData.setPixel(i, j, arr[count]);
count++;
}
}
this.createEmptyMovieClip("cont", this.getNextHighestDepth());
cont.attachBitmap(bitmapData, cont.getNextHighestDepth());
cont._x = 300;
cont._y = 50;
} else {
trace("Данные повреждены!");
}
}
Всё! Теперь у вас есть две функции. Первая сохраняет изображение в локальное хранилище, а вторая загружает его. Работу данного скрипта демонстрирует следующее флеш-приложение:
Проверить его работу просто. Кликаем по большому серому мувику и на нём появляется случайное число. Потом жмём «save». Теперь снимок с мувика со случайным числом помещён в память. Можем нажать «load» и убедиться, что картинка действительно сохранилась. Хорошо, но нам надо, чтобы изображение хранилось и между сеансами работы с флеш-приложением. Именно так дело и обстоит. Перезагружаем страницу с флеш-роликом и, не кликая по кнопке «save», нажимаем кнопку «load». Загрузилось изображение из предшествующего сеанса работы флеш-приложения (обратите внимание на рандомное число на картинке - я его не случайно добавил в мувик).
Да, у этого способа много недостатков, но он работает. А это лучшее его достоинство. И, если есть желание, то этот скрипт можно совершенствовать и оптимизировать.
ВАЖНО! Чтобы приведённое выше решение работало, требуется выделить в локальном хранилище (LSO) достаточный объём памяти. В этом вам неоценимую помощь может оказать метод showSettings().
Исходник приведённого здесь флеш-приложения прилагается (под Macromedia Flash 8).