Changeset 6465
- Timestamp:
- 01/14/12 21:45:06 (16 months ago)
- File:
-
- 1 edited
-
ImageMagick/trunk/MagickCore/effect.c (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
ImageMagick/trunk/MagickCore/effect.c
r6462 r6465 1578 1578 status; 1579 1579 1580 Quantum 1581 *restrict buffers, 1582 *restrict pixels; 1583 1584 register ssize_t 1585 i; 1580 MagickOffsetType 1581 progress; 1586 1582 1587 1583 size_t 1588 length; 1584 extent; 1585 1586 ssize_t 1587 y; 1589 1588 1590 1589 static const ssize_t … … 1601 1600 assert(exception != (ExceptionInfo *) NULL); 1602 1601 assert(exception->signature == MagickSignature); 1603 despeckle_image=CloneImage(image,0,0,MagickTrue,exception); 1602 despeckle_image=CloneImage(image,image->columns,image->rows,MagickTrue, 1603 exception); 1604 1604 if (despeckle_image == (Image *) NULL) 1605 1605 return((Image *) NULL); … … 1611 1611 } 1612 1612 /* 1613 Allocate image buffers.1614 */1615 length=(size_t) ((image->columns+2)*(image->rows+2));1616 pixels=(Quantum *) AcquireQuantumMemory(length,2*sizeof(*pixels));1617 buffers=(Quantum *) AcquireQuantumMemory(length,2*sizeof(*pixels));1618 if ((pixels == (Quantum *) NULL) || (buffers == (Quantum *) NULL))1619 {1620 if (buffers != (Quantum *) NULL)1621 buffers=(Quantum *) RelinquishMagickMemory(buffers);1622 if (pixels != (Quantum *) NULL)1623 pixels=(Quantum *) RelinquishMagickMemory(pixels);1624 despeckle_image=DestroyImage(despeckle_image);1625 ThrowImageException(ResourceLimitError,"MemoryAllocationFailed");1626 }1627 /*1628 1613 Reduce speckle in the image. 1629 1614 */ 1630 1615 status=MagickTrue; 1616 progress=0; 1617 extent=3*(image->columns+2); 1631 1618 image_view=AcquireCacheView(image); 1632 1619 despeckle_view=AcquireCacheView(despeckle_image); 1633 for (i=0; i < (ssize_t) GetPixelChannels(image); i++) 1620 #if defined(MAGICKCORE_OPENMP_SUPPORT) 1621 #pragma omp parallel for schedule(static,4) shared(status) 1622 #endif 1623 for (y=0; y < (ssize_t) image->rows; y++) 1634 1624 { 1635 PixelChannel1636 channel;1637 1638 PixelTrait 1639 despeckle_traits,1640 traits;1625 Quantum 1626 *restrict buffers, 1627 *restrict pixels; 1628 1629 register const Quantum 1630 *restrict p; 1641 1631 1642 1632 register Quantum 1643 *buffer, 1644 *pixel; 1633 *restrict q; 1645 1634 1646 1635 register ssize_t 1647 k, 1648 x; 1649 1650 ssize_t 1651 j, 1652 y; 1653 1654 if (status == MagickFalse) 1655 continue; 1656 channel=GetPixelChannelMapChannel(image,i); 1657 traits=GetPixelChannelMapTraits(image,channel); 1658 despeckle_traits=GetPixelChannelMapTraits(despeckle_image,channel); 1659 if ((traits == UndefinedPixelTrait) || 1660 (despeckle_traits == UndefinedPixelTrait)) 1661 continue; 1662 if ((despeckle_traits & CopyPixelTrait) != 0) 1663 continue; 1664 pixel=pixels; 1665 (void) ResetMagickMemory(pixel,0,length*sizeof(*pixel)); 1666 buffer=buffers; 1667 j=(ssize_t) image->columns+2; 1668 for (y=0; y < (ssize_t) image->rows; y++) 1669 { 1670 register const Quantum 1671 *restrict p; 1672 1673 p=GetCacheViewVirtualPixels(image_view,0,y,image->columns,1,exception); 1674 if (p == (const Quantum *) NULL) 1636 i; 1637 1638 p=GetCacheViewVirtualPixels(image_view,-1,y-1,image->columns+2,3,exception); 1639 q=GetCacheViewAuthenticPixels(despeckle_view,0,y,despeckle_image->columns,1, 1640 exception); 1641 if ((p == (const Quantum *) NULL) || (q == (Quantum *) NULL)) 1642 { 1643 status=MagickFalse; 1644 continue; 1645 } 1646 pixels=(Quantum *) AcquireQuantumMemory(extent,sizeof(*pixels)); 1647 buffers=(Quantum *) AcquireQuantumMemory(extent,sizeof(*buffers)); 1648 if ((pixels == (Quantum *) NULL) || (buffers == (Quantum *) NULL)) 1649 { 1650 if (buffers != (Quantum *) NULL) 1651 buffers=(Quantum *) RelinquishMagickMemory(buffers); 1652 if (pixels != (Quantum *) NULL) 1653 pixels=(Quantum *) RelinquishMagickMemory(pixels); 1654 (void) ThrowMagickException(exception,GetMagickModule(), 1655 ResourceLimitError,"MemoryAllocationFailed","`%s'",image->filename); 1656 continue; 1657 } 1658 for (i=0; i < (ssize_t) GetPixelChannels(image); i++) 1659 { 1660 PixelChannel 1661 channel; 1662 1663 PixelTrait 1664 despeckle_traits, 1665 traits; 1666 1667 register ssize_t 1668 j, 1669 x; 1670 1671 if (status == MagickFalse) 1672 continue; 1673 channel=GetPixelChannelMapChannel(image,i); 1674 traits=GetPixelChannelMapTraits(image,channel); 1675 despeckle_traits=GetPixelChannelMapTraits(despeckle_image,channel); 1676 if ((traits == UndefinedPixelTrait) || 1677 (despeckle_traits == UndefinedPixelTrait)) 1678 continue; 1679 for (x=0; x < (ssize_t) (3*(image->columns+2)); x++) 1680 pixels[x]=p[x*GetPixelChannels(image)+i]; 1681 if ((despeckle_traits & CopyPixelTrait) != 0) 1675 1682 { 1676 status=MagickFalse; 1683 /* 1684 Do not despeckle this channel, just copy. 1685 */ 1686 for (x=0; x < (ssize_t) image->columns; x++) 1687 SetPixelChannel(despeckle_image,channel,pixels[x+image->columns+3], 1688 q+x*GetPixelChannels(despeckle_image)); 1677 1689 continue; 1678 1690 } 1679 j++; 1691 (void) ResetMagickMemory(buffers,0,extent*sizeof(*buffers)); 1692 for (j=0; j < 4; j++) 1693 { 1694 Hull(X[j],Y[j],image->columns,1,1,pixels,buffers); 1695 Hull(-X[j],-Y[j],image->columns,1,1,pixels,buffers); 1696 Hull(-X[j],-Y[j],image->columns,1,-1,pixels,buffers); 1697 Hull(X[j],Y[j],image->columns,1,-1,pixels,buffers); 1698 } 1680 1699 for (x=0; x < (ssize_t) image->columns; x++) 1681 { 1682 pixel[j++]=p[i]; 1683 p+=GetPixelChannels(image); 1684 } 1685 j++; 1686 } 1687 (void) ResetMagickMemory(buffer,0,length*sizeof(*buffer)); 1688 for (k=0; k < 4; k++) 1689 { 1690 Hull(X[k],Y[k],image->columns,image->rows,1,pixel,buffer); 1691 Hull(-X[k],-Y[k],image->columns,image->rows,1,pixel,buffer); 1692 Hull(-X[k],-Y[k],image->columns,image->rows,-1,pixel,buffer); 1693 Hull(X[k],Y[k],image->columns,image->rows,-1,pixel,buffer); 1694 } 1695 j=(ssize_t) image->columns+2; 1696 for (y=0; y < (ssize_t) image->rows; y++) 1697 { 1698 MagickBooleanType 1699 sync; 1700 1701 register Quantum 1702 *restrict q; 1703 1704 q=GetCacheViewAuthenticPixels(despeckle_view,0,y,despeckle_image->columns, 1705 1,exception); 1706 if (q == (Quantum *) NULL) 1707 { 1708 status=MagickFalse; 1709 continue; 1710 } 1711 j++; 1712 for (x=0; x < (ssize_t) image->columns; x++) 1713 { 1714 SetPixelChannel(despeckle_image,channel,pixel[j++],q); 1715 q+=GetPixelChannels(despeckle_image); 1716 } 1717 sync=SyncCacheViewAuthenticPixels(despeckle_view,exception); 1718 if (sync == MagickFalse) 1719 status=MagickFalse; 1720 j++; 1721 } 1700 SetPixelChannel(despeckle_image,channel,pixels[x+image->columns+3],q+x* 1701 GetPixelChannels(despeckle_image)); 1702 } 1703 if (SyncCacheViewAuthenticPixels(despeckle_view,exception) == MagickFalse) 1704 status=MagickFalse; 1722 1705 if (image->progress_monitor != (MagickProgressMonitor) NULL) 1723 1706 { … … 1725 1708 proceed; 1726 1709 1727 proceed=SetImageProgress(image,DespeckleImageTag,(MagickOffsetType) i, 1728 GetPixelChannels(image)); 1710 #if defined(MAGICKCORE_OPENMP_SUPPORT) 1711 #pragma omp critical (MagickCore_DespeckleImage) 1712 #endif 1713 proceed=SetImageProgress(image,DespeckleImageTag,progress,image->rows); 1729 1714 if (proceed == MagickFalse) 1730 1715 status=MagickFalse; 1731 1716 } 1717 buffers=(Quantum *) RelinquishMagickMemory(buffers); 1718 pixels=(Quantum *) RelinquishMagickMemory(pixels); 1732 1719 } 1733 1720 despeckle_view=DestroyCacheView(despeckle_view); 1734 1721 image_view=DestroyCacheView(image_view); 1735 buffers=(Quantum *) RelinquishMagickMemory(buffers);1736 pixels=(Quantum *) RelinquishMagickMemory(pixels);1737 1722 despeckle_image->type=image->type; 1738 1723 if (status == MagickFalse)
Note: See TracChangeset
for help on using the changeset viewer.
