document.getElementById('convertBtn').onclick = function() { const fileInput = document.getElementById('imageInput'); const width = parseInt(document.getElementById('width').value, 10); const height = parseInt(document.getElementById('height').value, 10); if (!fileInput.files.length) { alert('Please select an image file.'); return; } const file = fileInput.files[0]; const reader = new FileReader(); reader.onload = function(e) { const img = new Image(); img.onload = function() { const canvas = document.getElementById('canvas'); canvas.width = width; canvas.height = height; const ctx = canvas.getContext('2d'); ctx.clearRect(0, 0, width, height); ctx.drawImage(img, 0, 0, width, height); // Preview document.getElementById('preview').innerHTML = ''; const previewImg = new Image(); previewImg.src = canvas.toDataURL(); document.getElementById('preview').appendChild(previewImg); // Get pixel data const imageData = ctx.getImageData(0, 0, width, height).data; const buf = new Uint8Array(width * height * 2); for (let i = 0, j = 0; i < imageData.length; i += 4, j += 2) { let r = imageData[i]; let g = imageData[i+1]; let b = imageData[i+2]; // Convert to BGR565 let bgr565 = ((b & 0xF8) << 8) | ((g & 0xFC) << 3) | (r >> 3); // Invert bgr565 = 0xFFFF - bgr565; buf[j] = bgr565 & 0xFF; buf[j+1] = (bgr565 >> 8) & 0xFF; } // Download const blob = new Blob([buf], {type: 'application/octet-stream'}); const a = document.createElement('a'); a.href = URL.createObjectURL(blob); a.download = file.name.replace(/\.[^.]+$/, '') + `_${width}x${height}_bgr565inv.raw`; a.click(); }; img.src = e.target.result; }; reader.readAsDataURL(file); };