return form;
};
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ»ΠΈ Π²ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ, ΡΡΠ΅Π±ΡΡΡΠΈΠ΅ΡΡ Π½Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅, Π½ΠΎ Π½ΡΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π΅ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ².
ΠΠ°ΠΊΡΡΠ³Π»ΡΠ΅ΠΌΡΡ
ΠΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π»Ρ Π²ΡΠ²ΠΎΠ΄Π° ΡΠ΅ΠΊΡΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠ²ΠΎΠ΄ΠΈΡ Π·Π°ΠΏΡΠΎΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΠΊΡΠ΄Π° ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Π²Π΅ΡΡΠΈ ΡΠ΅ΠΊΡΡ.
tools.Text = function(event, cx) {
var text = prompt("Text:", "");
if (text) {
var pos = relativePos(event, cx.canvas);
cx.font = Math.max(7, cx.lineWidth) + "px sans-serif";
cx.fillText(text, pos.x, pos.y);
}
};
ΠΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΠΎΠ»Π΅ΠΉ Π΄Π»Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΡΠ΅ΠΊΡΡΠ° ΠΈ ΡΡΠΈΡΡΠ°, Π½ΠΎ Π΄Π»Ρ ΠΏΡΠΎΡΡΠΎΡΡ ΠΌΡ Π²ΡΠ΅Π³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΡΠΈΡΡ sans-serif ΠΈ ΡΠ°Π·ΠΌΠ΅Ρ ΡΡΠΈΡΡΠ°, ΠΊΠ°ΠΊ Ρ ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΠΊΠΈΡΡΠΈ. ΠΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ β 7 ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΌΠ΅Π½ΡΡΠ΅ ΡΠ΅ΠΊΡΡ Π±ΡΠ΄Π΅Ρ Π½Π΅ΡΠΈΡΠ°Π΅ΠΌΡΠΉ.
ΠΡΡ ΠΎΠ΄ΠΈΠ½ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π»Ρ ΠΊΠ°Π»ΡΠΊ-ΠΌΠ°Π»ΡΠΊ β βΠ°ΡΡΠΎΠ·ΠΎΠ»Ρβ. ΠΠ½Π° ΡΠΈΡΡΠ΅Ρ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠ΅ ΡΠΎΡΠΊΠΈ ΠΏΠΎΠ΄ ΠΊΠΈΡΡΡΡ, ΠΏΠΎΠΊΠ° Π½Π°ΠΆΠ°ΡΠ° ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΌΡΡΠΈ, ΡΠΎΠ·Π΄Π°Π²Π°Ρ Π±ΠΎΠ»Π΅Π΅ ΠΈΠ»ΠΈ ΠΌΠ΅Π½Π΅Π΅ Π³ΡΡΡΡΠ΅ ΡΠΎΡΠΊΠΈ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΊΠΎΡΠΎΡΡΠΈ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ ΠΊΡΡΡΠΎΡΠ°.
tools.Spray = function(event, cx) {
var radius = cx.lineWidth / 2;
var area = radius * radius * Math.PI;
var dotsPerTick = Math.ceil(area / 30);
var currentPos = relativePos(event, cx.canvas);
var spray = setInterval(function() {
for (var i = 0; i < dotsPerTick; i++) {
var offset = randomPointInRadius(radius);
cx.fillRect(currentPos.x + offset.x,
currentPos.y + offset.y, 1, 1);
}
}, 25);
trackDrag(function(event) {
currentPos = relativePos(event, cx.canvas);
}, function() {
clearInterval(spray);
});
};
ΠΡΡΠΎΠ·ΠΎΠ»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ setInterval Π΄Π»Ρ Π²ΡΠΏΠ»ΡΠ²ΡΠ²Π°Π½ΠΈΡ ΡΠ²Π΅ΡΠ½ΡΡ ΡΠΎΡΠ΅ΠΊ ΠΊΠ°ΠΆΠ΄ΡΠ΅ 25 ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄, ΠΏΠΎΠΊΠ° Π½Π°ΠΆΠ°ΡΠ° ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΌΡΡΠΈ. Π€ΡΠ½ΠΊΡΠΈΡ trackDrag ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ currentPos ΡΠΊΠ°Π·ΡΠ²Π°Π»Π° Π½Π° ΡΠ΅ΠΊΡΡΠ΅Π΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΡΡΡΠΎΡΠ°, ΠΈ Π΄Π»Ρ Π²ΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»Π° ΠΏΡΠΈ ΠΎΡΠΏΡΡΠΊΠ°Π½ΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ.
Π§ΡΠΎΠ±Ρ ΠΏΠΎΡΡΠΈΡΠ°ΡΡ, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΎΡΠ΅ΠΊ Π½ΡΠΆΠ½ΠΎ Π½Π°ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· ΠΏΠΎ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»Π°, ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠΎΠ΄ΡΡΠΈΡΡΠ²Π°Π΅Ρ ΡΠ°Π·ΠΌΠ΅Ρ ΠΎΠ±Π»Π°ΡΡΠΈ ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΠΊΠΈΡΡΠΈ ΠΈ Π΄Π΅Π»ΠΈΡ Π΅Π³ΠΎ Π½Π° 30. ΠΠ»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΠΎΠ΄ ΠΊΠΈΡΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ randomPointInRadius.
function randomPointInRadius(radius) {
for (;;) {
var x = Math.random() * 2 - 1;
var y = Math.random() * 2 - 1;
if (x * x + y * y <= 1)
return {x: x * radius, y: y * radius};
}
}
ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΎΡΠΊΠΈ Π² ΠΊΠ²Π°Π΄ΡΠ°ΡΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ (-1,-1) ΠΈ (1,1). ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠ΅ΠΎΡΠ΅ΠΌΡ ΠΠΈΡΠ°Π³ΠΎΡΠ°, ΠΎΠ½Π° ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ, Π»Π΅ΠΆΠΈΡ Π»ΠΈ ΡΠΎΠ·Π΄Π°Π½Π½Π°Ρ ΡΠΎΡΠΊΠ° Π²Π½ΡΡΡΠΈ ΠΊΡΡΠ³Π° Ρ ΡΠ°Π΄ΠΈΡΡΠΎΠΌ 1. ΠΠΎΠ³Π΄Π° ΡΠ°ΠΊΠ°Ρ ΡΠΎΡΠΊΠ° Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ, ΠΎΠ½Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π΅Ρ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ, ΡΠΌΠ½ΠΎΠΆΠ΅Π½Π½ΡΠ΅ Π½Π° ΡΠ°Π΄ΠΈΡΡ.
Π¦ΠΈΠΊΠ» Π½ΡΠΆΠ΅Π½ Π΄Π»Ρ ΡΠ°Π²Π½ΠΎΠΌΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΎΡΠ΅ΠΊ. ΠΡΠΎΡΠ΅ Π±ΡΠ»ΠΎ Π±Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠΎΡΠΊΠΈ Π² ΠΊΡΡΠ³Π΅, Π²Π·ΡΠ² ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠΉ ΡΠ³ΠΎΠ» ΠΈ ΡΠ°Π΄ΠΈΡΡ ΠΈ Π²ΡΠ·Π²Π°Π² Math.sin ΠΈ Math.cos Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠΎΡΠΊΠΈ. ΠΠΎ ΡΠΎΠ³Π΄Π° ΡΠΎΡΠΊΠΈ Ρ Π±ΠΎΠ»ΡΡΠ΅ΠΉ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΡΡ ΠΏΠΎΡΠ²Π»ΡΠ»ΠΈΡΡ Π±Ρ Π±Π»ΠΈΠΆΠ΅ ΠΊ ΡΠ΅Π½ΡΡΡ ΠΊΡΡΠ³Π°. ΠΡΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡΠΈ, Π½ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΡΠ»ΠΎΠΆΠ½Π΅Π΅, ΡΠ΅ΠΌ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ ΡΠΈΠΊΠ».
Π’Π΅ΠΏΠ΅ΡΡ Π½Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π΄Π»Ρ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π³ΠΎΡΠΎΠ²Π°. ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ ΠΊΠΎΠ΄ ΠΈ ΠΏΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅.
<link rel="stylesheet" href="css/paint.css">
<body>
<script>createPaint(document.body);</script>
</body>
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΡ
Π ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Π΅ΡΡ ΠΎΡΠ΅Π½Ρ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ»ΡΡΡΠΈΡΡ. ΠΠ°Π²Π°ΠΉΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π΅ΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ.
ΠΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠΈ
ΠΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Rectangle, Π·Π°ΠΏΠΎΠ»Π½ΡΡΡΠΈΠΉ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ (ΡΠΌ. ΠΌΠ΅ΡΠΎΠ΄ fillRect ΠΈΠ· Π³Π»Π°Π²Ρ 16) ΡΠ΅ΠΊΡΡΠΈΠΌ ΡΠ²Π΅ΡΠΎΠΌ. ΠΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ ΠΈΠ· ΡΠΎΠΉ ΡΠΎΡΠΊΠΈ, Π³Π΄Π΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π°ΠΆΠ°Π» ΠΊΠ½ΠΎΠΏΠΊΡ ΠΌΡΡΠΈ, ΠΈ Π΄ΠΎ ΡΠΎΠΉ ΡΠΎΡΠΊΠΈ, Π³Π΄Π΅ ΠΎΠ½ ΠΎΡΠΏΡΡΡΠΈΠ» ΠΊΠ½ΠΎΠΏΠΊΡ. ΠΠ°ΠΌΠ΅ΡΡΡΠ΅, ΡΡΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΡΠΈ Π»Π΅Π²Π΅Π΅ ΠΈΠ»ΠΈ Π²ΡΡΠ΅ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ.
ΠΠΎΠ³Π΄Π° ΡΡΠΎ Π·Π°ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, Π²Ρ Π·Π°ΠΌΠ΅ΡΠΈΡΠ΅, ΡΡΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ° Π΄ΡΠΎΠΆΠΈΡ ΠΈ Π΅Π³ΠΎ ΠΏΠ»ΠΎΡ ΠΎ Π²ΠΈΠ΄Π½ΠΎ. ΠΠΎΠΆΠ΅ΡΠ΅ Π»ΠΈ Π²Ρ ΠΏΡΠΈΠ΄ΡΠΌΠ°ΡΡ ΡΠΏΠΎΡΠΎΠ± ΠΏΠΎΠΊΠ°Π·Π° ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ° Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ ΠΌΡΡΠΈ, Π½ΠΎ ΡΡΠΎΠ±Ρ ΠΎΠ½ Π½Π΅ Π²ΡΠ²ΠΎΠ΄ΠΈΠ»ΡΡ Π½Π° Ρ ΠΎΠ»ΡΡ, ΠΏΠΎΠΊΠ° ΠΊΠ½ΠΎΠΏΠΊΠ° Π½Π΅ ΠΎΡΠΏΡΡΠ΅Π½Π°?
ΠΡΠ»ΠΈ Π½Π΅ ΠΏΡΠΈΠ΄ΡΠΌΠ°Π΅ΡΠ΅, Π²ΡΠΏΠΎΠΌΠ½ΠΈΡΠ΅ ΠΎ ΡΡΠΈΠ»Π΅ position: absolute, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΠΎΠ±ΡΡΠΆΠ΄Π°Π»ΠΈ Π² Π³Π»Π°Π²Π΅ 13, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ, ΡΡΠΎΠ±Ρ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡ ΡΠ·Π΅Π» ΠΏΠΎΠ²Π΅ΡΡ ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°. Π‘Π²ΠΎΠΉΡΡΠ²Π° pageX ΠΈ pageY ΡΠΎΠ±ΡΡΠΈΠΉ ΠΌΡΡΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΏΠΎΠ΄ ΠΌΡΡΡΡ, Π·Π°ΠΏΠΈΡΡΠ²Π°Ρ Π½ΡΠΆΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΡΡΠΈΠ»ΠΈ left, top, width ΠΈ height.
<script>
tools.Rectangle = function(event, cx) {
// ΠΠ°Ρ ΠΊΠΎΠ΄
};
</script>
<link rel="stylesheet" href="css/paint.css">
<body>
<script>createPaint(document.body);</script>
</body>
ΠΡΠ±ΠΎΡ ΡΠ²Π΅ΡΠ°
ΠΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠ°ΡΡΠΎ Π²ΡΡΡΠ΅ΡΠ°ΡΡΠΈΠΉΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ β Π²ΡΠ±ΠΎΡ ΡΠ²Π΅ΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ΅Π»ΡΠΊΠΎΠΌ ΠΌΡΡΠΈ Π½Π° ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ΅ Π²ΡΠ±ΡΠ°ΡΡ ΡΠ²Π΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΠΏΠΎΠ΄ ΠΊΡΡΡΠΎΡΠΎΠΌ. Π‘Π΄Π΅Π»Π°ΠΉΡΠ΅ ΡΠ°ΠΊΠΎΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ.
ΠΠ»Ρ Π΅Π³ΠΎ ΠΈΠ·Π³ΠΎΡΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠΌΡ Ρ ΠΎΠ»ΡΡΠ°. ΠΠ΅ΡΠΎΠ΄ toDataURL ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΡΠΎ ΠΈ Π΄Π΅Π»Π°Π», Π½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΏΠΈΠΊΡΠ΅Π»Π΅ ΠΈΠ· URL Ρ Π΄Π°Π½Π½ΡΠΌΠΈ ΡΠ»ΠΎΠΆΠ½ΠΎ. ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΌΡ Π²ΠΎΠ·ΡΠΌΡΠΌ ΠΌΠ΅ΡΠΎΠ΄ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° getImageData, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΠΈΠΉ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΡΠΉ ΠΊΡΡΠΎΠΊ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ Π² Π²ΠΈΠ΄Π΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌΠΈ width, height ΠΈ data. Π ΡΠ²ΠΎΠΉΡΡΠ²Π΅ data ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ ΠΌΠ°ΡΡΠΈΠ² ΡΠΈΡΠ΅Π» ΠΎΡ 0 Π΄ΠΎ 255, ΠΈ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΈΠΊΡΠ΅Π»Ρ Ρ ΡΠ°Π½ΠΈΡΡΡ ΡΠ΅ΡΡΡΠ΅ Π½ΠΎΠΌΠ΅ΡΠ° β red, green, blue ΠΈ alpha (ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎΡΡΡ).
ΠΡΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΠΈΡΠ»Π° ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΈΠΊΡΠ΅Π»Ρ Ρ ΠΎΠ»ΡΡΠ°, ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΡΠΎΡ ΠΏΡΡΡ (Π²ΡΠ΅ ΠΏΠΈΠΊΡΠ΅Π»ΠΈ β ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΡΠ΅ ΡΡΡΠ½ΡΠ΅), ΠΈ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΠΏΠΈΠΊΡΠ΅Π»Ρ ΠΎΠΊΡΠ°ΡΠ΅Π½ Π² ΠΊΡΠ°ΡΠ½ΡΠΉ ΡΠ²Π΅Ρ.
function pixelAt(cx, x, y) {
var data = cx.getImageData(x, y, 1, 1);
console.log(data.data);
}
var canvas = document.createElement("canvas");
var cx = canvas.getContext("2d");
pixelAt(cx, 10, 10);
// β [0, 0, 0, 0]
cx.fillStyle = "red";
cx.fillRect(10, 10, 1, 1);
pixelAt(cx, 10, 10);
// β [255, 0, 0, 255]
ΠΡΠ³ΡΠΌΠ΅Π½ΡΡ getImageData ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½Π°ΡΠ°Π»ΡΠ½ΡΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ° x ΠΈ y, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°ΠΌ Π½Π°Π΄ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ, Π·Π° ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΈΠ΄ΡΡ ΡΠΈΡΠΈΠ½Π° ΠΈ Π²ΡΡΠΎΡΠ°.
ΠΠ³Π½ΠΎΡΠΈΡΡΠΉΡΠ΅ ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎΡΡΡ Π² ΡΡΠΎΠΌ ΡΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠΈ, ΡΠ°Π±ΠΎΡΠ°ΠΉΡΠ΅ ΡΠΎΠ»ΡΠΊΠΎ Ρ ΠΏΠ΅ΡΠ²ΡΠΌΠΈ ΡΡΠ΅ΠΌΡ ΡΠΈΡΡΠ°ΠΌΠΈ Π΄Π»Ρ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΈΠΊΡΠ΅Π»Ρ. Π’Π°ΠΊΠΆΠ΅ Π½Π΅ Π²ΠΎΠ»Π½ΡΠΉΡΠ΅ΡΡ ΠΏΠΎ ΠΏΠΎΠ²ΠΎΠ΄Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΏΠΎΠ»Ρ color ΠΏΡΠΈ Π²ΡΠ±ΠΎΡΠ΅ ΡΠ²Π΅ΡΠ°. ΠΡΠΎΡΡΠΎ ΡΠ±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ fillStyle ΠΈ strokeStyle ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Ρ Π² ΡΠ²Π΅Ρ, ΠΎΠΊΠ°Π·Π°Π²ΡΠΈΠΉΡΡ ΠΏΠΎΠ΄ ΠΊΡΡΡΠΎΡΠΎΠΌ.
ΠΠΎΠΌΠ½ΠΈΡΠ΅, ΡΡΠΎ ΡΡΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π»ΡΠ±ΠΎΠΉ ΡΠ²Π΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ CSS, Π²ΠΊΠ»ΡΡΠ°Ρ Π·Π°ΠΏΠΈΡΡ Π²ΠΈΠ΄Π° rgb(R, G, B), ΠΊΠΎΡΠΎΡΡΡ Π²Ρ Π²ΠΈΠ΄Π΅Π»ΠΈ Π² Π³Π»Π°Π²Π΅ 15.
ΠΠ΅ΡΠΎΠ΄ getImageData ΠΈΠΌΠ΅Π΅Ρ ΡΠ΅ ΠΆΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ, ΡΡΠΎ ΠΈ toDataURL β ΠΎΠ½ Π²ΡΠ΄Π°ΡΡ ΠΎΡΠΈΠ±ΠΊΡ, ΠΊΠΎΠ³Π΄Π° Π½Π° Ρ ΠΎΠ»ΡΡΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡ ΠΏΠΈΠΊΡΠ΅Π»ΠΈ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ, ΡΠΊΠ°ΡΠ°Π½Π½ΠΎΠΉ Ρ Π΄ΡΡΠ³ΠΎΠ³ΠΎ Π΄ΠΎΠΌΠ΅Π½Π°. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π·Π°ΠΏΠΈΡΡ try/catch Π΄Π»Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ± ΡΡΠΈΡ ΠΎΡΠΈΠ±ΠΊΠ°Ρ ΡΠ΅ΡΠ΅Π· ΠΎΠΊΠ½ΠΎ alert.
<script>
tools["Pick color"] = function(event, cx) {
// Your code here.
};
</script>
<link rel="stylesheet" href="css/paint.css">
<body>
<script>createPaint(document.body);</script>
</body>
ΠΠ°Π»ΠΈΠ²ΠΊΠ°
ΠΡΠΎ ΡΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΠΎΠ΅, ΡΠ΅ΠΌ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠ΅, ΠΈ ΠΎΠ½ΠΎ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π½Π΅ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ Ρ ΠΈΡΡΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ. Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ Ρ Π²Π°Ρ Π΅ΡΡΡ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ ΠΈ ΡΠ΅ΡΠΏΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Π΄ Π½Π°ΡΠ°Π»ΠΎΠΌ ΡΠ°Π±ΠΎΡΡ, ΠΈ Π½Π΅ ΠΎΡΡΠ°ΠΈΠ²Π°ΠΉΡΠ΅ΡΡ, Π΅ΡΠ»ΠΈ ΡΡΠ°Π·Ρ Ρ Π²Π°Ρ ΡΡΠΎ-ΡΠΎ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»ΡΡΠ°ΡΡΡΡ.
ΠΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π·Π°Π»ΠΈΠ²ΠΊΠΈ ΠΎΠΊΡΠ°ΡΠΈΠ²Π°Π΅Ρ ΠΏΠΈΠΊΡΠ΅Π»Ρ ΠΏΠΎΠ΄ ΠΊΡΡΡΠΎΡΠΎΠΌ ΠΌΡΡΠΈ ΠΈ ΠΏΠΎΠ΄ ΡΠ΅Π»ΠΎΠΉ Π³ΡΡΠΏΠΏΠΎΠΉ ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ Π²ΠΎΠΊΡΡΠ³ Π½Π΅Π³ΠΎ, ΠΈΠΌΠ΅ΡΡΠΈΡ ΡΠΎΡ ΠΆΠ΅ ΡΠ²Π΅Ρ. ΠΠ»Ρ ΡΠ΅Π»Π΅ΠΉ Π½Π°ΡΠ΅Π³ΠΎ ΡΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΡ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΡΡΠΈΡΠ°ΡΡ, ΡΡΠΎ ΡΡΠ° Π³ΡΡΠΏΠΏΠ° Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π²ΡΠ΅ ΠΏΠΈΠΊΡΠ΅Π»ΠΈ, Π΄ΠΎ ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΡΠ°ΡΡΡΡ ΠΎΡ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ, Π΄Π²ΠΈΠ³Π°ΡΡΡ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΏΠΈΠΊΡΠ΅Π»Ρ ΠΏΠΎ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΠΈ ΠΈ Π²Π΅ΡΡΠΈΠΊΠ°Π»ΠΈ (Π½ΠΎ Π½Π΅ ΠΏΠΎ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ), Π½Π΅ ΠΏΡΠΈΠΊΠ°ΡΠ°ΡΡΡ ΠΊ ΠΏΠΈΠΊΡΠ΅Π»ΡΠΌ, ΡΠ΅ΠΉ ΡΠ²Π΅Ρ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ.
Π‘Π»Π΅Π΄ΡΡΡΠ°Ρ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ° Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅Ρ Π½Π°Π±ΠΎΡ ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ, ΠΎΠΊΡΠ°ΡΠΈΠ²Π°Π΅ΠΌΡΡ , ΠΊΠΎΠ³Π΄Π° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π·Π°Π»ΠΈΠ²ΠΊΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΊ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½Π½ΠΎΠΌΡ ΠΏΠΈΠΊΡΠ΅Π»Ρ:
ΠΠ°Π»ΠΈΠ²ΠΊΠ° Π½Π΅ ΠΏΡΠΎΡΠ΅ΠΊΠ°Π΅Ρ ΡΠ΅ΡΠ΅Π· Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΡΠ½ΡΠ΅ ΡΠ°Π·ΡΡΠ²Ρ ΠΈ Π½Π΅ ΠΊΠ°ΡΠ°Π΅ΡΡΡ ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ, ΠΊΠΎΡΠΎΡΡΡ Π½Π΅Π»ΡΠ·Ρ Π΄ΠΎΡΡΠΈΡΡ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΠ²Π΅ΡΠ°, ΡΡΠΎ ΠΈ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ.
ΠΠ°ΠΌ Π²Π½ΠΎΠ²Ρ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ getImageData Π΄Π»Ρ Π²ΡΡΡΠ½Π΅Π½ΠΈΡ ΡΠ²Π΅ΡΠ° ΠΏΠΈΠΊΡΠ΅Π»Ρ. Π‘ΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, ΡΠ΄ΠΎΠ±Π½Π΅Π΅ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π²ΡΡ ΠΊΠ°ΡΡΠΈΠ½ΠΊΡ Π·Π° ΡΠ°Π·, Π° ΠΏΠΎΡΠΎΠΌ ΡΠΆΠ΅ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΏΠΎ ΠΏΠΈΠΊΡΠ΅Π»ΡΠΌ ΠΈΠ· ΠΏΠΎΠ»ΡΡΠΈΠ²ΡΠ΅Π³ΠΎΡΡ ΠΌΠ°ΡΡΠΈΠ²Π°. ΠΠΈΠΊΡΠ΅Π»ΠΈ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Ρ ΡΡ ΠΎΠΆΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Ρ ΡΠ΅ΡΡΡΠΊΠΎΠΉ ΠΈΠ· Π³Π»Π°Π²Ρ 7, ΠΏΠΎ ΡΡΠ΄Π°ΠΌ, ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΏΠΈΠΊΡΠ΅Π»Ρ ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ ΡΠ΅ΡΡΡΡΠΌΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ. ΠΠ΅ΡΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΏΠΈΠΊΡΠ΅Π»Ρ Ρ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ°ΠΌΠΈ (x,y) Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π½Π° ΠΏΠΎΠ·ΠΈΡΠΈΠΈ (x + y Γ width) Γ 4.
ΠΠΊΠ»ΡΡΠ°ΠΉΡΠ΅ Π² ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΡΠ²ΡΡΡΠΎΠ΅ ΡΠΈΡΠ»ΠΎ (Π°Π»ΡΡΠ°), ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ°Π·Π»ΠΈΡΠ°ΡΡ ΡΡΡΠ½ΡΠ΅ ΠΈ ΠΏΡΡΡΡΠ΅ (ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΡΠ΅) ΠΏΠΈΠΊΡΠ΅Π»ΠΈ.
ΠΠΎΠΈΡΠΊ ΡΠΎΡΠ΅Π΄Π½ΠΈΡ ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΠ²Π΅ΡΠ° ΡΡΠ΅Π±ΡΠ΅Ρ ΠΏΡΠΎΠΉΡΠΈ ΠΏΠΎ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠΈ ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ Π²Π²Π΅ΡΡ , Π²Π½ΠΈΠ·, Π²Π»Π΅Π²ΠΎ ΠΈ Π²ΠΏΡΠ°Π²ΠΎ, ΠΏΠΎΠΊΠ° ΡΠ°ΠΌ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ ΠΏΠΈΠΊΡΠ΅Π»ΠΈ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΠ²Π΅ΡΠ°. ΠΠ° ΠΏΠ΅ΡΠ²ΡΠΉ ΠΏΡΠΎΡ ΠΎΠ΄ Π²ΡΡ Π³ΡΡΠΏΠΏΡ ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ Π½Π°ΠΉΡΠΈ Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ. ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ-ΡΠΎ ΠΏΠΎΡ ΠΎΠΆΠ΅Π΅ Π½Π° ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ Π² ΡΠ΅Π³ΡΠ»ΡΡΠ½ΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡΡ , ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠ΅ Π² Π³Π»Π°Π²Π΅ 9. ΠΠΎΠ³Π΄Π° Ρ Π²Π°Ρ Π΅ΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ³ΠΎ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ, Π½ΡΠΆΠ½ΠΎ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ Π²ΡΠ΅ ΡΠ΅, ΠΏΠΎ ΠΊΠΎΡΠΎΡΡΠΌ Π²Ρ ΠΏΡΡΠΌΠΎ ΡΠ΅ΠΉΡΠ°Ρ Π½Π΅ ΠΈΠ΄ΡΡΠ΅, ΠΈ ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΠΈΡ ΠΏΠΎΠ·ΠΆΠ΅, ΠΏΠΎ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΡΠ°Π³Π°.