added Vec2::size
This commit is contained in:
parent
c223a2d900
commit
36c8b87d47
35
src/image.rs
35
src/image.rs
|
@ -1,17 +1,17 @@
|
||||||
use std::fs::File;
|
|
||||||
use crate::vec2::Vec2;
|
use crate::vec2::Vec2;
|
||||||
|
use std::fs::File;
|
||||||
|
|
||||||
//todo: make dynamically different bitdepths
|
//todo: make dynamically different bitdepths
|
||||||
pub struct Image {
|
pub struct Image {
|
||||||
data: Vec<u8>,
|
data: Vec<u8>,
|
||||||
size: Vec2<i32>
|
size: Vec2<i32>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Image {
|
impl Image {
|
||||||
pub fn new(size: Vec2<i32>) -> Self {
|
pub fn new(size: Vec2<i32>) -> Self {
|
||||||
Image {
|
Image {
|
||||||
data: vec![0u8; (size.x * size.y) as usize],
|
data: vec![0u8; size.size()],
|
||||||
size
|
size,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,7 +29,10 @@ impl Image {
|
||||||
decoder.read_into_buffer(&mut data).unwrap();
|
decoder.read_into_buffer(&mut data).unwrap();
|
||||||
Image {
|
Image {
|
||||||
data,
|
data,
|
||||||
size: Vec2 {x: x as i32, y: y as i32}
|
size: Vec2 {
|
||||||
|
x: x as i32,
|
||||||
|
y: y as i32,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -50,10 +53,20 @@ impl Image {
|
||||||
for y in 0..image.size.y {
|
for y in 0..image.size.y {
|
||||||
for x in 0..image.size.x {
|
for x in 0..image.size.x {
|
||||||
//todo: implement better(very stupid to do per pixel)
|
//todo: implement better(very stupid to do per pixel)
|
||||||
if x + pos.x >= 0 && y + pos.y >= 0 && x + pos.x < self.size.x && y + pos.y < self.size.y {
|
if x + pos.x >= 0
|
||||||
|
&& y + pos.y >= 0
|
||||||
|
&& x + pos.x < self.size.x
|
||||||
|
&& y + pos.y < self.size.y
|
||||||
|
{
|
||||||
let p = image.get_pixel(Vec2 { x, y });
|
let p = image.get_pixel(Vec2 { x, y });
|
||||||
if p > 0 {
|
if p > 0 {
|
||||||
self.set_pixel(Vec2 { x: x + pos.x, y: y + pos.y }, p);
|
self.set_pixel(
|
||||||
|
Vec2 {
|
||||||
|
x: x + pos.x,
|
||||||
|
y: y + pos.y,
|
||||||
|
},
|
||||||
|
p,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -75,7 +88,13 @@ impl Image {
|
||||||
let xs = xdiff / step;
|
let xs = xdiff / step;
|
||||||
let ys = ydiff / step;
|
let ys = ydiff / step;
|
||||||
for _ in 1..=(step as i32) {
|
for _ in 1..=(step as i32) {
|
||||||
self.set_pixel(Vec2 { x: x as i32, y: y as i32 }, color);
|
self.set_pixel(
|
||||||
|
Vec2 {
|
||||||
|
x: x as i32,
|
||||||
|
y: y as i32,
|
||||||
|
},
|
||||||
|
color,
|
||||||
|
);
|
||||||
x += xs;
|
x += xs;
|
||||||
y += ys;
|
y += ys;
|
||||||
}
|
}
|
||||||
|
|
21
src/vec2.rs
21
src/vec2.rs
|
@ -1,22 +1,31 @@
|
||||||
use num::Num;
|
use num::{Num, ToPrimitive};
|
||||||
|
|
||||||
#[derive(Copy, Clone)]
|
#[derive(Copy, Clone)]
|
||||||
pub struct Vec2<T : Num + Copy> {
|
pub struct Vec2<T: Num + Copy + ToPrimitive> {
|
||||||
pub x: T,
|
pub x: T,
|
||||||
pub y: T,
|
pub y: T,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T : Num + Copy> Vec2<T> {
|
impl<T: Num + Copy> Vec2<T> {
|
||||||
|
//pub static
|
||||||
pub fn zero() -> Self {
|
pub fn zero() -> Self {
|
||||||
Vec2 {x: T::zero(), y: T::zero()}
|
Vec2 {
|
||||||
|
x: T::zero(),
|
||||||
|
y: T::zero(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//pub
|
||||||
|
pub fn size(&self) -> usize {
|
||||||
|
(self.x * self.y) as usize
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T : Num + Copy + Default> Default for Vec2<T> {
|
impl<T: Num + Copy + Default> Default for Vec2<T> {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
Vec2 {
|
Vec2 {
|
||||||
x: T::default(),
|
x: T::default(),
|
||||||
y: T::default()
|
y: T::default(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue