Lua (กรอบความรัก 2 มิติ), 498 ไบต์
ฉันทำแบบฝึกหัดนี้มากขึ้นสำหรับตัวเองดังนั้นจึงไม่สั้นเท่าที่ควร (แม้ว่าฉันพยายามเล่นกอล์ฟ) แต่ฉันต้องการเพิ่มที่นี่เพราะฉันคิดว่าฉันทำได้ดี แม้ว่าฉันจะสายเกินไป
ที่นี่รหัส golfed ภายใต้มันเป็นรุ่นที่อธิบายและไม่ได้แยก
l=love g,p,rm,bm,gm,s=l.graphics,0,1,1,1,[[uniform float m[4];vec4 effect(vec4 co,Image t,vec2 c,vec2 s){vec4 p=Texel(t,c);p.r=p.r*m[0];p.b=p.b*m[1];p.g=p.g*m[2];return p;}]]t=g.setShader h=g.newShader(s)function l.draw()h:send("m",rm,gm,bm)if p~=0 then t(h)g.draw(p)t()end end function l.filedropped(f)a=f:getFilename()p=g.newImage(f)end function l.keypressed(k)if k=="0"then rm,gm,bm=1,1,1 end if k=="1"then rm,gm,bm=1,0,0 end if k=="2"then rm,gm,bm=0,1,0 end if k=="3"then rm,gm,bm=0,0,1 end end
นี่คือรหัสที่จะต้องได้รับไฟล์ * .jpg หลังจากแทรกภาพแล้วคุณสามารถกดปุ่มตัวเลขสำหรับช่องสีแดง (1) สีเขียว (2) หรือสีน้ำเงิน (3) นอกจากนี้เมื่อต้องการดูรูปภาพเริ่มต้นอีกครั้งกด 0 จริง ๆ แล้วมันเพิ่งแสดงรูปภาพในหน้าต่าง
l=love
g=l.graphics
p=0
rm,bm,gm=1,1,1
s = [[uniform float m[4];
vec4 effect(vec4 co,Image t,vec2 c,vec2 s){vec4 p=Texel(t,c);p.r = p.r * m[0];p.b = p.b * m[1]; p.g = p.g * m[2]; return p;}
]]
sh=g.newShader(s)
function l.draw()
sh:send("m",rm,gm,bm)
if p~=0 then
g.setShader(sh)
g.draw(p)
g.setShader()
end
end
function l.filedropped(f)
a=f:getFilename()
p=g.newImage(f)
end
function l.keypressed(k)
if k=="0"then rm,gm,bm=1,1,1 end
if k=="1"then rm,gm,bm=1,0,0 end
if k=="2"then rm,gm,bm=0,1,0 end
if k=="3"then rm,gm,bm=0,0,1 end
end
ส่วนสำคัญที่ทำงานได้ทั้งหมดคือ shader ซึ่งเป็นการประกาศสตริงขนาดเล็กที่จุดเริ่มต้นหรือไม่มีการโยง:
uniform float m[4];
vec4 effect(vec4 co,Image t,vec2 c,vec2 s)
{
vec4 p=Texel(t,c);
p.r = p.r * m[0];
p.b = p.b * m[1];
p.g = p.g * m[2];
return p;
}
ซึ่งได้รับพิกเซลที่แท้จริงของภาพและเพียงแค่แสดงช่องตามที่ต้องการ
ภาพทดสอบของฉันและเอาท์พุทที่แตกต่างกันสำหรับช่องสัญญาณ (อีกอย่างแน่นอนเช่นกัน)