Implement ManagedImage and codec abstraction (#38)

This commit is contained in:
2026-08-09 02:11:02 +00:00
parent d980692933
commit 2c806d80ff
9 changed files with 850 additions and 92 deletions

View File

@@ -6,95 +6,30 @@
#![allow(non_snake_case)]
/// C# type: `T:LibreMetaverse.Imaging.ITextureCodec`.
pub trait ITextureCodec {
/// C# member: `M:LibreMetaverse.Imaging.ITextureCodec.Decode(System.IO.Stream)`.
fn decode(
&self,
stream: Box<dyn libremetaverse_types::compat::ReadWrite + Send>,
) -> Result<libremetaverse_imaging::ManagedImage, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Imaging.ITextureCodec.Decode(System.IO.Stream)",
)
}
}
/// C# member: `M:LibreMetaverse.Imaging.ITextureCodec.Decode(System.IO.Stream)`.
pub use crate::managed_image::ITextureCodec;
/// C# type: `T:LibreMetaverse.Imaging.ManagedImage`.
pub struct ManagedImage {
/// C# member: `F:LibreMetaverse.Imaging.ManagedImage.Alpha`.
pub alpha: Vec<u8>,
/// C# member: `F:LibreMetaverse.Imaging.ManagedImage.Blue`.
pub blue: Vec<u8>,
/// C# member: `F:LibreMetaverse.Imaging.ManagedImage.Bump`.
pub bump: Vec<u8>,
/// C# member: `F:LibreMetaverse.Imaging.ManagedImage.Channels`.
pub channels: libremetaverse_imaging::ManagedImageImageChannels,
/// C# member: `F:LibreMetaverse.Imaging.ManagedImage.Green`.
pub green: Vec<u8>,
/// C# member: `F:LibreMetaverse.Imaging.ManagedImage.Height`.
pub height: i32,
/// C# member: `F:LibreMetaverse.Imaging.ManagedImage.Red`.
pub red: Vec<u8>,
/// C# member: `F:LibreMetaverse.Imaging.ManagedImage.Width`.
pub width: i32,
data: Vec<u8>,
}
impl ManagedImage {
/// C# member: `M:LibreMetaverse.Imaging.ManagedImage.#ctor(System.Int32,System.Int32,LibreMetaverse.Imaging.ManagedImage.ImageChannels)`.
pub fn new(
width: i32,
height: i32,
channels: libremetaverse_imaging::ManagedImageImageChannels,
) -> Result<Self, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Imaging.ManagedImage.#ctor(System.Int32,System.Int32,LibreMetaverse.Imaging.ManagedImage.ImageChannels)",
)
}
/// C# member: `M:LibreMetaverse.Imaging.ManagedImage.Clear`.
pub fn clear(&mut self) -> Result<(), crate::Error> {
libremetaverse_types::not_implemented("M:LibreMetaverse.Imaging.ManagedImage.Clear")
}
/// C# member: `M:LibreMetaverse.Imaging.ManagedImage.Clone`.
pub fn clone(&self) -> Result<libremetaverse_imaging::ManagedImage, crate::Error> {
libremetaverse_types::not_implemented("M:LibreMetaverse.Imaging.ManagedImage.Clone")
}
/// C# member: `M:LibreMetaverse.Imaging.ManagedImage.ConvertChannels(LibreMetaverse.Imaging.ManagedImage.ImageChannels)`.
pub fn convert_channels(
&mut self,
channels: libremetaverse_imaging::ManagedImageImageChannels,
) -> Result<(), crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Imaging.ManagedImage.ConvertChannels(LibreMetaverse.Imaging.ManagedImage.ImageChannels)",
)
}
/// C# member: `M:LibreMetaverse.Imaging.ManagedImage.ExportRaw`.
pub fn export_raw(&self) -> Result<Vec<u8>, crate::Error> {
libremetaverse_types::not_implemented("M:LibreMetaverse.Imaging.ManagedImage.ExportRaw")
}
/// C# member: `M:LibreMetaverse.Imaging.ManagedImage.ResizeBilinear(System.Int32,System.Int32)`.
pub fn resize_bilinear(&mut self, width: i32, height: i32) -> Result<(), crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Imaging.ManagedImage.ResizeBilinear(System.Int32,System.Int32)",
)
}
/// C# member: `M:LibreMetaverse.Imaging.ManagedImage.ResizeNearestNeighbor(System.Int32,System.Int32)`.
pub fn resize_nearest_neighbor(&mut self, width: i32, height: i32) -> Result<(), crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Imaging.ManagedImage.ResizeNearestNeighbor(System.Int32,System.Int32)",
)
}
}
/// C# member: `F:LibreMetaverse.Imaging.ManagedImage.Alpha`.
/// C# member: `F:LibreMetaverse.Imaging.ManagedImage.Blue`.
/// C# member: `F:LibreMetaverse.Imaging.ManagedImage.Bump`.
/// C# member: `F:LibreMetaverse.Imaging.ManagedImage.Channels`.
/// C# member: `F:LibreMetaverse.Imaging.ManagedImage.Green`.
/// C# member: `F:LibreMetaverse.Imaging.ManagedImage.Height`.
/// C# member: `F:LibreMetaverse.Imaging.ManagedImage.Red`.
/// C# member: `F:LibreMetaverse.Imaging.ManagedImage.Width`.
/// C# member: `M:LibreMetaverse.Imaging.ManagedImage.#ctor(System.Int32,System.Int32,LibreMetaverse.Imaging.ManagedImage.ImageChannels)`.
/// C# member: `M:LibreMetaverse.Imaging.ManagedImage.Clear`.
/// C# member: `M:LibreMetaverse.Imaging.ManagedImage.Clone`.
/// C# member: `M:LibreMetaverse.Imaging.ManagedImage.ConvertChannels(LibreMetaverse.Imaging.ManagedImage.ImageChannels)`.
/// C# member: `M:LibreMetaverse.Imaging.ManagedImage.ExportRaw`.
/// C# member: `M:LibreMetaverse.Imaging.ManagedImage.ResizeBilinear(System.Int32,System.Int32)`.
/// C# member: `M:LibreMetaverse.Imaging.ManagedImage.ResizeNearestNeighbor(System.Int32,System.Int32)`.
pub use crate::managed_image::ManagedImage;
/// C# type: `T:LibreMetaverse.Imaging.ManagedImage.ImageChannels`.
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
#[repr(transparent)]
pub struct ManagedImageImageChannels(pub i32);
impl ManagedImageImageChannels {
/// C# member: `F:LibreMetaverse.Imaging.ManagedImage.ImageChannels.Alpha`.
pub const ALPHA: Self = Self(4);
/// C# member: `F:LibreMetaverse.Imaging.ManagedImage.ImageChannels.Bump`.
pub const BUMP: Self = Self(8);
/// C# member: `F:LibreMetaverse.Imaging.ManagedImage.ImageChannels.Color`.
pub const COLOR: Self = Self(2);
/// C# member: `F:LibreMetaverse.Imaging.ManagedImage.ImageChannels.Gray`.
pub const GRAY: Self = Self(1);
}
/// C# member: `F:LibreMetaverse.Imaging.ManagedImage.ImageChannels.Alpha`.
/// C# member: `F:LibreMetaverse.Imaging.ManagedImage.ImageChannels.Bump`.
/// C# member: `F:LibreMetaverse.Imaging.ManagedImage.ImageChannels.Color`.
/// C# member: `F:LibreMetaverse.Imaging.ManagedImage.ImageChannels.Gray`.
pub use crate::managed_image::ManagedImageImageChannels;