![]() |
|
||||||||||
|
|||||
|
Регистрация: Nov 2006
Сообщений: 21
|
etc как раз идея в том и заключается чтобы не грузить всю панораму целиком,а общий вид,меньшего разрешения чем оригинал
|
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
А я и говорю, что если этим занимается AS3, т.е. клиентская часть, то придёться грузить вообще всё.
Этим должна заниматься серверная часть. В простейшем случае php с GD библиотекой. |
|
|||||
|
Цитата:
__________________
А что я? Я сам в шоке! Последний раз редактировалось ALiEN_2OO6; 20.12.2006 в 18:11. |
|
|||||
|
Цитата:
__________________
А что я? Я сам в шоке! |
|
|||||
|
Вот на скорую руку накидал:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete = "initApp()">
<mx:Image x="10" y="10" width="711" height="606" id="myImage"/>
<mx:Script>
<![CDATA[
public function initApp():void {
var a = new StreamLoader(new URLRequest('http://lab.orangeflash.eu/flex2/examples/partialImageloader/Image2.jpg'));
myImage.addChild(a);
//myImage.scaleX = 0.1;
//myImage.scaleY = 0.1;
}
]]>
</mx:Script>
</mx:Application>
package
{
import flash.display.Loader;
import flash.events.*;
import flash.net.*;
import flash.utils.*;
import flash.system.LoaderContext;
[Event(name = "complete", type="flash.events.Event")]
[Event(name = "progress", type="flash.events.ProgressEvent")]
[Event(name = "open", type="flash.events.Event")]
[Event(name = "ioError", type="flash.events.IOErrorEvent")]
public class StreamLoader extends Loader
{
protected var stream:URLStream = new URLStream();
protected var bytes:ByteArray = new ByteArray();
protected var cont:LoaderContext;
import mx.core.UIComponent
/**
* Constructor, creates new StreamLoader
*
*/
public function StreamLoader(request:URLRequest = null)
{
if(request != null)
{
loadStream(request);
}
}
/**
* Method, loads images as stream
*
* @param request URLRequest
* @param context LoaderContext, default value is null
*/
public function loadStream(request:URLRequest, context:LoaderContext = null):void
{
cont = context;
stream.load(request);
stream.addEventListener(Event.COMPLETE,onStreamComplete);
stream.addEventListener(ProgressEvent.PROGRESS,onStreamProgress);
stream.addEventListener(Event.OPEN,onStreamOpen);
stream.addEventListener(IOErrorEvent.IO_ERROR,onStreamIOError);
stream.addEventListener(HTTPStatusEvent.HTTP_STATUS,onStreamHTTPStatus);
stream.addEventListener(SecurityErrorEvent.SECURITY_ERROR,onStreamSecurityError);
}
/**
* @private
*/
private function onStreamComplete(event:Event):void
{
updateBytes();
dispatchEvent(new Event(event.type, event.bubbles, event.cancelable));
setTimeout(confirmBytesLoaded,1);
}
/**
* @private
*/
private function onStreamProgress(event:ProgressEvent):void
{
updateBytes();
if(bytes.length > 20000)stream.close();
dispatchEvent(new ProgressEvent(event.type, event.bubbles,
event.cancelable, event.bytesLoaded,
event.bytesTotal));
}
/**
* @private
*/
private function onStreamIOError(event:IOErrorEvent):void
{
dispatchEvent(new IOErrorEvent(event.type, event.bubbles, event.cancelable, event.text));
}
/**
* @private
*/
private function onStreamSecurityError(event:SecurityErrorEvent):void
{
dispatchEvent(new SecurityErrorEvent(event.type, event.bubbles, event.cancelable, event.text));
}
/**
* @private
*/
private function onStreamHTTPStatus(event:HTTPStatusEvent):void
{
dispatchEvent(new HTTPStatusEvent(event.type, event.bubbles, event.cancelable, event.status));
}
/**
* @private
*/
private function onStreamOpen(event:Event):void
{
dispatchEvent(new Event(event.type, event.bubbles, event.cancelable));
}
/**
* @private
*/
private function updateBytes():void
{
stream.readBytes(bytes, bytes.length);
if(bytes.length > 0)
{
loadBytes(bytes,cont);
}
}
/**
* @private
*
* Method confirms that all bytes loaded, and closes stream
*/
private function confirmBytesLoaded():void
{
updateBytes();
stream.close();
}
}
}
__________________
А что я? Я сам в шоке! |
|
|||||
|
P.S. пронаблюдать работу - можно так же сниффером.
__________________
А что я? Я сам в шоке! |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Понятно, добавил одну строчку в класс Nirth-а
![]() А то, что при этом нужно ещё ресайзить картинку до верных размеров, а? |
|
|||||
|
Цитата:
P.S. на счет класса - выше есть линки, именно с ресурса Nirth-a так что думаю он не расстроится.
__________________
А что я? Я сам в шоке! |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Зависимость scaleX, scaleY нелинейна от кол-ва байт. Вот с этим и будут проблемы. Вообще, лучше конечно заюзать GD и Flash 8, сейчас это актуальнее.
|
|
|||||
|
Если продолжить тему, то конечно ты прав - "лучше конечно заюзать GD и Flash 8", и scaleX scaleY тут не помогут.. Это только как пример.
Ну а вообще, конечно, если делать, то делать так: 1. Четко определять необходимый размер подгружаемых данных. 2. Вовремя, закрывать поток, по загрузке колличества байт из п.1 3. Распарсить полученный байтовый массив. Пока не понятно как это сделать, если есть идеи, поделитесь. Если вообще тема актуальна. =)))
__________________
А что я? Я сам в шоке! Последний раз редактировалось ALiEN_2OO6; 20.12.2006 в 19:07. |
![]() |
![]() |
Часовой пояс GMT +4, время: 05:23. |
|
|
« Предыдущая тема | Следующая тема » |
|
|