zhangyuanwei / node-images

Cross-platform image decoder(png/jpeg/gif) and encoder(png/jpeg) for Nodejs
https://npmjs.org/package/images
MIT License
1.56k stars 205 forks source link

[Bug]draw(img, x, y)方法的x,y不能为负数 #120

Closed RockyF closed 7 years ago

RockyF commented 7 years ago

经测试,如果坐标小于0,就会绘制失败,请修复。

oxUnd commented 7 years ago

此处坐标没有负数的概念,OK ?

RockyF commented 7 years ago

画一张png上去,我只想画右下角的部分,那坐标不是会小于0吗!

oxUnd commented 7 years ago

坐标是倒置的,左上角是原点(0,0),向下 y,向右 x。

RockyF commented 7 years ago

我看了Image.cc的源码,发现void PixelArray::Draw(PixelArray *src, size_t x, size_t y)方法里,如果x或y 小于0,那么if(x < dw && y < dh){肯定为false,所以没有画出来。

RockyF commented 7 years ago

image 我想把圆的图画到方的图上难道不行吗?这样圆的图的坐标不是要小于0了吗!

oxUnd commented 7 years ago

你可以先画方块,然后再画圆圈。

RockyF commented 7 years ago

圆和方只是举例。。。你可以试试,draw()如果坐标小于0会不会成功。

oxUnd commented 7 years ago

@RockyF 当然不成功啊,就没有这样的坐标设定。你能不能去看看 convas 的坐标相关的知识再来讨论这个问题?


这么说不太准确,这个库的坐标就是 左上角 是原点,x 向右,y 向下。你必须遵循这个坐标设定才能做一些事情。

RockyF commented 7 years ago

亲测,HTML5的canvas在draw的时候坐标都能小于0。 你的意思就是说这个库在draw的时候坐标不能小于0? 怎么会没有这种需求呢?

zhangyuanwei commented 7 years ago

我知道 @RockyF 啥意思了:刚看了下现在的代码,

    x = args[1]->Uint32Value();
    y = args[2]->Uint32Value();

    dst->pixels->Draw(src->pixels, x, y);

写的时候直接认为是正数了。。 -_- !!!

oxUnd commented 7 years ago

我感觉没必要实现负坐标 @zhangyuanwei ,实现它搞毛?

RockyF commented 7 years ago

那是因为你 @xiangshouding 暂时没有这种需求而已,不能保证别人没有这种需求。

zhangyuanwei commented 7 years ago

@RockyF 现在改代码再编译发布有点麻烦,要是应急得话,可以用现有API做出来。就是先把圆形做裁剪,然后再画到矩形左上角上。