スポンサーリンク

画素番号と画像幅からx,y座標を求める…のをScript-Fuでやる

式自体は何のことはない。問題はGimpのScript-Fuでやりたいので結構手間取った。

さすがにGimpのScript-Fuコンソールから実験するのは環境が悪すぎたので、RacketをインストールしてScheme環境を作った。

https://racket-lang.org/

Scheme版

remainderは剰余。

;; 画素番号と画像幅からx座標を計算
(define (getx pos width)
  (remainder pos width)
)

;; x座標と画素番号と画像幅からy座標を計算し、x,yで返す
(define (getxy x pos width)
  (list
    x
    (/ (- pos x) width)
  )
)

;; 画素番号と画像幅からx,y座標を計算する
(define (2dcoord pos width)
    (getxy (getx pos width) pos width)
)

Gimp Script-Fu上で実行

width=50の画像の1162番のx,y座標は(12,23)。

C++版

// x,yから画素番号を算出
inline int calcpos(int x, int y,int width) {
  return
    y * width + x;
}

// 画素番号と画像幅からx座標を計算
int getx(int pos, int width) {
  return pos % width;
}

// 画素番号とx座標と画像幅からy座標を計算
int gety(int x, int pos, int width) {
  return (pos - x) / width;
}


int main()
{
  int width = 50;
  int height = 25;

  int x = 12;
  int y = 23;

  int pos = calcpos(x, y, width); //1162

  printf("pos %d\n", pos);

  int xx = getx(pos, width);
  int yy = gety(xx, pos, width);

  printf("xx %d\n", xx);
  printf("yy %d\n", yy);

}

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


この記事のトラックバックURL: