Как скачать и отобразить картинку с сайта?

  1. 3 г. назад

    Уважаемые знатоки, как скачать и отобразить картинку с сайта?

  2. devolonter

    6 Jun 2014 Администратор

    Такие целевые платформы как: Android, iOS, HTML5 и Flash, позволяют загружать изображения по сети с помощью функции LoadImage. Конечно блокирование основного потока — не лучшая идея, поэтому загружать изображения лучше через LoadImageAsync.

    HTML5 и Flash требуют дополнительных настроек удаленного сервера, если его домен отличается от домена на котором размещена игра (cм. Cross-origin resource sharing ). Без этих настроек в HTML5 часть функционала для изображений будет недоступна (например, SetColor), а Flash бросит исключение.

    Для тех платформ, которые не поддерживают загрузку изображения по сети, можно попробовать использовать связку HttpRequest и FileStream. Сначала загружаем данные изображения посети, затем записываем их во внутренний файл и загружаем с помощью метода LoadImage. К сожалению, т.к. информацию можно получить только в виде текста — метод является небезопасным и полученное изображение может оказаться битым… Тем не менее, в Desktop таргете данный метод работает. Можно также попробовать использовать сокеты вместо HttpRequest

    Прилагаю небольшой пример кода для ориентира:

    Import mojo
    
    #If TARGET = "android" Or TARGET = "ios" Or TARGET = "html5" Or TARGET = "flash"
    
    Class MyApp Extends App Implements IOnLoadImageComplete
    
            Field image:Image
    
            Method OnCreate()
                    LoadImageAsync("http://monkeycoder.co.nz/img/logo.png", 1, Image.MidHandle, Self)
                    SetUpdateRate 60
            End
            
            Method OnUpdate()
                    UpdateAsyncEvents
            End
            
            Method OnRender()
                    Cls
                    
                    If image Then
                            DrawImage image, DeviceWidth() / 2, DeviceHeight() / 2
                    Else
                            DrawText "Image loading...", 0, 0
                    End
            End
            
            Method OnLoadImageComplete:Void( image:Image,path:String,source:IAsyncEventSource )
                    If image Then Print "OK!" Else Print "ERR"
                    Self.image=image
            End
    
    End
    
    #Else
    
    Import brl.httprequest
    Import brl.filestream
    
    Class MyApp Extends App Implements IOnHttpRequestComplete
    
            Field image_req:HttpRequest
            
            Field image:Image
            
            Method OnHttpRequestComplete:Void( req:HttpRequest )
                    If req.Status = 200 Then Print "OK!" Else Error "ERR"
                    
                    Local img_sream:FileStream = FileStream.Open("monkey://internal/logo.png", "w")
                    img_sream.WriteString(req.ResponseText())
                    
                    image = LoadImage("monkey://internal/logo.png", 1, Image.MidHandle)
            End
            
            Method OnCreate()       
                    image_req = New HttpRequest("GET", "http://monkeycoder.co.nz/img/logo.png", Self)
                    image_req.Send
                            
                    SetUpdateRate 60
            End
            
            Method OnUpdate()
                    UpdateAsyncEvents
            End
    
            Method OnRender()
                    Cls
                    If image Then
                            DrawImage image, DeviceWidth() / 2, DeviceHeight() / 2
                    Else
                            DrawText "Image loading...", 0, 0
                    End
            End     
    End
    
    #End
    
    
    Function Main()
            New MyApp
    End

или зарегистрируйтесь чтобы комментировать!