gdi32: Don't copy unnecessary rows when shrinking in DELETESCANS mode.
This commit is contained in:
parent
db3a8d6c0c
commit
3a4864714d
|
@ -1230,12 +1230,11 @@ DWORD stretch_bitmapinfo( const BITMAPINFO *src_info, void *src_bits, struct bit
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int merged_rows = 0;
|
int merged_rows = 0;
|
||||||
int faster_mode = mode;
|
|
||||||
|
|
||||||
while (v_params.length--)
|
while (v_params.length--)
|
||||||
{
|
{
|
||||||
if (hstretch) faster_mode = merged_rows ? mode : STRETCH_DELETESCANS;
|
if (mode != STRETCH_DELETESCANS || !merged_rows)
|
||||||
row_fn( &dst_dib, &dst_start, &src_dib, &src_start, &h_params, faster_mode, merged_rows != 0 );
|
row_fn( &dst_dib, &dst_start, &src_dib, &src_start, &h_params, mode, merged_rows != 0 );
|
||||||
merged_rows++;
|
merged_rows++;
|
||||||
|
|
||||||
if (err > 0)
|
if (err > 0)
|
||||||
|
|
|
@ -5698,7 +5698,7 @@ static void stretch_row_32(const dib_info *dst_dib, const POINT *dst_start,
|
||||||
int err = params->err_start;
|
int err = params->err_start;
|
||||||
int width;
|
int width;
|
||||||
|
|
||||||
if (mode == STRETCH_DELETESCANS)
|
if (mode == STRETCH_DELETESCANS || !keep_dst)
|
||||||
{
|
{
|
||||||
for (width = params->length; width; width--)
|
for (width = params->length; width; width--)
|
||||||
{
|
{
|
||||||
|
@ -5741,7 +5741,7 @@ static void stretch_row_24(const dib_info *dst_dib, const POINT *dst_start,
|
||||||
int err = params->err_start;
|
int err = params->err_start;
|
||||||
int width;
|
int width;
|
||||||
|
|
||||||
if (mode == STRETCH_DELETESCANS)
|
if (mode == STRETCH_DELETESCANS || !keep_dst)
|
||||||
{
|
{
|
||||||
for (width = params->length; width; width--)
|
for (width = params->length; width; width--)
|
||||||
{
|
{
|
||||||
|
@ -5788,7 +5788,7 @@ static void stretch_row_16(const dib_info *dst_dib, const POINT *dst_start,
|
||||||
int err = params->err_start;
|
int err = params->err_start;
|
||||||
int width;
|
int width;
|
||||||
|
|
||||||
if (mode == STRETCH_DELETESCANS)
|
if (mode == STRETCH_DELETESCANS || !keep_dst)
|
||||||
{
|
{
|
||||||
for (width = params->length; width; width--)
|
for (width = params->length; width; width--)
|
||||||
{
|
{
|
||||||
|
@ -5831,7 +5831,7 @@ static void stretch_row_8(const dib_info *dst_dib, const POINT *dst_start,
|
||||||
int err = params->err_start;
|
int err = params->err_start;
|
||||||
int width;
|
int width;
|
||||||
|
|
||||||
if (mode == STRETCH_DELETESCANS)
|
if (mode == STRETCH_DELETESCANS || !keep_dst)
|
||||||
{
|
{
|
||||||
for (width = params->length; width; width--)
|
for (width = params->length; width; width--)
|
||||||
{
|
{
|
||||||
|
@ -5876,6 +5876,7 @@ static void stretch_row_4(const dib_info *dst_dib, const POINT *dst_start,
|
||||||
struct rop_codes codes;
|
struct rop_codes codes;
|
||||||
BYTE src_val;
|
BYTE src_val;
|
||||||
|
|
||||||
|
if (!keep_dst) mode = STRETCH_DELETESCANS;
|
||||||
rop_codes_from_stretch_mode( mode, &codes );
|
rop_codes_from_stretch_mode( mode, &codes );
|
||||||
for (width = params->length; width; width--)
|
for (width = params->length; width; width--)
|
||||||
{
|
{
|
||||||
|
@ -5911,6 +5912,7 @@ static void stretch_row_1(const dib_info *dst_dib, const POINT *dst_start,
|
||||||
struct rop_codes codes;
|
struct rop_codes codes;
|
||||||
BYTE src_val;
|
BYTE src_val;
|
||||||
|
|
||||||
|
if (!keep_dst) mode = STRETCH_DELETESCANS;
|
||||||
rop_codes_from_stretch_mode( mode, &codes );
|
rop_codes_from_stretch_mode( mode, &codes );
|
||||||
for (width = params->length; width; width--)
|
for (width = params->length; width; width--)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue