Merge branch 'fluke/anime-cli' into 'main'

Anime: Tweak the diagonal data to be more correct

See merge request asus-linux/asus-nb-ctrl!45
This commit is contained in:
Luke Jones
2021-04-06 02:01:41 +00:00
49 changed files with 1379 additions and 228 deletions

View File

@@ -10,17 +10,12 @@ fn main() -> Result<(), Box<dyn Error>> {
let args: Vec<String> = env::args().into_iter().collect();
if args.len() != 3 {
println!(
"Usage: <filepath> <brightness>"
);
println!("Usage: <filepath> <brightness>");
println!("e.g, asusctl/examples/doom_large.png 0.8");
exit(-1);
}
let matrix = AniMeDiagonal::from_png(
Path::new(&args[1]),
args[2].parse::<f32>().unwrap(),
)?;
let matrix = AniMeDiagonal::from_png(Path::new(&args[1]), args[2].parse::<f32>().unwrap())?;
client
.proxies()

View File

@@ -13,12 +13,12 @@ fn main() {
let mut i = 0;
for (y, row) in tmp.iter_mut().enumerate() {
if y % 2 == 0 && i + 1 != row.len() -1 {
if y % 2 == 0 && i + 1 != row.len() - 1 {
i += 1;
dbg!(i);
}
row[row.len() - i] = 0x22;
if i > 5{
if i > 5 {
row[row.len() - i + 5] = 0x22;
}
if i > 10 {

View File

@@ -10,9 +10,7 @@ fn main() -> Result<(), Box<dyn Error>> {
let args: Vec<String> = env::args().into_iter().collect();
if args.len() != 8 {
println!(
"Usage: <filepath> <x scale> <y scale> <angle> <x pos> <y pos> <brightness>"
);
println!("Usage: <filepath> <x scale> <y scale> <angle> <x pos> <y pos> <brightness>");
println!("e.g, asusctl/examples/doom_large.png 0.9 0.9 0.4 0.0 0.0,0.8");
exit(-1);
}

View File

@@ -8,10 +8,7 @@ use daemon::{
ctrl_rog_bios::RogBiosSupportedFunctions, ctrl_supported::SupportedFunctions,
};
use gumdrop::{Opt, Options};
use rog_anime::{
AniMeDataBuffer, ANIME_DATA_LEN,
AniMeImage, Vec2,
};
use rog_anime::{AniMeDataBuffer, AniMeImage, Vec2, ANIME_DATA_LEN};
use rog_dbus::AuraDbusClient;
use rog_types::{
aura_modes::{self, AuraEffect, AuraModeNum},

View File

@@ -182,7 +182,7 @@ impl CtrlAnimeDisplay {
}
#[inline]
fn do_set_boot(&self, status: bool) {
fn do_set_boot(&self, status: bool) {
let mut flush = [0; PACKET_SIZE];
flush[0] = DEV_PAGE;
flush[1] = SET;

View File

@@ -1,15 +0,0 @@
Language,String
en,Festive
zh-tw,節慶
zh-cn,节庆
nl,Feestelijk
fr,Festif
de,Festlich
ja,フェスティバル
pt,Festivo
ru,Праздники
es,Festivo
it,Feste
cs,Slavnostní
ko,축제
tr,Eğlence
1 Language String
2 en Festive
3 zh-tw 節慶
4 zh-cn 节庆
5 nl Feestelijk
6 fr Festif
7 de Festlich
8 ja フェスティバル
9 pt Festivo
10 ru Праздники
11 es Festivo
12 it Feste
13 cs Slavnostní
14 ko 축제
15 tr Eğlence

View File

@@ -1,18 +0,0 @@
Language,String
en,Festive
zh-tw,節慶
zh-cn,节庆
nl,Feestelijk
fr,Festif
de,Festlich
ja,フェスティバル
pt,Festivo
ru,Праздники
es,Festivo
it,Feste
cs,Slavnostní
ko,축제
tr,Eğlence
fi,Juhlava
nb,Festlig
sv,Festligt
1 Language String
2 en Festive
3 zh-tw 節慶
4 zh-cn 节庆
5 nl Feestelijk
6 fr Festif
7 de Festlich
8 ja フェスティバル
9 pt Festivo
10 ru Праздники
11 es Festivo
12 it Feste
13 cs Slavnostní
14 ko 축제
15 tr Eğlence
16 fi Juhlava
17 nb Festlig
18 sv Festligt

View File

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 72 KiB

View File

Before

Width:  |  Height:  |  Size: 61 KiB

After

Width:  |  Height:  |  Size: 61 KiB

View File

Before

Width:  |  Height:  |  Size: 137 KiB

After

Width:  |  Height:  |  Size: 137 KiB

View File

Before

Width:  |  Height:  |  Size: 109 KiB

After

Width:  |  Height:  |  Size: 109 KiB

View File

Before

Width:  |  Height:  |  Size: 99 KiB

After

Width:  |  Height:  |  Size: 99 KiB

View File

Before

Width:  |  Height:  |  Size: 85 KiB

After

Width:  |  Height:  |  Size: 85 KiB

View File

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 48 KiB

View File

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 60 KiB

View File

@@ -1,16 +0,0 @@
Language,Trend,Gaming,Festive,Music,ROG theme
cs,1,2,3,4,5
de,1,2,3,4,5
en,1,2,3,4,5
es,1,2,3,4,5
fr,1,2,3,4,5
it,1,2,3,4,5
ja,1,2,3,4,5
ko,1,2,3,4,5
nl,1,2,3,4,5
pt,1,2,3,4,5
ru,1,2,3,4,5
tr,1,2,3,4,5
zh-cn,1,2,3,4,5
zh-tw,1,2,3,4,5
default,1,2,3,4,5
1 Language Trend Gaming Festive Music ROG theme
2 cs 1 2 3 4 5
3 de 1 2 3 4 5
4 en 1 2 3 4 5
5 es 1 2 3 4 5
6 fr 1 2 3 4 5
7 it 1 2 3 4 5
8 ja 1 2 3 4 5
9 ko 1 2 3 4 5
10 nl 1 2 3 4 5
11 pt 1 2 3 4 5
12 ru 1 2 3 4 5
13 tr 1 2 3 4 5
14 zh-cn 1 2 3 4 5
15 zh-tw 1 2 3 4 5
16 default 1 2 3 4 5

View File

@@ -1,15 +0,0 @@
Language,String
en,Gaming
zh-tw,遊戲
zh-cn,游戏
nl,Gaming
fr,Jeu
de,Gaming
ja,ゲーム
pt,Jogos
ru,Игры
es,Juegos
it,Gaming
cs,Hraní
ko,게이밍
tr,Oyun
1 Language String
2 en Gaming
3 zh-tw 遊戲
4 zh-cn 游戏
5 nl Gaming
6 fr Jeu
7 de Gaming
8 ja ゲーム
9 pt Jogos
10 ru Игры
11 es Juegos
12 it Gaming
13 cs Hraní
14 ko 게이밍
15 tr Oyun

View File

@@ -1,15 +0,0 @@
Language,String
en,Gaming
zh-tw,遊戲
zh-cn,游戏
nl,Gaming
fr,Jeu
de,Gaming
ja,ゲーム
pt,Jogos
ru,Игры
es,Juegos
it,Gaming
cs,Hraní
ko,게이밍
tr,Oyun
1 Language String
2 en Gaming
3 zh-tw 遊戲
4 zh-cn 游戏
5 nl Gaming
6 fr Jeu
7 de Gaming
8 ja ゲーム
9 pt Jogos
10 ru Игры
11 es Juegos
12 it Gaming
13 cs Hraní
14 ko 게이밍
15 tr Oyun

View File

Before

Width:  |  Height:  |  Size: 96 KiB

After

Width:  |  Height:  |  Size: 96 KiB

View File

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 32 KiB

View File

Before

Width:  |  Height:  |  Size: 54 KiB

After

Width:  |  Height:  |  Size: 54 KiB

View File

Before

Width:  |  Height:  |  Size: 234 KiB

After

Width:  |  Height:  |  Size: 234 KiB

View File

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 34 KiB

View File

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 49 KiB

View File

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 63 KiB

View File

@@ -1,17 +0,0 @@
Language,String
en,Music
zh-tw,音樂
zh-cn,音乐
nl,Muziek
fr,Musique
de,Musik
ja,ミュージック
pt,Música
ru,Музыка
es,Música
it,Musica
cs,Hudba
ko,음악
tr,Müzik
,
,
1 Language String
2 en Music
3 zh-tw 音樂
4 zh-cn 音乐
5 nl Muziek
6 fr Musique
7 de Musik
8 ja ミュージック
9 pt Música
10 ru Музыка
11 es Música
12 it Musica
13 cs Hudba
14 ko 음악
15 tr Müzik
16
17

View File

Before

Width:  |  Height:  |  Size: 119 KiB

After

Width:  |  Height:  |  Size: 119 KiB

View File

Before

Width:  |  Height:  |  Size: 132 KiB

After

Width:  |  Height:  |  Size: 132 KiB

View File

@@ -1,15 +0,0 @@
Language,String
en,ROG Gallery
zh-tw,ROG 主題
zh-cn,ROG 主题
nl,ROG-thema
fr,Thème ROG
de,ROG-Thema
ja,ROG テーマ
pt,Tema ROG
ru,Тема ROG
es,Tema de ROG
it,Tema ROG
cs,Téma ROG
ko,ROG 테마
tr,ROG teması
1 Language String
2 en ROG Gallery
3 zh-tw ROG 主題
4 zh-cn ROG 主题
5 nl ROG-thema
6 fr Thème ROG
7 de ROG-Thema
8 ja ROG テーマ
9 pt Tema ROG
10 ru Тема ROG
11 es Tema de ROG
12 it Tema ROG
13 cs Téma ROG
14 ko ROG 테마
15 tr ROG teması

View File

Before

Width:  |  Height:  |  Size: 90 KiB

After

Width:  |  Height:  |  Size: 90 KiB

View File

Before

Width:  |  Height:  |  Size: 64 KiB

After

Width:  |  Height:  |  Size: 64 KiB

View File

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 56 KiB

View File

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 31 KiB

View File

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

View File

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 40 KiB

View File

@@ -1,15 +0,0 @@
Language,String
en,Trend
zh-tw,潮流
zh-cn,潮流
nl,Trend
fr,Tendance
de,Trend
ja,トレンド
pt,Tendência
ru,В тренде
es,Tendencia
it,Tendenza
cs,Trend
ko,트렌드
tr,Popüler
1 Language String
2 en Trend
3 zh-tw 潮流
4 zh-cn 潮流
5 nl Trend
6 fr Tendance
7 de Trend
8 ja トレンド
9 pt Tendência
10 ru В тренде
11 es Tendencia
12 it Tendenza
13 cs Trend
14 ko 트렌드
15 tr Popüler

View File

@@ -1,15 +0,0 @@
Language,String
en,Trend
zh-tw,潮流
zh-cn,潮流
nl,Trend
fr,Tendance
de,Trend
ja,トレンド
pt,Tendência
ru,В тренде
es,Tendencia
it,Tendenza
cs,Trend
ko,트렌드
tr,Popüler
1 Language String
2 en Trend
3 zh-tw 潮流
4 zh-cn 潮流
5 nl Trend
6 fr Tendance
7 de Trend
8 ja トレンド
9 pt Tendência
10 ru В тренде
11 es Tendencia
12 it Tendenza
13 cs Trend
14 ko 트렌드
15 tr Popüler

View File

Before

Width:  |  Height:  |  Size: 120 KiB

After

Width:  |  Height:  |  Size: 120 KiB

View File

Before

Width:  |  Height:  |  Size: 112 KiB

After

Width:  |  Height:  |  Size: 112 KiB

View File

Before

Width:  |  Height:  |  Size: 73 KiB

After

Width:  |  Height:  |  Size: 73 KiB

6
data/anime/anime.readme Normal file
View File

@@ -0,0 +1,6 @@
See https://blog.joshwalsh.me/asus-anime-matrix/ for details on how
the diagonal layout works.
`diagonal-template.*` is provided from the website above. It is best to
export the final file to 36px height - no scaling is done in asusd or
rog-anime crate for diagonal displays.

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 323 KiB

View File

@@ -26,6 +26,7 @@ impl AniMeDiagonal {
&mut self.0
}
/// Get a full diagonal row where `x` `y` is the starting point and `len` is the length of data.
fn get_row(&self, x: usize, y: usize, len: usize) -> Vec<u8> {
let mut buf = Vec::with_capacity(len);
for i in 0..len {
@@ -37,10 +38,7 @@ impl AniMeDiagonal {
/// Generate the base image from inputs. The result can be displayed as is or
/// updated via scale, position, or angle then displayed again after `update()`.
pub fn from_png(
path: &Path,
bright: f32,
) -> Result<Self, AnimeError> {
pub fn from_png(path: &Path, bright: f32) -> Result<Self, AnimeError> {
use pix::el::Pixel;
let data = std::fs::read(path)?;
let data = std::io::Cursor::new(data);
@@ -53,8 +51,7 @@ impl AniMeDiagonal {
match raster {
png_pong::PngRaster::Graya8(ras) => {
width = ras.width();
for (y, row) in ras.pixels()
.chunks(width as usize).enumerate() {
for (y, row) in ras.pixels().chunks(width as usize).enumerate() {
for (x, px) in row.iter().enumerate() {
let v = <u8>::from(px.one() * bright);
matrix.0[y][x] = v;
@@ -75,61 +72,61 @@ impl From<&AniMeDiagonal> for AniMeDataBuffer {
fn from(anime: &AniMeDiagonal) -> Self {
let mut buf = vec![0u8; ANIME_DATA_LEN];
buf[1..=33].copy_from_slice(&anime.get_row(2, 3, 33));
buf[34..=66].copy_from_slice(&anime.get_row(2, 2, 33));
buf[68..=100].copy_from_slice(&anime.get_row(2, 1, 33));
buf[101..=134].copy_from_slice(&anime.get_row(2, 0, 34));
buf[136..=169].copy_from_slice(&anime.get_row(3, 0, 34));
buf[170..=202].copy_from_slice(&anime.get_row(4, 0, 33));
buf[204..=236].copy_from_slice(&anime.get_row(5, 0, 33));
buf[237..=268].copy_from_slice(&anime.get_row(6, 0, 32));
buf[270..=301].copy_from_slice(&anime.get_row(7, 0, 32));
buf[302..=332].copy_from_slice(&anime.get_row(8, 0, 31));
buf[334..=364].copy_from_slice(&anime.get_row(9, 0, 31));
buf[365..=394].copy_from_slice(&anime.get_row(10, 0, 30));
buf[396..=425].copy_from_slice(&anime.get_row(11, 0, 30));
buf[426..=454].copy_from_slice(&anime.get_row(12, 0, 29));
buf[456..=484].copy_from_slice(&anime.get_row(13, 0, 29));
buf[485..=512].copy_from_slice(&anime.get_row(14, 0, 28));
buf[514..=541].copy_from_slice(&anime.get_row(15, 0, 28));
buf[542..=568].copy_from_slice(&anime.get_row(16, 0, 27));
buf[570..=596].copy_from_slice(&anime.get_row(17, 0, 27));
buf[597..=622].copy_from_slice(&anime.get_row(18, 0, 26));
buf[624..=649].copy_from_slice(&anime.get_row(19, 0, 26));
buf[650..=674].copy_from_slice(&anime.get_row(20, 0, 25));
buf[676..=700].copy_from_slice(&anime.get_row(21, 0, 25));
buf[701..=724].copy_from_slice(&anime.get_row(22, 0, 24));
buf[726..=749].copy_from_slice(&anime.get_row(23, 0, 24));
buf[750..=772].copy_from_slice(&anime.get_row(24, 0, 23));
buf[774..=796].copy_from_slice(&anime.get_row(25, 0, 23));
buf[797..=818].copy_from_slice(&anime.get_row(26, 0, 22));
buf[820..=841].copy_from_slice(&anime.get_row(27, 0, 22));
buf[842..=862].copy_from_slice(&anime.get_row(28, 0, 21));
buf[864..=884].copy_from_slice(&anime.get_row(29, 0, 21));
buf[885..=904].copy_from_slice(&anime.get_row(30, 0, 20));
buf[906..=925].copy_from_slice(&anime.get_row(31, 0, 20));
buf[926..=944].copy_from_slice(&anime.get_row(32, 0, 19));
buf[946..=964].copy_from_slice(&anime.get_row(33, 0, 19));
buf[965..=982].copy_from_slice(&anime.get_row(34, 0, 18));
buf[984..=1001].copy_from_slice(&anime.get_row(35, 0, 18));
buf[1002..=1018].copy_from_slice(&anime.get_row(36, 0, 17));
buf[1020..=1036].copy_from_slice(&anime.get_row(37, 0, 17));
buf[1037..=1052].copy_from_slice(&anime.get_row(38, 0, 16));
buf[1054..=1069].copy_from_slice(&anime.get_row(39, 0, 16));
buf[1070..=1084].copy_from_slice(&anime.get_row(40, 0, 15));
buf[1086..=1100].copy_from_slice(&anime.get_row(41, 0, 15));
buf[1101..=1114].copy_from_slice(&anime.get_row(42, 0, 14));
buf[1116..=1129].copy_from_slice(&anime.get_row(43, 0, 14));
buf[1130..=1142].copy_from_slice(&anime.get_row(44, 0, 13));
buf[1144..=1156].copy_from_slice(&anime.get_row(45, 0, 13));
buf[1157..=1168].copy_from_slice(&anime.get_row(46, 0, 12));
buf[1170..=1181].copy_from_slice(&anime.get_row(47, 0, 12));
buf[1182..=1192].copy_from_slice(&anime.get_row(48, 0, 11));
buf[1194..=1204].copy_from_slice(&anime.get_row(49, 0, 11));
buf[1205..=1214].copy_from_slice(&anime.get_row(50, 0, 10));
buf[1216..=1225].copy_from_slice(&anime.get_row(51, 0, 10));
buf[1226..=1234].copy_from_slice(&anime.get_row(52, 0, 9));
buf[1236..=1244].copy_from_slice(&anime.get_row(53, 0, 9));
buf[1..=32].copy_from_slice(&anime.get_row(0, 3, 32));
buf[34..=66].copy_from_slice(&anime.get_row(0, 2, 33));
buf[69..=101].copy_from_slice(&anime.get_row(1, 2, 33)); // ?!
buf[102..=134].copy_from_slice(&anime.get_row(1, 1, 33));
buf[137..=169].copy_from_slice(&anime.get_row(2, 1, 33));
buf[170..=202].copy_from_slice(&anime.get_row(2, 0, 33));
buf[204..=236].copy_from_slice(&anime.get_row(3, 0, 33));
buf[237..=268].copy_from_slice(&anime.get_row(4, 0, 32));
buf[270..=301].copy_from_slice(&anime.get_row(5, 0, 32));
buf[302..=332].copy_from_slice(&anime.get_row(6, 0, 31));
buf[334..=364].copy_from_slice(&anime.get_row(7, 0, 31));
buf[365..=394].copy_from_slice(&anime.get_row(8, 0, 30));
buf[396..=425].copy_from_slice(&anime.get_row(9, 0, 30));
buf[426..=454].copy_from_slice(&anime.get_row(10, 0, 29));
buf[456..=484].copy_from_slice(&anime.get_row(11, 0, 29));
buf[485..=512].copy_from_slice(&anime.get_row(12, 0, 28));
buf[514..=541].copy_from_slice(&anime.get_row(13, 0, 28));
buf[542..=568].copy_from_slice(&anime.get_row(14, 0, 27));
buf[570..=596].copy_from_slice(&anime.get_row(15, 0, 27));
buf[597..=622].copy_from_slice(&anime.get_row(16, 0, 26));
buf[624..=649].copy_from_slice(&anime.get_row(17, 0, 26));
buf[650..=674].copy_from_slice(&anime.get_row(18, 0, 25));
buf[676..=700].copy_from_slice(&anime.get_row(19, 0, 25));
buf[701..=724].copy_from_slice(&anime.get_row(20, 0, 24));
buf[726..=749].copy_from_slice(&anime.get_row(21, 0, 24));
buf[750..=772].copy_from_slice(&anime.get_row(22, 0, 23));
buf[774..=796].copy_from_slice(&anime.get_row(23, 0, 23));
buf[797..=818].copy_from_slice(&anime.get_row(24, 0, 22));
buf[820..=841].copy_from_slice(&anime.get_row(25, 0, 22));
buf[842..=862].copy_from_slice(&anime.get_row(26, 0, 21));
buf[864..=884].copy_from_slice(&anime.get_row(27, 0, 21));
buf[885..=904].copy_from_slice(&anime.get_row(28, 0, 20));
buf[906..=925].copy_from_slice(&anime.get_row(29, 0, 20));
buf[926..=944].copy_from_slice(&anime.get_row(30, 0, 19));
buf[946..=964].copy_from_slice(&anime.get_row(31, 0, 19));
buf[965..=982].copy_from_slice(&anime.get_row(32, 0, 18));
buf[984..=1001].copy_from_slice(&anime.get_row(33, 0, 18));
buf[1002..=1018].copy_from_slice(&anime.get_row(34, 0, 17));
buf[1020..=1036].copy_from_slice(&anime.get_row(35, 0, 17));
buf[1037..=1052].copy_from_slice(&anime.get_row(36, 0, 16));
buf[1054..=1069].copy_from_slice(&anime.get_row(37, 0, 16));
buf[1070..=1084].copy_from_slice(&anime.get_row(38, 0, 15));
buf[1086..=1100].copy_from_slice(&anime.get_row(39, 0, 15));
buf[1101..=1114].copy_from_slice(&anime.get_row(40, 0, 14));
buf[1116..=1129].copy_from_slice(&anime.get_row(41, 0, 14));
buf[1130..=1142].copy_from_slice(&anime.get_row(42, 0, 13));
buf[1144..=1156].copy_from_slice(&anime.get_row(43, 0, 13));
buf[1157..=1168].copy_from_slice(&anime.get_row(44, 0, 12));
buf[1170..=1181].copy_from_slice(&anime.get_row(45, 0, 12));
buf[1182..=1192].copy_from_slice(&anime.get_row(46, 0, 11));
buf[1194..=1204].copy_from_slice(&anime.get_row(47, 0, 11));
buf[1205..=1214].copy_from_slice(&anime.get_row(48, 0, 10));
buf[1216..=1225].copy_from_slice(&anime.get_row(49, 0, 10));
buf[1226..=1234].copy_from_slice(&anime.get_row(50, 0, 9));
buf[1236..=1244].copy_from_slice(&anime.get_row(51, 0, 9));
AniMeDataBuffer::from_vec(buf)
}

View File

@@ -1,10 +1,12 @@
use serde_derive::{Deserialize, Serialize};
use std::{fs::File, path::{Path}, time::Duration};
use std::{fs::File, path::Path, time::Duration};
use crate::{error::AnimeError, AniMeDataBuffer, AniMeDiagonal};
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct AniMeFrame {
/// Precomputed data for the frame. This can be transferred directly to the
/// the `asusd` daemon over dbus or converted to USB packet with `AniMePacketType::from(buffer)`
data: AniMeDataBuffer,
delay: Duration,
}

View File

@@ -40,7 +40,7 @@ impl Led {
const fn bright(&self) -> u8 {
self.2
}
fn set_bright(&mut self, a: u8) {
self.2 = a;
}
@@ -239,9 +239,7 @@ impl AniMeImage {
let data = std::fs::read(path)?;
let data = std::io::Cursor::new(data);
let decoder = png_pong::Decoder::new(data)?.into_steps();
let png_pong::Step { raster, delay: _ } = decoder
.last()
.ok_or(AnimeError::NoFrames)??;
let png_pong::Step { raster, delay: _ } = decoder.last().ok_or(AnimeError::NoFrames)??;
let width;
let pixels = match raster {

View File

@@ -1,7 +1,7 @@
use std::error::Error;
use std::fmt;
use gif::DecodingError;
use png_pong::decode::Error as PngError;
use std::error::Error;
use std::fmt;
#[derive(Debug)]
pub enum AnimeError {
@@ -9,7 +9,9 @@ pub enum AnimeError {
Io(std::io::Error),
Png(PngError),
Gif(DecodingError),
Format
Format,
/// The input was incorrect size, expected size is `IncorrectSize(width, height)`
IncorrectSize(u32, u32),
}
impl fmt::Display for AnimeError {
@@ -21,6 +23,11 @@ impl fmt::Display for AnimeError {
AnimeError::Png(e) => write!(f, "PNG error: {}", e),
AnimeError::Gif(e) => write!(f, "GIF error: {}", e),
AnimeError::Format => write!(f, "PNG file is not 8bit greyscale"),
AnimeError::IncorrectSize(width, height) => write!(
f,
"The input image size is incorrect, expected {}x{}",
width, height
),
}
}
}
@@ -43,4 +50,4 @@ impl From<DecodingError> for AnimeError {
fn from(err: DecodingError) -> Self {
AnimeError::Gif(err)
}
}
}