<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" 
  "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html version="-//W3C//DTD XHTML 1.1//EN"
      xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.w3.org/1999/xhtml
                          http://www.w3.org/MarkUp/SCHEMA/xhtml11.xsd">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
  <meta name="verify-v1" content="g222frIIxcQTrvDR3NBRUSKP3AnMNoqxOkIniCEkV7U="/>
  <title>ImageMagick: MagickCore, C API for ImageMagick: Cache Views</title>
  <meta http-equiv="Content-Language" content="en-US"/>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  <meta http-equiv="Reply-to" content="magick-users@imagemagick.org"/>
  <meta name="Application-name" content="ImageMagick"/>
  <meta name="Description" content="Use ImageMagick to convert, edit, or compose bitmap images in a variety of formats.  In addition resize, rotate, shear, distort and transform images."/>
  <meta name="Application-url" content="http://www.imagemagick.org"/>
  <meta name="Generator" content="PHP"/>
  <meta name="Keywords" content="magickcore, c, api, for, imagemagick:, cache, views, ImageMagick, ImageMagic, MagickCore, MagickWand, PerlMagick, Magick++, RMagick, PythonMagick, JMagick, TclMagick, Image, Magick, Magic, Wand, ImageMagickObject, Swiss, Army, Knife, Image, Processing"/>
  <meta name="Rating" content="GENERAL"/>
  <meta name="Robots" content="INDEX, FOLLOW"/>
  <meta name="Generator" content="ImageMagick Studio LLC"/>
  <meta name="Author" content="ImageMagick Studio LLC"/>
  <meta name="Revisit-after" content="2 DAYS"/>
  <meta name="Resource-type" content="document"/>
  <meta name="Copyright" content="Copyright (c) 1999-2011 ImageMagick Studio LLC"/>
  <meta name="Distribution" content="Global"/>
  <link rel="icon" href="../../images/wand.png"/>
  <link rel="shortcut icon" href="../../images/wand.ico"  type="images/x-icon"/>
  <link rel="meta" type="application/rdf+xml" title="ICI" href="http://imagemagick.org/ici.rdf"/>
  <link rel="stylesheet" href="http://www.google.com/cse/style/look/default.css" type="text/css" />
  <style type="text/css" media="all">
    @import url("../../www/magick.css");
  </style>
  <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
  <script type="text/javascript" src="../fancybox/jquery.fancybox-1.3.4.pack.js"></script>
  <link rel="stylesheet" type="text/css" href="../fancybox/jquery.fancybox-1.3.4.css" media="screen" />
  <script type="text/javascript">
    $(document).ready(function() {
      $("a[href$=.jpg],a[href$=.png],a[href$=.gif]").fancybox({
        'transitionIn'  : 'elastic',
        'transitionOut' : 'elastic',
        'overlayShow'   : false,
        'opacity'       : true
      });
    });
  </script>
</head>

<body id="www-imagemagick-org">
<div class="titlebar">
<div style="margin: 17px auto; float: left;">
  <script type="text/javascript">
  <!--
    google_ad_client = "pub-3129977114552745";
    google_ad_slot = "5439289906";
    google_ad_width = 728;
    google_ad_height = 90;
  //-->
  </script>
  <script type="text/javascript"
    src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
  </script>
</div>
<a href="http://www.imagemagick.org/discourse-server/">
  <img src="../../images/logo.jpg"
  alt="ImageMagick Logo"
  style="width: 123px; height: 118px; border: 0px; float: right;" /></a>
<a href="../../index.html">
  <img src="../../images/sprite.jpg"
  alt="ImageMagick Sprite"
  style="width: 114px; height: 118px; border: 0px; float: right;" /></a>
</div>

<div class="westbar">

<div class="menu">
  <a title="About ImageMagick" href="../../index.html">About ImageMagick</a>
</div>
<div class="sep"></div>
<div class="menu">
  <a title="Binary Releases" href="../../www/binary-releases.html">Binary Releases</a>
</div>
<div class="sub">
    <a title="Binary Release: Unix" href="../../www/binary-releases.html#unix">Unix</a>
</div>
<div class="sub">
    <a title="Binary Release: MacOS X" href="../../www/binary-releases.html#macosx">Mac OS X</a>
</div>
<div class="sub">
    <a title="Binary Release: iPhone" href="../../www/binary-releases.html#iPhone">iPhone</a>
</div>
<div class="sub">
    <a title="Binary Release: Windows" href="../../www/binary-releases.html#windows">Windows</a>
</div>
<div class="sep"></div>
<div class="menu">
  <a title="Command-line Tools" href="../../www/command-line-tools.html">Command-line Tools</a>
</div>
<div class="sub">
    <a title="Command-line Tools: Processing" href="../../www/command-line-processing.html">Processing</a>
</div>
<div class="sub">
    <a title="Command-line Tools: Options" href="../../www/command-line-options.html">Options</a>
</div>
<div class="sub">
    <a title="Command-line Tools: Usage" href="http://www.imagemagick.org/Usage/">Usage</a>
</div>
<div class="menu">
  <a title="Program Interfaces" href="../../www/api.html">Program Interfaces</a>
</div>
<div class="sub">
    <a title="Program Interface: MagickWand" href="../../www/magick-wand.html">MagickWand</a>
</div>
<div class="sub">
    <a title="Program Interface: MagickCore" href="../../www/magick-core.html">MagickCore</a>
</div>
<div class="sub">
    <a title="Program Interface: PerlMagick" href="../../www/perl-magick.html">PerlMagick</a>
</div>
<div class="sub">
    <a title="Program Interface: Magick++" href="../../www/magick++.html">Magick++</a>
</div>
<div class="sep"></div>
<div  class="menu">
   <a title="Install from Source" href="../../www/install-source.html">Install from Source</a>
</div>
<div class="sub">
    <a title="Install from Source: Unix" href="../../www/install-source.html#unix">Unix</a>
</div>
<div class="sub">
    <a title="Install from Source: Windows" href="../../www/install-source.html#windows">Windows</a>
 </div>
<div class="menu">
  <a title="Resources" href="../../www/resources.html">Resources</a>
</div>
<div class="menu">
  <a title="Architecture" href="../../www/architecture.html">Architecture</a>
</div>
<div class="menu">
  <a title="Download" href="../../www/download.html">Download</a>
</div>
<div class="sep"></div>
<div class="menu">
  <a title="Search" href="../../www/search.html">Search</a>
</div>
<div class="sep"></div>
<div class="menu">
  <a title="Site Map" href="../../www/sitemap.html">Site Map</a>
</div>
<div  class="sub">
  <a title="Site Map: Links" href="../../www/links.html">Links</a>
</div>
<div class="sep"></div>
<div  class="menu">
  <a rel="follow" title="Sponsors" href="../../www/sponsors.html">Sponsors:</a>

<a href="http://www.networkredux.com">
  <img src="../../images/networkredux.png" alt="[sponsor]"
  style="margin-top: 4px; margin-left: 4px; border: 0px; float: left;" /></a>
<div class="sponsbox">
<div  class="sponsor">
  <a rel="follow" title="Sponsor: Web Hosting Break" href="http://www.webhostingbreak.com">Web Hosting Break</a><!-- 201109010090 ian@ian-m... -->
</div>
<div  class="sponsor">
  <a rel="follow" title="Sponsor: Druckerei" href="http://www.allesdruck.de">Druckerei</a><!-- 201303011500 r.leo -->
</div>
<div  class="sponsor">
  <a rel="follow" title="Sponsor: Website Hosting" href="http://www.hostreviewgeeks.com">Website Hosting</a><!-- 201110010090 alexanian media -->
</div>
<div  class="sponsor">
  <a rel="follow" title="Sponsor: Hotel München" href="http://www.messehotel-erb-muenchen.de">Hotel München</a><!-- 201111010450 cerb -->
</div>
<div  class="sponsor">
  <a rel="follow" title="Sponsor: Best Web Hosting" href="http://webhostinggeeks.com">Best Web Hosting</a><!-- 201110010720 -->
</div>
<div  class="sponsor">
  <a rel="follow" title="Sponsor: Flyer drucken" href="http://www.online-druck.biz">Flyer drucken</a><!-- 201109010900 Floeter-->
</div>
<div  class="sponsor">
  <a rel="follow" title="Sponsor: Web Hosting Reviews" href="http://www.webhostingmasters.com">Web Hosting Reviews</a><!-- 201107011500 affliatelabel -->
</div>
<div  class="sponsor">
  <a rel="follow" title="Sponsor: Druckerei" href="http://print24.com/de/">Druckerei</a><!-- 201110010720 -->
</div>
<div  class="sponsor">
  <a rel="follow" title="Sponsor: Web Hosting Ratings" href="http://webhostingrating.com">Web Hosting Ratings</a><!-- 201110010720 -->
</div>
<div  class="sponsor">
   <a rel="follow" title="Sponsor: Free Catalogs" href="http://www.who-sells-it.com/">Free Catalogs</a><!-- 20120801000600 -->
</div>
</div>
</div>
</div>

<div class="eastbar">

</div>

<div class="main">

<h1>Module cache-view Methods</h1>
<p class="navigation-index">[<a href="#AcquireCacheView">AcquireCacheView</a> &bull; <a href="#CloneCacheView">CloneCacheView</a> &bull; <a href="#DestroyCacheView">DestroyCacheView</a> &bull; <a href="#GetCacheViewChannels">GetCacheViewChannels</a> &bull; <a href="#GetCacheViewColorspace">GetCacheViewColorspace</a> &bull; <a href="#GetCacheViewException">GetCacheViewException</a> &bull; <a href="#GetCacheViewStorageClass">GetCacheViewStorageClass</a> &bull; <a href="#GetCacheViewAuthenticPixels">GetCacheViewAuthenticPixels</a> &bull; <a href="#GetOneCacheViewAuthenticPixel">GetOneCacheViewAuthenticPixel</a> &bull; <a href="#GetCacheViewAuthenticIndexQueue">GetCacheViewAuthenticIndexQueue</a> &bull; <a href="#GetCacheViewAuthenticPixelQueue">GetCacheViewAuthenticPixelQueue</a> &bull; <a href="#GetCacheViewVirtualIndexQueue">GetCacheViewVirtualIndexQueue</a> &bull; <a href="#GetCacheViewVirtualPixelQueue">GetCacheViewVirtualPixelQueue</a> &bull; <a href="#GetCacheViewVirtualPixels">GetCacheViewVirtualPixels</a> &bull; <a href="#GetOneCacheViewVirtualPixel">GetOneCacheViewVirtualPixel</a> &bull; <a href="#GetOneCacheViewVirtualMethodPixel">GetOneCacheViewVirtualMethodPixel</a> &bull; <a href="#QueueCacheViewAuthenticPixels">QueueCacheViewAuthenticPixels</a> &bull; <a href="#SetCacheViewStorageClass">SetCacheViewStorageClass</a> &bull; <a href="#SetCacheViewVirtualPixelMethod">SetCacheViewVirtualPixelMethod</a> &bull; <a href="#SyncCacheViewAuthenticPixels">SyncCacheViewAuthenticPixels</a>]</p>

<h2><a href="http://www.imagemagick.org/api/MagickCore/cache-view_8c.html" id="AcquireCacheView">AcquireCacheView</a></h2>
<div class="doc-section">

<p>AcquireCacheView() acquires a view into the pixel cache, using the VirtualPixelMethod that is defined within the given image itself.</p>

<p>The format of the AcquireCacheView method is:</p>

<pre class="code">
  CacheView *AcquireCacheView(const Image *image)
</pre>

<p>A description of each parameter follows:</p>

<h5>image</h5>
<p>the image.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickCore/cache-view_8c.html" id="CloneCacheView">CloneCacheView</a></h2>
<div class="doc-section">

<p>CloneCacheView()  makes an exact copy of the specified cache view.</p>

<p>The format of the CloneCacheView method is:</p>

<pre class="code">
  CacheView *CloneCacheView(const CacheView *cache_view)
</pre>

<p>A description of each parameter follows:</p>

<h5>cache_view</h5>
<p>the cache view.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickCore/cache-view_8c.html" id="DestroyCacheView">DestroyCacheView</a></h2>
<div class="doc-section">

<p>DestroyCacheView() destroys the specified view returned by a previous call to AcquireCacheView().</p>

<p>The format of the DestroyCacheView method is:</p>

<pre class="code">
  CacheView *DestroyCacheView(CacheView *cache_view)
</pre>

<p>A description of each parameter follows:</p>

<h5>cache_view</h5>
<p>the cache view.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickCore/cache-view_8c.html" id="GetCacheViewChannels">GetCacheViewChannels</a></h2>
<div class="doc-section">

<p>GetCacheViewChannels() returns the image pixel channels associated with the specified view.</p>

<p>The format of the GetCacheViewChannels method is:</p>

<pre class="code">
  size_t GetCacheViewChannels(const CacheView *cache_view)
</pre>

<p>A description of each parameter follows:</p>

<h5>cache_view</h5>
<p>the cache view.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickCore/cache-view_8c.html" id="GetCacheViewColorspace">GetCacheViewColorspace</a></h2>
<div class="doc-section">

<p>GetCacheViewColorspace() returns the image colorspace associated with the specified view.</p>

<p>The format of the GetCacheViewColorspace method is:</p>

<pre class="code">
  ColorspaceType GetCacheViewColorspace(const CacheView *cache_view)
</pre>

<p>A description of each parameter follows:</p>

<h5>cache_view</h5>
<p>the cache view.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickCore/cache-view_8c.html" id="GetCacheViewException">GetCacheViewException</a></h2>
<div class="doc-section">

<p>GetCacheViewException() returns the image exception associated with the specified view.</p>

<p>The format of the GetCacheViewException method is:</p>

<pre class="code">
  ExceptionInfo GetCacheViewException(const CacheView *cache_view)
</pre>

<p>A description of each parameter follows:</p>

<h5>cache_view</h5>
<p>the cache view.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickCore/cache-view_8c.html" id="GetCacheViewStorageClass">GetCacheViewStorageClass</a></h2>
<div class="doc-section">

<p>GetCacheViewStorageClass() returns the image storage class  associated with the specified view.</p>

<p>The format of the GetCacheViewStorageClass method is:</p>

<pre class="code">
  ClassType GetCacheViewStorageClass(const CacheView *cache_view)
</pre>

<p>A description of each parameter follows:</p>

<h5>cache_view</h5>
<p>the cache view.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickCore/cache-view_8c.html" id="GetCacheViewAuthenticPixels">GetCacheViewAuthenticPixels</a></h2>
<div class="doc-section">

<p>GetCacheViewAuthenticPixels() gets pixels from the in-memory or disk pixel cache as defined by the geometry parameters.   A pointer to the pixels is returned if the pixels are transferred, otherwise a NULL is returned.</p>

<p>The format of the GetCacheViewAuthenticPixels method is:</p>

<pre class="code">
  PixelPacket *GetCacheViewAuthenticPixels(CacheView *cache_view,
    const ssize_t x,const ssize_t y,const size_t columns,
    const size_t rows,ExceptionInfo *exception)
</pre>

<p>A description of each parameter follows:</p>

<h5>cache_view</h5>
<p>the cache view.</p>

<h5>x,y,columns,rows</h5>
<p>These values define the perimeter of a region of pixels.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickCore/cache-view_8c.html" id="GetOneCacheViewAuthenticPixel">GetOneCacheViewAuthenticPixel</a></h2>
<div class="doc-section">

<p>GetOneCacheViewAuthenticPixel() returns a single pixel at the specified (x,y) location.  The image background color is returned if an error occurs.</p>

<p>The format of the GetOneCacheViewAuthenticPixel method is:</p>

<pre class="code">
  MagickBooleaNType GetOneCacheViewAuthenticPixel(
    const CacheView *cache_view,const ssize_t x,const ssize_t y,
    Pixelpacket *pixel,ExceptionInfo *exception)
</pre>

<p>A description of each parameter follows:</p>

<h5>cache_view</h5>
<p>the cache view.</p>

<h5>x,y</h5>
<p>These values define the offset of the pixel.</p>

<h5>pixel</h5>
<p>return a pixel at the specified (x,y) location.</p>

<h5>exception</h5>
<p>return any errors or warnings in this structure.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickCore/cache-view_8c.html" id="GetCacheViewAuthenticIndexQueue">GetCacheViewAuthenticIndexQueue</a></h2>
<div class="doc-section">

<p>GetCacheViewAuthenticIndexQueue() returns the indexes associated with the last call to SetCacheViewIndexes() or GetCacheViewAuthenticIndexQueue().  The indexes are authentic and can be updated.</p>

<p>The format of the GetCacheViewAuthenticIndexQueue() method is:</p>

<pre class="code">
  IndexPacket *GetCacheViewAuthenticIndexQueue(CacheView *cache_view)
</pre>

<p>A description of each parameter follows:</p>

<h5>cache_view</h5>
<p>the cache view.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickCore/cache-view_8c.html" id="GetCacheViewAuthenticPixelQueue">GetCacheViewAuthenticPixelQueue</a></h2>
<div class="doc-section">

<p>GetCacheViewAuthenticPixelQueue() returns the pixels associated with the last call to QueueCacheViewAuthenticPixels() or GetCacheViewAuthenticPixels().  The pixels are authentic and therefore can be updated.</p>

<p>The format of the GetCacheViewAuthenticPixelQueue() method is:</p>

<pre class="code">
  PixelPacket *GetCacheViewAuthenticPixelQueue(CacheView *cache_view)
</pre>

<p>A description of each parameter follows:</p>

<h5>cache_view</h5>
<p>the cache view.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickCore/cache-view_8c.html" id="GetCacheViewVirtualIndexQueue">GetCacheViewVirtualIndexQueue</a></h2>
<div class="doc-section">

<p>GetCacheViewVirtualIndexQueue() returns the indexes associated with the last call to GetCacheViewVirtualIndexQueue().  The indexes are virtual and therefore cannot be updated.</p>

<p>The format of the GetCacheViewVirtualIndexQueue() method is:</p>

<pre class="code">
  const IndexPacket *GetCacheViewVirtualIndexQueue(
    const CacheView *cache_view)
</pre>

<p>A description of each parameter follows:</p>

<h5>cache_view</h5>
<p>the cache view.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickCore/cache-view_8c.html" id="GetCacheViewVirtualPixelQueue">GetCacheViewVirtualPixelQueue</a></h2>
<div class="doc-section">

<p>GetCacheViewVirtualPixelQueue() returns the the pixels associated with the last call to GetCacheViewVirtualPixels().  The pixels are virtual and therefore cannot be updated.</p>

<p>The format of the GetCacheViewVirtualPixelQueue() method is:</p>

<pre class="code">
  const PixelPacket *GetCacheViewVirtualPixelQueue(
    const CacheView *cache_view)
</pre>

<p>A description of each parameter follows:</p>

<h5>cache_view</h5>
<p>the cache view.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickCore/cache-view_8c.html" id="GetCacheViewVirtualPixels">GetCacheViewVirtualPixels</a></h2>
<div class="doc-section">

<p>GetCacheViewVirtualPixels() gets virtual pixels from the in-memory or disk pixel cache as defined by the geometry parameters.   A pointer to the pixels is returned if the pixels are transferred, otherwise a NULL is returned.</p>

<p>The format of the GetCacheViewVirtualPixels method is:</p>

<pre class="code">
  const PixelPacket *GetCacheViewVirtualPixels(
    const CacheView *cache_view,const ssize_t x,const ssize_t y,
    const size_t columns,const size_t rows,ExceptionInfo *exception)
</pre>

<p>A description of each parameter follows:</p>

<h5>cache_view</h5>
<p>the cache view.</p>

<h5>x,y,columns,rows</h5>
<p>These values define the perimeter of a region of pixels.</p>

<h5>exception</h5>
<p>return any errors or warnings in this structure.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickCore/cache-view_8c.html" id="GetOneCacheViewVirtualPixel">GetOneCacheViewVirtualPixel</a></h2>
<div class="doc-section">

<p>GetOneCacheViewVirtualPixel() returns a single pixel at the specified (x,y) location.  The image background color is returned if an error occurs.  If you plan to modify the pixel, use GetOneCacheViewAuthenticPixel() instead.</p>

<p>The format of the GetOneCacheViewVirtualPixel method is:</p>

<pre class="code">
  MagickBooleanType GetOneCacheViewVirtualPixel(
    const CacheView *cache_view,const ssize_t x,const ssize_t y,
    PixelPacket *pixel,ExceptionInfo *exception)
</pre>

<p>A description of each parameter follows:</p>

<h5>cache_view</h5>
<p>the cache view.</p>

<h5>x,y</h5>
<p>These values define the offset of the pixel.</p>

<h5>pixel</h5>
<p>return a pixel at the specified (x,y) location.</p>

<h5>exception</h5>
<p>return any errors or warnings in this structure.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickCore/cache-view_8c.html" id="GetOneCacheViewVirtualMethodPixel">GetOneCacheViewVirtualMethodPixel</a></h2>
<div class="doc-section">

<p>GetOneCacheViewVirtualMethodPixel() returns a single virtual pixel at the specified (x,y) location.  The image background color is returned if an error occurs.  If you plan to modify the pixel, use GetOneCacheViewAuthenticPixel() instead.</p>

<p>The format of the GetOneCacheViewVirtualPixel method is:</p>

<pre class="code">
  MagickBooleanType GetOneCacheViewVirtualMethodPixel(
    const CacheView *cache_view,
    const VirtualPixelMethod virtual_pixel_method,const ssize_t x,
    const ssize_t y,PixelPacket *pixel,ExceptionInfo *exception)
</pre>

<p>A description of each parameter follows:</p>

<h5>cache_view</h5>
<p>the cache view.</p>

<h5>virtual_pixel_method</h5>
<p>the virtual pixel method.</p>

<h5>x,y</h5>
<p>These values define the offset of the pixel.</p>

<h5>pixel</h5>
<p>return a pixel at the specified (x,y) location.</p>

<h5>exception</h5>
<p>return any errors or warnings in this structure.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickCore/cache-view_8c.html" id="QueueCacheViewAuthenticPixels">QueueCacheViewAuthenticPixels</a></h2>
<div class="doc-section">

<p>QueueCacheViewAuthenticPixels() queues authentic pixels from the in-memory or disk pixel cache as defined by the geometry parameters.   A pointer to the pixels is returned if the pixels are transferred, otherwise a NULL is returned.</p>

<p>The format of the QueueCacheViewAuthenticPixels method is:</p>

<pre class="code">
  PixelPacket *QueueCacheViewAuthenticPixels(CacheView *cache_view,
    const ssize_t x,const ssize_t y,const size_t columns,
    const size_t rows,ExceptionInfo *exception)
</pre>

<p>A description of each parameter follows:</p>

<h5>cache_view</h5>
<p>the cache view.</p>

<h5>x,y,columns,rows</h5>
<p>These values define the perimeter of a region of pixels.</p>

<h5>exception</h5>
<p>return any errors or warnings in this structure.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickCore/cache-view_8c.html" id="SetCacheViewStorageClass">SetCacheViewStorageClass</a></h2>
<div class="doc-section">

<p>SetCacheViewStorageClass() sets the image storage class associated with the specified view.</p>

<p>The format of the SetCacheViewStorageClass method is:</p>

<pre class="code">
  MagickBooleanType SetCacheViewStorageClass(CacheView *cache_view,
    const ClassType storage_class)
</pre>

<p>A description of each parameter follows:</p>

<h5>cache_view</h5>
<p>the cache view.</p>

<h5>storage_class</h5>
<p>the image storage class: PseudoClass or DirectClass.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickCore/cache-view_8c.html" id="SetCacheViewVirtualPixelMethod">SetCacheViewVirtualPixelMethod</a></h2>
<div class="doc-section">

<p>SetCacheViewVirtualPixelMethod() sets the virtual pixel method associated with the specified cache view.</p>

<p>The format of the SetCacheViewVirtualPixelMethod method is:</p>

<pre class="code">
  MagickBooleanType SetCacheViewVirtualPixelMethod(CacheView *cache_view,
    const VirtualPixelMethod virtual_pixel_method)
</pre>

<p>A description of each parameter follows:</p>

<h5>cache_view</h5>
<p>the cache view.</p>

<h5>virtual_pixel_method</h5>
<p>the virtual pixel method.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickCore/cache-view_8c.html" id="SyncCacheViewAuthenticPixels">SyncCacheViewAuthenticPixels</a></h2>
<div class="doc-section">

<p>SyncCacheViewAuthenticPixels() saves the cache view pixels to the in-memory or disk cache.  It returns MagickTrue if the pixel region is flushed, otherwise MagickFalse.</p>

<p>The format of the SyncCacheViewAuthenticPixels method is:</p>

<pre class="code">
  MagickBooleanType SyncCacheViewAuthenticPixels(CacheView *cache_view,
    ExceptionInfo *exception)
</pre>

<p>A description of each parameter follows:</p>

<h5>cache_view</h5>
<p>the cache view.</p>

<h5>exception</h5>
<p>return any errors or warnings in this structure.</p>

 </div>

</div>

<div id="linkbar">
    <span id="linkbar-west">&nbsp;</span>
    <span id="linkbar-center">
      <a href="http://www.imagemagick.org/discourse-server/">Discourse Server</a> &bull;
      <a href="http://www.imagemagick.org/MagickStudio/scripts/MagickStudio.cgi">Studio</a>
    </span>
    <span id="linkbar-east">&nbsp;</span>
  </div>
  <div class="footer">
    <span id="footer-west">&copy; 1999-2011 ImageMagick Studio LLC</span>
    <span id="footer-east"> <a href="../http://www.imagemagick.org/script/contact.php">Contact the Wizards</a></span>
  </div>
  <div style="clear: both; margin: 0; width: 100%; "></div>
  <script type="text/javascript">
    var _gaq = _gaq || [];
    _gaq.push(['_setAccount', 'UA-17690367-1']);
    _gaq.push(['_trackPageview']);

    (function() {
      var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
      ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
      var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
    })();
  </script>
</body>
</html>
