/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 <stdio.h>
#include <vips/vips.h>
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, &argc, &argv, &error ) ) {
if( error ) {
fprintf( stderr, "%s\n", error->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, &mean, NULL ) )
vips_error_exit( NULL );
printf( "mean pixel value = %g\n", mean );
if( vips_invert( in, &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>
|