Am Montag, 9. Februar 2004 18:11 schrieb PUYDT Julien: > On lun, 2004-02-09 at 10:50, Damien Sandras wrote: > > Notice that if you select a image bigger than the video size, you only > > have black. Was it your intended behavior? The old behavior in 0.98.5 > > was resizing the image. > > The following patch changes that behaviour: > * if the image fits in the preview, it is centered; > * if it doesn't, it is first scaled (1:1 to keep the best result), then > centered. > > Rants: > * the gdk-pixbuf doc is unclear; > * gdk-pixbuf stores image size in (int) instead of the saner (unsigned); > * the C language's implicit conversions sucks. > > Snark I think you can make the code a bit simpler: -------------------------- Original version: + else { /* the picture doesn't fit: scale 1:1, and center */ + double scale_w, scale_h, scale; + + if (width < (unsigned)orig_width) + scale_w = (double)width / orig_width; + else + scale_w = 1; + + if (height < (unsigned)orig_height) + scale_h = (double)height / orig_height; + else + scale_h = 1; + + if (scale_w < scale_h) + scale = scale_w; + else + scale = scale_h; Faster version: + else { /* the picture doesn't fit: scale 1:1, and center */ + double scale_w, scale_h, scale; + + scale_w = (double)width / orig_width; + scale_h = (double)height / orig_height; + + if (scale_w < scale_h) + scale = scale_w; + else + scale = scale_h; at least one of the two scales will be smaller than one, so just take the smaller one of the two. even faster version: + else { /* the picture doesn't fit: scale 1:1, and center */ + double scale; + + scale = (double)width / orig_width; + + if ( ((double)height / orig_height) < scale) + scale = (double)height / orig_height; ------------------------ Greets, Stefan -- Stefan Brüns / Kastanienweg 6 - Zimmer 1206 / 52074 Aachen mailto:lurch gmx li http://www.kawo1.rwth-aachen.de/~lurchi/ phone: +49 241 169-4206 mobile: +49 160 7532733
Attachment:
pgpb81yIA4YAH.pgp
Description: signature