fix crash on loading png in subbox
This commit is contained in:
parent
a581671c53
commit
0fb839f9b9
|
@ -278,7 +278,7 @@ public:
|
|||
png_bytep row_pointer = m_rowBuffer.get();
|
||||
png_read_row(m_png_ptr, row_pointer, NULL);
|
||||
|
||||
writeRow(buffer);
|
||||
writeRow(buffer, x0, x1);
|
||||
|
||||
if (m_tempBuffer && m_y == ly) {
|
||||
m_tempBuffer.reset();
|
||||
|
@ -320,7 +320,7 @@ public:
|
|||
png_bytep row_pointer = m_rowBuffer.get();
|
||||
png_read_row(m_png_ptr, row_pointer, NULL);
|
||||
|
||||
writeRow(buffer);
|
||||
writeRow(buffer, x0, x1);
|
||||
|
||||
if (m_tempBuffer && m_y == ly) {
|
||||
m_tempBuffer.reset();
|
||||
|
@ -347,7 +347,7 @@ public:
|
|||
|
||||
Tiio::RowOrder getRowOrder() const override { return Tiio::TOP2BOTTOM; }
|
||||
|
||||
void writeRow(char *buffer) {
|
||||
void writeRow(char *buffer, int x0, int x1) {
|
||||
if (m_color_type == PNG_COLOR_TYPE_RGB_ALPHA ||
|
||||
m_color_type == PNG_COLOR_TYPE_GRAY_ALPHA ||
|
||||
m_color_type == PNG_COLOR_TYPE_PALETTE) { // PNG_COLOR_TYPE_PALETTE is
|
||||
|
@ -355,7 +355,8 @@ public:
|
|||
if (m_bit_depth == 16) {
|
||||
TPixel32 *pix = (TPixel32 *)buffer;
|
||||
int i = -2;
|
||||
for (int j = 0; j < m_info.m_lx; j++) {
|
||||
i += x0 * 2 * 4;
|
||||
for (int j = x0; j <= x1; j++) {
|
||||
#if defined(TNZ_MACHINE_CHANNEL_ORDER_MRGB)
|
||||
pix[j].m = m_rowBuffer[i = i + 2];
|
||||
pix[j].r = m_rowBuffer[i = i + 2];
|
||||
|
@ -386,7 +387,8 @@ public:
|
|||
} else {
|
||||
TPixel32 *pix = (TPixel32 *)buffer;
|
||||
int i = 0;
|
||||
for (int j = 0; j < m_info.m_lx; j++) {
|
||||
i += x0 * 4;
|
||||
for (int j = x0; j <= x1; j++) {
|
||||
#if defined(TNZ_MACHINE_CHANNEL_ORDER_MRGB)
|
||||
pix[j].m = m_rowBuffer[i++];
|
||||
pix[j].r = m_rowBuffer[i++];
|
||||
|
@ -419,7 +421,8 @@ public:
|
|||
if (m_bit_depth == 16) {
|
||||
TPixel32 *pix = (TPixel32 *)buffer;
|
||||
int i = -2;
|
||||
for (int j = 0; j < m_info.m_lx; j++) {
|
||||
i += x0 * 2 * 3;
|
||||
for (int j = x0; j <= x1; j++) {
|
||||
#if defined(TNZ_MACHINE_CHANNEL_ORDER_MRGB) || \
|
||||
defined(TNZ_MACHINE_CHANNEL_ORDER_RGBM)
|
||||
pix[j].r = m_rowBuffer[i = i + 2];
|
||||
|
@ -438,7 +441,8 @@ public:
|
|||
} else {
|
||||
TPixel32 *pix = (TPixel32 *)buffer;
|
||||
int i = 0;
|
||||
for (int j = 0; j < m_info.m_lx; j++) {
|
||||
i += x0 * 3;
|
||||
for (int j = x0; j <= x1; j++) {
|
||||
#if defined(TNZ_MACHINE_CHANNEL_ORDER_MRGB) || \
|
||||
defined(TNZ_MACHINE_CHANNEL_ORDER_RGBM)
|
||||
pix[j].r = m_rowBuffer[i++];
|
||||
|
@ -458,14 +462,15 @@ public:
|
|||
}
|
||||
}
|
||||
|
||||
void writeRow(short *buffer) {
|
||||
void writeRow(short *buffer, int x0, int x1) {
|
||||
if (m_color_type == PNG_COLOR_TYPE_RGB_ALPHA ||
|
||||
m_color_type == PNG_COLOR_TYPE_GRAY_ALPHA ||
|
||||
m_color_type == PNG_COLOR_TYPE_PALETTE) { // PNG_COLOR_TYPE_PALETTE is
|
||||
// expanded to RGBA
|
||||
TPixel64 *pix = (TPixel64 *)buffer;
|
||||
int i = -2; // 0;
|
||||
for (int j = 0; j < m_info.m_lx; j++) {
|
||||
i += x0 * 2 * 4;
|
||||
for (int j = x0; j <= x1; j++) {
|
||||
#if defined(TNZ_MACHINE_CHANNEL_ORDER_MRGB) || \
|
||||
defined(TNZ_MACHINE_CHANNEL_ORDER_RGBM)
|
||||
pix[j].r = mySwap(m_rowBuffer[i = i + 2]); // i++
|
||||
|
@ -490,7 +495,8 @@ public:
|
|||
{ // grayscale e' gestito come RGB perche' si usa png_set_gray_to_rgb
|
||||
TPixel64 *pix = (TPixel64 *)buffer;
|
||||
int i = -2;
|
||||
for (int j = 0; j < m_info.m_lx; j++) {
|
||||
i += x0 * 2 * 3;
|
||||
for (int j = x0; j <= x1; j++) {
|
||||
#if defined(TNZ_MACHINE_CHANNEL_ORDER_MRGB) || \
|
||||
defined(TNZ_MACHINE_CHANNEL_ORDER_RGBM)
|
||||
pix[j].r = mySwap(m_rowBuffer[i = i + 2]);
|
||||
|
@ -662,8 +668,8 @@ public:
|
|||
|
||||
// tutto quello che segue lo metto in una funzione in cui scrivo il buffer
|
||||
// di restituzione della readLine
|
||||
//è una funzione comune alle ReadLine
|
||||
writeRow(buffer);
|
||||
// è una funzione comune alle ReadLine
|
||||
writeRow(buffer, x0, x1);
|
||||
}
|
||||
|
||||
void readLineInterlace(short *buffer, int x0, int x1, int shrink) {
|
||||
|
@ -739,8 +745,8 @@ public:
|
|||
|
||||
// tutto quello che segue lo metto in una funzione in cui scrivo il buffer
|
||||
// di restituzione della readLine
|
||||
//è una funzione comune alle ReadLine
|
||||
writeRow(buffer);
|
||||
// è una funzione comune alle ReadLine
|
||||
writeRow(buffer, x0, x1);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue