This file is indexed.

/usr/share/gtk-doc/html/libvips/using-from-c.html is in libvips-doc 7.40.6-2.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>VIPS Reference Manual: VIPS from C</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="VIPS Reference Manual">
<link rel="up" href="ch01.html" title="VIPS Overview">
<link rel="prev" href="using-cli.html" title="VIPS from the command-line">
<link rel="next" href="binding.html" title="Writing bindings for libvips">
<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
<td width="100%" align="left" class="shortcuts"></td>
<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
<td><a accesskey="p" href="using-cli.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
<td><a accesskey="n" href="binding.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
</tr></table>
<div class="refentry">
<a name="using-from-c"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
<td valign="top">
<h2><span class="refentrytitle">VIPS from C</span></h2>
<p>Using VIPS — How to use the VIPS library from C</p>
</td>
<td class="gallery_image" valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
<a name="using-C"></a><h2>Using VIPS from C</h2>
<p>
      VIPS comes with a convenient, high-level C API. You should read the API 
      docs for full details, but this section will try to give a brief 
      overview. The <span class="command"><strong>vips</strong></span> program is handy for getting a 
      summary of an operation's parameters.
    </p>
<p>
      When your program starts, use <code class="function">VIPS_INIT()</code> to set up 
      the VIPS library. You should pass it the name of your program, usually 
      <code class="literal">argv[0]</code>. Use <code class="function">vips_shutdown()</code> 
      when you exit. 
    </p>
<p>
      You can add the VIPS flags to your %GObject command-line processing
      with vips_get_option_group(), see below.
    </p>
<p>
      The basic data object is the #VipsImage, see <a class="link" href="VipsImage.html" title="VipsImage">VIPS Image</a> for details on the
      image class. You can create an image from a file on disc or from an
      area of memory, either as a C-style array, or as a formatted object,
      like JPEG. See vips_image_new_from_file() and friends.  Loading an
      image is fast. VIPS read just enough of the image to be able to get
      the various properties, such as width in pixels. It delays reading
      any pixels until they are really needed.
    </p>
<p>
      Once you have an image, you can get properties from it in the usual way. 
      You can use projection functions, like vips_image_get_width() or 
      g_object_get(), to get GObject properties. All VIPS objects are
      immutable, meaning you can only get properties, you can't set them.
      See <a class="link" href="libvips-header.html" title="header">VIPS Header</a> to read about 
      image properties.
    </p>
<p>
      VIPS is based on the GObject library and is therefore refcounted. 
      vips_image_new_from_file() returns an object with a count of 1. 
      When you are done with an image, use g_object_unref() to dispose of it. 
      If you pass an image to an operation and that operation needs to keep a 
      copy of the image, it will ref it. So you can unref an image as soon as 
      you no longer need it, you don't need to hang on to it in case anyone 
      else is still using it. 
    </p>
<p>
      Use things like vips_invert() to manipulate your images. See <a class="link" href="VipsOperation.html" title="VipsOperation">VIPS Operations</a> for information on
      running operations on images. When you are done, you can write
      the final image to a disc file, to a formatted memory buffer, or to
      C-style memory array. See vips_image_write_to_file() and friends.
    </p>
<p>
      Use #VipsRegion to read pixels out of images. You can use 
      VIPS_IMAGE_ADDR() as well, but this can need a large amount of 
      memory to work. See <a class="link" href="extending.html" title="Extending VIPS">extending</a> 
      for an introduxction to writing your own operations. 
    </p>
<p>
      VIPS keeps a log of error message, see  <a class="link" href="libvips-error.html" title="error">VIPS Error</a> to find out how to get and
      set the error log.
    </p>
<div class="example">
<a name="id-1.2.4.3.11"></a><p class="title"><b>Example 1. VIPS from C example</b></p>
<div class="example-contents"><pre class="programlisting">
/* compile with:
 *
 *      gcc -g -Wall try211.c `pkg-config vips --cflags --libs`
 */

#include &lt;stdio.h&gt;
#include &lt;vips/vips.h&gt;

int
main( int argc, char **argv )
{
	GOptionContext *context;
	GOptionGroup *main_group;
	GError *error = NULL;
	VipsImage *in;
	double mean;
	VipsImage *out;

	if( VIPS_INIT( argv[0] ) )
		vips_error_exit( NULL ); 

	context = g_option_context_new( "hello infile outfile - VIPS demo" );

	main_group = g_option_group_new( NULL, NULL, NULL, NULL, NULL );
	g_option_context_set_main_group( context, main_group );
	g_option_context_add_group( context, vips_get_option_group() );

	if( !g_option_context_parse( context, &amp;argc, &amp;argv, &amp;error ) ) {
		if( error ) {
			fprintf( stderr, "%s\n", error-&gt;message );
			g_error_free( error );
		}

		vips_error_exit( NULL );
	}

	if( argc != 3 )
		vips_error_exit( "usage: %s infile outfile", argv[0] ); 
	
	if( !(in = vips_image_new_from_file( argv[1], NULL )) )
		vips_error_exit( NULL );

	printf( "image width = %d\n", vips_image_get_width( in ) ); 

	if( vips_avg( in, &amp;mean, NULL ) )
		vips_error_exit( NULL );

	printf( "mean pixel value = %g\n", mean ); 

	if( vips_invert( in, &amp;out, NULL ) )
		vips_error_exit( NULL );

	g_object_unref( in ); 

	if( vips_image_write_to_file( out, argv[2], NULL ) )
		vips_error_exit( NULL );

	g_object_unref( out ); 

        return( 0 );
}
</pre></div>
</div>
<br class="example-break">
</div>
</div>
<div class="footer">
<hr>
          Generated by GTK-Doc V1.20</div>
</body>
</html>