Changeset 10877 for ImageMagick/trunk

Show
Ignore:
Timestamp:
05/11/08 08:07:40 (4 months ago)
Author:
cristy
Message:
 
Location:
ImageMagick/trunk
Files:
5 modified

Legend:

Unmodified
Added
Removed
  • ImageMagick/trunk/ChangeLog

    r10872 r10877  
     12008-05-09  6.4.1-2 Leonardo de Paula Rosa Piga <lpiga@terra...> 
     2  * OpenMP patch for sepia-tone effect. 
     3 
    142008-05-08  6.4.1-2 Bruno Cardoso Lopes <bruno.cardoso@gmail...> 
    25  * OpenMP patch for NormalizeImage() & TintImage() 
  • ImageMagick/trunk/magick/color.c

    r10751 r10877  
    18051805        for (x=0; x < (long) image->columns; x++) 
    18061806        { 
    1807           if ((p->red != p->green) || (p->green != p->blue)) 
     1807          if (IsGrayPixel(p) == MagickFalse) 
    18081808            break; 
    18091809          p++; 
     
    18201820      for (i=0; i < (long) image->colors; i++) 
    18211821      { 
    1822         if ((p->red != p->green) || (p->green != p->blue)) 
     1822        if (IsGrayPixel(p) == MagickFalse) 
    18231823          break; 
    18241824        p++; 
     
    22752275        for (x=0; x < (long) image->columns; x++) 
    22762276        { 
    2277           if ((p->red != p->green) || (p->green != p->blue)) 
    2278             break; 
    2279           if ((p->red != 0) && (p->red != (Quantum) QuantumRange)) 
     2277          if (IsMonochromePixel(p) == MagickFalse) 
    22802278            break; 
    22812279          p++; 
     
    22922290      for (i=0; i < (long) image->colors; i++) 
    22932291      { 
    2294         if ((p->red != p->green) || (p->green != p->blue)) 
    2295           break; 
    2296         if ((p->red != 0) && (p->red != (Quantum) QuantumRange)) 
     2292        if (IsMonochromePixel(p) == MagickFalse) 
    22972293          break; 
    22982294        p++; 
  • ImageMagick/trunk/magick/enhance.c

    r10873 r10877  
    298298 
    299299  MagickBooleanType 
    300     status; 
     300    status, 
     301    sync_image_retval = MagickTrue; 
     302 
     303  ViewInfo *image_view; 
    301304 
    302305  register long 
     
    306309  register PixelPacket 
    307310    *q; 
     311 
    308312 
    309313  assert(image != (Image *) NULL); 
     
    324328    Contrast enhance image. 
    325329  */ 
    326   for (y=0; y < (long) image->rows; y++) 
     330  image_view=OpenCacheView(image); 
     331 
     332  #pragma omp parallel private(y, x, q) firstprivate(sync_image_retval, image_view) 
    327333  { 
    328     q=GetImagePixels(image,0,y,image->columns,1); 
    329     if (q == (PixelPacket *) NULL) 
    330       break; 
    331     for (x=0; x < (long) image->columns; x++) 
    332     { 
    333       Contrast(sign,&q->red,&q->green,&q->blue); 
    334       q++; 
    335     } 
    336     if (SyncImagePixels(image) == MagickFalse) 
    337       break; 
    338     if ((image->progress_monitor != (MagickProgressMonitor) NULL) && 
    339         (QuantumTick(y,image->rows) != MagickFalse)) 
    340       { 
    341         status=image->progress_monitor(sharpen != MagickFalse ? 
    342           SharpenContrastImageTag : DullContrastImageTag,y,image->rows, 
    343           image->client_data); 
    344         if (status == MagickFalse) 
    345           break; 
    346       } 
     334    #pragma omp for ordered 
     335    for (y=0; y < (long) image->rows; y++) 
     336    { 
     337      #pragma omp critical 
     338      q=GetCacheViewPixels(image_view,0,y,image->columns,1); 
     339      if (q == (PixelPacket *) NULL) 
     340        continue; 
     341      for (x=0; x < (long) image->columns; x++) 
     342      { 
     343        Contrast(sign,&q->red,&q->green,&q->blue); 
     344        q++; 
     345      } 
     346      #pragma omp critical 
     347      { 
     348        sync_image_retval = SyncCacheView(image_view); 
     349      } /* end omp critical*/ 
     350      if (sync_image_retval == MagickFalse) 
     351        continue; 
     352      if ((image->progress_monitor != (MagickProgressMonitor) NULL) && 
     353          (QuantumTick(y,image->rows) != MagickFalse)) 
     354        { 
     355          status=image->progress_monitor(sharpen != MagickFalse ? 
     356            SharpenContrastImageTag : DullContrastImageTag,y,image->rows, 
     357            image->client_data); 
     358          if (status == MagickFalse) 
     359            continue; 
     360        } 
     361    } 
    347362  } 
    348363  return(MagickTrue); 
  • ImageMagick/trunk/magick/fx.c

    r10872 r10877  
    32203220    *q; 
    32213221 
     3222  ViewInfo 
     3223    *image_view, 
     3224    *sepia_view; 
     3225 
    32223226  /* 
    32233227    Initialize sepia-toned image attributes. 
     
    32413245    Tone each row of the image. 
    32423246  */ 
    3243   for (y=0; y < (long) image->rows; y++) 
     3247  #pragma omp parallel private(image_view, intensity, p, q, sepia_view, tone, x, y) 
    32443248  { 
    3245     p=AcquireImagePixels(image,0,y,image->columns,1,exception); 
    3246     q=SetImagePixels(sepia_image,0,y,sepia_image->columns,1); 
    3247     if ((p == (const PixelPacket *) NULL) || (q == (PixelPacket *) NULL)) 
    3248       break; 
    3249     for (x=0; x < (long) image->columns; x++) 
    3250     { 
    3251       intensity=(MagickRealType) PixelIntensityToQuantum(p); 
    3252       tone=intensity > threshold ? (MagickRealType) QuantumRange : 
    3253         intensity+(MagickRealType) QuantumRange-threshold; 
    3254       q->red=RoundToQuantum(tone); 
    3255       tone=intensity > (7.0*threshold/6.0) ? (MagickRealType) QuantumRange : 
    3256         intensity+(MagickRealType) QuantumRange-7.0*threshold/6.0; 
    3257       q->green=RoundToQuantum(tone); 
    3258       tone=intensity < (threshold/6.0) ? 0 : intensity-threshold/6.0; 
    3259       q->blue=RoundToQuantum(tone); 
    3260       tone=threshold/7.0; 
    3261       if ((MagickRealType) q->green < tone) 
    3262         q->green=RoundToQuantum(tone); 
    3263       if ((MagickRealType) q->blue < tone) 
    3264         q->blue=RoundToQuantum(tone); 
    3265       p++; 
    3266       q++; 
    3267     } 
    3268     if (SyncImagePixels(sepia_image) == MagickFalse) 
    3269       break; 
    3270     if ((image->progress_monitor != (MagickProgressMonitor) NULL) && 
    3271         (QuantumTick(y,image->rows) != MagickFalse)) 
     3249    image_view=OpenCacheView(image); 
     3250    sepia_view=OpenCacheView(sepia_image); 
     3251    #pragma omp for 
     3252    for (y=0; y < (long) image->rows; y++) 
     3253    { 
     3254      p=AcquireCacheViewPixels(image_view,0,y,image->columns,1,exception); 
     3255      q=SetCacheView(sepia_view,0,y,sepia_image->columns,1); 
     3256      if ((p == (const PixelPacket *) NULL) || (q == (PixelPacket *) NULL)) 
     3257        continue; 
     3258      #pragma omp for 
     3259      for (x=0; x < (long) image->columns; x++) 
    32723260      { 
    3273         status=image->progress_monitor(SepiaToneImageTag,y,image->rows, 
    3274           image->client_data); 
    3275         if (status == MagickFalse) 
    3276           break; 
     3261        intensity=(MagickRealType) PixelIntensityToQuantum(p+x); 
     3262        tone=intensity > threshold ? (MagickRealType) QuantumRange : 
     3263          intensity+(MagickRealType) QuantumRange-threshold; 
     3264        (q+x)->red=RoundToQuantum(tone); 
     3265        tone=intensity > (7.0*threshold/6.0) ? (MagickRealType) QuantumRange : 
     3266          intensity+(MagickRealType) QuantumRange-7.0*threshold/6.0; 
     3267        (q+x)->green=RoundToQuantum(tone); 
     3268        tone=intensity < (threshold/6.0) ? 0 : intensity-threshold/6.0; 
     3269        (q+x)->blue=RoundToQuantum(tone); 
     3270        tone=threshold/7.0; 
     3271        if ((MagickRealType) (q+x)->green < tone) 
     3272          (q+x)->green=RoundToQuantum(tone); 
     3273        if ((MagickRealType) (q+x)->blue < tone) 
     3274          (q+x)->blue=RoundToQuantum(tone); 
    32773275      } 
     3276      if (SyncCacheView(sepia_view) == MagickFalse) 
     3277        continue; 
     3278      if ((image->progress_monitor != (MagickProgressMonitor) NULL) && 
     3279          (QuantumTick(y,image->rows) != MagickFalse)) 
     3280        { 
     3281          status=image->progress_monitor(SepiaToneImageTag,y,image->rows, 
     3282            image->client_data); 
     3283          if (status == MagickFalse) 
     3284            continue; 
     3285        } 
     3286    } 
     3287    sepia_view=CloseCacheView(sepia_view); 
     3288    image_view=CloseCacheView(image_view); 
    32783289  } 
    32793290  (void) NormalizeImage(sepia_image); 
  • ImageMagick/trunk/magick/pixel-private.h

    r10750 r10877  
    3838} RealPixelPacket; 
    3939 
    40 static inline MagickBooleanType IsGrayPixel(const PixelPacket *pixel) 
    41 { 
    42   if ((pixel->red == pixel->green) && (pixel->green == pixel->blue)) 
    43     return(MagickTrue); 
    44   return(MagickFalse); 
    45 } 
    46  
    4740static inline MagickPixelPacket *CloneMagickPixelPacket( 
    4841  const MagickPixelPacket *pixel) 
     
    5649  *clone_pixel=(*pixel); 
    5750  return(clone_pixel); 
     51} 
     52 
     53static inline MagickBooleanType IsGrayPixel(const PixelPacket *pixel) 
     54{ 
     55#if !defined(MAGICKCORE_HDRI_SUPPORT) 
     56  if ((pixel->red == pixel->green) && (pixel->green == pixel->blue)) 
     57    return(MagickTrue); 
     58#else 
     59  if ((fabs(pixel->red-pixel->green) > MagickEpsilon) && 
     60      (fabs(pixel->green-pixel->blue) > MagickEpsilon)) 
     61    return(MagickTrue); 
     62#endif 
     63  return(MagickFalse); 
     64} 
     65 
     66static inline MagickBooleanType IsMonochromePixel(const PixelPacket *pixel) 
     67{ 
     68#if !defined(MAGICKCORE_HDRI_SUPPORT) 
     69  if (((pixel->red == 0) || (pixel->red == QuantumRange)) && 
     70      (pixel->red == pixel->green) && (pixel->green == pixel->blue)) 
     71    return(MagickTrue); 
     72#else 
     73  if (((fabs(pixel->red) <= MagickEpsilon) || 
     74       (fabs(pixel->red-QuantumRange) <= MagickEpsilon)) && 
     75      (fabs(pixel->red-pixel->green) > MagickEpsilon) && 
     76      (fabs(pixel->green-pixel->blue) > MagickEpsilon)) 
     77    return(MagickTrue); 
     78#endif 
     79  return(MagickFalse); 
    5880} 
    5981