From c7ab067faddd8d29a5add2a20929fbe6d4260d9d Mon Sep 17 00:00:00 2001 From: nathan wagner Date: Mon, 1 Aug 2022 16:31:37 +0000 Subject: [PATCH 1/5] running mario instead of circle --- main.go | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/main.go b/main.go index 9fda44f..152a7fd 100644 --- a/main.go +++ b/main.go @@ -4,6 +4,9 @@ import ( "flag" "image" "image/color" + _ "image/jpeg" + "log" + "os" "time" rgbmatrix "gitea.wagshome.duckdns.org/publicWagsHome/go-rpi-rgb-led-matrix" @@ -34,6 +37,19 @@ func main() { config.InverseColors = *inverse_colors config.DisableHardwarePulsing = *disable_hardware_pulsing + bounds := mario.Bounds() + var histogram [16][4]int + for y := bounds.Min.Y; y < bounds.Max.Y; y++ { + for x := bounds.Min.X; x < bounds.Max.X; x++ { + r, g, b, a := mario.At(x, y).RGBA() + // A color's RGBA method returns values in the range [0, 65535]. + // Shifting by 12 reduces this to the range [0, 15]. + histogram[r>>12][0]++ + histogram[g>>12][1]++ + histogram[b>>12][2]++ + histogram[a>>12][3]++ + } + } m, err := rgbmatrix.NewRGBLedMatrix(config) fatal(err) @@ -58,13 +74,20 @@ type Animation struct { position image.Point dir image.Point stroke int + image image.Image } func NewAnimation(sz image.Point) *Animation { + reader, err := os.Open("mario.jpg") + if err != nil { + log.Fatal(err) + } + mario, _, err := image.Decode(reader) return &Animation{ ctx: gg.NewContext(sz.X, sz.Y), dir: image.Point{1, 1}, stroke: 5, + image: mario, } } @@ -74,8 +97,9 @@ func (a *Animation) Next() (image.Image, <-chan time.Time, error) { a.ctx.SetColor(color.Black) a.ctx.Clear() - a.ctx.DrawCircle(float64(a.position.X), float64(a.position.Y), float64(a.stroke)) - a.ctx.SetColor(color.RGBA{0, 255, 0, 255}) + a.ctx.DrawImage(a.image, a.position.X, a.position.Y) + //a.ctx.DrawCircle(float64(a.position.X), float64(a.position.Y), float64(a.stroke)) + //a.ctx.SetColor(color.RGBA{0, 255, 0, 255}) a.ctx.Fill() return a.ctx.Image(), time.After(time.Millisecond * 50), nil } From 953cb76ee5fc731f0251da37ffe257a2ddb0b15a Mon Sep 17 00:00:00 2001 From: nathan wagner Date: Mon, 1 Aug 2022 18:18:05 +0000 Subject: [PATCH 2/5] saving --- Dockerfile | 1 + main.go | 29 ++++++++++++++++++----------- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/Dockerfile b/Dockerfile index 2dca95c..53b7d0e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,6 +7,7 @@ RUN go mod tidy RUN go build . RUN mkdir -p /usr/src/app/work/ RUN cp /usr/src/app/rgb/rgb /usr/src/app/work/rgb +RUN cp /usr/src/app/rgb/mario* /usr/src/app/work/ #FROM alpine:latest diff --git a/main.go b/main.go index 152a7fd..0183bdd 100644 --- a/main.go +++ b/main.go @@ -10,6 +10,7 @@ import ( "time" rgbmatrix "gitea.wagshome.duckdns.org/publicWagsHome/go-rpi-rgb-led-matrix" + "github.com/disintegration/imaging" "github.com/fogleman/gg" ) @@ -37,7 +38,7 @@ func main() { config.InverseColors = *inverse_colors config.DisableHardwarePulsing = *disable_hardware_pulsing - bounds := mario.Bounds() + /*bounds := mario.Bounds() var histogram [16][4]int for y := bounds.Min.Y; y < bounds.Max.Y; y++ { for x := bounds.Min.X; x < bounds.Max.X; x++ { @@ -49,7 +50,7 @@ func main() { histogram[b>>12][2]++ histogram[a>>12][3]++ } - } + }*/ m, err := rgbmatrix.NewRGBLedMatrix(config) fatal(err) @@ -73,6 +74,8 @@ type Animation struct { ctx *gg.Context position image.Point dir image.Point + height int + width int stroke int image image.Image } @@ -82,22 +85,24 @@ func NewAnimation(sz image.Point) *Animation { if err != nil { log.Fatal(err) } - mario, _, err := image.Decode(reader) + rawMario, _, err := image.Decode(reader) + mario := imaging.FlipH(imaging.Resize(rawMario, 16, 16, imaging.Lanczos)) return &Animation{ ctx: gg.NewContext(sz.X, sz.Y), dir: image.Point{1, 1}, - stroke: 5, + height: 8, + width: 8, + stroke: 16, image: mario, } } func (a *Animation) Next() (image.Image, <-chan time.Time, error) { defer a.updatePosition() - a.ctx.SetColor(color.Black) a.ctx.Clear() - - a.ctx.DrawImage(a.image, a.position.X, a.position.Y) + a.ctx.DrawImageAnchored(a.image, a.position.X, a.position.Y, 0.5, 0.5) + //a.image = imaging.FlipH(a.image) //a.ctx.DrawCircle(float64(a.position.X), float64(a.position.Y), float64(a.stroke)) //a.ctx.SetColor(color.RGBA{0, 255, 0, 255}) a.ctx.Fill() @@ -108,15 +113,17 @@ func (a *Animation) updatePosition() { a.position.X += 1 * a.dir.X a.position.Y += 1 * a.dir.Y - if a.position.Y+a.stroke > a.ctx.Height() { + if a.position.Y+a.height > a.ctx.Height() { a.dir.Y = -1 - } else if a.position.Y-a.stroke < 0 { + } else if a.position.Y-a.height < 0 { a.dir.Y = 1 } - if a.position.X+a.stroke > a.ctx.Width() { + if a.position.X+a.width > a.ctx.Width() { a.dir.X = -1 - } else if a.position.X-a.stroke < 0 { + a.image = imaging.FlipH(a.image) + } else if a.position.X-a.width < 0 { a.dir.X = 1 + a.image = imaging.FlipH(a.image) } } From 0ad933fb3de08c70aa0059ee5498ad270fd273dc Mon Sep 17 00:00:00 2001 From: nathan wagner Date: Mon, 1 Aug 2022 14:19:48 -0400 Subject: [PATCH 3/5] adding new mario images --- marioDown.png | Bin 0 -> 2405 bytes marioUp.png | Bin 0 -> 2509 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 marioDown.png create mode 100644 marioUp.png diff --git a/marioDown.png b/marioDown.png new file mode 100644 index 0000000000000000000000000000000000000000..5f68878bee4d6120165c4401196c1e2fa8706aab GIT binary patch literal 2405 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 SA)2>*2cmbnIu_dd#r_XRQ(PSY literal 0 HcmV?d00001 From 9943b9819fdc96a58d1a3c8bc5c8e0a9b61e05d9 Mon Sep 17 00:00:00 2001 From: nathan wagner Date: Mon, 1 Aug 2022 14:56:25 -0400 Subject: [PATCH 4/5] updating mario up and down png --- marioDown.png | Bin 2405 -> 621 bytes marioUp.png | Bin 2509 -> 684 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/marioDown.png b/marioDown.png index 5f68878bee4d6120165c4401196c1e2fa8706aab..5c88726b422c1cf539f491b57fe23098224429fd 100644 GIT binary patch delta 597 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 literal 2509 zcmZ`)3pkT)AAhi%MZJoA${KR08OmvGlS65WmYlLOht0Okrfq6uImPRZ-b5*-rUNO5 z)KUqF=1k_LD2EMUK0=X0G~ZNjb#-0eb6wAU|DNCd`ycNA|Gw_$FN~{`ilUYx001iJ z-HvXOd4uHDk(ZT>lN7cb0DxAK9UL&h4o(g<3XOgs)IX5mM4%Gr;GsdjFxQWmZm)kE^q9fAIh9KIo!(_ z?^Q~9vIU#ot1rDps}MTa*3YdS;_=|jN;Y4G&4+IO`-1U>O;Z0EsH%ATega(6+cEQa zc8NGzh;foi?1}Hpw{C#+69Dm=>Ia9TL3Rsu3LOD+3cT%Q>y4=7%s$B8m+5%bPn ztJde6Z?|U<)dX>@uu4Qj&A8)Yu^BE?G3=yUrt*;L20++v3@wV7)!k6!LN-opJmW>O zto@ic_he{okTiQ7N+iQO_%_)=r|q_kCk=dD<#`*$^SX2GqWu>f^s#!4J~F{KQ<+(3 z8n*c9^D(ch8S?$9HX2G=$@(zQ;t%$9QC`Icx72Wtm{Di@yX#!K(i)^V6&$TWOqx#G z`$H(+noDQucT}DVA6sMU_lIK&Sd|=!^}BgnQAQzfnK;ZnM89IK?VB++rZ8Zi-nN%*j(+L>de*4fh865Md1gX#-sQ@xT( zcX@J3Uo%FSdPJ=wP-flR_N(-kr7GNTM-gt=%12o&cTy&5w9E6c#pt#sPet}q8kXlY zg>=QEvY{Rnf9}m22Q555OY1ZO>=IU~JW&?A_-?k|HZ{0@HdSX+)Ije$RNqSmht4@F zh^{*EsuxxGJ^Ms!5>6@j z!y=AZ<^6F+<8Y~LZ4nKh$Ig$|xWgEu=5t^7*}CsamogX3Nze9=eQ2kTJZN0mpG>~`u=w(S zPrs;tHxQtB&)j&e^5F95S zd1Rw1%$MOWkQyzci38;mKt3vmHRHxI-~|YztzX5xsPx*W)sm+(`U%UT>h}Vjk>$Qi z3tuAGQ!?!W;7Qh!%#uD!sXFj=qvV1(MDRujxwrtv5-bmZq+|gZ36cV&CBy3PSW1Eo zfAW8l0nk?s0H7o@07z#^|6n#`$^5`N%ZvK^?rTdVN@RC$rnk#pcpxpr#2-%!AegX1 zLYD;qf(4hr5CYR5%nG4U8E_U7@>Kzs;AI*H0e_V+gOLz#7Yx{eMkjzRO-xNpAt*&K z7>uCfgWztCyS|%CzK{?SlNkz!!Hyq4ZgPC935`yKnc3Lbz)a0y=H^g|0?G)dGW}Ul zDns|1lYjj<5*UGWawwBbqk@K({1VVqCV?(7{vPe$1pmL{yDtQ6xm>@L?^|!avXbVY6cMl= zjYcV^=Q{Hx$6^8PXy?9Lr8>PLSlv#&c37`KG`P~8r%6FT)!p+0{Pk}YsTE>OL*Fw1BY8^peCwpE?k-o-rl-uGF%|D)GC zLOq@bDY@^MVVUnfE6VN)-D-7Z{+zy(n)669!Sr#N(JP%8X+B=Q9NFodp40QRi#dyR z8J@(Y7c&~*O51P^7FjdO!>KA`^TX*Q2}bRMm|!q^oQT!6IeRP3}E!K1Or6K_97 zO|#QnVf$kz**;wQEJfL+jgKKCJ~<3E&&`io6sAONy7TGX7WQBk|xmTe^ z^+hh_4R_kcY~5)p*RoA>du$3tCB4jedvon)AK|5&Llm{J=nT$z^ukfU^be}kg*diP SA)2>*2cmbnIu_dd#r_XRQ(PSY From 9e4b01c63f9b184252a52f218ff26e4f3521b77d Mon Sep 17 00:00:00 2001 From: nathan wagner Date: Tue, 2 Aug 2022 08:36:00 -0400 Subject: [PATCH 5/5] removing extra opacity --- marioDown.png | Bin 621 -> 334 bytes marioUp.png | Bin 684 -> 368 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/marioDown.png b/marioDown.png index 5c88726b422c1cf539f491b57fe23098224429fd..d32b5f0906040f5de29d94d50d5639745e192bd6 100644 GIT binary patch delta 319 zcmaFMa*k<&L_G^L0|Udq)>1Pdr4ry1;tHfCBqTnZFnrKpup)rrhnj_fMaKzgi3P$8 z4-&%v|Nj4DMZx8B^VxvvcuIo&f*JlJ0OyeaHK6!ePZ!6KiaE6x427Bu1Xu$Wi9a~J z!g1A-EzK1y`VJ2nGhXP*WNYVWGEY^lFS!zPE=Nd^`|i85_vg;NtFR!6qj{%*XQSk# zQW-AX}+O`8)poO4*)aP?J%QPa!L z3}&BchB@b0bMJ>O<=VLW>9+)-u3vl;B0|$l>m@D}dxZCGdtckeP*lZQcFD(CS+3Fgvo&Ej&%=>@g`p)Yuglc~qF9Ujw N!PC{xWt~$(696uaj>7-| delta 608 zcmV-m0-ycP0__Bl7=H)`0000Ct7ruP0004VQb$4nuFf3k0006fNklP9Q&wsni;=T&%1rb0R_bDK# z59kB|l3Z(J^CYemT~g_Sm8|RnAtKaCm<8gHZPajS6885Xsb*J2_@1jO6uCgV!u}8B zQ$w3u_lUa=g$Z31XqOOD_)4JmZKfz$T~(m2IwuGaB-(E(EP=8ad$Z+>VnK_LRgx0|3#vp{Lb$_^4Lx3disI$9?vH8^RnK`cQ z*}Zw@Rm8)`4+(|LI{tCT+`@SCw5if@Pep@Capln|DFVoNl8)8#dEMo}5C#;Gx0t&? zJY+O?_6&H5<9U4bXzefex=4YzqjYSyVe}5_oT0-4-ez&o%fqF~3sM19m;(ZX^qfP3 zAcDC{3R&d`Hwt5}eWUQwfe1E`90mxEH9u{}sh_Y(AU|=K2fIUAns_epJ(7tEHNn14 uejx9CHBqkHs8g+iZTr4nW4$fq>$^{SducGft`_$I00001@Hop7=Hu<00002LSQri001OVOjJbx000;m81Tq3;D9iwPyqNQILI3q zpc4S#U|0Y9|M;kIFgS?EKB)}=000bhQchC<|NsC0|NsC0|Ns99#84&x008evL_t(| zoQ=^jcEcbH24J`WzoE68Ot5uqI05f*0S~!C_Y6tqY$Ri+cz^Wj&0`;zs{q@yTeW>i zfDnxRCxGALFb1NsF%)`R$fSieU5I8W;D=1_mI7&0v3Ec@Q(Bu0{&MV7xur15vDeRo zE{3#9@XHCQEp9)&Bez%N6Oz3oyPA1{&I~UT30}DbE&ld00000NkvXXu0mjfV?Lz# delta 672 zcmV;R0$=^`0;~m)7=H)`0002+Y<&j+0004VQb$4nuFf3k0007JNklv=pgf2F<8trTK@>Q#wK@&1p1m}3cT%3~tA>0K+DWGg2DE|RG z35*GZ_kjs4CztB%Zepn1$i!;>n8scsw^%ihrs&0JxsC4-}3;eJi=-mI{IK zAK-*iF`iIOC;(J1jR=CxB0pP3#+0hj2c^j5=}Dnb93%vb%f>N=17kL;`6CNSEWx;a z07i4+rq3~ez)p-)+%1*(;L`Q-U#NBKwf8(mv5=}|m6F~eJXSP2ui}BbPe6^mMr%yE%{TZ0|Fy6CtKDS=;82~TEZktiX zGS)JCZ9)kn>S}4aV^I8)1a8$p=R;