gsdx-png: use array interface instead of set_pixel

Doc says it is "non-checking equivalent of set_pixel". Still slow as ass

At least syntax is nicer
This commit is contained in:
Gregory Hainaut 2015-05-18 17:23:43 +02:00
parent a4d6722b26
commit 388f46b577
1 changed files with 32 additions and 43 deletions

View File

@ -37,8 +37,7 @@ namespace GSPng {
png::image<png::gray_pixel> img(w, h); png::image<png::gray_pixel> img(w, h);
for(int y = 0; y < h; y++, data += pitch) { for(int y = 0; y < h; y++, data += pitch) {
for (int x = 0; x < w; x++) { for (int x = 0; x < w; x++) {
png::gray_pixel p(data[x]); img[y][x] = png::gray_pixel(data[x]);
img.set_pixel(x, y, p);
} }
} }
img.write(root + "_R8.png"); img.write(root + "_R8.png");
@ -50,8 +49,7 @@ namespace GSPng {
png::image<png::gray_pixel_16> img(w, h); png::image<png::gray_pixel_16> img(w, h);
for(int y = 0; y < h; y++, data += pitch) { for(int y = 0; y < h; y++, data += pitch) {
for (int x = 0; x < w; x++) { for (int x = 0; x < w; x++) {
png::gray_pixel_16 p(data[2*x]); img[y][x] = png::gray_pixel_16(data[2*x]);
img.set_pixel(x, y, p);
} }
} }
img.write(root + "_R16.png"); img.write(root + "_R16.png");
@ -64,11 +62,8 @@ namespace GSPng {
png::image<png::gray_pixel_16> img_lsb(w, h); png::image<png::gray_pixel_16> img_lsb(w, h);
for(int y = 0; y < h; y++, data += pitch) { for(int y = 0; y < h; y++, data += pitch) {
for (int x = 0; x < w; x++) { for (int x = 0; x < w; x++) {
png::gray_pixel_16 msb(data[2*x]); img_msb[y][x] = png::gray_pixel_16(data[2*x]);
png::gray_pixel_16 lsb(data[2*x+2]); img_lsb[y][x] = png::gray_pixel_16(data[2*x+2]);
img_msb.set_pixel(x, y, msb);
img_lsb.set_pixel(x, y, lsb);
} }
} }
img_msb.write(root + "_R32I_msb.png"); img_msb.write(root + "_R32I_msb.png");
@ -88,8 +83,8 @@ namespace GSPng {
png::gray_pixel_16 msb(depth >> 16); png::gray_pixel_16 msb(depth >> 16);
png::gray_pixel_16 lsb((depth >> 16) ? 0xFFFF : depth & 0xFFFF); png::gray_pixel_16 lsb((depth >> 16) ? 0xFFFF : depth & 0xFFFF);
img_msb.set_pixel(x, y, msb); img_msb[y][x] = msb;
img_lsb.set_pixel(x, y, lsb); img_lsb[y][x] = lsb;
} }
} }
img_msb.write(root + "_msb.png"); img_msb.write(root + "_msb.png");
@ -102,8 +97,7 @@ namespace GSPng {
png::image<png::gray_pixel> img_alpha(w, h); png::image<png::gray_pixel> img_alpha(w, h);
for(int y = 0; y < h; y++, data += pitch) { for(int y = 0; y < h; y++, data += pitch) {
for (int x = 0; x < w; x++) { for (int x = 0; x < w; x++) {
png::gray_pixel pa(data[4*x+3]); img_alpha[y][x] = png::gray_pixel(data[4*x+3]);
img_alpha.set_pixel(x, y, pa);
} }
} }
img_alpha.write(root + "_alpha.png"); img_alpha.write(root + "_alpha.png");
@ -115,8 +109,7 @@ namespace GSPng {
png::image<png::rgb_pixel> img_opaque(w, h); png::image<png::rgb_pixel> img_opaque(w, h);
for(int y = 0; y < h; y++, data += pitch) { for(int y = 0; y < h; y++, data += pitch) {
for (int x = 0; x < w; x++) { for (int x = 0; x < w; x++) {
png::rgb_pixel po(data[4*x+0], data[4*x+1], data[4*x+2]); img_opaque[y][x] = png::rgb_pixel(data[4*x+0], data[4*x+1], data[4*x+2]);
img_opaque.set_pixel(x, y, po);
} }
} }
img_opaque.write(root + ".png"); img_opaque.write(root + ".png");
@ -128,8 +121,7 @@ namespace GSPng {
png::image<png::rgba_pixel> img(w, h); png::image<png::rgba_pixel> img(w, h);
for(int y = 0; y < h; y++, data += pitch) { for(int y = 0; y < h; y++, data += pitch) {
for (int x = 0; x < w; x++) { for (int x = 0; x < w; x++) {
png::rgba_pixel p(data[4*x+0], data[4*x+1], data[4*x+2], data[4*x+3]); img[y][x] = png::rgba_pixel(data[4*x+0], data[4*x+1], data[4*x+2], data[4*x+3]);
img.set_pixel(x, y, p);
} }
} }
img.write(root + "_full.png"); img.write(root + "_full.png");
@ -142,11 +134,8 @@ namespace GSPng {
png::image<png::gray_pixel> img_alpha(w, h); png::image<png::gray_pixel> img_alpha(w, h);
for(int y = 0; y < h; y++, data += pitch) { for(int y = 0; y < h; y++, data += pitch) {
for (int x = 0; x < w; x++) { for (int x = 0; x < w; x++) {
png::rgb_pixel po(data[4*x+0], data[4*x+1], data[4*x+2]); img_opaque[y][x] = png::rgb_pixel(data[4*x+0], data[4*x+1], data[4*x+2]);
img_opaque.set_pixel(x, y, po); img_alpha[y][x] = png::gray_pixel(data[4*x+3]);
png::gray_pixel pa(data[4*x+3]);
img_alpha.set_pixel(x, y, pa);
} }
} }
img_opaque.write(root + ".png"); img_opaque.write(root + ".png");