Lua(love2dフレームワーク)、498バイト
私はこれを自分自身のためのエクササイズとして行ったので、短くすることはできませんでしたが(ゴルフをやろうとしましたが)、ここに追加したかったのは良いことだと思います。遅すぎても。
ここでは、その下のゴルフコードは、説明されたもつれのないバージョンです。
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
すべての作業を行う重要な部分はシェーダーです。シェーダーは、先頭または小さい文字列の宣言です。
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;
}
画像の実際のピクセルを取得し、必要に応じてチャンネルを表示します。
私のテスト画像とチャンネルのさまざまな出力(もちろん他の出力も)