Browse Source

Fixing putImageData()

v1.x
Tj Holowaychuk 15 years ago
parent
commit
9dcda666e4
  1. 21
      src/CanvasRenderingContext2d.cc

21
src/CanvasRenderingContext2d.cc

@ -401,20 +401,25 @@ Context2d::PutImageData(const Arguments &args) {
int srcStride = arr->stride() int srcStride = arr->stride()
, dstStride = context->canvas()->stride(); , dstStride = context->canvas()->stride();
int dx = args[1]->NumberValue() int sx = 0
, dy = args[1]->NumberValue() , sy = 0
, dx = args[1]->NumberValue()
, dy = args[2]->NumberValue()
, dw = arr->width() , dw = arr->width()
, dh = arr->height(); , dh = arr->height();
uint8_t *srcRows = src + sy + srcStride + sx * 4;
for (int y = 0; y < dh; ++y) { for (int y = 0; y < dh; ++y) {
uint32_t *srcRow = (uint32_t *)(src + srcStride * (y + dy)); uint32_t *row = (uint32_t *)(dst + dstStride * (y + dy));
uint32_t *dstRow = (uint32_t *)(dst + dstStride * (y + dy));
for (int x = 0; x < dw; ++x) { for (int x = 0; x < dw; ++x) {
uint32_t *srcPixel = srcRow + x + dx; int bx = x * 4;
uint32_t *dstPixel = dstRow + x + dx; uint32_t *pixel = row + x + dx;
*dstPixel = *srcPixel; *pixel = srcRows[bx + 3] << 24
| srcRows[bx + 0] << 16
| srcRows[bx + 1] << 8
| srcRows[bx + 2];
} }
srcRows += srcStride;
} }
// TODO: cairo_surface_mark_dirty_rectangle // TODO: cairo_surface_mark_dirty_rectangle

Loading…
Cancel
Save