img2brush: allow customising the channel to pull from

This commit is contained in:
Starbeamrainbowlabs 2022-09-26 03:27:58 +01:00
parent dea51cb9a3
commit 410841562a
Signed by: sbrl
GPG key ID: 1BE5172E637709C2
2 changed files with 32 additions and 3 deletions

View file

@ -13,6 +13,23 @@ window.addEventListener("load", () => {
}) })
}); });
function get_source_channel_offset() {
const select = document.querySelector("#img2brush-channel");
console.info(`get_source_channel_offset: channel is ${select.value}`)
switch(select.value) {
case "alpha":
return 3;
case "red":
return 0;
case "green":
return 1;
case "blue":
return 2;
default:
throw new Error(`Error : Unknown channel name ${select.value}.`);
}
}
function select_output() { function select_output() {
let output = document.querySelector("#brushimg-tsv"); let output = document.querySelector("#brushimg-tsv");
@ -26,7 +43,6 @@ function select_output() {
selection.addRange(range); selection.addRange(range);
} }
function handle_drag_enter(event) { function handle_drag_enter(event) {
event.target.classList.add("dropzone-active"); event.target.classList.add("dropzone-active");
} }
@ -80,12 +96,15 @@ function handle_new_image(image) {
} }
function pixels2tsv(pixels) { function pixels2tsv(pixels) {
const offset = get_source_channel_offset();
console.info(`pixels2tsv: offset is ${offset}`);
let result = ""; let result = "";
for(let y = 0; y < pixels.height; y++) { for(let y = 0; y < pixels.height; y++) {
let row = []; let row = [];
for(let x = 0; x < pixels.width; x++) { for(let x = 0; x < pixels.width; x++) {
// No need to rescale here - this is done automagically by WorldEditAdditions. // No need to rescale here - this is done automagically by WorldEditAdditions.
row.push(pixels.data[((y*pixels.width + x) * 4) + 3] / 255); // r/b/g/alpha
row.push(pixels.data[((y*pixels.width + x) * 4) + offset] / 255);
} }
result += row.join(`\t`) + `\n`; result += row.join(`\t`) + `\n`;
} }

View file

@ -6,7 +6,17 @@ title: Image to brush converter
<section class="panel-generic"> <section class="panel-generic">
<h1>Image to sculpting brush converter</h1> <h1>Image to sculpting brush converter</h1>
<p>Convert any image to a sculpting brush here! The <strong>alpha (opacity) channel</strong> is used to determine the weight of the brush - <strong>all colour is ignored</strong>.</p> <p>Convert any image to a sculpting brush here!</p>
<p>
<strong>Use this channel to convert:</strong>
<select name="img2brush-channel" id="img2brush-channel">
<option value="alpha" selected>Alpha (opacity)</option>
<option value="red">Red</option>
<option value="green">Green</option>
<option value="blue">Blue</option>
</select>
</p>
<p>Only the selected channel is used to determine the weight of the brush - <strong>all other channels are ignored</strong>! Change the channel option <strong>before</strong> you drag + drop the image onto this page.</p>
</section> </section>
<section id="dropzone" class="bigbox panel-generic"> <section id="dropzone" class="bigbox panel-generic">