Как масштабировать ширину изображения RGB в байтовом массиве - PullRequest
0 голосов
/ 25 февраля 2020

Мой мозг сегодня не работает должным образом, и я не могу этого понять.

У меня есть данные изображения RGBA, хранящиеся в Uint8Array(), и мне нужно только масштабировать ширину.

var w = 160;
var h = 200;
var depth=4;
var pixels = new Uint8Array(w*h*depth);

Мне нужно масштабировать пиксели от array до 320x200, и каждая моя попытка заканчивалась искаженным изображением.

1 Ответ

0 голосов
/ 25 февраля 2020

Благодаря Ив Даусту Я вновь обратился к некоторым своим старым попыткам решить эту проблему, продублировав каждый кусок 4 по месту назначения, и теперь я получил его на работу. Так что спасибо Ив :) Я не знаю, что я сделал не так раньше.

Это рабочий код, с которым я закончил. Я на 100% уверен, что это можно сделать по-другому и лучше, но на данный момент я доволен:)

Utils.prototype.scalePixelsInWidth = function(pixels) {

  var w = 320;
  var h = 200;
  var scanlineWidth = w*4;
  var scaledPixels = new Uint8Array(w*h*4);

  var a = 0;
  for(let row=0;row<h;row++) {
    var col2 = 0;
    for(let col=0;col<w;col++) {
      var srcIndex = col2*4 + (row*(w/2)*4);
      var destIndex = col*4 + (row * scanlineWidth);
      scaledPixels[destIndex+0] = pixels[srcIndex+0];
      scaledPixels[destIndex+1] = pixels[srcIndex+1];
      scaledPixels[destIndex+2] = pixels[srcIndex+2];
      scaledPixels[destIndex+3] = pixels[srcIndex+3];
      a++;
      if (a > 1) {
        a = 0;
        col2++;
      }
    }
  }

  return scaledPixels;

}
...