18 #pragma warning(disable : 4293 4146)
21 #include <filament/Texture.h>
38 namespace visualization {
58 impl_->image_path_ = image_path;
60 if (impl_->image_data_) {
61 if (impl_->image_data_ && impl_->image_data_->width_ == 0 &&
62 impl_->image_data_->height_ == 0) {
63 impl_->image_data_.reset();
65 impl_->image_width_ = float(impl_->image_data_->width_);
66 impl_->image_height_ = float(impl_->image_data_->height_);
73 impl_->renderer_ =
nullptr;
78 impl_->image_data_ =
image;
79 if (impl_->image_data_) {
80 if (impl_->image_data_ && impl_->image_data_->width_ == 0 &&
81 impl_->image_data_->height_ == 0) {
82 impl_->image_data_.reset();
84 impl_->image_width_ = float(impl_->image_data_->width_);
85 impl_->image_height_ = float(impl_->image_data_->height_);
92 impl_->renderer_ =
nullptr;
97 impl_->timage_data_ =
image;
98 if (impl_->timage_data_->IsEmpty()) {
99 impl_->timage_data_.reset();
101 impl_->image_width_ = float(impl_->timage_data_->GetCols());
102 impl_->image_height_ = float(impl_->timage_data_->GetRows());
108 impl_->renderer_ =
nullptr;
117 auto& resource_manager =
119 auto tex_weak = resource_manager.GetTexture(texture_id);
120 auto tex_sh = tex_weak.lock();
124 impl_->image_width_ = uvw * float(tex_sh->getWidth());
125 impl_->image_height_ = uvh * float(tex_sh->getHeight());
131 impl_->renderer_ =
nullptr;
132 impl_->texture_ = texture_id;
136 if (impl_->renderer_) {
137 impl_->renderer_->RemoveTexture(impl_->texture_);
142 impl_->image_data_ =
image;
143 impl_->timage_data_.reset();
147 impl_->image_data_.reset();
148 impl_->timage_data_ =
image;
157 if (impl_->image_width_ != 0.0f && impl_->image_height_ != 0.0f) {
159 (constraints.
width < impl_->image_width_ ||
160 constraints.
height < impl_->image_height_)) {
161 float aspect = impl_->image_width_ / impl_->image_height_;
162 float w_at_height = float(constraints.
height) * aspect;
163 float h_at_width = float(constraints.
width) / aspect;
164 if (w_at_height <= constraints.
width) {
165 return Size(
int(std::round(w_at_height)), constraints.
height);
167 return Size(constraints.
width,
int(std::round(h_at_width)));
170 return Size(
int(std::round(impl_->image_width_)),
171 int(std::round(impl_->image_height_)));
182 if (impl_->image_data_) {
184 impl_->texture_ = renderer.
AddTexture(impl_->image_data_);
185 if (impl_->texture_ !=
187 impl_->renderer_ = &renderer;
188 impl_->image_width_ = float(impl_->image_data_->width_);
189 impl_->image_height_ = float(impl_->image_data_->height_);
190 params.image_size_changed =
true;
195 if (!renderer.
UpdateTexture(impl_->texture_, impl_->image_data_,
197 impl_->texture_ = renderer.
AddTexture(impl_->image_data_);
198 impl_->image_width_ = float(impl_->image_data_->width_);
199 impl_->image_height_ = float(impl_->image_data_->height_);
200 params.image_size_changed =
true;
203 impl_->image_data_.reset();
204 }
else if (impl_->timage_data_) {
206 impl_->texture_ = renderer.
AddTexture(*impl_->timage_data_.get());
207 if (impl_->texture_ !=
209 impl_->renderer_ = &renderer;
210 impl_->image_width_ = float(impl_->timage_data_->GetCols());
211 impl_->image_height_ = float(impl_->timage_data_->GetRows());
212 params.image_size_changed =
true;
217 if (!renderer.
UpdateTexture(impl_->texture_, *impl_->timage_data_,
220 renderer.
AddTexture(*impl_->timage_data_.get());
221 impl_->image_width_ = float(impl_->timage_data_->GetCols());
222 impl_->image_height_ = float(impl_->timage_data_->GetRows());
223 params.image_size_changed =
true;
226 impl_->timage_data_.reset();
229 params.texture = impl_->texture_;
231 float width_px = impl_->image_width_;
232 float height_px = impl_->image_height_;
234 switch (impl_->scaling_) {
243 impl_->u0_ + (impl_->u1_ - impl_->u0_) * w / width_px;
245 impl_->v0_ + (impl_->v1_ - impl_->v0_) * h / height_px;
257 float aspect = width_px / height_px;
258 float w_at_height = float(
frame.height) * aspect;
259 float h_at_width = float(
frame.width) / aspect;
260 if (w_at_height <=
frame.width) {
261 params.width = w_at_height;
265 params.height = h_at_width;
std::shared_ptr< core::Tensor > image
cmdLineReadable * params[]
UIImage(const char *image_path)
Size CalcPreferredSize(const LayoutContext &context, const Widget::Constraints &constraints) const
@ ASPECT
Scales to any size and aspect ratio.
@ ANY
No scaling, fixed size.
DrawParams CalcDrawParams(visualization::rendering::Renderer &renderer, const Rect &frame) const
void UpdateImage(std::shared_ptr< geometry::Image > image)
Scaling GetScaling() const
void SetScaling(Scaling scaling)
static FilamentResourceManager & GetResourceManager()
virtual bool UpdateTexture(TextureHandle texture, const std::shared_ptr< geometry::Image > image, bool srgb)=0
virtual TextureHandle AddTexture(const ResourceLoadRequest &request, bool srgb=false)=0
std::shared_ptr< geometry::Image > CreateImageFromFile(const std::string &filename)
REHandle< EntityType::Texture > TextureHandle
Generic file read and write utility for python interface.
std::shared_ptr< t::geometry::Image > timage_data_
UIImage::Scaling scaling_
visualization::rendering::TextureHandle texture_
visualization::rendering::Renderer * renderer_
std::shared_ptr< geometry::Image > image_data_
static const REHandle kBad