implement invert instruction
This commit is contained in:
parent
2b3c74053e
commit
e7863402f3
4 changed files with 50 additions and 13 deletions
|
@ -1,4 +1,4 @@
|
||||||
pub mod Read {
|
pub mod read {
|
||||||
use image::{io::Reader as ImageReader, DynamicImage};
|
use image::{io::Reader as ImageReader, DynamicImage};
|
||||||
use rpl::instructions::read::{Read, SourceType};
|
use rpl::instructions::read::{Read, SourceType};
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@ pub mod Read {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub mod Write {
|
pub mod write {
|
||||||
use image::{io::Reader as ImageReader, DynamicImage, ImageFormat};
|
use image::{io::Reader as ImageReader, DynamicImage, ImageFormat};
|
||||||
use rpl::instructions::write::{TargetFormat, TargetType, Write};
|
use rpl::instructions::write::{TargetFormat, TargetType, Write};
|
||||||
|
|
||||||
|
@ -28,3 +28,14 @@ pub mod Write {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub mod filters {
|
||||||
|
pub mod invert {
|
||||||
|
use image::DynamicImage;
|
||||||
|
|
||||||
|
pub fn invert(mut input_data: DynamicImage) -> DynamicImage {
|
||||||
|
input_data.invert();
|
||||||
|
input_data
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -1,19 +1,18 @@
|
||||||
|
use rpl::instructions::{FilterInstruction, Instruction};
|
||||||
|
|
||||||
use crate::{value::DynamicValue, Executor};
|
use crate::{value::DynamicValue, Executor};
|
||||||
mod instructions;
|
mod instructions;
|
||||||
|
|
||||||
pub struct DebugExecutor;
|
pub struct DebugExecutor;
|
||||||
|
|
||||||
impl Executor for DebugExecutor {
|
impl Executor for DebugExecutor {
|
||||||
fn execute(
|
fn execute(instruction: Instruction, input: Option<DynamicValue>) -> Option<DynamicValue> {
|
||||||
instruction: rpl::instructions::Instruction,
|
|
||||||
input: Option<DynamicValue>,
|
|
||||||
) -> Option<DynamicValue> {
|
|
||||||
match instruction {
|
match instruction {
|
||||||
rpl::instructions::Instruction::Read(read_instruction) => Some(DynamicValue::Image(
|
Instruction::Read(read_instruction) => Some(DynamicValue::Image(
|
||||||
instructions::Read::read(read_instruction),
|
instructions::read::read(read_instruction),
|
||||||
)),
|
)),
|
||||||
rpl::instructions::Instruction::Write(write_instruction) => {
|
Instruction::Write(write_instruction) => {
|
||||||
instructions::Write::write(
|
instructions::write::write(
|
||||||
write_instruction,
|
write_instruction,
|
||||||
match input {
|
match input {
|
||||||
Some(DynamicValue::Image(img)) => img,
|
Some(DynamicValue::Image(img)) => img,
|
||||||
|
@ -22,9 +21,17 @@ impl Executor for DebugExecutor {
|
||||||
);
|
);
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
rpl::instructions::Instruction::Math(_) => todo!(),
|
Instruction::Math(_) => todo!(),
|
||||||
rpl::instructions::Instruction::Blend(_) => todo!(),
|
Instruction::Blend(_) => todo!(),
|
||||||
rpl::instructions::Instruction::Noise(_) => todo!(),
|
Instruction::Noise(_) => todo!(),
|
||||||
|
Instruction::Filter(filter_instruction) => match filter_instruction {
|
||||||
|
FilterInstruction::Invert => Some(DynamicValue::Image(
|
||||||
|
instructions::filters::invert::invert(match input {
|
||||||
|
Some(DynamicValue::Image(img)) => img,
|
||||||
|
_ => panic!("invalid value type for invert"),
|
||||||
|
}),
|
||||||
|
)),
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,6 +10,7 @@ pub enum Instruction {
|
||||||
Math(MathInstruction),
|
Math(MathInstruction),
|
||||||
Blend(BlendInstruction),
|
Blend(BlendInstruction),
|
||||||
Noise(NoiseInstruction),
|
Noise(NoiseInstruction),
|
||||||
|
Filter(FilterInstruction),
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, PartialEq, Eq, Debug)]
|
#[derive(Serialize, Deserialize, PartialEq, Eq, Debug)]
|
||||||
|
@ -39,3 +40,8 @@ pub enum NoiseInstruction {
|
||||||
Simplex,
|
Simplex,
|
||||||
Voronoi,
|
Voronoi,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize, PartialEq, Eq, Debug)]
|
||||||
|
pub enum FilterInstruction {
|
||||||
|
Invert,
|
||||||
|
}
|
||||||
|
|
13
testfiles/invert.rpl
Normal file
13
testfiles/invert.rpl
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
(
|
||||||
|
[
|
||||||
|
Read((
|
||||||
|
source: File("/home/jade/example/file.png"),
|
||||||
|
format: Png
|
||||||
|
)),
|
||||||
|
Filter(Invert),
|
||||||
|
Write((
|
||||||
|
target: File("/home/jade/example/inverted.jpg"),
|
||||||
|
format: Jpeg
|
||||||
|
))
|
||||||
|
]
|
||||||
|
)
|
Loading…
Reference in a new issue