mirror of
https://github.com/cds-astro/aladin-lite.git
synced 2026-01-04 09:07:59 -08:00
HTMLImageElement for old safari implementation
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
use cgmath::{Vector2, Vector3};
|
||||
use cgmath::Vector3;
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct Bitmap<F>
|
||||
@@ -6,7 +6,6 @@ where
|
||||
F: ImageFormat + Clone,
|
||||
{
|
||||
pub image: web_sys::ImageBitmap,
|
||||
pub size: Vector2<i32>,
|
||||
format: std::marker::PhantomData<F>,
|
||||
}
|
||||
|
||||
@@ -17,10 +16,8 @@ where
|
||||
F: ImageFormat + Clone,
|
||||
{
|
||||
pub fn new(image: web_sys::ImageBitmap) -> Self {
|
||||
let size = Vector2::new(image.width() as i32, image.height() as i32);
|
||||
Self {
|
||||
image,
|
||||
size,
|
||||
format: std::marker::PhantomData,
|
||||
}
|
||||
}
|
||||
@@ -36,9 +33,4 @@ where
|
||||
.bind()
|
||||
.tex_sub_image_2d_with_u32_and_u32_and_image_bitmap(offset.x, offset.y, &self.image);
|
||||
}
|
||||
|
||||
// The size of the image
|
||||
/*fn get_size(&self) -> &Vector2<i32> {
|
||||
&self.size
|
||||
}*/
|
||||
}
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
/* ------------------------------------------------------ */
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct HTMLImage<F>
|
||||
where
|
||||
@@ -8,6 +7,19 @@ where
|
||||
image: web_sys::HtmlImageElement,
|
||||
format: std::marker::PhantomData<F>,
|
||||
}
|
||||
|
||||
impl<F> HTMLImage<F>
|
||||
where
|
||||
F: ImageFormat + Clone,
|
||||
{
|
||||
pub fn new(image: web_sys::HtmlImageElement) -> Self {
|
||||
Self {
|
||||
image,
|
||||
format: std::marker::PhantomData,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
use cgmath::Vector3;
|
||||
|
||||
use crate::image::format::ImageFormat;
|
||||
|
||||
@@ -178,6 +178,8 @@ impl ArrayBuffer for ArrayF64 {
|
||||
}
|
||||
}
|
||||
|
||||
use self::html::HTMLImage;
|
||||
|
||||
use super::Texture2DArray;
|
||||
pub trait Image {
|
||||
fn tex_sub_image_3d(
|
||||
@@ -270,6 +272,8 @@ pub enum ImageType {
|
||||
FitsImageR8ui { image: Fits<R8UI> },
|
||||
PngImageRgba8u { image: Bitmap<RGBA8U> },
|
||||
JpgImageRgb8u { image: Bitmap<RGB8U> },
|
||||
PngHTMLImageRgba8u { image: HTMLImage<RGBA8U> },
|
||||
JpgHTMLImageRgb8u { image: HTMLImage<RGB8U> },
|
||||
RawRgb8u { image: ImageBuffer<RGB8U> },
|
||||
RawRgba8u { image: ImageBuffer<RGBA8U> },
|
||||
RawR32f { image: ImageBuffer<R32F> },
|
||||
@@ -281,6 +285,8 @@ pub enum ImageType {
|
||||
#[cfg(feature = "webgl1")]
|
||||
pub enum ImageType {
|
||||
FitsImageR32f { image: Fits<R32F> },
|
||||
PngHTMLImageRgba8u { image: HTMLImage<RGBA8U> },
|
||||
JpgHTMLImageRgb8u { image: HTMLImage<RGB8U> },
|
||||
PngImageRgba8u { image: Bitmap<RGBA8U> },
|
||||
JpgImageRgb8u { image: Bitmap<RGB8U> },
|
||||
RawRgb8u { image: ImageBuffer<RGB8U> },
|
||||
@@ -311,6 +317,8 @@ impl Image for ImageType {
|
||||
ImageType::FitsImageR8ui { image } => image.tex_sub_image_3d(textures, offset),
|
||||
ImageType::PngImageRgba8u { image } => image.tex_sub_image_3d(textures, offset),
|
||||
ImageType::JpgImageRgb8u { image } => image.tex_sub_image_3d(textures, offset),
|
||||
ImageType::PngHTMLImageRgba8u { image } => image.tex_sub_image_3d(textures, offset),
|
||||
ImageType::JpgHTMLImageRgb8u { image } => image.tex_sub_image_3d(textures, offset),
|
||||
ImageType::RawRgb8u { image } => image.tex_sub_image_3d(textures, offset),
|
||||
ImageType::RawRgba8u { image } => image.tex_sub_image_3d(textures, offset),
|
||||
ImageType::RawR32f { image } => image.tex_sub_image_3d(textures, offset),
|
||||
|
||||
@@ -18,7 +18,6 @@ impl From<AllskyRequest> for RequestType {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
use crate::survey::Url;
|
||||
use wasm_bindgen_futures::JsFuture;
|
||||
use web_sys::{RequestInit, RequestMode, Response};
|
||||
|
||||
@@ -29,7 +29,7 @@ use std::future::Future;
|
||||
use wasm_bindgen::JsValue;
|
||||
impl<R> Request<R>
|
||||
where
|
||||
R: 'static,
|
||||
R: 'static
|
||||
{
|
||||
pub fn new<F>(f: F) -> Self
|
||||
where
|
||||
|
||||
@@ -1,8 +1,13 @@
|
||||
use crate::{healpix::cell::HEALPixCell};
|
||||
use al_core::image::format::ImageFormatType;
|
||||
use al_core::image::format::{ImageFormatType, RGB8U, RGBA8U};
|
||||
|
||||
use crate::downloader::{query};
|
||||
use al_core::image::{bitmap::Bitmap, fits::Fits, ImageType};
|
||||
use al_core::image::{
|
||||
//bitmap::Bitmap,
|
||||
fits::Fits,
|
||||
//raw::ImageBuffer,
|
||||
ImageType
|
||||
};
|
||||
|
||||
use super::{Request, RequestType};
|
||||
pub struct TileRequest {
|
||||
@@ -18,12 +23,10 @@ impl From<TileRequest> for RequestType {
|
||||
RequestType::Tile(request)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
use al_core::image::html::HTMLImage;
|
||||
use crate::survey::Url;
|
||||
use wasm_bindgen_futures::JsFuture;
|
||||
use web_sys::{Blob, RequestInit, RequestMode, Response};
|
||||
|
||||
use wasm_bindgen::JsCast;
|
||||
impl From<query::Tile> for TileRequest {
|
||||
// Create a tile request associated to a HiPS
|
||||
@@ -50,13 +53,45 @@ impl From<query::Tile> for TileRequest {
|
||||
debug_assert!(resp_value.is_instance_of::<Response>());
|
||||
let resp: Response = resp_value.dyn_into()?;
|
||||
|
||||
/*
|
||||
/// Bitmap version
|
||||
let blob = JsFuture::from(resp.blob()?).await?.into();
|
||||
let image = JsFuture::from(window.create_image_bitmap_with_blob(&blob)?)
|
||||
.await?
|
||||
.into();
|
||||
|
||||
let image = Bitmap::new(image);
|
||||
Ok(ImageType::JpgImageRgb8u { image })
|
||||
Ok(ImageType::JpgImageRgb8u { image })*/
|
||||
/*
|
||||
/// Raw image decoding
|
||||
|
||||
let buf = JsFuture::from(resp.array_buffer()?).await?;
|
||||
let raw_bytes = js_sys::Uint8Array::new(&buf).to_vec();
|
||||
let image = ImageBuffer::<RGB8U>::from_raw_bytes(&raw_bytes[..], 512, 512)?;
|
||||
|
||||
Ok(ImageType::RawRgb8u { image })
|
||||
*/
|
||||
// HTMLImageElement
|
||||
let blob = JsFuture::from(resp.blob()?).await?.into();
|
||||
let image = web_sys::HtmlImageElement::new().unwrap();
|
||||
let image_cloned = image.clone();
|
||||
|
||||
let html_img_elt_promise = js_sys::Promise::new(
|
||||
&mut (Box::new(move |resolve, reject| {
|
||||
let url = web_sys::Url::create_object_url_with_blob(&blob).unwrap();
|
||||
image_cloned.set_src(&url);
|
||||
image_cloned.set_onload(
|
||||
Some(&resolve)
|
||||
);
|
||||
image_cloned.set_onerror(
|
||||
Some(&reject)
|
||||
);
|
||||
}) as Box<dyn FnMut(js_sys::Function, js_sys::Function)>)
|
||||
);
|
||||
|
||||
let _ = JsFuture::from(html_img_elt_promise).await?;
|
||||
// The image has been resolved
|
||||
Ok(ImageType::JpgHTMLImageRgb8u { image: HTMLImage::<RGB8U>::new(image) })
|
||||
}),
|
||||
ImageFormatType::RGBA8U => Request::new(async move {
|
||||
let mut opts = RequestInit::new();
|
||||
@@ -69,6 +104,8 @@ impl From<query::Tile> for TileRequest {
|
||||
debug_assert!(resp_value.is_instance_of::<Response>());
|
||||
let resp: Response = resp_value.dyn_into()?;
|
||||
|
||||
/*
|
||||
/// Bitmap version
|
||||
let blob = JsFuture::from(resp.blob()?).await?.into();
|
||||
let image = JsFuture::from(window.create_image_bitmap_with_blob(&blob)?)
|
||||
.await?
|
||||
@@ -76,6 +113,36 @@ impl From<query::Tile> for TileRequest {
|
||||
|
||||
let image = Bitmap::new(image);
|
||||
Ok(ImageType::PngImageRgba8u { image })
|
||||
*/
|
||||
/*
|
||||
/// Raw image decoding
|
||||
let buf = JsFuture::from(resp.array_buffer()?).await?;
|
||||
let raw_bytes = js_sys::Uint8Array::new(&buf).to_vec();
|
||||
let image = ImageBuffer::<RGBA8U>::from_raw_bytes(&raw_bytes[..], 512, 512)?;
|
||||
|
||||
Ok(ImageType::RawRgba8u { image })
|
||||
*/
|
||||
// HTMLImageElement
|
||||
let blob = JsFuture::from(resp.blob()?).await?.into();
|
||||
let image = web_sys::HtmlImageElement::new().unwrap();
|
||||
let image_cloned = image.clone();
|
||||
|
||||
let html_img_elt_promise = js_sys::Promise::new(
|
||||
&mut (Box::new(move |resolve, reject| {
|
||||
let url = web_sys::Url::create_object_url_with_blob(&blob).unwrap();
|
||||
image_cloned.set_src(&url);
|
||||
image_cloned.set_onload(
|
||||
Some(&resolve)
|
||||
);
|
||||
image_cloned.set_onerror(
|
||||
Some(&reject)
|
||||
);
|
||||
}) as Box<dyn FnMut(js_sys::Function, js_sys::Function)>)
|
||||
);
|
||||
|
||||
let _ = JsFuture::from(html_img_elt_promise).await?;
|
||||
// The image has been resolved
|
||||
Ok(ImageType::PngHTMLImageRgba8u { image: HTMLImage::<RGBA8U>::new(image) })
|
||||
}),
|
||||
ImageFormatType::R32F => Request::new(async move {
|
||||
let mut opts = RequestInit::new();
|
||||
|
||||
Reference in New Issue
Block a user