Старый 27.12.2009, 19:49   #1   
Mоdеrаtоr
 
Аватар для DeniSS1
 
Сообщений: 1,617
Регистрация: 09.10.2007
Возраст: 33

DeniSS1 вне форума Не в сети
Flex - проблема с загрузкой картинки

Как реализовать следующую схему: пользователь щёлкает по кнопке, открывается окно для выбора файла картинки, затем эта картинка загружается во флешку и показывается в отдельном окне. Когда пользователь загружает ещё одну картинку, то в окне появляется ещё одна картинка, и т.д.

Я реализовываю так: создаю FileReference file, затем с помощью browse и load загружаю картинку и передаю file.data в качестве аргумента функции, которая в другом классе (точнее, MXML-модуле) создаёт img:Image=new Image(); img.source=data (data - это переданный file.data) Происходит крэш. В чём проблема?!

P.S. Если что - Flex 3 SDK 3.5 ActionScript 3.
  Ответить с цитированием
Старый 27.12.2009, 21:09   #2   
Форумец
 
Сообщений: 152
Регистрация: 03.07.2006

-=QWERTY=- вне форума Не в сети
Хорошо бы код в студию.
Вот такой точно работает на сдк 3.4 и 3.5, на других не пробовал.
Код:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
	applicationComplete="init()">
	<mx:Script>
		<![CDATA[
			import mx.controls.Image;
			private var fr:FileReference;
			private const imagesFilter:FileFilter = new FileFilter("Изображения", "*.jpg;*.gif;*.png");
			
			private function init():void
			{
				fr = new FileReference();
				fr.addEventListener(Event.SELECT, frSelectHandler);
				fr.addEventListener(Event.COMPLETE, frCompleteHandler);
			}
			
			private function frSelectHandler(e:Event):void
			{
				fr.load();
			}
			
			private function frCompleteHandler(e:Event):void
			{
				var i:Image = new Image();
				i.source = fr.data;
				images.addChild(i);
			}
		]]>
	</mx:Script>
	<mx:Button id="browse" click="fr.browse([imagesFilter])" x="10" y="10" label="Открыть"/>
	<mx:Tile x="10" y="40" id="images">
	</mx:Tile>
</mx:Application>
  Ответить с цитированием
Старый 27.12.2009, 23:23   #3   
Mоdеrаtоr
 
Аватар для DeniSS1
 
Сообщений: 1,617
Регистрация: 09.10.2007
Возраст: 33

DeniSS1 вне форума Не в сети
Ismail, там я тоже спросил.
-=QWERTY=-, код не привёл, потому что он на ноуте, ноут к сети не подключен, перепечатывать лень. Сейчас проверю, спасибо.
P.S. Спасибо, нашёл ошибку - я пытался обратиться к file.data раньше, чем картинка была загружена.

Последний раз редактировалось DeniSS1; 28.12.2009 в 16:42.
  Ответить с цитированием
Старый 29.12.2009, 13:22   #4   
Mоdеrаtоr
 
Аватар для DeniSS1
 
Сообщений: 1,617
Регистрация: 09.10.2007
Возраст: 33

DeniSS1 вне форума Не в сети
Возникла другая проблема - креша нет, а картинка не выводится. Вот код
В одном из классов:
Код:
_components[n].image=file.data
В классе компоненты:
Код:
private var _image:Image=new Image();
public function set image(img:ByteArray){
  _image.source=img;
  addChild(_image);
}
При этом спрайты, которые есть в том же классе, что и _image, addChild-ятся на ура. А вот загруженного изображения не видно.
  Ответить с цитированием
Старый 29.12.2009, 14:14   #5   
Форумец
 
Сообщений: 152
Регистрация: 03.07.2006

-=QWERTY=- вне форума Не в сети
А какой класс наследует твой класс?
  Ответить с цитированием
Старый 29.12.2009, 15:06   #6   
Mоdеrаtоr
 
Аватар для DeniSS1
 
Сообщений: 1,617
Регистрация: 09.10.2007
Возраст: 33

DeniSS1 вне форума Не в сети
-=QWERTY=-, Sprite
  Ответить с цитированием
Старый 29.12.2009, 16:19   #7   
Форумец
 
Сообщений: 152
Регистрация: 03.07.2006

-=QWERTY=- вне форума Не в сети
К сожалению всех тонкостей флекса не знаю, могу только предположить, что на спрайте не отображаются компоненты, которые наследуются от UIComponent. Может как то и можно добавить, но я пока не нашел способа.
  Ответить с цитированием
Старый 29.12.2009, 19:54   #8   
Mоdеrаtоr
 
Аватар для DeniSS1
 
Сообщений: 1,617
Регистрация: 09.10.2007
Возраст: 33

DeniSS1 вне форума Не в сети
Появился ещё вопрос по Flex-у:
(Внимание! Чтение этого текста опасно для вашего стиля программирования!)
Есть класс Figure со свойством coords:Array. В другом классе есть public static var figures[]. В третьем классе GraphicsLayer некая функция инициализирует значения figures[] объектами класса Figure
Код:
GraphicsLayer.figures[i]=new Figure();
GraphicsLayer.figures[i].coords[0]=new Point(mouseX, mouseY);
После этого в четвёртом классе я пытаюсь сохранить все свойства всех созданных Figure в XML. Но обращение
Код AS3:
Код:
GraphicsLayer.figures[0].coords[0].x
вызывает крэш, так как "термин не определён и не имеет свойств". Что произошло?!

Последний раз редактировалось DeniSS1; 30.12.2009 в 14:17.
  Ответить с цитированием
Старый 30.12.2009, 09:29   #9   
Кэп Улитка
 
Аватар для Yandex
 
Сообщений: 8,067
Регистрация: 04.05.2005
Возраст: 45

Yandex вне форума Не в сети
DeniSS1, AS3 не знаю, но сначала бы проверил, что figure[0] еще существует, как и метод coords[0].
  Ответить с цитированием
Старый 30.12.2009, 14:22   #10   
Mоdеrаtоr
 
Аватар для DeniSS1
 
Сообщений: 1,617
Регистрация: 09.10.2007
Возраст: 33

DeniSS1 вне форума Не в сети
всё проверил, с массивом всё в порядке, ошибка была в XML
А вот с загрузкой картинки проблема стоит очень остро - завтра последний день отправки работы на конкурс.
  Ответить с цитированием
Старый 30.12.2009, 23:52   #11   
Mоdеrаtоr
 
Аватар для DeniSS1
 
Сообщений: 1,617
Регистрация: 09.10.2007
Возраст: 33

DeniSS1 вне форума Не в сети
Нагуглил сам, http://www.flasher.ru/forum/showthre...F4%E0%E9%EB%E0
  Ответить с цитированием
Поиск в теме: 



Быстрый переход:

  Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Support by DrIQ & Netwind