u
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,462 +0,0 @@
|
|||||||
#!/usr/bin/python3
|
|
||||||
|
|
||||||
import re
|
|
||||||
import cairo
|
|
||||||
from io import open
|
|
||||||
|
|
||||||
class ReadFile:
|
|
||||||
def __init__(self, filename):
|
|
||||||
self.filename = filename
|
|
||||||
|
|
||||||
def __enter__(self):
|
|
||||||
self.f = open(self.filename, 'r', encoding='utf-8')
|
|
||||||
self.lineno = 0
|
|
||||||
self.getnext();
|
|
||||||
return self
|
|
||||||
|
|
||||||
def __exit__(self, type, value, traceback):
|
|
||||||
self.f.close()
|
|
||||||
|
|
||||||
def __bool__(self):
|
|
||||||
return self.line != ""
|
|
||||||
|
|
||||||
__nonzero__ = __bool__
|
|
||||||
|
|
||||||
def getnext(self):
|
|
||||||
self.lineno += 1
|
|
||||||
self.line = self.f.readline()
|
|
||||||
|
|
||||||
def read_times(rf):
|
|
||||||
times = []
|
|
||||||
|
|
||||||
while True:
|
|
||||||
match = re.match('[+-]?[0-9]+ ', rf.line)
|
|
||||||
if not match:
|
|
||||||
break
|
|
||||||
times += [int(x) for x in re.split(' ', rf.line.rstrip())]
|
|
||||||
rf.getnext()
|
|
||||||
|
|
||||||
return times[::-1]
|
|
||||||
|
|
||||||
class Thread:
|
|
||||||
thread_number = 0
|
|
||||||
|
|
||||||
def __init__(self, thread_name):
|
|
||||||
# no one cares about the thread address
|
|
||||||
match = re.match(r'(.*) \(0x.*?\) (.*)', thread_name)
|
|
||||||
if match:
|
|
||||||
thread_name = match.group(1) + " " + match.group(2)
|
|
||||||
|
|
||||||
self.thread_name = thread_name
|
|
||||||
self.thread_number = Thread.thread_number
|
|
||||||
self.all_events = []
|
|
||||||
self.workwait_events = []
|
|
||||||
self.memory_events = []
|
|
||||||
self.other_events = []
|
|
||||||
Thread.thread_number += 1
|
|
||||||
|
|
||||||
all_events = []
|
|
||||||
|
|
||||||
class Event:
|
|
||||||
def __init__(self, thread, gate_location, gate_name, start, stop):
|
|
||||||
self.thread = thread
|
|
||||||
self.gate_location = gate_location
|
|
||||||
self.gate_name = gate_name
|
|
||||||
|
|
||||||
self.work = False
|
|
||||||
self.wait = False
|
|
||||||
self.memory = False
|
|
||||||
if gate_location == "memory":
|
|
||||||
self.memory = True
|
|
||||||
elif re.match('.*work.*', gate_name):
|
|
||||||
self.work = True
|
|
||||||
elif re.match('.*wait.*', gate_name):
|
|
||||||
self.wait = True
|
|
||||||
|
|
||||||
if self.memory:
|
|
||||||
self.start = start
|
|
||||||
self.stop = start
|
|
||||||
self.size = stop
|
|
||||||
else:
|
|
||||||
self.start = start
|
|
||||||
self.stop = stop
|
|
||||||
|
|
||||||
thread.all_events.append(self)
|
|
||||||
all_events.append(self)
|
|
||||||
if self.wait or self.work:
|
|
||||||
thread.workwait_events.append(self)
|
|
||||||
elif self.memory:
|
|
||||||
thread.memory_events.append(self)
|
|
||||||
else:
|
|
||||||
thread.other_events.append(self)
|
|
||||||
|
|
||||||
input_filename = 'vips-profile.txt'
|
|
||||||
|
|
||||||
thread_id = 0
|
|
||||||
threads = []
|
|
||||||
n_events = 0
|
|
||||||
print('reading from', input_filename)
|
|
||||||
with ReadFile(input_filename) as rf:
|
|
||||||
while rf:
|
|
||||||
if rf.line.rstrip() == "":
|
|
||||||
rf.getnext()
|
|
||||||
continue
|
|
||||||
if rf.line[0] == "#":
|
|
||||||
rf.getnext()
|
|
||||||
continue
|
|
||||||
|
|
||||||
match = re.match('thread: (.*)', rf.line)
|
|
||||||
if not match:
|
|
||||||
print('parse error line %d, expected "thread"' % rf.lineno)
|
|
||||||
thread_name = match.group(1) + " " + str(thread_id)
|
|
||||||
thread_id += 1
|
|
||||||
thread = Thread(thread_name)
|
|
||||||
threads.append(thread)
|
|
||||||
rf.getnext()
|
|
||||||
|
|
||||||
while True:
|
|
||||||
match = re.match('^gate: (.*?)(: (.*))?$', rf.line)
|
|
||||||
if not match:
|
|
||||||
break
|
|
||||||
gate_location = match.group(1)
|
|
||||||
gate_name = match.group(3)
|
|
||||||
rf.getnext()
|
|
||||||
|
|
||||||
match = re.match('start:', rf.line)
|
|
||||||
if not match:
|
|
||||||
continue
|
|
||||||
rf.getnext()
|
|
||||||
|
|
||||||
start = read_times(rf)
|
|
||||||
|
|
||||||
match = re.match('stop:', rf.line)
|
|
||||||
if not match:
|
|
||||||
continue
|
|
||||||
rf.getnext()
|
|
||||||
|
|
||||||
stop = read_times(rf)
|
|
||||||
|
|
||||||
if len(start) != len(stop):
|
|
||||||
print('start and stop length mismatch')
|
|
||||||
|
|
||||||
for a, b in zip(start, stop):
|
|
||||||
Event(thread, gate_location, gate_name, a, b)
|
|
||||||
n_events += 1
|
|
||||||
|
|
||||||
for thread in threads:
|
|
||||||
thread.all_events.sort(key=lambda x: x.start)
|
|
||||||
thread.workwait_events.sort(key=lambda x: x.start)
|
|
||||||
thread.memory_events.sort(key=lambda x: x.start)
|
|
||||||
thread.other_events.sort(key=lambda x: x.start)
|
|
||||||
|
|
||||||
all_events.sort(key=lambda x: x.start)
|
|
||||||
|
|
||||||
print(f'loaded {n_events} events')
|
|
||||||
|
|
||||||
# move time axis to secs of computation
|
|
||||||
ticks_per_sec = 1000000.0
|
|
||||||
first_time = all_events[0].start
|
|
||||||
last_time = 0
|
|
||||||
for event in all_events:
|
|
||||||
if event.start < first_time:
|
|
||||||
first_time = event.start
|
|
||||||
if event.stop > last_time:
|
|
||||||
last_time = event.stop
|
|
||||||
|
|
||||||
for event in all_events:
|
|
||||||
event.start = (event.start - first_time) / ticks_per_sec
|
|
||||||
event.stop = (event.stop - first_time) / ticks_per_sec
|
|
||||||
|
|
||||||
last_time = (last_time - first_time) / ticks_per_sec
|
|
||||||
first_time = 0
|
|
||||||
|
|
||||||
print(f'total time = {last_time}')
|
|
||||||
|
|
||||||
# calculate some simple stats
|
|
||||||
for thread in threads:
|
|
||||||
thread.start = last_time
|
|
||||||
thread.stop = 0
|
|
||||||
thread.wait = 0
|
|
||||||
thread.work = 0
|
|
||||||
thread.mem = 0
|
|
||||||
thread.peak_mem = 0
|
|
||||||
for event in thread.all_events:
|
|
||||||
if event.start < thread.start:
|
|
||||||
thread.start = event.start
|
|
||||||
if event.stop > thread.stop:
|
|
||||||
thread.stop = event.stop
|
|
||||||
if event.wait:
|
|
||||||
thread.wait += event.stop - event.start
|
|
||||||
if event.work:
|
|
||||||
thread.work += event.stop - event.start
|
|
||||||
if event.memory:
|
|
||||||
thread.mem += event.size
|
|
||||||
if thread.mem > thread.peak_mem:
|
|
||||||
thread.peak_mem = thread.mem
|
|
||||||
|
|
||||||
thread.alive = thread.stop - thread.start
|
|
||||||
|
|
||||||
# hide very short-lived threads
|
|
||||||
thread.hide = thread.alive < 0.01
|
|
||||||
|
|
||||||
print('name alive wait% work% unkn% mem peakm')
|
|
||||||
for thread in threads:
|
|
||||||
if thread.hide:
|
|
||||||
continue
|
|
||||||
|
|
||||||
wait_percent = 100 * thread.wait / thread.alive
|
|
||||||
work_percent = 100 * thread.work / thread.alive
|
|
||||||
unkn_percent = 100 - 100 * (thread.work + thread.wait) / thread.alive
|
|
||||||
|
|
||||||
print((f'{thread.thread_name:>13}\t{thread.alive:6.2f}\t'
|
|
||||||
f'{wait_percent:>4.1f}\t{work_percent:>4.1f}\t{unkn_percent:>4.1f}\t'
|
|
||||||
f'{thread.mem / (1024 * 1024):>4.1f}\t'
|
|
||||||
f'{thread.peak_mem / (1024 * 1024):>4.1f}'))
|
|
||||||
|
|
||||||
mem = 0
|
|
||||||
peak_mem = 0
|
|
||||||
for event in all_events:
|
|
||||||
if event.memory:
|
|
||||||
mem += event.size
|
|
||||||
if mem > peak_mem:
|
|
||||||
peak_mem = mem
|
|
||||||
|
|
||||||
print(f'peak memory = {peak_mem / (1024 * 1024):.1f} MB')
|
|
||||||
if mem != 0:
|
|
||||||
print(f'leak! final memory = {mem / (1024 * 1024):.1f} MB')
|
|
||||||
|
|
||||||
# does a list of events contain an overlap?
|
|
||||||
# assume the list of events has been sorted by start time
|
|
||||||
def events_overlap(events):
|
|
||||||
for i in range(0, len(events) - 1):
|
|
||||||
# we can't just test for stop1 > start2 since one (or both) events
|
|
||||||
# might have duration zero
|
|
||||||
event1 = events[i]
|
|
||||||
event2 = events[i + 1]
|
|
||||||
overlap_start = max(event1.start, event2.start)
|
|
||||||
overlap_stop = min(event1.stop, event2.stop)
|
|
||||||
if overlap_stop - overlap_start > 0:
|
|
||||||
return True
|
|
||||||
|
|
||||||
return False
|
|
||||||
|
|
||||||
# do the events on two gates overlap?
|
|
||||||
def gates_overlap(events, gate_name1, gate_name2):
|
|
||||||
merged = []
|
|
||||||
|
|
||||||
for event in events:
|
|
||||||
if event.gate_name == gate_name1 or event.gate_name == gate_name2:
|
|
||||||
merged.append(event)
|
|
||||||
|
|
||||||
merged.sort(key=lambda x: x.start)
|
|
||||||
|
|
||||||
return events_overlap(merged)
|
|
||||||
|
|
||||||
# show top 10 waits
|
|
||||||
wait = {}
|
|
||||||
for thread in threads:
|
|
||||||
for event in thread.all_events:
|
|
||||||
if event.wait:
|
|
||||||
name = f'{event.gate_location}::{event.gate_name}'
|
|
||||||
if name not in wait:
|
|
||||||
wait[name] = 0
|
|
||||||
|
|
||||||
wait[name] += event.stop - event.start
|
|
||||||
|
|
||||||
print('name wait')
|
|
||||||
for [name, time] in sorted(wait.items(), reverse=True, key=lambda x: x[1])[:10]:
|
|
||||||
print(f'{name:>35}\t{time:.2f}')
|
|
||||||
|
|
||||||
# allocate a y position for each gate
|
|
||||||
total_y = 0
|
|
||||||
for thread in threads:
|
|
||||||
if thread.hide:
|
|
||||||
continue
|
|
||||||
|
|
||||||
thread.total_y = total_y
|
|
||||||
|
|
||||||
gate_positions = {}
|
|
||||||
|
|
||||||
# first pass .. move work and wait events to y == 0
|
|
||||||
if events_overlap(thread.workwait_events):
|
|
||||||
print('gate overlap on thread', thread.thread_name)
|
|
||||||
for i in range(0, len(thread.workwait_events) - 1):
|
|
||||||
event1 = thread.workwait_events[i]
|
|
||||||
event2 = thread.workwait_events[i + 1]
|
|
||||||
overlap_start = max(event1.start, event2.start)
|
|
||||||
overlap_stop = min(event1.stop, event2.stop)
|
|
||||||
if overlap_stop - overlap_start > 0:
|
|
||||||
print('overlap:')
|
|
||||||
print('event', event1.gate_location, event1.gate_name, end=' ')
|
|
||||||
print('starts at', event1.start, 'stops at', event1.stop)
|
|
||||||
print('event', event2.gate_location, event2.gate_name, end=' ')
|
|
||||||
print('starts at', event2.start, 'stops at', event2.stop)
|
|
||||||
|
|
||||||
for event in thread.workwait_events:
|
|
||||||
gate_positions[event.gate_name] = 0
|
|
||||||
event.y = 0
|
|
||||||
event.total_y = total_y
|
|
||||||
|
|
||||||
for event in thread.memory_events:
|
|
||||||
gate_positions[event.gate_name] = 0
|
|
||||||
event.y = 0
|
|
||||||
event.total_y = total_y
|
|
||||||
|
|
||||||
# second pass: move all other events to non-overlapping ys
|
|
||||||
y = 1
|
|
||||||
for event in thread.other_events:
|
|
||||||
if not event.gate_name in gate_positions:
|
|
||||||
# look at all the ys we've allocated previously and see if we can
|
|
||||||
# add this gate to one of them
|
|
||||||
for gate_y in range(1, y):
|
|
||||||
found_overlap = False
|
|
||||||
for gate_name in gate_positions:
|
|
||||||
if gate_positions[gate_name] != gate_y:
|
|
||||||
continue
|
|
||||||
|
|
||||||
if gates_overlap(thread.other_events,
|
|
||||||
event.gate_name, gate_name):
|
|
||||||
found_overlap = True
|
|
||||||
break
|
|
||||||
|
|
||||||
if not found_overlap:
|
|
||||||
gate_positions[event.gate_name] = gate_y
|
|
||||||
break
|
|
||||||
|
|
||||||
# failure? add a new y
|
|
||||||
if not event.gate_name in gate_positions:
|
|
||||||
gate_positions[event.gate_name] = y
|
|
||||||
y += 1
|
|
||||||
|
|
||||||
event.y = gate_positions[event.gate_name]
|
|
||||||
|
|
||||||
# third pass: flip the order of the ys to get the lowest-level ones at the
|
|
||||||
# top, next to the wait/work line
|
|
||||||
for event in thread.other_events:
|
|
||||||
event.y = y - event.y
|
|
||||||
event.total_y = total_y + event.y
|
|
||||||
|
|
||||||
total_y += y
|
|
||||||
|
|
||||||
PIXELS_PER_SECOND = 1000
|
|
||||||
PIXELS_PER_GATE = 20
|
|
||||||
LEFT_BORDER = 130
|
|
||||||
BAR_HEIGHT = 5
|
|
||||||
MEM_HEIGHT = 100
|
|
||||||
WIDTH = int(LEFT_BORDER + last_time * PIXELS_PER_SECOND) + 20
|
|
||||||
HEIGHT = int(total_y * PIXELS_PER_GATE) + MEM_HEIGHT + 30
|
|
||||||
|
|
||||||
output_filename = "vips-profile.svg"
|
|
||||||
print('writing to', output_filename)
|
|
||||||
|
|
||||||
surface = cairo.SVGSurface(output_filename, WIDTH, HEIGHT)
|
|
||||||
|
|
||||||
ctx = cairo.Context(surface)
|
|
||||||
ctx.select_font_face('Sans')
|
|
||||||
ctx.set_font_size(15)
|
|
||||||
|
|
||||||
ctx.rectangle(0, 0, WIDTH, HEIGHT)
|
|
||||||
ctx.set_source_rgba(0.0, 0.0, 0.3, 1.0)
|
|
||||||
ctx.fill()
|
|
||||||
|
|
||||||
def draw_event(ctx, event):
|
|
||||||
left = event.start * PIXELS_PER_SECOND + LEFT_BORDER
|
|
||||||
top = event.total_y * PIXELS_PER_GATE + BAR_HEIGHT // 2
|
|
||||||
width = (event.stop - event.start) * PIXELS_PER_SECOND
|
|
||||||
height = BAR_HEIGHT
|
|
||||||
|
|
||||||
if event.memory:
|
|
||||||
width = 1
|
|
||||||
height /= 2
|
|
||||||
top += BAR_HEIGHT
|
|
||||||
|
|
||||||
ctx.rectangle(left, top, width, height)
|
|
||||||
|
|
||||||
if event.wait:
|
|
||||||
ctx.set_source_rgb(0.9, 0.1, 0.1)
|
|
||||||
elif event.work:
|
|
||||||
ctx.set_source_rgb(0.1, 0.9, 0.1)
|
|
||||||
elif event.memory:
|
|
||||||
ctx.set_source_rgb(1.0, 1.0, 1.0)
|
|
||||||
else:
|
|
||||||
ctx.set_source_rgb(0.1, 0.1, 0.9)
|
|
||||||
|
|
||||||
ctx.fill()
|
|
||||||
if not event.wait and not event.work and not event.memory:
|
|
||||||
xbearing, ybearing, twidth, theight, xadvance, yadvance = \
|
|
||||||
ctx.text_extents(event.gate_name)
|
|
||||||
ctx.move_to(left + width // 2 - twidth // 2, top + 3 * BAR_HEIGHT)
|
|
||||||
ctx.set_source_rgb(1.00, 0.83, 0.00)
|
|
||||||
ctx.show_text(event.gate_name)
|
|
||||||
|
|
||||||
for thread in threads:
|
|
||||||
if thread.hide:
|
|
||||||
continue
|
|
||||||
|
|
||||||
ctx.rectangle(0, thread.total_y * PIXELS_PER_GATE, WIDTH, 1)
|
|
||||||
ctx.set_source_rgb(1.00, 1.00, 1.00)
|
|
||||||
ctx.fill()
|
|
||||||
|
|
||||||
xbearing, ybearing, twidth, theight, xadvance, yadvance = \
|
|
||||||
ctx.text_extents(thread.thread_name)
|
|
||||||
ctx.move_to(0, theight + thread.total_y * PIXELS_PER_GATE + BAR_HEIGHT // 2)
|
|
||||||
ctx.set_source_rgb(1.00, 1.00, 1.00)
|
|
||||||
ctx.show_text(thread.thread_name)
|
|
||||||
|
|
||||||
for event in thread.all_events:
|
|
||||||
draw_event(ctx, event)
|
|
||||||
|
|
||||||
memory_y = total_y * PIXELS_PER_GATE
|
|
||||||
|
|
||||||
label = "memory"
|
|
||||||
xbearing, ybearing, twidth, theight, xadvance, yadvance = \
|
|
||||||
ctx.text_extents(label)
|
|
||||||
ctx.move_to(0, memory_y + theight + 8)
|
|
||||||
ctx.set_source_rgb(1.00, 1.00, 1.00)
|
|
||||||
ctx.show_text(label)
|
|
||||||
|
|
||||||
mem = 0
|
|
||||||
ctx.move_to(LEFT_BORDER, memory_y + MEM_HEIGHT)
|
|
||||||
|
|
||||||
for event in all_events:
|
|
||||||
if event.memory:
|
|
||||||
mem += event.size
|
|
||||||
|
|
||||||
left = LEFT_BORDER + event.start * PIXELS_PER_SECOND
|
|
||||||
top = memory_y + MEM_HEIGHT - (MEM_HEIGHT * mem / peak_mem)
|
|
||||||
|
|
||||||
ctx.line_to(left, top)
|
|
||||||
|
|
||||||
ctx.set_line_width(1)
|
|
||||||
ctx.set_source_rgb(1.00, 1.00, 1.00)
|
|
||||||
ctx.stroke()
|
|
||||||
|
|
||||||
axis_y = total_y * PIXELS_PER_GATE + MEM_HEIGHT
|
|
||||||
|
|
||||||
ctx.rectangle(LEFT_BORDER, axis_y, last_time * PIXELS_PER_SECOND, 1)
|
|
||||||
ctx.set_source_rgb(1.00, 1.00, 1.00)
|
|
||||||
ctx.fill()
|
|
||||||
|
|
||||||
label = "time"
|
|
||||||
xbearing, ybearing, twidth, theight, xadvance, yadvance = \
|
|
||||||
ctx.text_extents(label)
|
|
||||||
ctx.move_to(0, axis_y + theight + 8)
|
|
||||||
ctx.set_source_rgb(1.00, 1.00, 1.00)
|
|
||||||
ctx.show_text(label)
|
|
||||||
|
|
||||||
for t in range(0, int(last_time * PIXELS_PER_SECOND), PIXELS_PER_SECOND // 10):
|
|
||||||
left = t + LEFT_BORDER
|
|
||||||
top = axis_y
|
|
||||||
|
|
||||||
ctx.rectangle(left, top, 1, 5)
|
|
||||||
ctx.set_source_rgb(1.00, 1.00, 1.00)
|
|
||||||
ctx.fill()
|
|
||||||
|
|
||||||
label = str(t / PIXELS_PER_SECOND)
|
|
||||||
xbearing, ybearing, twidth, theight, xadvance, yadvance = \
|
|
||||||
ctx.text_extents(label)
|
|
||||||
ctx.move_to(left - twidth // 2, top + theight + 8)
|
|
||||||
ctx.set_source_rgb(1.00, 1.00, 1.00)
|
|
||||||
ctx.show_text(label)
|
|
||||||
|
|
||||||
surface.finish()
|
|
||||||
Binary file not shown.
@@ -1,144 +0,0 @@
|
|||||||
// VIPS connection wrapper
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
This file is part of VIPS.
|
|
||||||
|
|
||||||
VIPS is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
||||||
02110-1301 USA
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef VIPS_VCONNECTION_H
|
|
||||||
#define VIPS_VCONNECTION_H
|
|
||||||
|
|
||||||
#include <vips/vips.h>
|
|
||||||
|
|
||||||
VIPS_NAMESPACE_START
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A generic source object. These supply a stream of bytes that loaders can
|
|
||||||
* use to fetch image files, see VImage::new_from_source().
|
|
||||||
*
|
|
||||||
* Methods let you can connect a source up to memory, a file or
|
|
||||||
* a file descriptor. Use vips::VSourceCustom to implement custom sources
|
|
||||||
* using GObject signals.
|
|
||||||
*/
|
|
||||||
class VSource : public VObject {
|
|
||||||
public:
|
|
||||||
/**
|
|
||||||
* Wrap a VSource around an underlying VipsSource object.
|
|
||||||
*/
|
|
||||||
explicit VSource(VipsSource *input, VSteal steal = STEAL)
|
|
||||||
: VObject((VipsObject *) input, steal)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Make a new VSource from a file descriptor.
|
|
||||||
*/
|
|
||||||
static VSource
|
|
||||||
new_from_descriptor(int descriptor);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Make a new VSource from a file on disc.
|
|
||||||
*/
|
|
||||||
static VSource
|
|
||||||
new_from_file(const char *filename);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Make a new VSource from a binary object.
|
|
||||||
*/
|
|
||||||
static VSource
|
|
||||||
new_from_blob(VipsBlob *blob);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Make a new VSource from an area of memory.
|
|
||||||
*/
|
|
||||||
static VSource
|
|
||||||
new_from_memory(const void *data, size_t size);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Make a new VSource from a set of options encoded as a string. See
|
|
||||||
* vips_source_new().
|
|
||||||
*/
|
|
||||||
static VSource
|
|
||||||
new_from_options(const char *options);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a pointer to the underlying VipsSoure object.
|
|
||||||
*/
|
|
||||||
VipsSource *
|
|
||||||
get_source() const
|
|
||||||
{
|
|
||||||
return (VipsSource *) VObject::get_object();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A generic target object. Savers can use these to write a stream of bytes
|
|
||||||
* somewhere, see VImage::write_to_target().
|
|
||||||
*
|
|
||||||
* Methods let you can connect a target up to memory, a file or
|
|
||||||
* a file descriptor. Use vips::VTargetCustom to implement custom targets
|
|
||||||
* using GObject signals.
|
|
||||||
*/
|
|
||||||
class VTarget : public VObject {
|
|
||||||
public:
|
|
||||||
/**
|
|
||||||
* Wrap a VTarget around an underlying VipsTarget object.
|
|
||||||
*/
|
|
||||||
explicit VTarget(VipsTarget *output, VSteal steal = STEAL)
|
|
||||||
: VObject((VipsObject *) output, steal)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Make a new VTarget which, when written to, will write to a file
|
|
||||||
* descriptor.
|
|
||||||
*/
|
|
||||||
static VTarget
|
|
||||||
new_to_descriptor(int descriptor);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Make a new VTarget which, when written to, will write to a file.
|
|
||||||
*/
|
|
||||||
static VTarget new_to_file(const char *filename);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Make a new VTarget which, when written to, will write to a file
|
|
||||||
* descriptor.
|
|
||||||
*/
|
|
||||||
static VTarget new_to_memory();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a pointer to the underlying VipsTarget object.
|
|
||||||
*/
|
|
||||||
VipsTarget *
|
|
||||||
get_target() const
|
|
||||||
{
|
|
||||||
return (VipsTarget *) VObject::get_object();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
VIPS_NAMESPACE_END
|
|
||||||
|
|
||||||
#endif /*VIPS_VCONNECTION_H*/
|
|
||||||
@@ -1,79 +0,0 @@
|
|||||||
// Header for error type
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
This file is part of VIPS.
|
|
||||||
|
|
||||||
VIPS is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
||||||
02110-1301 USA
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef VIPS_VERROR_H
|
|
||||||
#define VIPS_VERROR_H
|
|
||||||
|
|
||||||
#include <cstring>
|
|
||||||
#include <ostream>
|
|
||||||
#include <exception>
|
|
||||||
|
|
||||||
#include <vips/vips.h>
|
|
||||||
|
|
||||||
VIPS_NAMESPACE_START
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The libvips error class. It holds a single string containing an
|
|
||||||
* internationalized error message in utf-8 encoding.
|
|
||||||
*/
|
|
||||||
class VIPS_CPLUSPLUS_API VError : public std::exception {
|
|
||||||
std::string _what;
|
|
||||||
|
|
||||||
public:
|
|
||||||
/**
|
|
||||||
* Construct a VError, setting the error message.
|
|
||||||
*/
|
|
||||||
VError(const std::string &what) : _what(what) {}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Construct a VError, fetching the error message from the libvips
|
|
||||||
* error buffer.
|
|
||||||
*/
|
|
||||||
VError() : _what(vips_error_buffer()) {}
|
|
||||||
|
|
||||||
virtual ~VError() throw() {}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a reference to the underlying C string.
|
|
||||||
*/
|
|
||||||
virtual const char *
|
|
||||||
what() const throw()
|
|
||||||
{
|
|
||||||
return _what.c_str();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Print the error message to a stream.
|
|
||||||
*/
|
|
||||||
void ostream_print(std::ostream &) const;
|
|
||||||
};
|
|
||||||
|
|
||||||
VIPS_NAMESPACE_END
|
|
||||||
|
|
||||||
#endif /*VIPS_VERROR_H*/
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,74 +0,0 @@
|
|||||||
// VIPS interpolate wrapper
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
This file is part of VIPS.
|
|
||||||
|
|
||||||
VIPS is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
||||||
02110-1301 USA
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef VIPS_VINTERPOLATE_H
|
|
||||||
#define VIPS_VINTERPOLATE_H
|
|
||||||
|
|
||||||
#include <vips/vips.h>
|
|
||||||
|
|
||||||
VIPS_NAMESPACE_START
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An interpolation. You can pass one of these to something like
|
|
||||||
* VImage::affine for it to use to interpolate pixels.
|
|
||||||
*
|
|
||||||
* The available interpolators vary a bit with your libvips version and how it
|
|
||||||
* was built, but will include `nearest`, `bilinear` and `bicubic`. Run
|
|
||||||
* vips -l interpolate` to see them all.
|
|
||||||
*/
|
|
||||||
class VInterpolate : public VObject {
|
|
||||||
public:
|
|
||||||
/**
|
|
||||||
* Create a VInterpolate that wraps a VipsInterpolate object. If steal
|
|
||||||
* is STEAL, then this VInterpolate takes over ownership of the libvips
|
|
||||||
* object and will automatically unref it.
|
|
||||||
*/
|
|
||||||
explicit VInterpolate(VipsInterpolate *interpolate, VSteal steal = STEAL)
|
|
||||||
: VObject((VipsObject *) interpolate, steal)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a VInterpolate from a name, for example `"bicubic"`.
|
|
||||||
*/
|
|
||||||
static VInterpolate new_from_name(const char *name, VOption *options = nullptr);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a pointer to the underlying VipsInterpolate object.
|
|
||||||
*/
|
|
||||||
VipsInterpolate *
|
|
||||||
get_interpolate() const
|
|
||||||
{
|
|
||||||
return (VipsInterpolate *) VObject::get_object();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
VIPS_NAMESPACE_END
|
|
||||||
|
|
||||||
#endif /*VIPS_VINTERPOLATE_H*/
|
|
||||||
@@ -1,154 +0,0 @@
|
|||||||
// VIPS region wrapper
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
This file is part of VIPS.
|
|
||||||
|
|
||||||
VIPS is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
||||||
02110-1301 USA
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef VIPS_VREGION_H
|
|
||||||
#define VIPS_VREGION_H
|
|
||||||
|
|
||||||
#include <vips/vips.h>
|
|
||||||
|
|
||||||
VIPS_NAMESPACE_START
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A region of an image. Can be used to access raw pixel data.
|
|
||||||
* */
|
|
||||||
class VRegion : public VObject {
|
|
||||||
public:
|
|
||||||
/**
|
|
||||||
* Create a VRegion that wraps a VipsRegion object. If steal
|
|
||||||
* is STEAL, then this VRegion takes over ownership of the libvips
|
|
||||||
* object and will automatically unref it.
|
|
||||||
*/
|
|
||||||
explicit VRegion(VipsRegion *region, VSteal steal = STEAL)
|
|
||||||
: VObject((VipsObject *) region, steal)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a VRegion from an image.
|
|
||||||
*/
|
|
||||||
static VRegion
|
|
||||||
new_from_image(VImage image);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a pointer to the underlying VipsRegion object.
|
|
||||||
*/
|
|
||||||
VipsRegion *
|
|
||||||
get_region() const
|
|
||||||
{
|
|
||||||
return (VipsRegion *) VObject::get_object();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Prepare the region from VipsRect.
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
prepare(const VipsRect *rect) const
|
|
||||||
{
|
|
||||||
if (vips_region_prepare(get_region(), rect))
|
|
||||||
throw VError();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Prepare the region from rectangle coordinates.
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
prepare(int left, int top, int width, int height) const
|
|
||||||
{
|
|
||||||
VipsRect rect = { left, top, width, height };
|
|
||||||
|
|
||||||
prepare(&rect);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get valid bounds of the region.
|
|
||||||
*/
|
|
||||||
VipsRect
|
|
||||||
valid() const
|
|
||||||
{
|
|
||||||
return get_region()->valid;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get pointer to the start of the region.
|
|
||||||
*/
|
|
||||||
VipsPel *
|
|
||||||
addr() const
|
|
||||||
{
|
|
||||||
return addr(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get pointer at the given index of the region.
|
|
||||||
*/
|
|
||||||
VipsPel *
|
|
||||||
addr(size_t i) const
|
|
||||||
{
|
|
||||||
return &VIPS_REGION_ADDR_TOPLEFT(get_region())[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get pointer at the given coordinates of the region.
|
|
||||||
*/
|
|
||||||
VipsPel *
|
|
||||||
addr(int x, int y) const
|
|
||||||
{
|
|
||||||
return VIPS_REGION_ADDR(get_region(), x, y);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the stride (bytes per row, including padding) of the region.
|
|
||||||
*/
|
|
||||||
size_t
|
|
||||||
stride() const
|
|
||||||
{
|
|
||||||
return VIPS_REGION_LSKIP(get_region());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get VipsPel at the given index of the region.
|
|
||||||
*/
|
|
||||||
VipsPel
|
|
||||||
operator[](size_t i) const
|
|
||||||
{
|
|
||||||
return *addr(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get VipsPel at the given coordinates of the region.
|
|
||||||
*/
|
|
||||||
VipsPel
|
|
||||||
operator()(int x, int y) const
|
|
||||||
{
|
|
||||||
return *addr(x, y);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
VIPS_NAMESPACE_END
|
|
||||||
|
|
||||||
#endif /*VIPS_VREGION_H*/
|
|
||||||
@@ -1,467 +0,0 @@
|
|||||||
/* Old and broken stuff that we still enable by default, but don't document
|
|
||||||
* and certainly don't recommend.
|
|
||||||
*
|
|
||||||
* 30/6/09
|
|
||||||
* - from vips.h
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
This file is part of VIPS.
|
|
||||||
|
|
||||||
VIPS is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
||||||
02110-1301 USA
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef IM_ALMOSTDEPRECATED_H
|
|
||||||
#define IM_ALMOSTDEPRECATED_H
|
|
||||||
|
|
||||||
#ifndef VIPS_VIPS7COMPAT_H
|
|
||||||
#error Should not be included directly use vips7compat.h instead
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
/* Was public, now deprecated.
|
|
||||||
*/
|
|
||||||
typedef enum /*< skip >*/ {
|
|
||||||
IM_BBITS_BYTE = 8,
|
|
||||||
IM_BBITS_SHORT = 16,
|
|
||||||
IM_BBITS_INT = 32,
|
|
||||||
IM_BBITS_FLOAT = 32,
|
|
||||||
IM_BBITS_COMPLEX = 64,
|
|
||||||
IM_BBITS_DOUBLE = 64,
|
|
||||||
IM_BBITS_DPCOMPLEX = 128
|
|
||||||
} VipsBBits;
|
|
||||||
|
|
||||||
/* Used to define a region of interest for im_extract() etc. Too boring to be
|
|
||||||
* public API, see im_extract_area() etc.
|
|
||||||
*/
|
|
||||||
typedef struct {
|
|
||||||
int xstart;
|
|
||||||
int ystart;
|
|
||||||
int xsize;
|
|
||||||
int ysize;
|
|
||||||
int chsel; /* 1 2 3 or 0, for r g b or all respectively
|
|
||||||
*(channel select) */
|
|
||||||
} IMAGE_BOX;
|
|
||||||
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
int im_extract(IMAGE *, IMAGE *, IMAGE_BOX *);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
DOUBLEMASK *im_measure(IMAGE *im, IMAGE_BOX *box, int h, int v,
|
|
||||||
int *sel, int nsel, const char *name);
|
|
||||||
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
gboolean im_isuint(IMAGE *im);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
gboolean im_isint(IMAGE *im);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
gboolean im_isfloat(IMAGE *im);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
gboolean im_isscalar(IMAGE *im);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
gboolean im_iscomplex(IMAGE *im);
|
|
||||||
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
int im_c2ps(IMAGE *in, IMAGE *out);
|
|
||||||
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
int im_clip(IMAGE *in, IMAGE *out);
|
|
||||||
|
|
||||||
#define MASK_IDEAL_HIGHPASS IM_MASK_IDEAL_HIGHPASS
|
|
||||||
#define MASK_IDEAL_LOWPASS IM_MASK_IDEAL_LOWPASS
|
|
||||||
#define MASK_BUTTERWORTH_HIGHPASS IM_MASK_BUTTERWORTH_HIGHPASS
|
|
||||||
#define MASK_BUTTERWORTH_LOWPASS IM_MASK_BUTTERWORTH_LOWPASS
|
|
||||||
#define MASK_GAUSS_HIGHPASS IM_MASK_GAUSS_HIGHPASS
|
|
||||||
#define MASK_GAUSS_LOWPASS IM_MASK_GAUSS_LOWPASS
|
|
||||||
|
|
||||||
#define MASK_IDEAL_RINGPASS IM_MASK_IDEAL_RINGPASS
|
|
||||||
#define MASK_IDEAL_RINGREJECT IM_MASK_IDEAL_RINGREJECT
|
|
||||||
#define MASK_BUTTERWORTH_RINGPASS IM_MASK_BUTTERWORTH_RINGPASS
|
|
||||||
#define MASK_BUTTERWORTH_RINGREJECT IM_MASK_BUTTERWORTH_RINGREJECT
|
|
||||||
#define MASK_GAUSS_RINGPASS IM_MASK_GAUSS_RINGPASS
|
|
||||||
#define MASK_GAUSS_RINGREJECT IM_MASK_GAUSS_RINGREJECT
|
|
||||||
|
|
||||||
#define MASK_IDEAL_BANDPASS IM_MASK_IDEAL_BANDPASS
|
|
||||||
#define MASK_IDEAL_BANDREJECT IM_MASK_IDEAL_BANDREJECT
|
|
||||||
#define MASK_BUTTERWORTH_BANDPASS IM_MASK_BUTTERWORTH_BANDPASS
|
|
||||||
#define MASK_BUTTERWORTH_BANDREJECT IM_MASK_BUTTERWORTH_BANDREJECT
|
|
||||||
#define MASK_GAUSS_BANDPASS IM_MASK_GAUSS_BANDPASS
|
|
||||||
#define MASK_GAUSS_BANDREJECT IM_MASK_GAUSS_BANDREJECT
|
|
||||||
|
|
||||||
#define MASK_FRACTAL_FLT IM_MASK_FRACTAL_FLT
|
|
||||||
|
|
||||||
#define MaskType ImMaskType
|
|
||||||
|
|
||||||
/* Copy and swap types.
|
|
||||||
*/
|
|
||||||
typedef enum /*< skip >*/ {
|
|
||||||
IM_ARCH_NATIVE,
|
|
||||||
IM_ARCH_BYTE_SWAPPED,
|
|
||||||
IM_ARCH_LSB_FIRST,
|
|
||||||
IM_ARCH_MSB_FIRST
|
|
||||||
} im_arch_type;
|
|
||||||
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
gboolean im_isnative(im_arch_type arch);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
int im_copy_from(IMAGE *in, IMAGE *out, im_arch_type architecture);
|
|
||||||
|
|
||||||
/* Backwards compatibility macros.
|
|
||||||
*/
|
|
||||||
#define im_clear_error_string() im_error_clear()
|
|
||||||
#define im_errorstring() im_error_buffer()
|
|
||||||
|
|
||||||
/* Deprecated API.
|
|
||||||
*/
|
|
||||||
VIPS_DEPRECATED_FOR(vips_error)
|
|
||||||
void im_errormsg(const char *fmt, ...)
|
|
||||||
G_GNUC_PRINTF(1, 2);
|
|
||||||
VIPS_DEPRECATED_FOR(vips_verror)
|
|
||||||
void im_verrormsg(const char *fmt, va_list ap);
|
|
||||||
VIPS_DEPRECATED_FOR(vips_error_system)
|
|
||||||
void im_errormsg_system(int err, const char *fmt, ...)
|
|
||||||
G_GNUC_PRINTF(2, 3);
|
|
||||||
VIPS_DEPRECATED_FOR(g_info)
|
|
||||||
void im_diagnostics(const char *fmt, ...)
|
|
||||||
G_GNUC_PRINTF(1, 2);
|
|
||||||
VIPS_DEPRECATED_FOR(g_warning)
|
|
||||||
void im_warning(const char *fmt, ...)
|
|
||||||
G_GNUC_PRINTF(1, 2);
|
|
||||||
|
|
||||||
VIPS_DEPRECATED_FOR(g_thread_join)
|
|
||||||
void *vips_g_thread_join(GThread *thread);
|
|
||||||
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
int im_iterate(VipsImage *im,
|
|
||||||
VipsStartFn start, im_generate_fn generate, VipsStopFn stop,
|
|
||||||
void *a, void *b);
|
|
||||||
|
|
||||||
/* Async rendering.
|
|
||||||
*/
|
|
||||||
VIPS_DEPRECATED_FOR(vips_sink_screen)
|
|
||||||
int im_render_priority(VipsImage *in, VipsImage *out, VipsImage *mask,
|
|
||||||
int width, int height, int max,
|
|
||||||
int priority,
|
|
||||||
void (*notify)(VipsImage *, VipsRect *, void *), void *client);
|
|
||||||
VIPS_DEPRECATED_FOR(vips_sink_screen)
|
|
||||||
int im_cache(VipsImage *in, VipsImage *out, int width, int height, int max);
|
|
||||||
|
|
||||||
/* Deprecated operations.
|
|
||||||
*/
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
int im_cmulnorm(IMAGE *in1, IMAGE *in2, IMAGE *out);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
int im_fav4(IMAGE **, IMAGE *);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
int im_gadd(double, IMAGE *, double, IMAGE *, double, IMAGE *);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
int im_litecor(IMAGE *, IMAGE *, IMAGE *, int, double);
|
|
||||||
VIPS_DEPRECATED_FOR(vips_sink_screen)
|
|
||||||
int im_render_fade(IMAGE *in, IMAGE *out, IMAGE *mask,
|
|
||||||
int width, int height, int max,
|
|
||||||
int fps, int steps,
|
|
||||||
int priority,
|
|
||||||
void (*notify)(IMAGE *, VipsRect *, void *), void *client);
|
|
||||||
VIPS_DEPRECATED_FOR(vips_sink_screen)
|
|
||||||
int im_render(IMAGE *in, IMAGE *out, IMAGE *mask,
|
|
||||||
int width, int height, int max,
|
|
||||||
void (*notify)(IMAGE *, VipsRect *, void *), void *client);
|
|
||||||
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
int im_cooc_matrix(IMAGE *im, IMAGE *m,
|
|
||||||
int xp, int yp, int xs, int ys, int dx, int dy, int flag);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
int im_cooc_asm(IMAGE *m, double *asmoment);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
int im_cooc_contrast(IMAGE *m, double *contrast);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
int im_cooc_correlation(IMAGE *m, double *correlation);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
int im_cooc_entropy(IMAGE *m, double *entropy);
|
|
||||||
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
int im_glds_matrix(IMAGE *im, IMAGE *m,
|
|
||||||
int xpos, int ypos, int xsize, int ysize, int dx, int dy);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
int im_glds_asm(IMAGE *m, double *asmoment);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
int im_glds_contrast(IMAGE *m, double *contrast);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
int im_glds_entropy(IMAGE *m, double *entropy);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
int im_glds_mean(IMAGE *m, double *mean);
|
|
||||||
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
int im_dif_std(IMAGE *im, int xpos, int ypos, int xsize, int ysize, int dx, int dy, double *pmean, double *pstd);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
int im_simcontr(IMAGE *out, int xsize, int ysize);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
int im_spatres(IMAGE *in, IMAGE *out, int step);
|
|
||||||
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
int im_stretch3(IMAGE *in, IMAGE *out, double dx, double dy);
|
|
||||||
|
|
||||||
/* Renamed operations.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* arithmetic
|
|
||||||
*/
|
|
||||||
VIPS_DEPRECATED_FOR(vips_remainder_const)
|
|
||||||
int im_remainderconst_vec(IMAGE *in, IMAGE *out, int n, double *c);
|
|
||||||
|
|
||||||
/* boolean
|
|
||||||
*/
|
|
||||||
VIPS_DEPRECATED_FOR(vips_andimage_const1)
|
|
||||||
int im_andconst(IMAGE *, IMAGE *, double);
|
|
||||||
VIPS_DEPRECATED_FOR(vips_andimage_const)
|
|
||||||
int im_and_vec(IMAGE *, IMAGE *, int, double *);
|
|
||||||
VIPS_DEPRECATED_FOR(vips_orimage_const1)
|
|
||||||
int im_orconst(IMAGE *, IMAGE *, double);
|
|
||||||
VIPS_DEPRECATED_FOR(vips_orimage_const)
|
|
||||||
int im_or_vec(IMAGE *, IMAGE *, int, double *);
|
|
||||||
VIPS_DEPRECATED_FOR(vips_eorimage_const1)
|
|
||||||
int im_eorconst(IMAGE *, IMAGE *, double);
|
|
||||||
VIPS_DEPRECATED_FOR(vips_eorimage_const)
|
|
||||||
int im_eor_vec(IMAGE *, IMAGE *, int, double *);
|
|
||||||
|
|
||||||
/* mosaicing
|
|
||||||
*/
|
|
||||||
VIPS_DEPRECATED_FOR(vips_affine)
|
|
||||||
int im_affine(IMAGE *in, IMAGE *out,
|
|
||||||
double a, double b, double c, double d, double dx, double dy,
|
|
||||||
int ox, int oy, int ow, int oh);
|
|
||||||
VIPS_DEPRECATED_FOR(vips_similarity)
|
|
||||||
int im_similarity(IMAGE *in, IMAGE *out,
|
|
||||||
double a, double b, double dx, double dy);
|
|
||||||
VIPS_DEPRECATED_FOR(vips_similarity)
|
|
||||||
int im_similarity_area(IMAGE *in, IMAGE *out,
|
|
||||||
double a, double b, double dx, double dy,
|
|
||||||
int ox, int oy, int ow, int oh);
|
|
||||||
|
|
||||||
/* colour
|
|
||||||
*/
|
|
||||||
VIPS_DEPRECATED_FOR(vips_icc_export)
|
|
||||||
int im_icc_export(IMAGE *in, IMAGE *out,
|
|
||||||
const char *output_profile_filename, int intent);
|
|
||||||
|
|
||||||
/* conversion
|
|
||||||
*/
|
|
||||||
VIPS_DEPRECATED_FOR(vips_cast)
|
|
||||||
int im_clip2dcm(IMAGE *in, IMAGE *out);
|
|
||||||
VIPS_DEPRECATED_FOR(vips_cast)
|
|
||||||
int im_clip2cm(IMAGE *in, IMAGE *out);
|
|
||||||
VIPS_DEPRECATED_FOR(vips_cast)
|
|
||||||
int im_clip2us(IMAGE *in, IMAGE *out);
|
|
||||||
VIPS_DEPRECATED_FOR(vips_cast)
|
|
||||||
int im_clip2ui(IMAGE *in, IMAGE *out);
|
|
||||||
VIPS_DEPRECATED_FOR(vips_cast)
|
|
||||||
int im_clip2s(IMAGE *in, IMAGE *out);
|
|
||||||
VIPS_DEPRECATED_FOR(vips_cast)
|
|
||||||
int im_clip2i(IMAGE *in, IMAGE *out);
|
|
||||||
VIPS_DEPRECATED_FOR(vips_cast)
|
|
||||||
int im_clip2d(IMAGE *in, IMAGE *out);
|
|
||||||
VIPS_DEPRECATED_FOR(vips_cast)
|
|
||||||
int im_clip2f(IMAGE *in, IMAGE *out);
|
|
||||||
VIPS_DEPRECATED_FOR(vips_cast)
|
|
||||||
int im_clip2c(IMAGE *in, IMAGE *out);
|
|
||||||
|
|
||||||
VIPS_DEPRECATED_FOR(vips_tilecache)
|
|
||||||
int vips_cache(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
int im_slice(IMAGE *in, IMAGE *out, double, double);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
int im_thresh(IMAGE *in, IMAGE *out, double);
|
|
||||||
|
|
||||||
VIPS_DEPRECATED_FOR(printf)
|
|
||||||
int im_print(const char *message);
|
|
||||||
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
int im_convsub(IMAGE *in, IMAGE *out, INTMASK *mask, int xskip, int yskip);
|
|
||||||
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
int im_bernd(const char *tiffname, int x, int y, int w, int h);
|
|
||||||
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
int im_resize_linear(IMAGE *, IMAGE *, int, int);
|
|
||||||
|
|
||||||
VIPS_DEPRECATED_FOR(vips_convf)
|
|
||||||
int im_convf(IMAGE *in, IMAGE *out, DOUBLEMASK *mask);
|
|
||||||
VIPS_DEPRECATED_FOR(vips_convsep)
|
|
||||||
int im_convsepf(IMAGE *in, IMAGE *out, DOUBLEMASK *mask);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
int im_conv_raw(IMAGE *in, IMAGE *out, INTMASK *mask);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
int im_convf_raw(IMAGE *in, IMAGE *out, DOUBLEMASK *mask);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
int im_convsep_raw(IMAGE *in, IMAGE *out, INTMASK *mask);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
int im_convsepf_raw(IMAGE *in, IMAGE *out, DOUBLEMASK *mask);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
int im_fastcor_raw(IMAGE *in, IMAGE *ref, IMAGE *out);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
int im_spcor_raw(IMAGE *in, IMAGE *ref, IMAGE *out);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
int im_gradcor_raw(IMAGE *in, IMAGE *ref, IMAGE *out);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
int im_contrast_surface_raw(IMAGE *in, IMAGE *out,
|
|
||||||
int half_win_size, int spacing);
|
|
||||||
|
|
||||||
VIPS_DEPRECATED_FOR(vips_stdif)
|
|
||||||
int im_stdif_raw(IMAGE *in, IMAGE *out,
|
|
||||||
double a, double m0, double b, double s0, int xwin, int ywin);
|
|
||||||
VIPS_DEPRECATED_FOR(vips_hist_local)
|
|
||||||
int im_lhisteq_raw(IMAGE *in, IMAGE *out, int xwin, int ywin);
|
|
||||||
|
|
||||||
VIPS_DEPRECATED_FOR(vips_morph)
|
|
||||||
int im_erode_raw(IMAGE *in, IMAGE *out, INTMASK *m);
|
|
||||||
VIPS_DEPRECATED_FOR(vips_morph)
|
|
||||||
int im_dilate_raw(IMAGE *in, IMAGE *out, INTMASK *m);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
int im_rank_raw(IMAGE *in, IMAGE *out, int xsize, int ysize, int order);
|
|
||||||
|
|
||||||
/* foreign
|
|
||||||
*/
|
|
||||||
/**
|
|
||||||
* VipsForeignJpegSubsample:
|
|
||||||
* @VIPS_FOREIGN_JPEG_SUBSAMPLE_AUTO: default preset
|
|
||||||
* @VIPS_FOREIGN_JPEG_SUBSAMPLE_ON: always perform subsampling
|
|
||||||
* @VIPS_FOREIGN_JPEG_SUBSAMPLE_OFF: never perform subsampling
|
|
||||||
*
|
|
||||||
* Set jpeg subsampling mode.
|
|
||||||
*
|
|
||||||
* DEPRECATED: use #VipsForeignSubsample
|
|
||||||
*/
|
|
||||||
typedef enum {
|
|
||||||
VIPS_FOREIGN_JPEG_SUBSAMPLE_AUTO,
|
|
||||||
VIPS_FOREIGN_JPEG_SUBSAMPLE_ON,
|
|
||||||
VIPS_FOREIGN_JPEG_SUBSAMPLE_OFF,
|
|
||||||
VIPS_FOREIGN_JPEG_SUBSAMPLE_LAST
|
|
||||||
} VipsForeignJpegSubsample;
|
|
||||||
|
|
||||||
VIPS_DEPRECATED_FOR(vips_rawsave_target)
|
|
||||||
int vips_rawsave_fd(VipsImage *in, int fd, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
/* inplace
|
|
||||||
*/
|
|
||||||
VIPS_DEPRECATED_FOR(vips_draw_circle)
|
|
||||||
int im_circle(IMAGE *im, int cx, int cy, int radius, int intensity);
|
|
||||||
VIPS_DEPRECATED_FOR(vips_draw_line1)
|
|
||||||
int im_line(IMAGE *, int, int, int, int, int);
|
|
||||||
VIPS_DEPRECATED_FOR(vips_labelregions)
|
|
||||||
int im_segment(IMAGE *test, IMAGE *mask, int *segments);
|
|
||||||
VIPS_DEPRECATED_FOR(vips_draw_rect)
|
|
||||||
int im_paintrect(IMAGE *im, VipsRect *r, PEL *ink);
|
|
||||||
VIPS_DEPRECATED_FOR(vips_draw_image)
|
|
||||||
int im_insertplace(IMAGE *main, IMAGE *sub, int x, int y);
|
|
||||||
|
|
||||||
VIPS_DEPRECATED_FOR(vips_draw_flood)
|
|
||||||
int im_flood_copy(IMAGE *in, IMAGE *out, int x, int y, PEL *ink);
|
|
||||||
VIPS_DEPRECATED_FOR(vips_draw_flood)
|
|
||||||
int im_flood_blob_copy(IMAGE *in, IMAGE *out, int x, int y, PEL *ink);
|
|
||||||
VIPS_DEPRECATED_FOR(vips_draw_flood)
|
|
||||||
int im_flood_other_copy(IMAGE *test, IMAGE *mark, IMAGE *out,
|
|
||||||
int x, int y, int serial);
|
|
||||||
|
|
||||||
VIPS_DEPRECATED_FOR(vips_draw_flood)
|
|
||||||
int im_flood(IMAGE *im, int x, int y, PEL *ink, VipsRect *dout);
|
|
||||||
VIPS_DEPRECATED_FOR(vips_draw_flood)
|
|
||||||
int im_flood_blob(IMAGE *im, int x, int y, PEL *ink, VipsRect *dout);
|
|
||||||
VIPS_DEPRECATED_FOR(vips_draw_flood)
|
|
||||||
int im_flood_other(IMAGE *test, IMAGE *mark,
|
|
||||||
int x, int y, int serial, VipsRect *dout);
|
|
||||||
|
|
||||||
VIPS_DEPRECATED_FOR(vips_draw_line)
|
|
||||||
int im_fastline(IMAGE *im, int x1, int y1, int x2, int y2, PEL *pel);
|
|
||||||
VIPS_DEPRECATED_FOR(vips_draw_line)
|
|
||||||
int im_fastlineuser(IMAGE *im,
|
|
||||||
int x1, int y1, int x2, int y2,
|
|
||||||
VipsPlotFn fn, void *client1, void *client2, void *client3);
|
|
||||||
|
|
||||||
VIPS_DEPRECATED_FOR(vips_draw_mask)
|
|
||||||
int im_plotmask(IMAGE *im, int ix, int iy, PEL *ink, PEL *mask, VipsRect *r);
|
|
||||||
VIPS_DEPRECATED_FOR(vips_getpoint)
|
|
||||||
int im_readpoint(IMAGE *im, int x, int y, PEL *pel);
|
|
||||||
VIPS_DEPRECATED_FOR(vips_draw_point)
|
|
||||||
int im_plotpoint(IMAGE *im, int x, int y, PEL *pel);
|
|
||||||
|
|
||||||
VIPS_DEPRECATED_FOR(vips_draw_smudge)
|
|
||||||
int im_smudge(IMAGE *image, int ix, int iy, VipsRect *r);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
int im_smear(IMAGE *im, int ix, int iy, VipsRect *r);
|
|
||||||
|
|
||||||
VIPS_DEPRECATED_FOR(g_warning)
|
|
||||||
void vips_warn(const char *domain, const char *fmt, ...)
|
|
||||||
G_GNUC_PRINTF(2, 3);
|
|
||||||
VIPS_DEPRECATED_FOR(g_warning)
|
|
||||||
void vips_vwarn(const char *domain, const char *fmt, va_list ap);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
void vips_info_set(gboolean info);
|
|
||||||
VIPS_DEPRECATED_FOR(g_info)
|
|
||||||
void vips_info(const char *domain, const char *fmt, ...)
|
|
||||||
G_GNUC_PRINTF(2, 3);
|
|
||||||
VIPS_DEPRECATED_FOR(g_info)
|
|
||||||
void vips_vinfo(const char *domain, const char *fmt, va_list ap);
|
|
||||||
|
|
||||||
VIPS_DEPRECATED_FOR(vips_autorot)
|
|
||||||
VipsAngle vips_autorot_get_angle(VipsImage *image);
|
|
||||||
|
|
||||||
VIPS_DEPRECATED_FOR(vips_thread_isvips)
|
|
||||||
gboolean vips_thread_isworker(void);
|
|
||||||
|
|
||||||
/* iofuncs
|
|
||||||
*/
|
|
||||||
VIPS_DEPRECATED_FOR(g_free)
|
|
||||||
int vips_free(void *buf);
|
|
||||||
|
|
||||||
VIPS_DEPRECATED_FOR(vips_target_end)
|
|
||||||
void vips_target_finish(VipsTarget *target);
|
|
||||||
|
|
||||||
VIPS_DEPRECATED_FOR(vips_cache_operation_buildp)
|
|
||||||
VipsOperation *vips_cache_operation_lookup(VipsOperation *operation);
|
|
||||||
VIPS_DEPRECATED_FOR(vips_cache_operation_buildp)
|
|
||||||
void vips_cache_operation_add(VipsOperation *operation);
|
|
||||||
|
|
||||||
VIPS_DEPRECATED_FOR(g_strlcpy)
|
|
||||||
char *vips_strncpy(char *dest, const char *src, int n);
|
|
||||||
VIPS_DEPRECATED_FOR(g_strrstr)
|
|
||||||
char *vips_strrstr(const char *haystack, const char *needle);
|
|
||||||
VIPS_DEPRECATED_FOR(g_str_has_suffix)
|
|
||||||
gboolean vips_ispostfix(const char *a, const char *b);
|
|
||||||
|
|
||||||
VIPS_DEPRECATED_FOR(g_vsnprintf)
|
|
||||||
int vips_vsnprintf(char *str, size_t size, const char *format, va_list ap);
|
|
||||||
VIPS_DEPRECATED_FOR(g_snprintf)
|
|
||||||
int vips_snprintf(char *str, size_t size, const char *format, ...)
|
|
||||||
G_GNUC_PRINTF(3, 4);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
#endif /*IM_ALMOSTDEPRECATED_H*/
|
|
||||||
@@ -1,580 +0,0 @@
|
|||||||
/* Headers for arithmetic
|
|
||||||
*
|
|
||||||
* 30/6/09
|
|
||||||
* - from proto.h
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
This file is part of VIPS.
|
|
||||||
|
|
||||||
VIPS is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
||||||
02110-1301 USA
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef VIPS_ARITHMETIC_H
|
|
||||||
#define VIPS_ARITHMETIC_H
|
|
||||||
|
|
||||||
#include <glib.h>
|
|
||||||
#include <vips/image.h>
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* VipsOperationMath:
|
|
||||||
* @VIPS_OPERATION_MATH_SIN: sin(), angles in degrees
|
|
||||||
* @VIPS_OPERATION_MATH_COS: cos(), angles in degrees
|
|
||||||
* @VIPS_OPERATION_MATH_TAN: tan(), angles in degrees
|
|
||||||
* @VIPS_OPERATION_MATH_ASIN: asin(), angles in degrees
|
|
||||||
* @VIPS_OPERATION_MATH_ACOS: acos(), angles in degrees
|
|
||||||
* @VIPS_OPERATION_MATH_ATAN: atan(), angles in degrees
|
|
||||||
* @VIPS_OPERATION_MATH_LOG: log base e
|
|
||||||
* @VIPS_OPERATION_MATH_LOG10: log base 10
|
|
||||||
* @VIPS_OPERATION_MATH_EXP: e to the something
|
|
||||||
* @VIPS_OPERATION_MATH_EXP10: 10 to the something
|
|
||||||
* @VIPS_OPERATION_MATH_SINH: sinh(), angles in radians
|
|
||||||
* @VIPS_OPERATION_MATH_COSH: cosh(), angles in radians
|
|
||||||
* @VIPS_OPERATION_MATH_TANH: tanh(), angles in radians
|
|
||||||
* @VIPS_OPERATION_MATH_ASINH: asinh(), angles in radians
|
|
||||||
* @VIPS_OPERATION_MATH_ACOSH: acosh(), angles in radians
|
|
||||||
* @VIPS_OPERATION_MATH_ATANH: atanh(), angles in radians
|
|
||||||
*
|
|
||||||
* See also: vips_math().
|
|
||||||
*/
|
|
||||||
typedef enum {
|
|
||||||
VIPS_OPERATION_MATH_SIN,
|
|
||||||
VIPS_OPERATION_MATH_COS,
|
|
||||||
VIPS_OPERATION_MATH_TAN,
|
|
||||||
VIPS_OPERATION_MATH_ASIN,
|
|
||||||
VIPS_OPERATION_MATH_ACOS,
|
|
||||||
VIPS_OPERATION_MATH_ATAN,
|
|
||||||
VIPS_OPERATION_MATH_LOG,
|
|
||||||
VIPS_OPERATION_MATH_LOG10,
|
|
||||||
VIPS_OPERATION_MATH_EXP,
|
|
||||||
VIPS_OPERATION_MATH_EXP10,
|
|
||||||
VIPS_OPERATION_MATH_SINH,
|
|
||||||
VIPS_OPERATION_MATH_COSH,
|
|
||||||
VIPS_OPERATION_MATH_TANH,
|
|
||||||
VIPS_OPERATION_MATH_ASINH,
|
|
||||||
VIPS_OPERATION_MATH_ACOSH,
|
|
||||||
VIPS_OPERATION_MATH_ATANH,
|
|
||||||
VIPS_OPERATION_MATH_LAST
|
|
||||||
} VipsOperationMath;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* VipsOperationMath2:
|
|
||||||
* @VIPS_OPERATION_MATH2_POW: pow(left, right)
|
|
||||||
* @VIPS_OPERATION_MATH2_WOP: pow(right, left)
|
|
||||||
* @VIPS_OPERATION_MATH2_ATAN2: atan2(left, right)
|
|
||||||
*
|
|
||||||
* See also: vips_math().
|
|
||||||
*/
|
|
||||||
typedef enum {
|
|
||||||
VIPS_OPERATION_MATH2_POW,
|
|
||||||
VIPS_OPERATION_MATH2_WOP,
|
|
||||||
VIPS_OPERATION_MATH2_ATAN2,
|
|
||||||
VIPS_OPERATION_MATH2_LAST
|
|
||||||
} VipsOperationMath2;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* VipsOperationRound:
|
|
||||||
* @VIPS_OPERATION_ROUND_RINT: round to nearest
|
|
||||||
* @VIPS_OPERATION_ROUND_FLOOR: largest integral value not greater than
|
|
||||||
* @VIPS_OPERATION_ROUND_CEIL: the smallest integral value not less than
|
|
||||||
*
|
|
||||||
* See also: vips_round().
|
|
||||||
*/
|
|
||||||
typedef enum {
|
|
||||||
VIPS_OPERATION_ROUND_RINT,
|
|
||||||
VIPS_OPERATION_ROUND_CEIL,
|
|
||||||
VIPS_OPERATION_ROUND_FLOOR,
|
|
||||||
VIPS_OPERATION_ROUND_LAST
|
|
||||||
} VipsOperationRound;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* VipsOperationRelational:
|
|
||||||
* @VIPS_OPERATION_RELATIONAL_EQUAL: ==
|
|
||||||
* @VIPS_OPERATION_RELATIONAL_NOTEQ: !=
|
|
||||||
* @VIPS_OPERATION_RELATIONAL_LESS: <
|
|
||||||
* @VIPS_OPERATION_RELATIONAL_LESSEQ: <=
|
|
||||||
* @VIPS_OPERATION_RELATIONAL_MORE: >
|
|
||||||
* @VIPS_OPERATION_RELATIONAL_MOREEQ: >=
|
|
||||||
*
|
|
||||||
* See also: vips_relational().
|
|
||||||
*/
|
|
||||||
typedef enum {
|
|
||||||
VIPS_OPERATION_RELATIONAL_EQUAL,
|
|
||||||
VIPS_OPERATION_RELATIONAL_NOTEQ,
|
|
||||||
VIPS_OPERATION_RELATIONAL_LESS,
|
|
||||||
VIPS_OPERATION_RELATIONAL_LESSEQ,
|
|
||||||
VIPS_OPERATION_RELATIONAL_MORE,
|
|
||||||
VIPS_OPERATION_RELATIONAL_MOREEQ,
|
|
||||||
VIPS_OPERATION_RELATIONAL_LAST
|
|
||||||
} VipsOperationRelational;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* VipsOperationBoolean:
|
|
||||||
* @VIPS_OPERATION_BOOLEAN_AND: &
|
|
||||||
* @VIPS_OPERATION_BOOLEAN_OR: |
|
|
||||||
* @VIPS_OPERATION_BOOLEAN_EOR: ^
|
|
||||||
* @VIPS_OPERATION_BOOLEAN_LSHIFT: >>
|
|
||||||
* @VIPS_OPERATION_BOOLEAN_RSHIFT: <<
|
|
||||||
*
|
|
||||||
* See also: vips_boolean().
|
|
||||||
*/
|
|
||||||
typedef enum {
|
|
||||||
VIPS_OPERATION_BOOLEAN_AND,
|
|
||||||
VIPS_OPERATION_BOOLEAN_OR,
|
|
||||||
VIPS_OPERATION_BOOLEAN_EOR,
|
|
||||||
VIPS_OPERATION_BOOLEAN_LSHIFT,
|
|
||||||
VIPS_OPERATION_BOOLEAN_RSHIFT,
|
|
||||||
VIPS_OPERATION_BOOLEAN_LAST
|
|
||||||
} VipsOperationBoolean;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* VipsOperationComplex:
|
|
||||||
* @VIPS_OPERATION_COMPLEX_POLAR: convert to polar coordinates
|
|
||||||
* @VIPS_OPERATION_COMPLEX_RECT: convert to rectangular coordinates
|
|
||||||
* @VIPS_OPERATION_COMPLEX_CONJ: complex conjugate
|
|
||||||
*
|
|
||||||
* See also: vips_complex().
|
|
||||||
*/
|
|
||||||
typedef enum {
|
|
||||||
VIPS_OPERATION_COMPLEX_POLAR,
|
|
||||||
VIPS_OPERATION_COMPLEX_RECT,
|
|
||||||
VIPS_OPERATION_COMPLEX_CONJ,
|
|
||||||
VIPS_OPERATION_COMPLEX_LAST
|
|
||||||
} VipsOperationComplex;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* VipsOperationComplex2:
|
|
||||||
* @VIPS_OPERATION_COMPLEX2_CROSS_PHASE: convert to polar coordinates
|
|
||||||
*
|
|
||||||
* See also: vips_complex2().
|
|
||||||
*/
|
|
||||||
typedef enum {
|
|
||||||
VIPS_OPERATION_COMPLEX2_CROSS_PHASE,
|
|
||||||
VIPS_OPERATION_COMPLEX2_LAST
|
|
||||||
} VipsOperationComplex2;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* VipsOperationComplexget:
|
|
||||||
* @VIPS_OPERATION_COMPLEXGET_REAL: get real component
|
|
||||||
* @VIPS_OPERATION_COMPLEXGET_IMAG: get imaginary component
|
|
||||||
*
|
|
||||||
* See also: vips_complexget().
|
|
||||||
*/
|
|
||||||
typedef enum {
|
|
||||||
VIPS_OPERATION_COMPLEXGET_REAL,
|
|
||||||
VIPS_OPERATION_COMPLEXGET_IMAG,
|
|
||||||
VIPS_OPERATION_COMPLEXGET_LAST
|
|
||||||
} VipsOperationComplexget;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_add(VipsImage *left, VipsImage *right, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_sum(VipsImage **in, VipsImage **out, int n, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_subtract(VipsImage *in1, VipsImage *in2, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_multiply(VipsImage *left, VipsImage *right, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_divide(VipsImage *left, VipsImage *right, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_linear(VipsImage *in, VipsImage **out,
|
|
||||||
const double *a, const double *b, int n, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_linear1(VipsImage *in, VipsImage **out, double a, double b, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_remainder(VipsImage *left, VipsImage *right, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_remainder_const(VipsImage *in, VipsImage **out,
|
|
||||||
const double *c, int n, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_remainder_const1(VipsImage *in, VipsImage **out,
|
|
||||||
double c, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_invert(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_abs(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_sign(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_clamp(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_maxpair(VipsImage *left, VipsImage *right, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_minpair(VipsImage *left, VipsImage *right, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_round(VipsImage *in, VipsImage **out, VipsOperationRound round, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_floor(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_ceil(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_rint(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_math(VipsImage *in, VipsImage **out,
|
|
||||||
VipsOperationMath math, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_sin(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_cos(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_tan(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_asin(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_acos(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_atan(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_exp(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_exp10(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_log(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_log10(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_sinh(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_cosh(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_tanh(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_asinh(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_acosh(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_atanh(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_complex(VipsImage *in, VipsImage **out,
|
|
||||||
VipsOperationComplex cmplx, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_polar(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_rect(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_conj(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_complex2(VipsImage *left, VipsImage *right, VipsImage **out,
|
|
||||||
VipsOperationComplex2 cmplx, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_cross_phase(VipsImage *left, VipsImage *right, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_complexget(VipsImage *in, VipsImage **out,
|
|
||||||
VipsOperationComplexget get, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_real(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_imag(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_complexform(VipsImage *left, VipsImage *right, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_relational(VipsImage *left, VipsImage *right, VipsImage **out,
|
|
||||||
VipsOperationRelational relational, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_equal(VipsImage *left, VipsImage *right, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_notequal(VipsImage *left, VipsImage *right, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_less(VipsImage *left, VipsImage *right, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_lesseq(VipsImage *left, VipsImage *right, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_more(VipsImage *left, VipsImage *right, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_moreeq(VipsImage *left, VipsImage *right, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_relational_const(VipsImage *in, VipsImage **out,
|
|
||||||
VipsOperationRelational relational, const double *c, int n, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_equal_const(VipsImage *in, VipsImage **out,
|
|
||||||
const double *c, int n, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_notequal_const(VipsImage *in, VipsImage **out,
|
|
||||||
const double *c, int n, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_less_const(VipsImage *in, VipsImage **out,
|
|
||||||
const double *c, int n, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_lesseq_const(VipsImage *in, VipsImage **out,
|
|
||||||
const double *c, int n, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_more_const(VipsImage *in, VipsImage **out,
|
|
||||||
const double *c, int n, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_moreeq_const(VipsImage *in, VipsImage **out,
|
|
||||||
const double *c, int n, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_relational_const1(VipsImage *in, VipsImage **out,
|
|
||||||
VipsOperationRelational relational, double c, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_equal_const1(VipsImage *in, VipsImage **out, double c, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_notequal_const1(VipsImage *in, VipsImage **out, double c, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_less_const1(VipsImage *in, VipsImage **out, double c, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_lesseq_const1(VipsImage *in, VipsImage **out, double c, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_more_const1(VipsImage *in, VipsImage **out, double c, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_moreeq_const1(VipsImage *in, VipsImage **out, double c, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_boolean(VipsImage *left, VipsImage *right, VipsImage **out,
|
|
||||||
VipsOperationBoolean boolean, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_andimage(VipsImage *left, VipsImage *right, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_orimage(VipsImage *left, VipsImage *right, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_eorimage(VipsImage *left, VipsImage *right, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_lshift(VipsImage *left, VipsImage *right, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_rshift(VipsImage *left, VipsImage *right, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_boolean_const(VipsImage *in, VipsImage **out,
|
|
||||||
VipsOperationBoolean boolean, const double *c, int n, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_andimage_const(VipsImage *in, VipsImage **out,
|
|
||||||
const double *c, int n, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_orimage_const(VipsImage *in, VipsImage **out,
|
|
||||||
const double *c, int n, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_eorimage_const(VipsImage *in, VipsImage **out,
|
|
||||||
const double *c, int n, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_lshift_const(VipsImage *in, VipsImage **out,
|
|
||||||
const double *c, int n, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_rshift_const(VipsImage *in, VipsImage **out,
|
|
||||||
const double *c, int n, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_boolean_const1(VipsImage *in, VipsImage **out,
|
|
||||||
VipsOperationBoolean boolean, double c, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_andimage_const1(VipsImage *in, VipsImage **out, double c, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_orimage_const1(VipsImage *in, VipsImage **out, double c, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_eorimage_const1(VipsImage *in, VipsImage **out, double c, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_lshift_const1(VipsImage *in, VipsImage **out, double c, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_rshift_const1(VipsImage *in, VipsImage **out, double c, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_math2(VipsImage *left, VipsImage *right, VipsImage **out,
|
|
||||||
VipsOperationMath2 math2, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_pow(VipsImage *left, VipsImage *right, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_wop(VipsImage *left, VipsImage *right, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_atan2(VipsImage *left, VipsImage *right, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_math2_const(VipsImage *in, VipsImage **out,
|
|
||||||
VipsOperationMath2 math2, const double *c, int n, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_pow_const(VipsImage *in, VipsImage **out,
|
|
||||||
const double *c, int n, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_wop_const(VipsImage *in, VipsImage **out,
|
|
||||||
const double *c, int n, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_atan2_const(VipsImage *in, VipsImage **out,
|
|
||||||
const double *c, int n, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_math2_const1(VipsImage *in, VipsImage **out,
|
|
||||||
VipsOperationMath2 math2, double c, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_pow_const1(VipsImage *in, VipsImage **out, double c, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_wop_const1(VipsImage *in, VipsImage **out, double c, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_atan2_const1(VipsImage *in, VipsImage **out, double c, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_avg(VipsImage *in, double *out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_deviate(VipsImage *in, double *out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_min(VipsImage *in, double *out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_max(VipsImage *in, double *out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_stats(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_measure(VipsImage *in, VipsImage **out, int h, int v, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_find_trim(VipsImage *in,
|
|
||||||
int *left, int *top, int *width, int *height, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_getpoint(VipsImage *in, double **vector, int *n, int x, int y, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_hist_find(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_hist_find_ndim(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_hist_find_indexed(VipsImage *in, VipsImage *index,
|
|
||||||
VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_hough_line(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_hough_circle(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_project(VipsImage *in, VipsImage **columns, VipsImage **rows, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_profile(VipsImage *in, VipsImage **columns, VipsImage **rows, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
#endif /*VIPS_ARITHMETIC_H*/
|
|
||||||
@@ -1,117 +0,0 @@
|
|||||||
/* A few basic types needed everywhere.
|
|
||||||
*
|
|
||||||
* 27/10/11
|
|
||||||
* - from type.h
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
This file is part of VIPS.
|
|
||||||
|
|
||||||
VIPS is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
||||||
02110-1301 USA
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef VIPS_BASIC_H
|
|
||||||
#define VIPS_BASIC_H
|
|
||||||
|
|
||||||
/* Defined in config.h
|
|
||||||
*/
|
|
||||||
#ifndef _VIPS_PUBLIC
|
|
||||||
#define _VIPS_PUBLIC
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define VIPS_API _VIPS_PUBLIC extern
|
|
||||||
|
|
||||||
/* VIPS_DISABLE_DEPRECATION_WARNINGS:
|
|
||||||
*
|
|
||||||
* Disable deprecation warnings from VIPS API.
|
|
||||||
*
|
|
||||||
* Must be defined before including `vips/vips.h`.
|
|
||||||
*/
|
|
||||||
#ifdef VIPS_DISABLE_DEPRECATION_WARNINGS
|
|
||||||
#define VIPS_DEPRECATED VIPS_API
|
|
||||||
#define VIPS_DEPRECATED_FOR(f) VIPS_API
|
|
||||||
#else
|
|
||||||
#define VIPS_DEPRECATED G_DEPRECATED VIPS_API
|
|
||||||
#define VIPS_DEPRECATED_FOR(f) G_DEPRECATED_FOR(f) VIPS_API
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* VipsPel:
|
|
||||||
*
|
|
||||||
* A picture element. Cast this to whatever the associated VipsBandFormat says
|
|
||||||
* to get the value.
|
|
||||||
*/
|
|
||||||
typedef unsigned char VipsPel;
|
|
||||||
|
|
||||||
/* Also used for eg. vips_local() and friends.
|
|
||||||
*/
|
|
||||||
typedef int (*VipsCallbackFn)(void *a, void *b);
|
|
||||||
|
|
||||||
/* Like GFunc, but return a value.
|
|
||||||
*/
|
|
||||||
typedef void *(*VipsSListMap2Fn)(void *item,
|
|
||||||
void *a, void *b);
|
|
||||||
typedef void *(*VipsSListMap4Fn)(void *item,
|
|
||||||
void *a, void *b, void *c, void *d);
|
|
||||||
typedef void *(*VipsSListFold2Fn)(void *item,
|
|
||||||
void *a, void *b, void *c);
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
VIPS_PRECISION_INTEGER,
|
|
||||||
VIPS_PRECISION_FLOAT,
|
|
||||||
VIPS_PRECISION_APPROXIMATE,
|
|
||||||
VIPS_PRECISION_LAST
|
|
||||||
} VipsPrecision;
|
|
||||||
|
|
||||||
/* Just for testing.
|
|
||||||
*/
|
|
||||||
VIPS_API
|
|
||||||
char *vips_path_filename7(const char *path);
|
|
||||||
VIPS_API
|
|
||||||
char *vips_path_mode7(const char *path);
|
|
||||||
|
|
||||||
struct _VipsImage;
|
|
||||||
typedef struct _VipsImage VipsImage;
|
|
||||||
struct _VipsRegion;
|
|
||||||
typedef struct _VipsRegion VipsRegion;
|
|
||||||
struct _VipsBuf;
|
|
||||||
typedef struct _VipsBuf VipsBuf;
|
|
||||||
struct _VipsSource;
|
|
||||||
typedef struct _VipsSource VipsSource;
|
|
||||||
struct _VipsTarget;
|
|
||||||
typedef struct _VipsTarget VipsTarget;
|
|
||||||
struct _VipsInterpolate;
|
|
||||||
typedef struct _VipsInterpolate VipsInterpolate;
|
|
||||||
struct _VipsOperation;
|
|
||||||
typedef struct _VipsOperation VipsOperation;
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
#endif /*VIPS_BASIC_H*/
|
|
||||||
@@ -1,118 +0,0 @@
|
|||||||
/* A static string buffer, with overflow protection.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
This file is part of VIPS.
|
|
||||||
|
|
||||||
VIPS is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
||||||
02110-1301 USA
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef VIPS_BUF_H
|
|
||||||
#define VIPS_BUF_H
|
|
||||||
|
|
||||||
#include <glib.h>
|
|
||||||
#include <glib-object.h>
|
|
||||||
#include <vips/basic.h>
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
/* A string in the process of being written to ... multiple calls to
|
|
||||||
* vips_buf_append add to it. On overflow append "..." and block further
|
|
||||||
* writes.
|
|
||||||
*/
|
|
||||||
|
|
||||||
struct _VipsBuf {
|
|
||||||
/* All fields are private.
|
|
||||||
*/
|
|
||||||
/*< private >*/
|
|
||||||
char *base; /* String base */
|
|
||||||
int mx; /* Maximum length */
|
|
||||||
int i; /* Current write point */
|
|
||||||
gboolean full; /* String has filled, block writes */
|
|
||||||
int lasti; /* For read-recent */
|
|
||||||
gboolean dynamic; /* We own the string with malloc() */
|
|
||||||
};
|
|
||||||
|
|
||||||
#define VIPS_BUF_STATIC(TEXT) \
|
|
||||||
{ \
|
|
||||||
&TEXT[0], sizeof(TEXT), 0, FALSE, 0, FALSE \
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Init and append to one of the above.
|
|
||||||
*/
|
|
||||||
VIPS_API
|
|
||||||
void vips_buf_rewind(VipsBuf *buf);
|
|
||||||
VIPS_API
|
|
||||||
void vips_buf_destroy(VipsBuf *buf);
|
|
||||||
VIPS_API
|
|
||||||
void vips_buf_init(VipsBuf *buf);
|
|
||||||
VIPS_API
|
|
||||||
void vips_buf_set_static(VipsBuf *buf, char *base, int mx);
|
|
||||||
VIPS_API
|
|
||||||
void vips_buf_set_dynamic(VipsBuf *buf, int mx);
|
|
||||||
VIPS_API
|
|
||||||
void vips_buf_init_static(VipsBuf *buf, char *base, int mx);
|
|
||||||
VIPS_API
|
|
||||||
void vips_buf_init_dynamic(VipsBuf *buf, int mx);
|
|
||||||
VIPS_API
|
|
||||||
gboolean vips_buf_appendns(VipsBuf *buf, const char *str, int sz);
|
|
||||||
VIPS_API
|
|
||||||
gboolean vips_buf_appends(VipsBuf *buf, const char *str);
|
|
||||||
VIPS_API
|
|
||||||
gboolean vips_buf_appendf(VipsBuf *buf, const char *fmt, ...)
|
|
||||||
G_GNUC_PRINTF(2, 3);
|
|
||||||
VIPS_API
|
|
||||||
gboolean vips_buf_vappendf(VipsBuf *buf, const char *fmt, va_list ap);
|
|
||||||
VIPS_API
|
|
||||||
gboolean vips_buf_appendc(VipsBuf *buf, char ch);
|
|
||||||
VIPS_API
|
|
||||||
gboolean vips_buf_appendgv(VipsBuf *buf, GValue *value);
|
|
||||||
VIPS_API
|
|
||||||
gboolean vips_buf_append_size(VipsBuf *buf, size_t n);
|
|
||||||
VIPS_API
|
|
||||||
gboolean vips_buf_removec(VipsBuf *buf, char ch);
|
|
||||||
VIPS_API
|
|
||||||
gboolean vips_buf_change(VipsBuf *buf, const char *o, const char *n);
|
|
||||||
VIPS_API
|
|
||||||
gboolean vips_buf_is_empty(VipsBuf *buf);
|
|
||||||
VIPS_API
|
|
||||||
gboolean vips_buf_is_full(VipsBuf *buf);
|
|
||||||
VIPS_API
|
|
||||||
const char *vips_buf_all(VipsBuf *buf);
|
|
||||||
VIPS_API
|
|
||||||
const char *vips_buf_firstline(VipsBuf *buf);
|
|
||||||
VIPS_API
|
|
||||||
gboolean vips_buf_appendg(VipsBuf *buf, double g);
|
|
||||||
VIPS_API
|
|
||||||
gboolean vips_buf_appendd(VipsBuf *buf, int d);
|
|
||||||
VIPS_API
|
|
||||||
int vips_buf_len(VipsBuf *buf);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
#endif /*VIPS_BUF_H*/
|
|
||||||
@@ -1,308 +0,0 @@
|
|||||||
/* Definitions for VIPS colour package.
|
|
||||||
*
|
|
||||||
* J.Cupitt, 8/4/93
|
|
||||||
* 15/7/96 JC
|
|
||||||
* - C++ stuff added
|
|
||||||
* 20/2/98 JC
|
|
||||||
* - new display calibration added
|
|
||||||
* 26/9/05
|
|
||||||
* - added IM_ prefix to colour temps
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
This file is part of VIPS.
|
|
||||||
|
|
||||||
VIPS is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
||||||
02110-1301 USA
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef VIPS_COLOUR_H
|
|
||||||
#define VIPS_COLOUR_H
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
/* Areas under curves for Dxx. 2 degree observer.
|
|
||||||
*/
|
|
||||||
#define VIPS_D93_X0 (89.7400)
|
|
||||||
#define VIPS_D93_Y0 (100.0)
|
|
||||||
#define VIPS_D93_Z0 (130.7700)
|
|
||||||
|
|
||||||
#define VIPS_D75_X0 (94.9682)
|
|
||||||
#define VIPS_D75_Y0 (100.0)
|
|
||||||
#define VIPS_D75_Z0 (122.5710)
|
|
||||||
|
|
||||||
/* D65 temp 6504.
|
|
||||||
*/
|
|
||||||
#define VIPS_D65_X0 (95.0470)
|
|
||||||
#define VIPS_D65_Y0 (100.0)
|
|
||||||
#define VIPS_D65_Z0 (108.8827)
|
|
||||||
|
|
||||||
#define VIPS_D55_X0 (95.6831)
|
|
||||||
#define VIPS_D55_Y0 (100.0)
|
|
||||||
#define VIPS_D55_Z0 (92.0871)
|
|
||||||
|
|
||||||
#define VIPS_D50_X0 (96.4250)
|
|
||||||
#define VIPS_D50_Y0 (100.0)
|
|
||||||
#define VIPS_D50_Z0 (82.4680)
|
|
||||||
|
|
||||||
/* A temp 2856k.
|
|
||||||
*/
|
|
||||||
#define VIPS_A_X0 (109.8503)
|
|
||||||
#define VIPS_A_Y0 (100.0)
|
|
||||||
#define VIPS_A_Z0 (35.5849)
|
|
||||||
|
|
||||||
/* B temp 4874k.
|
|
||||||
*/
|
|
||||||
#define VIPS_B_X0 (99.0720)
|
|
||||||
#define VIPS_B_Y0 (100.0)
|
|
||||||
#define VIPS_B_Z0 (85.2230)
|
|
||||||
|
|
||||||
/* C temp 6774k.
|
|
||||||
*/
|
|
||||||
#define VIPS_C_X0 (98.0700)
|
|
||||||
#define VIPS_C_Y0 (100.0)
|
|
||||||
#define VIPS_C_Z0 (118.2300)
|
|
||||||
|
|
||||||
#define VIPS_E_X0 (100.0)
|
|
||||||
#define VIPS_E_Y0 (100.0)
|
|
||||||
#define VIPS_E_Z0 (100.0)
|
|
||||||
|
|
||||||
#define VIPS_D3250_X0 (105.6590)
|
|
||||||
#define VIPS_D3250_Y0 (100.0)
|
|
||||||
#define VIPS_D3250_Z0 (45.8501)
|
|
||||||
|
|
||||||
/* Note: constants align with those defined in lcms2.h.
|
|
||||||
*/
|
|
||||||
typedef enum {
|
|
||||||
VIPS_INTENT_PERCEPTUAL = 0,
|
|
||||||
VIPS_INTENT_RELATIVE,
|
|
||||||
VIPS_INTENT_SATURATION,
|
|
||||||
VIPS_INTENT_ABSOLUTE,
|
|
||||||
VIPS_INTENT_LAST
|
|
||||||
} VipsIntent;
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
VIPS_PCS_LAB,
|
|
||||||
VIPS_PCS_XYZ,
|
|
||||||
VIPS_PCS_LAST
|
|
||||||
} VipsPCS;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
gboolean vips_colourspace_issupported(const VipsImage *image);
|
|
||||||
VIPS_API
|
|
||||||
int vips_colourspace(VipsImage *in, VipsImage **out,
|
|
||||||
VipsInterpretation space, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_LabQ2sRGB(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_rad2float(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_float2rad(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_LabS2LabQ(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_LabQ2LabS(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_LabQ2Lab(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_Lab2LabQ(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_LCh2Lab(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_Lab2LCh(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_Yxy2Lab(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_CMC2XYZ(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_Lab2XYZ(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_XYZ2Lab(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_XYZ2scRGB(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_scRGB2sRGB(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_scRGB2BW(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_sRGB2scRGB(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_scRGB2XYZ(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_HSV2sRGB(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_sRGB2HSV(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_LCh2CMC(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_CMC2LCh(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_XYZ2Yxy(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_Yxy2XYZ(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_LabS2Lab(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_Lab2LabS(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_CMYK2XYZ(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_XYZ2CMYK(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_profile_load(const char *name, VipsBlob **profile, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_icc_present(void);
|
|
||||||
VIPS_API
|
|
||||||
int vips_icc_transform(VipsImage *in, VipsImage **out,
|
|
||||||
const char *output_profile, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_icc_import(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_icc_export(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_icc_ac2rc(VipsImage *in, VipsImage **out,
|
|
||||||
const char *profile_filename);
|
|
||||||
VIPS_API
|
|
||||||
gboolean vips_icc_is_compatible_profile(VipsImage *image,
|
|
||||||
const void *data, size_t data_length);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_dE76(VipsImage *left, VipsImage *right, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_dE00(VipsImage *left, VipsImage *right, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_dECMC(VipsImage *left, VipsImage *right, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
void vips_col_Lab2XYZ(float L, float a, float b,
|
|
||||||
float *X, float *Y, float *Z);
|
|
||||||
VIPS_API
|
|
||||||
void vips_col_XYZ2Lab(float X, float Y, float Z,
|
|
||||||
float *L, float *a, float *b);
|
|
||||||
VIPS_API
|
|
||||||
double vips_col_ab2h(double a, double b);
|
|
||||||
VIPS_API
|
|
||||||
void vips_col_ab2Ch(float a, float b, float *C, float *h);
|
|
||||||
VIPS_API
|
|
||||||
void vips_col_Ch2ab(float C, float h, float *a, float *b);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
float vips_col_L2Lcmc(float L);
|
|
||||||
VIPS_API
|
|
||||||
float vips_col_C2Ccmc(float C);
|
|
||||||
VIPS_API
|
|
||||||
float vips_col_Ch2hcmc(float C, float h);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
void vips_col_make_tables_CMC(void);
|
|
||||||
VIPS_API
|
|
||||||
float vips_col_Lcmc2L(float Lcmc);
|
|
||||||
VIPS_API
|
|
||||||
float vips_col_Ccmc2C(float Ccmc);
|
|
||||||
VIPS_API
|
|
||||||
float vips_col_Chcmc2h(float C, float hcmc);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_col_sRGB2scRGB_8(int r, int g, int b, float *R, float *G, float *B);
|
|
||||||
VIPS_API
|
|
||||||
int vips_col_sRGB2scRGB_16(int r, int g, int b, float *R, float *G, float *B);
|
|
||||||
VIPS_API
|
|
||||||
int vips_col_sRGB2scRGB_8_noclip(int r, int g, int b,
|
|
||||||
float *R, float *G, float *B);
|
|
||||||
VIPS_API
|
|
||||||
int vips_col_sRGB2scRGB_16_noclip(int r, int g, int b,
|
|
||||||
float *R, float *G, float *B);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_col_scRGB2XYZ(float R, float G, float B,
|
|
||||||
float *X, float *Y, float *Z);
|
|
||||||
VIPS_API
|
|
||||||
int vips_col_XYZ2scRGB(float X, float Y, float Z,
|
|
||||||
float *R, float *G, float *B);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_col_scRGB2sRGB_8(float R, float G, float B,
|
|
||||||
int *r, int *g, int *b, int *og);
|
|
||||||
VIPS_API
|
|
||||||
int vips_col_scRGB2sRGB_16(float R, float G, float B,
|
|
||||||
int *r, int *g, int *b, int *og);
|
|
||||||
VIPS_API
|
|
||||||
int vips_col_scRGB2BW_16(float R, float G, float B, int *g, int *og);
|
|
||||||
VIPS_API
|
|
||||||
int vips_col_scRGB2BW_8(float R, float G, float B, int *g, int *og);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
float vips_pythagoras(float L1, float a1, float b1,
|
|
||||||
float L2, float a2, float b2);
|
|
||||||
VIPS_API
|
|
||||||
float vips_col_dE00(
|
|
||||||
float L1, float a1, float b1, float L2, float a2, float b2);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
#endif /*VIPS_COLOUR_H*/
|
|
||||||
@@ -1,571 +0,0 @@
|
|||||||
/* A byte source/sink .. it can be a pipe, socket, or perhaps a node.js stream.
|
|
||||||
*
|
|
||||||
* J.Cupitt, 19/6/14
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
This file is part of VIPS.
|
|
||||||
|
|
||||||
VIPS is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
||||||
02110-1301 USA
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef VIPS_CONNECTION_H
|
|
||||||
#define VIPS_CONNECTION_H
|
|
||||||
|
|
||||||
#include <glib.h>
|
|
||||||
#include <glib-object.h>
|
|
||||||
#include <gio/gio.h>
|
|
||||||
#include <vips/object.h>
|
|
||||||
#include <vips/type.h>
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
#define VIPS_TYPE_CONNECTION (vips_connection_get_type())
|
|
||||||
#define VIPS_CONNECTION(obj) \
|
|
||||||
(G_TYPE_CHECK_INSTANCE_CAST((obj), \
|
|
||||||
VIPS_TYPE_CONNECTION, VipsConnection))
|
|
||||||
#define VIPS_CONNECTION_CLASS(klass) \
|
|
||||||
(G_TYPE_CHECK_CLASS_CAST((klass), \
|
|
||||||
VIPS_TYPE_CONNECTION, VipsConnectionClass))
|
|
||||||
#define VIPS_IS_CONNECTION(obj) \
|
|
||||||
(G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_CONNECTION))
|
|
||||||
#define VIPS_IS_CONNECTION_CLASS(klass) \
|
|
||||||
(G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_CONNECTION))
|
|
||||||
#define VIPS_CONNECTION_GET_CLASS(obj) \
|
|
||||||
(G_TYPE_INSTANCE_GET_CLASS((obj), \
|
|
||||||
VIPS_TYPE_CONNECTION, VipsConnectionClass))
|
|
||||||
|
|
||||||
/* Communicate with something like a socket or pipe.
|
|
||||||
*/
|
|
||||||
typedef struct _VipsConnection {
|
|
||||||
VipsObject parent_object;
|
|
||||||
|
|
||||||
/*< private >*/
|
|
||||||
|
|
||||||
/* Read/write this fd if connected to a system pipe/socket. Override
|
|
||||||
* ::read() and ::write() to do something else.
|
|
||||||
*/
|
|
||||||
int descriptor;
|
|
||||||
|
|
||||||
/* A descriptor we close with vips_tracked_close().
|
|
||||||
*/
|
|
||||||
int tracked_descriptor;
|
|
||||||
|
|
||||||
/* A descriptor we close with close().
|
|
||||||
*/
|
|
||||||
int close_descriptor;
|
|
||||||
|
|
||||||
/* If descriptor is a file, the filename we opened. Handy for error
|
|
||||||
* messages.
|
|
||||||
*/
|
|
||||||
char *filename;
|
|
||||||
|
|
||||||
} VipsConnection;
|
|
||||||
|
|
||||||
typedef struct _VipsConnectionClass {
|
|
||||||
VipsObjectClass parent_class;
|
|
||||||
|
|
||||||
} VipsConnectionClass;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
GType vips_connection_get_type(void);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
const char *vips_connection_filename(VipsConnection *connection);
|
|
||||||
VIPS_API
|
|
||||||
const char *vips_connection_nick(VipsConnection *connection);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
void vips_pipe_read_limit_set(gint64 limit);
|
|
||||||
|
|
||||||
#define VIPS_TYPE_SOURCE (vips_source_get_type())
|
|
||||||
#define VIPS_SOURCE(obj) \
|
|
||||||
(G_TYPE_CHECK_INSTANCE_CAST((obj), \
|
|
||||||
VIPS_TYPE_SOURCE, VipsSource))
|
|
||||||
#define VIPS_SOURCE_CLASS(klass) \
|
|
||||||
(G_TYPE_CHECK_CLASS_CAST((klass), \
|
|
||||||
VIPS_TYPE_SOURCE, VipsSourceClass))
|
|
||||||
#define VIPS_IS_SOURCE(obj) \
|
|
||||||
(G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_SOURCE))
|
|
||||||
#define VIPS_IS_SOURCE_CLASS(klass) \
|
|
||||||
(G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_SOURCE))
|
|
||||||
#define VIPS_SOURCE_GET_CLASS(obj) \
|
|
||||||
(G_TYPE_INSTANCE_GET_CLASS((obj), \
|
|
||||||
VIPS_TYPE_SOURCE, VipsSourceClass))
|
|
||||||
|
|
||||||
/* Read from something like a socket, file or memory area and present the data
|
|
||||||
* with a unified seek / read / map interface.
|
|
||||||
*
|
|
||||||
* During the header phase, we save data from unseekable sources in a buffer
|
|
||||||
* so readers can rewind and read again. We don't buffer data during the
|
|
||||||
* decode stage.
|
|
||||||
*/
|
|
||||||
struct _VipsSource {
|
|
||||||
VipsConnection parent_object;
|
|
||||||
|
|
||||||
/* We have two phases:
|
|
||||||
*
|
|
||||||
* During the header phase, we save bytes read from the input (if this
|
|
||||||
* is an unseekable source) so that we can rewind and try again, if
|
|
||||||
* necessary.
|
|
||||||
*
|
|
||||||
* Once we reach decode phase, we no longer support rewind and the
|
|
||||||
* buffer of saved data is discarded.
|
|
||||||
*/
|
|
||||||
gboolean decode;
|
|
||||||
|
|
||||||
/* TRUE if this input is something like a pipe. These don't support
|
|
||||||
* seek or map -- all you can do is read() bytes sequentially.
|
|
||||||
*
|
|
||||||
* If you attempt to map or get the size of a pipe-style input, it'll
|
|
||||||
* get read entirely into memory. Seeks will cause read up to the seek
|
|
||||||
* point.
|
|
||||||
*/
|
|
||||||
gboolean have_tested_seek;
|
|
||||||
gboolean is_pipe;
|
|
||||||
|
|
||||||
/* The current read point and length.
|
|
||||||
*
|
|
||||||
* length is -1 for is_pipe sources.
|
|
||||||
*
|
|
||||||
* off_t can be 32 bits on some platforms, so make sure we have a
|
|
||||||
* full 64.
|
|
||||||
*/
|
|
||||||
gint64 read_position;
|
|
||||||
gint64 length;
|
|
||||||
|
|
||||||
/*< private >*/
|
|
||||||
|
|
||||||
/* For sources where we have the whole image in memory (from a memory
|
|
||||||
* buffer, from mmaping the file, from reading the pipe into memory),
|
|
||||||
* a pointer to the start.
|
|
||||||
*/
|
|
||||||
const void *data;
|
|
||||||
|
|
||||||
/* For is_pipe sources, save data read during header phase here. If
|
|
||||||
* we rewind and try again, serve data from this until it runs out.
|
|
||||||
*
|
|
||||||
* If we need to force the whole pipe into memory, read everything to
|
|
||||||
* this and put a copy of the pointer in data.
|
|
||||||
*/
|
|
||||||
GByteArray *header_bytes;
|
|
||||||
|
|
||||||
/* Save the first few bytes here for file type sniffing.
|
|
||||||
*/
|
|
||||||
GByteArray *sniff;
|
|
||||||
|
|
||||||
/* For a memory source, the blob we read from.
|
|
||||||
*/
|
|
||||||
VipsBlob *blob;
|
|
||||||
|
|
||||||
/* If we mmaped the file, what we need to unmmap on finalize.
|
|
||||||
*/
|
|
||||||
void *mmap_baseaddr;
|
|
||||||
size_t mmap_length;
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct _VipsSourceClass {
|
|
||||||
VipsConnectionClass parent_class;
|
|
||||||
|
|
||||||
/* Subclasses can define these to implement other source methods.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Read from the source into the supplied buffer, args exactly as
|
|
||||||
* read(2). Set errno on error.
|
|
||||||
*
|
|
||||||
* We must return gint64, since ssize_t is often defined as unsigned
|
|
||||||
* on Windows.
|
|
||||||
*/
|
|
||||||
gint64 (*read)(VipsSource *, void *, size_t);
|
|
||||||
|
|
||||||
/* Seek to a certain position, args exactly as lseek(2). Set errno on
|
|
||||||
* error.
|
|
||||||
*
|
|
||||||
* Unseekable sources should always return -1. VipsSource will then
|
|
||||||
* seek by _read()ing bytes into memory as required.
|
|
||||||
*
|
|
||||||
* We have to use int64 rather than off_t, since we must work on
|
|
||||||
* Windows, where off_t can be 32-bits.
|
|
||||||
*/
|
|
||||||
gint64 (*seek)(VipsSource *, gint64, int);
|
|
||||||
|
|
||||||
} VipsSourceClass;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
GType vips_source_get_type(void);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
VipsSource *vips_source_new_from_descriptor(int descriptor);
|
|
||||||
VIPS_API
|
|
||||||
VipsSource *vips_source_new_from_file(const char *filename);
|
|
||||||
VIPS_API
|
|
||||||
VipsSource *vips_source_new_from_blob(VipsBlob *blob);
|
|
||||||
VIPS_API
|
|
||||||
VipsSource *vips_source_new_from_target(VipsTarget *target);
|
|
||||||
VIPS_API
|
|
||||||
VipsSource *vips_source_new_from_memory(const void *data, size_t size);
|
|
||||||
VIPS_API
|
|
||||||
VipsSource *vips_source_new_from_options(const char *options);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
void vips_source_minimise(VipsSource *source);
|
|
||||||
VIPS_API
|
|
||||||
int vips_source_unminimise(VipsSource *source);
|
|
||||||
VIPS_API
|
|
||||||
int vips_source_decode(VipsSource *source);
|
|
||||||
VIPS_API
|
|
||||||
gint64 vips_source_read(VipsSource *source, void *data, size_t length);
|
|
||||||
VIPS_API
|
|
||||||
gboolean vips_source_is_mappable(VipsSource *source);
|
|
||||||
VIPS_API
|
|
||||||
gboolean vips_source_is_file(VipsSource *source);
|
|
||||||
VIPS_API
|
|
||||||
const void *vips_source_map(VipsSource *source, size_t *length);
|
|
||||||
VIPS_API
|
|
||||||
VipsBlob *vips_source_map_blob(VipsSource *source);
|
|
||||||
VIPS_API
|
|
||||||
gint64 vips_source_seek(VipsSource *source, gint64 offset, int whence);
|
|
||||||
VIPS_API
|
|
||||||
int vips_source_rewind(VipsSource *source);
|
|
||||||
VIPS_API
|
|
||||||
gint64 vips_source_sniff_at_most(VipsSource *source,
|
|
||||||
unsigned char **data, size_t length);
|
|
||||||
VIPS_API
|
|
||||||
unsigned char *vips_source_sniff(VipsSource *source, size_t length);
|
|
||||||
VIPS_API
|
|
||||||
gint64 vips_source_length(VipsSource *source);
|
|
||||||
|
|
||||||
#define VIPS_TYPE_SOURCE_CUSTOM (vips_source_custom_get_type())
|
|
||||||
#define VIPS_SOURCE_CUSTOM(obj) \
|
|
||||||
(G_TYPE_CHECK_INSTANCE_CAST((obj), \
|
|
||||||
VIPS_TYPE_SOURCE_CUSTOM, VipsSourceCustom))
|
|
||||||
#define VIPS_SOURCE_CUSTOM_CLASS(klass) \
|
|
||||||
(G_TYPE_CHECK_CLASS_CAST((klass), \
|
|
||||||
VIPS_TYPE_SOURCE_CUSTOM, VipsSourceCustomClass))
|
|
||||||
#define VIPS_IS_SOURCE_CUSTOM(obj) \
|
|
||||||
(G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_SOURCE_CUSTOM))
|
|
||||||
#define VIPS_IS_SOURCE_CUSTOM_CLASS(klass) \
|
|
||||||
(G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_SOURCE_CUSTOM))
|
|
||||||
#define VIPS_SOURCE_CUSTOM_GET_CLASS(obj) \
|
|
||||||
(G_TYPE_INSTANCE_GET_CLASS((obj), \
|
|
||||||
VIPS_TYPE_SOURCE_CUSTOM, VipsSourceCustomClass))
|
|
||||||
|
|
||||||
/* Subclass of source_custom with signals for handlers. This is supposed to be
|
|
||||||
* useful for language bindings.
|
|
||||||
*/
|
|
||||||
typedef struct _VipsSourceCustom {
|
|
||||||
VipsSource parent_object;
|
|
||||||
|
|
||||||
} VipsSourceCustom;
|
|
||||||
|
|
||||||
typedef struct _VipsSourceCustomClass {
|
|
||||||
VipsSourceClass parent_class;
|
|
||||||
|
|
||||||
/* The action signals clients can use to implement read and seek.
|
|
||||||
* We must use gint64 everywhere since there's no G_TYPE_SIZE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
gint64 (*read)(VipsSourceCustom *, void *, gint64);
|
|
||||||
gint64 (*seek)(VipsSourceCustom *, gint64, int);
|
|
||||||
|
|
||||||
} VipsSourceCustomClass;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
GType vips_source_custom_get_type(void);
|
|
||||||
VIPS_API
|
|
||||||
VipsSourceCustom *vips_source_custom_new(void);
|
|
||||||
|
|
||||||
/* A GInputStream that wraps a VipsSource. This lets us eg.
|
|
||||||
* hook librsvg up to libvips using their GInputStream interface.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define VIPS_TYPE_G_INPUT_STREAM (vips_g_input_stream_get_type())
|
|
||||||
#define VIPS_G_INPUT_STREAM(obj) \
|
|
||||||
(G_TYPE_CHECK_INSTANCE_CAST((obj), \
|
|
||||||
VIPS_TYPE_G_INPUT_STREAM, VipsGInputStream))
|
|
||||||
#define VIPS_G_INPUT_STREAM_CLASS(klass) \
|
|
||||||
(G_TYPE_CHECK_CLASS_CAST((klass), \
|
|
||||||
VIPS_TYPE_G_INPUT_STREAM, VipsGInputStreamClass))
|
|
||||||
#define VIPS_IS_G_INPUT_STREAM(obj) \
|
|
||||||
(G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_G_INPUT_STREAM))
|
|
||||||
#define VIPS_IS_G_INPUT_STREAM_CLASS(klass) \
|
|
||||||
(G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_G_INPUT_STREAM))
|
|
||||||
#define VIPS_G_INPUT_STREAM_GET_CLASS(obj) \
|
|
||||||
(G_TYPE_INSTANCE_GET_CLASS((obj), \
|
|
||||||
VIPS_TYPE_G_INPUT_STREAM, VipsGInputStreamClass))
|
|
||||||
|
|
||||||
typedef struct _VipsGInputStream {
|
|
||||||
GInputStream parent_instance;
|
|
||||||
|
|
||||||
/*< private >*/
|
|
||||||
|
|
||||||
/* The VipsSource we wrap.
|
|
||||||
*/
|
|
||||||
VipsSource *source;
|
|
||||||
|
|
||||||
} VipsGInputStream;
|
|
||||||
|
|
||||||
typedef struct _VipsGInputStreamClass {
|
|
||||||
GInputStreamClass parent_class;
|
|
||||||
|
|
||||||
} VipsGInputStreamClass;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
GInputStream *vips_g_input_stream_new_from_source(VipsSource *source);
|
|
||||||
|
|
||||||
/* A VipsSource that wraps a GInputStream. This lets us eg. load PNGs from
|
|
||||||
* GFile objects.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define VIPS_TYPE_SOURCE_G_INPUT_STREAM (vips_source_g_input_stream_get_type())
|
|
||||||
#define VIPS_SOURCE_G_INPUT_STREAM(obj) \
|
|
||||||
(G_TYPE_CHECK_INSTANCE_CAST((obj), \
|
|
||||||
VIPS_TYPE_SOURCE_G_INPUT_STREAM, VipsSourceGInputStream))
|
|
||||||
#define VIPS_SOURCE_G_INPUT_STREAM_CLASS(klass) \
|
|
||||||
(G_TYPE_CHECK_CLASS_CAST((klass), \
|
|
||||||
VIPS_TYPE_SOURCE_G_INPUT_STREAM, VipsSourceGInputStreamClass))
|
|
||||||
#define VIPS_IS_SOURCE_G_INPUT_STREAM(obj) \
|
|
||||||
(G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_SOURCE_G_INPUT_STREAM))
|
|
||||||
#define VIPS_IS_SOURCE_G_INPUT_STREAM_CLASS(klass) \
|
|
||||||
(G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_SOURCE_G_INPUT_STREAM))
|
|
||||||
#define VIPS_SOURCE_G_INPUT_STREAM_GET_CLASS(obj) \
|
|
||||||
(G_TYPE_INSTANCE_GET_CLASS((obj), \
|
|
||||||
VIPS_TYPE_SOURCE_G_INPUT_STREAM, VipsSourceGInputStreamClass))
|
|
||||||
|
|
||||||
typedef struct _VipsSourceGInputStream {
|
|
||||||
VipsSource parent_instance;
|
|
||||||
|
|
||||||
/*< private >*/
|
|
||||||
|
|
||||||
/* The GInputStream we wrap.
|
|
||||||
*/
|
|
||||||
GInputStream *stream;
|
|
||||||
|
|
||||||
GSeekable *seekable;
|
|
||||||
GFileInfo *info;
|
|
||||||
|
|
||||||
} VipsSourceGInputStream;
|
|
||||||
|
|
||||||
typedef struct _VipsSourceGInputStreamClass {
|
|
||||||
VipsSourceClass parent_class;
|
|
||||||
|
|
||||||
} VipsSourceGInputStreamClass;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
VipsSourceGInputStream *vips_source_g_input_stream_new(GInputStream *stream);
|
|
||||||
|
|
||||||
#define VIPS_TYPE_TARGET (vips_target_get_type())
|
|
||||||
#define VIPS_TARGET(obj) \
|
|
||||||
(G_TYPE_CHECK_INSTANCE_CAST((obj), \
|
|
||||||
VIPS_TYPE_TARGET, VipsTarget))
|
|
||||||
#define VIPS_TARGET_CLASS(klass) \
|
|
||||||
(G_TYPE_CHECK_CLASS_CAST((klass), \
|
|
||||||
VIPS_TYPE_TARGET, VipsTargetClass))
|
|
||||||
#define VIPS_IS_TARGET(obj) \
|
|
||||||
(G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_TARGET))
|
|
||||||
#define VIPS_IS_TARGET_CLASS(klass) \
|
|
||||||
(G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_TARGET))
|
|
||||||
#define VIPS_TARGET_GET_CLASS(obj) \
|
|
||||||
(G_TYPE_INSTANCE_GET_CLASS((obj), \
|
|
||||||
VIPS_TYPE_TARGET, VipsTargetClass))
|
|
||||||
|
|
||||||
/* PNG writes in 8kb chunks, so we need to be a little larger than that.
|
|
||||||
*/
|
|
||||||
#define VIPS_TARGET_BUFFER_SIZE (8500)
|
|
||||||
|
|
||||||
/* Output to something like a socket, pipe or memory area.
|
|
||||||
*/
|
|
||||||
struct _VipsTarget {
|
|
||||||
VipsConnection parent_object;
|
|
||||||
|
|
||||||
/*< private >*/
|
|
||||||
|
|
||||||
/* This target should write to memory.
|
|
||||||
*/
|
|
||||||
gboolean memory;
|
|
||||||
|
|
||||||
/* The target has been ended and can no longer be written.
|
|
||||||
*/
|
|
||||||
gboolean ended;
|
|
||||||
|
|
||||||
/* Write memory output here. We use a GString rather than a
|
|
||||||
* GByteArray since we need eg. g_string_overwrite_len().
|
|
||||||
* @position tracks the current write position in this.
|
|
||||||
*/
|
|
||||||
GString *memory_buffer;
|
|
||||||
|
|
||||||
/* And return memory via this blob.
|
|
||||||
*/
|
|
||||||
VipsBlob *blob;
|
|
||||||
|
|
||||||
/* Buffer small writes here. write_point is the index of the next
|
|
||||||
* character to write.
|
|
||||||
*/
|
|
||||||
unsigned char output_buffer[VIPS_TARGET_BUFFER_SIZE];
|
|
||||||
int write_point;
|
|
||||||
|
|
||||||
/* Write position in memory_buffer.
|
|
||||||
*
|
|
||||||
* off_t can be 32 bits on some platforms, so make sure we have a
|
|
||||||
* full 64.
|
|
||||||
*/
|
|
||||||
gint64 position;
|
|
||||||
|
|
||||||
/* Temp targets on the filesystem need deleting, sometimes.
|
|
||||||
*/
|
|
||||||
gboolean delete_on_close;
|
|
||||||
char *delete_on_close_filename;
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct _VipsTargetClass {
|
|
||||||
VipsConnectionClass parent_class;
|
|
||||||
|
|
||||||
/* Write to output. Args exactly as write(2).
|
|
||||||
*
|
|
||||||
* We must return gint64, since ssize_t is often defined as unsigned
|
|
||||||
* on Windows.
|
|
||||||
*/
|
|
||||||
gint64 (*write)(VipsTarget *, const void *, size_t);
|
|
||||||
|
|
||||||
/* Deprecated in favour of ::end.
|
|
||||||
*/
|
|
||||||
void (*finish)(VipsTarget *);
|
|
||||||
|
|
||||||
/* libtiff needs to be able to seek and read on targets,
|
|
||||||
* unfortunately.
|
|
||||||
*
|
|
||||||
* This will not work for eg. pipes, of course.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Read from the target into the supplied buffer, args exactly as
|
|
||||||
* read(2). Set errno on error.
|
|
||||||
*
|
|
||||||
* We must return gint64, since ssize_t is often defined as unsigned
|
|
||||||
* on Windows.
|
|
||||||
*/
|
|
||||||
gint64 (*read)(VipsTarget *, void *, size_t);
|
|
||||||
|
|
||||||
/* Seek output. Args exactly as lseek(2).
|
|
||||||
*
|
|
||||||
* We have to use int64 rather than off_t, since we must work on
|
|
||||||
* Windows, where off_t can be 32-bits.
|
|
||||||
*/
|
|
||||||
gint64 (*seek)(VipsTarget *, gint64 offset, int whence);
|
|
||||||
|
|
||||||
/* Output has been generated, so do any clearing up,
|
|
||||||
* eg. copy the bytes we saved in memory to the target blob.
|
|
||||||
*/
|
|
||||||
int (*end)(VipsTarget *);
|
|
||||||
|
|
||||||
} VipsTargetClass;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
GType vips_target_get_type(void);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
VipsTarget *vips_target_new_to_descriptor(int descriptor);
|
|
||||||
VIPS_API
|
|
||||||
VipsTarget *vips_target_new_to_file(const char *filename);
|
|
||||||
VIPS_API
|
|
||||||
VipsTarget *vips_target_new_to_memory(void);
|
|
||||||
VIPS_API
|
|
||||||
VipsTarget *vips_target_new_temp(VipsTarget *target);
|
|
||||||
VIPS_API
|
|
||||||
int vips_target_write(VipsTarget *target, const void *data, size_t length);
|
|
||||||
VIPS_API
|
|
||||||
gint64 vips_target_read(VipsTarget *target, void *buffer, size_t length);
|
|
||||||
VIPS_API
|
|
||||||
gint64 vips_target_seek(VipsTarget *target, gint64 offset, int whence);
|
|
||||||
VIPS_API
|
|
||||||
int vips_target_end(VipsTarget *target);
|
|
||||||
VIPS_API
|
|
||||||
unsigned char *vips_target_steal(VipsTarget *target, size_t *length);
|
|
||||||
VIPS_API
|
|
||||||
char *vips_target_steal_text(VipsTarget *target);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_target_putc(VipsTarget *target, int ch);
|
|
||||||
#define VIPS_TARGET_PUTC(S, C) ( \
|
|
||||||
(S)->write_point < VIPS_TARGET_BUFFER_SIZE \
|
|
||||||
? ((S)->output_buffer[(S)->write_point++] = (C), 0) \
|
|
||||||
: vips_target_putc((S), (C)))
|
|
||||||
VIPS_API
|
|
||||||
int vips_target_writes(VipsTarget *target, const char *str);
|
|
||||||
VIPS_API
|
|
||||||
int vips_target_writef(VipsTarget *target, const char *fmt, ...)
|
|
||||||
G_GNUC_PRINTF(2, 3);
|
|
||||||
VIPS_API
|
|
||||||
int vips_target_write_amp(VipsTarget *target, const char *str);
|
|
||||||
|
|
||||||
#define VIPS_TYPE_TARGET_CUSTOM (vips_target_custom_get_type())
|
|
||||||
#define VIPS_TARGET_CUSTOM(obj) \
|
|
||||||
(G_TYPE_CHECK_INSTANCE_CAST((obj), \
|
|
||||||
VIPS_TYPE_TARGET_CUSTOM, VipsTargetCustom))
|
|
||||||
#define VIPS_TARGET_CUSTOM_CLASS(klass) \
|
|
||||||
(G_TYPE_CHECK_CLASS_CAST((klass), \
|
|
||||||
VIPS_TYPE_TARGET_CUSTOM, VipsTargetCustomClass))
|
|
||||||
#define VIPS_IS_TARGET_CUSTOM(obj) \
|
|
||||||
(G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_TARGET_CUSTOM))
|
|
||||||
#define VIPS_IS_TARGET_CUSTOM_CLASS(klass) \
|
|
||||||
(G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_TARGET_CUSTOM))
|
|
||||||
#define VIPS_TARGET_CUSTOM_GET_CLASS(obj) \
|
|
||||||
(G_TYPE_INSTANCE_GET_CLASS((obj), \
|
|
||||||
VIPS_TYPE_TARGET_CUSTOM, VipsTargetCustomClass))
|
|
||||||
|
|
||||||
#define VIPS_TARGET_CUSTOM_BUFFER_SIZE (4096)
|
|
||||||
|
|
||||||
/* Output to something like a socket, pipe or memory area.
|
|
||||||
*/
|
|
||||||
typedef struct _VipsTargetCustom {
|
|
||||||
VipsTarget parent_object;
|
|
||||||
|
|
||||||
} VipsTargetCustom;
|
|
||||||
|
|
||||||
typedef struct _VipsTargetCustomClass {
|
|
||||||
VipsTargetClass parent_class;
|
|
||||||
|
|
||||||
/* The action signals clients can use to implement write and finish.
|
|
||||||
* We must use gint64 everywhere since there's no G_TYPE_SIZE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
gint64 (*write)(VipsTargetCustom *, const void *, gint64);
|
|
||||||
void (*finish)(VipsTargetCustom *);
|
|
||||||
gint64 (*read)(VipsTargetCustom *, void *, gint64);
|
|
||||||
gint64 (*seek)(VipsTargetCustom *, gint64, int);
|
|
||||||
int (*end)(VipsTargetCustom *);
|
|
||||||
|
|
||||||
} VipsTargetCustomClass;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
GType vips_target_custom_get_type(void);
|
|
||||||
VIPS_API
|
|
||||||
VipsTargetCustom *vips_target_custom_new(void);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
#endif /*VIPS_CONNECTION_H*/
|
|
||||||
@@ -1,354 +0,0 @@
|
|||||||
/* conversion.h
|
|
||||||
*
|
|
||||||
* 20/9/09
|
|
||||||
* - from proto.h
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
This file is part of VIPS.
|
|
||||||
|
|
||||||
VIPS is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
||||||
02110-1301 USA
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef VIPS_CONVERSION_H
|
|
||||||
#define VIPS_CONVERSION_H
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
VIPS_EXTEND_BLACK,
|
|
||||||
VIPS_EXTEND_COPY,
|
|
||||||
VIPS_EXTEND_REPEAT,
|
|
||||||
VIPS_EXTEND_MIRROR,
|
|
||||||
VIPS_EXTEND_WHITE,
|
|
||||||
VIPS_EXTEND_BACKGROUND,
|
|
||||||
VIPS_EXTEND_LAST
|
|
||||||
} VipsExtend;
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
VIPS_COMPASS_DIRECTION_CENTRE,
|
|
||||||
VIPS_COMPASS_DIRECTION_NORTH,
|
|
||||||
VIPS_COMPASS_DIRECTION_EAST,
|
|
||||||
VIPS_COMPASS_DIRECTION_SOUTH,
|
|
||||||
VIPS_COMPASS_DIRECTION_WEST,
|
|
||||||
VIPS_COMPASS_DIRECTION_NORTH_EAST,
|
|
||||||
VIPS_COMPASS_DIRECTION_SOUTH_EAST,
|
|
||||||
VIPS_COMPASS_DIRECTION_SOUTH_WEST,
|
|
||||||
VIPS_COMPASS_DIRECTION_NORTH_WEST,
|
|
||||||
VIPS_COMPASS_DIRECTION_LAST
|
|
||||||
} VipsCompassDirection;
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
VIPS_DIRECTION_HORIZONTAL,
|
|
||||||
VIPS_DIRECTION_VERTICAL,
|
|
||||||
VIPS_DIRECTION_LAST
|
|
||||||
} VipsDirection;
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
VIPS_ALIGN_LOW,
|
|
||||||
VIPS_ALIGN_CENTRE,
|
|
||||||
VIPS_ALIGN_HIGH,
|
|
||||||
VIPS_ALIGN_LAST
|
|
||||||
} VipsAlign;
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
VIPS_ANGLE_D0,
|
|
||||||
VIPS_ANGLE_D90,
|
|
||||||
VIPS_ANGLE_D180,
|
|
||||||
VIPS_ANGLE_D270,
|
|
||||||
VIPS_ANGLE_LAST
|
|
||||||
} VipsAngle;
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
VIPS_ANGLE45_D0,
|
|
||||||
VIPS_ANGLE45_D45,
|
|
||||||
VIPS_ANGLE45_D90,
|
|
||||||
VIPS_ANGLE45_D135,
|
|
||||||
VIPS_ANGLE45_D180,
|
|
||||||
VIPS_ANGLE45_D225,
|
|
||||||
VIPS_ANGLE45_D270,
|
|
||||||
VIPS_ANGLE45_D315,
|
|
||||||
VIPS_ANGLE45_LAST
|
|
||||||
} VipsAngle45;
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
VIPS_INTERESTING_NONE,
|
|
||||||
VIPS_INTERESTING_CENTRE,
|
|
||||||
VIPS_INTERESTING_ENTROPY,
|
|
||||||
VIPS_INTERESTING_ATTENTION,
|
|
||||||
VIPS_INTERESTING_LOW,
|
|
||||||
VIPS_INTERESTING_HIGH,
|
|
||||||
VIPS_INTERESTING_ALL,
|
|
||||||
VIPS_INTERESTING_LAST
|
|
||||||
} VipsInteresting;
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
VIPS_BLEND_MODE_CLEAR,
|
|
||||||
VIPS_BLEND_MODE_SOURCE,
|
|
||||||
VIPS_BLEND_MODE_OVER,
|
|
||||||
VIPS_BLEND_MODE_IN,
|
|
||||||
VIPS_BLEND_MODE_OUT,
|
|
||||||
VIPS_BLEND_MODE_ATOP,
|
|
||||||
VIPS_BLEND_MODE_DEST,
|
|
||||||
VIPS_BLEND_MODE_DEST_OVER,
|
|
||||||
VIPS_BLEND_MODE_DEST_IN,
|
|
||||||
VIPS_BLEND_MODE_DEST_OUT,
|
|
||||||
VIPS_BLEND_MODE_DEST_ATOP,
|
|
||||||
VIPS_BLEND_MODE_XOR,
|
|
||||||
VIPS_BLEND_MODE_ADD,
|
|
||||||
VIPS_BLEND_MODE_SATURATE,
|
|
||||||
VIPS_BLEND_MODE_MULTIPLY,
|
|
||||||
VIPS_BLEND_MODE_SCREEN,
|
|
||||||
VIPS_BLEND_MODE_OVERLAY,
|
|
||||||
VIPS_BLEND_MODE_DARKEN,
|
|
||||||
VIPS_BLEND_MODE_LIGHTEN,
|
|
||||||
VIPS_BLEND_MODE_COLOUR_DODGE,
|
|
||||||
VIPS_BLEND_MODE_COLOUR_BURN,
|
|
||||||
VIPS_BLEND_MODE_HARD_LIGHT,
|
|
||||||
VIPS_BLEND_MODE_SOFT_LIGHT,
|
|
||||||
VIPS_BLEND_MODE_DIFFERENCE,
|
|
||||||
VIPS_BLEND_MODE_EXCLUSION,
|
|
||||||
VIPS_BLEND_MODE_LAST
|
|
||||||
} VipsBlendMode;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_copy(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_tilecache(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_linecache(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_sequential(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_copy_file(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_embed(VipsImage *in, VipsImage **out,
|
|
||||||
int x, int y, int width, int height, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_gravity(VipsImage *in, VipsImage **out,
|
|
||||||
VipsCompassDirection direction, int width, int height, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_flip(VipsImage *in, VipsImage **out, VipsDirection direction, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_insert(VipsImage *main, VipsImage *sub, VipsImage **out,
|
|
||||||
int x, int y, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_join(VipsImage *in1, VipsImage *in2, VipsImage **out,
|
|
||||||
VipsDirection direction, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_arrayjoin(VipsImage **in, VipsImage **out, int n, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_extract_area(VipsImage *in, VipsImage **out,
|
|
||||||
int left, int top, int width, int height, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_crop(VipsImage *in, VipsImage **out,
|
|
||||||
int left, int top, int width, int height, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_smartcrop(VipsImage *in, VipsImage **out, int width, int height, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_extract_band(VipsImage *in, VipsImage **out, int band, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_replicate(VipsImage *in, VipsImage **out, int across, int down, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_grid(VipsImage *in, VipsImage **out,
|
|
||||||
int tile_height, int across, int down, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_transpose3d(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_wrap(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_rot(VipsImage *in, VipsImage **out, VipsAngle angle, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_rot90(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_rot180(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_rot270(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_rot45(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
void vips_autorot_remove_angle(VipsImage *image);
|
|
||||||
VIPS_API
|
|
||||||
int vips_autorot(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_zoom(VipsImage *in, VipsImage **out, int xfac, int yfac, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_subsample(VipsImage *in, VipsImage **out, int xfac, int yfac, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_cast(VipsImage *in, VipsImage **out, VipsBandFormat format, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_cast_uchar(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_cast_char(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_cast_ushort(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_cast_short(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_cast_uint(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_cast_int(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_cast_float(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_cast_double(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_cast_complex(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_cast_dpcomplex(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_scale(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_msb(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_byteswap(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_bandjoin(VipsImage **in, VipsImage **out, int n, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_bandjoin2(VipsImage *in1, VipsImage *in2, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_bandjoin_const(VipsImage *in, VipsImage **out, double *c, int n, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_bandjoin_const1(VipsImage *in, VipsImage **out, double c, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_bandrank(VipsImage **in, VipsImage **out, int n, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_bandfold(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_bandunfold(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_bandbool(VipsImage *in, VipsImage **out,
|
|
||||||
VipsOperationBoolean boolean, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_bandand(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_bandor(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_bandeor(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_bandmean(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_recomb(VipsImage *in, VipsImage **out, VipsImage *m, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_ifthenelse(VipsImage *cond, VipsImage *in1, VipsImage *in2,
|
|
||||||
VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_switch(VipsImage **tests, VipsImage **out, int n, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_flatten(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_addalpha(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_premultiply(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_unpremultiply(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_composite(VipsImage **in, VipsImage **out, int n, int *mode, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_composite2(VipsImage *base, VipsImage *overlay, VipsImage **out,
|
|
||||||
VipsBlendMode mode, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_falsecolour(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_gamma(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
#endif /*VIPS_CONVERSION_H*/
|
|
||||||
@@ -1,101 +0,0 @@
|
|||||||
/* convolution.h
|
|
||||||
*
|
|
||||||
* 20/9/09
|
|
||||||
* - from proto.h
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
This file is part of VIPS.
|
|
||||||
|
|
||||||
VIPS is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
||||||
02110-1301 USA
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef VIPS_CONVOLUTION_H
|
|
||||||
#define VIPS_CONVOLUTION_H
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
VIPS_COMBINE_MAX,
|
|
||||||
VIPS_COMBINE_SUM,
|
|
||||||
VIPS_COMBINE_MIN,
|
|
||||||
VIPS_COMBINE_LAST
|
|
||||||
} VipsCombine;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_conv(VipsImage *in, VipsImage **out, VipsImage *mask, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_convf(VipsImage *in, VipsImage **out, VipsImage *mask, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_convi(VipsImage *in, VipsImage **out, VipsImage *mask, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_conva(VipsImage *in, VipsImage **out, VipsImage *mask, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_convsep(VipsImage *in, VipsImage **out, VipsImage *mask, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_convasep(VipsImage *in, VipsImage **out, VipsImage *mask, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_compass(VipsImage *in, VipsImage **out, VipsImage *mask, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_gaussblur(VipsImage *in, VipsImage **out, double sigma, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_sharpen(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_spcor(VipsImage *in, VipsImage *ref, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_fastcor(VipsImage *in, VipsImage *ref, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_sobel(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_scharr(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_prewitt(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_canny(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
#endif /*VIPS_CONVOLUTION_H*/
|
|
||||||
@@ -1,172 +0,0 @@
|
|||||||
/* create.h
|
|
||||||
*
|
|
||||||
* 20/9/09
|
|
||||||
* - from proto.h
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
This file is part of VIPS.
|
|
||||||
|
|
||||||
VIPS is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
||||||
02110-1301 USA
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef VIPS_CREATE_H
|
|
||||||
#define VIPS_CREATE_H
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
VIPS_TEXT_WRAP_WORD = 0,
|
|
||||||
VIPS_TEXT_WRAP_CHAR,
|
|
||||||
VIPS_TEXT_WRAP_WORD_CHAR,
|
|
||||||
VIPS_TEXT_WRAP_NONE,
|
|
||||||
VIPS_TEXT_WRAP_LAST
|
|
||||||
} VipsTextWrap;
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
VIPS_SDF_SHAPE_CIRCLE = 0,
|
|
||||||
VIPS_SDF_SHAPE_BOX,
|
|
||||||
VIPS_SDF_SHAPE_ROUNDED_BOX,
|
|
||||||
VIPS_SDF_SHAPE_LINE,
|
|
||||||
VIPS_SDF_SHAPE_LAST
|
|
||||||
} VipsSdfShape;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_black(VipsImage **out, int width, int height, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_xyz(VipsImage **out, int width, int height, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_grey(VipsImage **out, int width, int height, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_gaussmat(VipsImage **out, double sigma, double min_ampl, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_logmat(VipsImage **out, double sigma, double min_ampl, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_text(VipsImage **out, const char *text, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_gaussnoise(VipsImage **out, int width, int height, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_eye(VipsImage **out, int width, int height, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_sines(VipsImage **out, int width, int height, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_zone(VipsImage **out, int width, int height, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_sdf(VipsImage **out, int width, int height, VipsSdfShape shape, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_identity(VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_buildlut(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_invertlut(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_tonelut(VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_mask_ideal(VipsImage **out, int width, int height,
|
|
||||||
double frequency_cutoff, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_mask_ideal_ring(VipsImage **out, int width, int height,
|
|
||||||
double frequency_cutoff, double ringwidth, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_mask_ideal_band(VipsImage **out, int width, int height,
|
|
||||||
double frequency_cutoff_x, double frequency_cutoff_y,
|
|
||||||
double radius, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_mask_butterworth(VipsImage **out, int width, int height,
|
|
||||||
double order,
|
|
||||||
double frequency_cutoff, double amplitude_cutoff, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_mask_butterworth_ring(VipsImage **out, int width, int height,
|
|
||||||
double order,
|
|
||||||
double frequency_cutoff, double amplitude_cutoff,
|
|
||||||
double ringwidth, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_mask_butterworth_band(VipsImage **out, int width, int height,
|
|
||||||
double order,
|
|
||||||
double frequency_cutoff_x, double frequency_cutoff_y, double radius,
|
|
||||||
double amplitude_cutoff, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_mask_gaussian(VipsImage **out, int width, int height,
|
|
||||||
double frequency_cutoff, double amplitude_cutoff, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_mask_gaussian_ring(VipsImage **out, int width, int height,
|
|
||||||
double frequency_cutoff, double amplitude_cutoff,
|
|
||||||
double ringwidth, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_mask_gaussian_band(VipsImage **out, int width, int height,
|
|
||||||
double frequency_cutoff_x, double frequency_cutoff_y, double radius,
|
|
||||||
double amplitude_cutoff, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_mask_fractal(VipsImage **out, int width, int height,
|
|
||||||
double fractal_dimension, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_fractsurf(VipsImage **out,
|
|
||||||
int width, int height, double fractal_dimension, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_worley(VipsImage **out, int width, int height, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_perlin(VipsImage **out, int width, int height, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
#endif /*VIPS_CREATE_H*/
|
|
||||||
@@ -1,101 +0,0 @@
|
|||||||
/* A dynamic memory buffer that expands as you write.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
This file is part of VIPS.
|
|
||||||
|
|
||||||
VIPS is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
||||||
02110-1301 USA
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef VIPS_DBUF_H
|
|
||||||
#define VIPS_DBUF_H
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
#include <vips/vips.h>
|
|
||||||
|
|
||||||
/* A buffer in the process of being written to.
|
|
||||||
*/
|
|
||||||
|
|
||||||
typedef struct _VipsDbuf {
|
|
||||||
/* All fields are private.
|
|
||||||
*/
|
|
||||||
/*< private >*/
|
|
||||||
|
|
||||||
/* The current base, and the size of the allocated memory area.
|
|
||||||
*/
|
|
||||||
unsigned char *data;
|
|
||||||
size_t allocated_size;
|
|
||||||
|
|
||||||
/* The size of the actual data that's been written. This will usually
|
|
||||||
* be <= allocated_size, but always >= write_point.
|
|
||||||
*/
|
|
||||||
size_t data_size;
|
|
||||||
|
|
||||||
/* The write point.
|
|
||||||
*/
|
|
||||||
size_t write_point;
|
|
||||||
|
|
||||||
} VipsDbuf;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
void vips_dbuf_init(VipsDbuf *dbuf);
|
|
||||||
VIPS_API
|
|
||||||
gboolean vips_dbuf_minimum_size(VipsDbuf *dbuf, size_t size);
|
|
||||||
VIPS_API
|
|
||||||
gboolean vips_dbuf_allocate(VipsDbuf *dbuf, size_t size);
|
|
||||||
VIPS_API
|
|
||||||
size_t vips_dbuf_read(VipsDbuf *dbuf, unsigned char *data, size_t size);
|
|
||||||
VIPS_API
|
|
||||||
unsigned char *vips_dbuf_get_write(VipsDbuf *dbuf, size_t *size);
|
|
||||||
VIPS_API
|
|
||||||
gboolean vips_dbuf_write(VipsDbuf *dbuf,
|
|
||||||
const unsigned char *data, size_t size);
|
|
||||||
VIPS_API
|
|
||||||
gboolean vips_dbuf_writef(VipsDbuf *dbuf, const char *fmt, ...)
|
|
||||||
G_GNUC_PRINTF(2, 3);
|
|
||||||
VIPS_API
|
|
||||||
gboolean vips_dbuf_write_amp(VipsDbuf *dbuf, const char *str);
|
|
||||||
VIPS_API
|
|
||||||
void vips_dbuf_reset(VipsDbuf *dbuf);
|
|
||||||
VIPS_API
|
|
||||||
void vips_dbuf_destroy(VipsDbuf *dbuf);
|
|
||||||
VIPS_API
|
|
||||||
gboolean vips_dbuf_seek(VipsDbuf *dbuf, off_t offset, int whence);
|
|
||||||
VIPS_API
|
|
||||||
void vips_dbuf_truncate(VipsDbuf *dbuf);
|
|
||||||
VIPS_API
|
|
||||||
off_t vips_dbuf_tell(VipsDbuf *dbuf);
|
|
||||||
VIPS_API
|
|
||||||
unsigned char *vips_dbuf_string(VipsDbuf *dbuf, size_t *size);
|
|
||||||
VIPS_API
|
|
||||||
unsigned char *vips_dbuf_steal(VipsDbuf *dbuf, size_t *size);
|
|
||||||
|
|
||||||
#endif /*VIPS_DBUF_H*/
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
@@ -1,106 +0,0 @@
|
|||||||
/* Support for debug.c in iofuncs.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
This file is part of VIPS.
|
|
||||||
|
|
||||||
VIPS is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
||||||
02110-1301 USA
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef VIPS_DEBUG_H
|
|
||||||
#define VIPS_DEBUG_H
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
#ifdef VIPS_DEBUG
|
|
||||||
#define VIPS_DEBUG_MSG(...) \
|
|
||||||
G_STMT_START \
|
|
||||||
{ \
|
|
||||||
printf(__VA_ARGS__); \
|
|
||||||
} \
|
|
||||||
G_STMT_END
|
|
||||||
#else
|
|
||||||
#define VIPS_DEBUG_MSG(...) \
|
|
||||||
G_STMT_START \
|
|
||||||
{ \
|
|
||||||
; \
|
|
||||||
} \
|
|
||||||
G_STMT_END
|
|
||||||
#endif /*VIPS_DEBUG*/
|
|
||||||
|
|
||||||
#ifdef VIPS_DEBUG_RED
|
|
||||||
#define VIPS_DEBUG_MSG_RED(...) \
|
|
||||||
G_STMT_START \
|
|
||||||
{ \
|
|
||||||
printf("red: " __VA_ARGS__); \
|
|
||||||
} \
|
|
||||||
G_STMT_END
|
|
||||||
#else
|
|
||||||
#define VIPS_DEBUG_MSG_RED(...) \
|
|
||||||
G_STMT_START \
|
|
||||||
{ \
|
|
||||||
; \
|
|
||||||
} \
|
|
||||||
G_STMT_END
|
|
||||||
#endif /*VIPS_DEBUG_RED*/
|
|
||||||
|
|
||||||
#ifdef VIPS_DEBUG_AMBER
|
|
||||||
#define VIPS_DEBUG_MSG_AMBER(...) \
|
|
||||||
G_STMT_START \
|
|
||||||
{ \
|
|
||||||
printf("amber: " __VA_ARGS__); \
|
|
||||||
} \
|
|
||||||
G_STMT_END
|
|
||||||
#else
|
|
||||||
#define VIPS_DEBUG_MSG_AMBER(...) \
|
|
||||||
G_STMT_START \
|
|
||||||
{ \
|
|
||||||
; \
|
|
||||||
} \
|
|
||||||
G_STMT_END
|
|
||||||
#endif /*VIPS_DEBUG_AMBER*/
|
|
||||||
|
|
||||||
#ifdef VIPS_DEBUG_GREEN
|
|
||||||
#define VIPS_DEBUG_MSG_GREEN(...) \
|
|
||||||
G_STMT_START \
|
|
||||||
{ \
|
|
||||||
printf("green: " __VA_ARGS__); \
|
|
||||||
} \
|
|
||||||
G_STMT_END
|
|
||||||
#else
|
|
||||||
#define VIPS_DEBUG_MSG_GREEN(...) \
|
|
||||||
G_STMT_START \
|
|
||||||
{ \
|
|
||||||
; \
|
|
||||||
} \
|
|
||||||
G_STMT_END
|
|
||||||
#endif /*VIPS_DEBUG_GREEN*/
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
#endif /* VIPS_DEBUG_H */
|
|
||||||
@@ -1,155 +0,0 @@
|
|||||||
/* Old and broken stuff we do not enable by default
|
|
||||||
*
|
|
||||||
* 30/6/09
|
|
||||||
* - from vips.h
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
This file is part of VIPS.
|
|
||||||
|
|
||||||
VIPS is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
||||||
02110-1301 USA
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef IM_DEPRECATED_H
|
|
||||||
#define IM_DEPRECATED_H
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
/* On win32, need to override the wingdi defs for these. Yuk!
|
|
||||||
*/
|
|
||||||
#ifdef G_OS_WIN32
|
|
||||||
#ifdef RGB
|
|
||||||
#undef RGB
|
|
||||||
#endif
|
|
||||||
#ifdef CMYK
|
|
||||||
#undef CMYK
|
|
||||||
#endif
|
|
||||||
#endif /*G_OS_WIN32*/
|
|
||||||
|
|
||||||
/* Bits per Band */
|
|
||||||
#define BBBYTE 8
|
|
||||||
#define BBSHORT 16
|
|
||||||
#define BBINT 32
|
|
||||||
#define BBFLOAT 32
|
|
||||||
#define BBCOMPLEX 64 /* complex consisting of two floats */
|
|
||||||
#define BBDOUBLE 64
|
|
||||||
#define BBDPCOMPLEX 128 /* complex consisting of two doubles */
|
|
||||||
|
|
||||||
/* picture Type */
|
|
||||||
#define MULTIBAND 0
|
|
||||||
#define B_W 1
|
|
||||||
#define LUMINACE 2
|
|
||||||
#define XRAY 3
|
|
||||||
#define IR 4
|
|
||||||
#define YUV 5
|
|
||||||
#define RED_ONLY 6 /* red channel only */
|
|
||||||
#define GREEN_ONLY 7 /* green channel only */
|
|
||||||
#define BLUE_ONLY 8 /* blue channel only */
|
|
||||||
#define POWER_SPECTRUM 9
|
|
||||||
#define HISTOGRAM 10
|
|
||||||
#define FOURIER 24
|
|
||||||
|
|
||||||
/* Colour spaces.
|
|
||||||
*/
|
|
||||||
#define LUT 11
|
|
||||||
#define XYZ 12
|
|
||||||
#define LAB 13
|
|
||||||
#define CMC 14
|
|
||||||
#define CMYK 15
|
|
||||||
#define LABQ 16
|
|
||||||
#define RGB 17
|
|
||||||
#define UCS 18
|
|
||||||
#define LCH 19
|
|
||||||
#define LABS 21
|
|
||||||
#define sRGB 22
|
|
||||||
#define YXY 23
|
|
||||||
|
|
||||||
/* BandFmt
|
|
||||||
*/
|
|
||||||
#define FMTNOTSET -1
|
|
||||||
#define FMTUCHAR 0 /* pels interpreted as unsigned chars */
|
|
||||||
#define FMTCHAR 1 /* pels interpreted as signed chars */
|
|
||||||
#define FMTUSHORT 2 /* pels interpreted as unsigned shorts */
|
|
||||||
#define FMTSHORT 3 /* pels interpreted as signed shorts */
|
|
||||||
#define FMTUINT 4 /* pels interpreted as unsigned ints */
|
|
||||||
#define FMTINT 5 /* pels interpreted as signed ints */
|
|
||||||
#define FMTFLOAT 6 /* pels interpreted as floats */
|
|
||||||
#define FMTCOMPLEX 7 /* pels interpreted as complex (2 float each) */
|
|
||||||
#define FMTDOUBLE 8 /* pels interpreted as unsigned double */
|
|
||||||
#define FMTDPCOMPLEX 9 /* pels interpreted as complex (2 double each)*/
|
|
||||||
|
|
||||||
/* Coding type
|
|
||||||
*/
|
|
||||||
#define NOCODING 0
|
|
||||||
#define COLQUANT 1
|
|
||||||
#define LABPACK 2
|
|
||||||
#define LABPACK_COMPRESSED 3
|
|
||||||
#define RGB_COMPRESSED 4
|
|
||||||
#define LUM_COMPRESSED 5
|
|
||||||
|
|
||||||
/* Compression type
|
|
||||||
*/
|
|
||||||
#define NO_COMPRESSION 0
|
|
||||||
#define TCSF_COMPRESSION 1
|
|
||||||
#define JPEG_COMPRESSION 2
|
|
||||||
|
|
||||||
#define esize(I) IM_IMAGE_SIZEOF_ELEMENT(I)
|
|
||||||
#define psize(I) IM_IMAGE_SIZEOF_PEL(I)
|
|
||||||
#define lsize(I) IM_IMAGE_SIZEOF_LINE(I)
|
|
||||||
#define niele(I) IM_IMAGE_N_ELEMENTS(I)
|
|
||||||
|
|
||||||
#define lskip(B) IM_REGION_LSKIP(B)
|
|
||||||
#define nele(B) IM_REGION_N_ELEMENTS(B)
|
|
||||||
#define rsize(B) IM_REGION_SIZEOF_LINE(B)
|
|
||||||
|
|
||||||
#define addr(B, X, Y) IM_REGION_ADDR(B, X, Y)
|
|
||||||
|
|
||||||
#ifndef MAX
|
|
||||||
#define MAX(A, B) IM_MAX(A, B)
|
|
||||||
#define MIN(A, B) IM_MIN(A, B)
|
|
||||||
#endif /*MAX*/
|
|
||||||
|
|
||||||
#define CLIP(A, V, B) IM_CLIP(A, V, B)
|
|
||||||
#define NEW(IM, A) IM_NEW(IM, A)
|
|
||||||
#define NUMBER(R) IM_NUMBER(R)
|
|
||||||
#define ARRAY(IM, N, T) IM_ARRAY(IM, N, T)
|
|
||||||
|
|
||||||
#define RINT(R) IM_RINT(R)
|
|
||||||
|
|
||||||
#define CLIP_UCHAR(V, SEQ) IM_CLIP_UCHAR(V, SEQ)
|
|
||||||
#define CLIP_USHORT(V, SEQ) IM_CLIP_USHORT(V, SEQ)
|
|
||||||
#define CLIP_CHAR(V, SEQ) IM_CLIP_CHAR(V, SEQ)
|
|
||||||
#define CLIP_SHORT(V, SEQ) IM_CLIP_SHORT(V, SEQ)
|
|
||||||
#define CLIP_NONE(V, SEQ) IM_CLIP_NONE(V, SEQ)
|
|
||||||
|
|
||||||
#define right(R) IM_RECT_RIGHT(R)
|
|
||||||
#define bottom(R) IM_RECT_BOTTOM(R)
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
#endif /*IM_DEPRECATED_H*/
|
|
||||||
@@ -1,388 +0,0 @@
|
|||||||
/* VIPS function dispatch.
|
|
||||||
*
|
|
||||||
* J. Cupitt, 8/4/93.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
This file is part of VIPS.
|
|
||||||
|
|
||||||
VIPS is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
||||||
02110-1301 USA
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef IM_DISPATCH_H
|
|
||||||
#define IM_DISPATCH_H
|
|
||||||
|
|
||||||
#include <glib-object.h>
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
#include <vips/vips.h>
|
|
||||||
#include <vips/util.h>
|
|
||||||
|
|
||||||
/* Type names. You may define your own, but if you use one of these, then
|
|
||||||
* you should use the built-in VIPS type converters.
|
|
||||||
*/
|
|
||||||
#define IM_TYPE_IMAGEVEC "imagevec" /* im_object is ptr to IMAGE[] */
|
|
||||||
#define IM_TYPE_DOUBLEVEC "doublevec" /* im_object is ptr to double[] */
|
|
||||||
#define IM_TYPE_INTVEC "intvec" /* im_object is ptr to int[] */
|
|
||||||
#define IM_TYPE_DOUBLE "double" /* im_object is ptr to double */
|
|
||||||
#define IM_TYPE_INT "integer" /* 32-bit integer */
|
|
||||||
#define IM_TYPE_COMPLEX "complex" /* Pair of doubles */
|
|
||||||
#define IM_TYPE_STRING "string" /* Zero-terminated char array */
|
|
||||||
#define IM_TYPE_IMASK "intmask" /* Integer mask type */
|
|
||||||
#define IM_TYPE_DMASK "doublemask" /* Double mask type */
|
|
||||||
#define IM_TYPE_IMAGE "image" /* IMAGE descriptor */
|
|
||||||
#define IM_TYPE_DISPLAY "display" /* Display descriptor */
|
|
||||||
#define IM_TYPE_GVALUE "gvalue" /* GValue wrapper */
|
|
||||||
#define IM_TYPE_INTERPOLATE "interpolate" /* A subclass of VipsInterpolate */
|
|
||||||
typedef char *im_arg_type; /* Type of argument id */
|
|
||||||
|
|
||||||
/* Internal representation of an argument to an image processing function.
|
|
||||||
*/
|
|
||||||
typedef void *im_object;
|
|
||||||
|
|
||||||
/* These bits are ored together to make the flags in a type descriptor.
|
|
||||||
*
|
|
||||||
* IM_TYPE_OUTPUT: set to indicate output, otherwise input. If the IM_TYPE_RW
|
|
||||||
* bit is set and IM_TYPE_OUTPUT is not set, both input and output (ie. the
|
|
||||||
* operation side-effects this argument).
|
|
||||||
*
|
|
||||||
* IM_TYPE_ARG: Two ways of making an im_object --- with and without a
|
|
||||||
* command-line string to help you along. Arguments with a string are thing
|
|
||||||
* like IMAGE descriptors, which require a filename to initialise.
|
|
||||||
* Arguments without are things like output numbers, where making the object
|
|
||||||
* simply involves allocating storage.
|
|
||||||
*/
|
|
||||||
typedef enum {
|
|
||||||
IM_TYPE_NONE = 0, /* No flags */
|
|
||||||
IM_TYPE_OUTPUT = 0x1, /* Output/input object */
|
|
||||||
IM_TYPE_ARG = 0x2, /* Uses a str arg in construction */
|
|
||||||
IM_TYPE_RW = 0x4 /* Read-write */
|
|
||||||
} im_type_flags;
|
|
||||||
|
|
||||||
/* Initialise, destroy and write objects. The "str" argument to the
|
|
||||||
* init function will not be supplied if this is not an ARG type. The
|
|
||||||
* write function writes to the GString.
|
|
||||||
*/
|
|
||||||
typedef int (*im_init_obj_fn)(im_object *obj, char *str);
|
|
||||||
typedef int (*im_dest_obj_fn)(im_object obj);
|
|
||||||
|
|
||||||
/* Describe a VIPS type.
|
|
||||||
*/
|
|
||||||
typedef struct {
|
|
||||||
im_arg_type type; /* Type of argument */
|
|
||||||
int size; /* sizeof(im_object repres.) */
|
|
||||||
im_type_flags flags; /* Flags */
|
|
||||||
im_init_obj_fn init; /* Operation functions */
|
|
||||||
im_dest_obj_fn dest; /* Destroy object */
|
|
||||||
} im_type_desc;
|
|
||||||
|
|
||||||
/* Success on an argument. This is called if the image processing function
|
|
||||||
* succeeds and should be used to (for example) print output.
|
|
||||||
*/
|
|
||||||
typedef int (*im_print_obj_fn)(im_object obj);
|
|
||||||
|
|
||||||
/* Describe a VIPS command argument.
|
|
||||||
*/
|
|
||||||
typedef struct {
|
|
||||||
char *name; /* eg. "width" */
|
|
||||||
im_type_desc *desc; /* Type description */
|
|
||||||
im_print_obj_fn print; /* Print some output objects */
|
|
||||||
} im_arg_desc;
|
|
||||||
|
|
||||||
/* Type of VIPS dispatch function.
|
|
||||||
*/
|
|
||||||
typedef int (*im_dispatch_fn)(im_object *argv);
|
|
||||||
|
|
||||||
/* Maximum size of arg table.
|
|
||||||
*/
|
|
||||||
#define IM_MAX_ARGS (1000)
|
|
||||||
|
|
||||||
/* Flags for functions. These are for information only, and more may be
|
|
||||||
* added.
|
|
||||||
*/
|
|
||||||
typedef enum {
|
|
||||||
IM_FN_NONE = 0, /* No flags set */
|
|
||||||
IM_FN_PIO = 0x1, /* Is a partial function */
|
|
||||||
IM_FN_TRANSFORM = 0x2, /* Performs coordinate transformations */
|
|
||||||
IM_FN_PTOP = 0x4, /* Point-to-point ... can be done with a LUT */
|
|
||||||
IM_FN_NOCACHE = 0x8 /* Result should not be cached */
|
|
||||||
} im_fn_flags;
|
|
||||||
|
|
||||||
/* Describe a VIPS function.
|
|
||||||
*/
|
|
||||||
typedef struct {
|
|
||||||
char *name; /* eg "im_invert" */
|
|
||||||
char *desc; /* Description - eg "photographic negative" */
|
|
||||||
im_fn_flags flags; /* Flags for this function */
|
|
||||||
im_dispatch_fn disp; /* Dispatch */
|
|
||||||
int argc; /* Number of args */
|
|
||||||
im_arg_desc *argv; /* Arg table */
|
|
||||||
} im_function;
|
|
||||||
|
|
||||||
/* A set of VIPS functions forming a package.
|
|
||||||
*/
|
|
||||||
typedef struct {
|
|
||||||
char *name; /* Package name (eg "arithmetic") */
|
|
||||||
int nfuncs; /* Number of functions in package */
|
|
||||||
im_function **table; /* Array of function descriptors */
|
|
||||||
} im_package;
|
|
||||||
|
|
||||||
/* Externs for dispatch.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Struct for mask IO to a file.
|
|
||||||
*/
|
|
||||||
typedef struct {
|
|
||||||
char *name; /* Command-line name in */
|
|
||||||
void *mask; /* Mask --- DOUBLE or INT */
|
|
||||||
} im_mask_object;
|
|
||||||
|
|
||||||
/* Struct for doublevec IO
|
|
||||||
*/
|
|
||||||
typedef struct {
|
|
||||||
int n; /* Vector length */
|
|
||||||
double *vec; /* Vector */
|
|
||||||
} im_doublevec_object;
|
|
||||||
|
|
||||||
/* Struct for intvec IO
|
|
||||||
*/
|
|
||||||
typedef struct {
|
|
||||||
int n; /* Vector length */
|
|
||||||
int *vec; /* Vector */
|
|
||||||
} im_intvec_object;
|
|
||||||
|
|
||||||
/* Struct for imagevec IO
|
|
||||||
*/
|
|
||||||
typedef struct {
|
|
||||||
int n; /* Vector length */
|
|
||||||
IMAGE **vec; /* Vector */
|
|
||||||
} im_imagevec_object;
|
|
||||||
|
|
||||||
/* Built-in VIPS types.
|
|
||||||
*/
|
|
||||||
VIPS_DEPRECATED im_type_desc im__input_int;
|
|
||||||
VIPS_DEPRECATED im_type_desc im__input_intvec;
|
|
||||||
VIPS_DEPRECATED im_type_desc im__input_imask;
|
|
||||||
VIPS_DEPRECATED im_type_desc im__output_int;
|
|
||||||
VIPS_DEPRECATED im_type_desc im__output_intvec;
|
|
||||||
VIPS_DEPRECATED im_type_desc im__output_imask;
|
|
||||||
|
|
||||||
VIPS_DEPRECATED im_type_desc im__input_double;
|
|
||||||
VIPS_DEPRECATED im_type_desc im__input_doublevec;
|
|
||||||
VIPS_DEPRECATED im_type_desc im__input_dmask;
|
|
||||||
VIPS_DEPRECATED im_type_desc im__output_double;
|
|
||||||
VIPS_DEPRECATED im_type_desc im__output_doublevec;
|
|
||||||
VIPS_DEPRECATED im_type_desc im__output_dmask;
|
|
||||||
VIPS_DEPRECATED im_type_desc im__output_dmask_screen;
|
|
||||||
|
|
||||||
VIPS_DEPRECATED im_type_desc im__output_complex;
|
|
||||||
|
|
||||||
VIPS_DEPRECATED im_type_desc im__input_string;
|
|
||||||
VIPS_DEPRECATED im_type_desc im__output_string;
|
|
||||||
|
|
||||||
VIPS_DEPRECATED im_type_desc im__input_imagevec;
|
|
||||||
VIPS_DEPRECATED im_type_desc im__input_image;
|
|
||||||
VIPS_DEPRECATED im_type_desc im__output_image;
|
|
||||||
VIPS_DEPRECATED im_type_desc im__rw_image;
|
|
||||||
|
|
||||||
VIPS_DEPRECATED im_type_desc im__input_display;
|
|
||||||
VIPS_DEPRECATED im_type_desc im__output_display;
|
|
||||||
|
|
||||||
VIPS_DEPRECATED im_type_desc im__input_gvalue;
|
|
||||||
VIPS_DEPRECATED im_type_desc im__output_gvalue;
|
|
||||||
|
|
||||||
VIPS_DEPRECATED im_type_desc im__input_interpolate;
|
|
||||||
|
|
||||||
/* VIPS print functions.
|
|
||||||
*/
|
|
||||||
VIPS_DEPRECATED int im__iprint(im_object obj); /* int */
|
|
||||||
VIPS_DEPRECATED int im__ivprint(im_object obj); /* intvec */
|
|
||||||
VIPS_DEPRECATED int im__dprint(im_object obj); /* double */
|
|
||||||
VIPS_DEPRECATED int im__dvprint(im_object obj); /* doublevec */
|
|
||||||
VIPS_DEPRECATED int im__dmsprint(im_object obj); /* DOUBLEMASK as stats */
|
|
||||||
VIPS_DEPRECATED int im__cprint(im_object obj); /* complex */
|
|
||||||
VIPS_DEPRECATED int im__sprint(im_object obj); /* string */
|
|
||||||
VIPS_DEPRECATED int im__displayprint(im_object obj);/* im_col_display */
|
|
||||||
VIPS_DEPRECATED int im__gprint(im_object obj); /* GValue */
|
|
||||||
|
|
||||||
/* Macros for convenient creation.
|
|
||||||
*/
|
|
||||||
#define IM_INPUT_INT(S) \
|
|
||||||
{ \
|
|
||||||
S, &im__input_int, NULL \
|
|
||||||
}
|
|
||||||
#define IM_INPUT_INTVEC(S) \
|
|
||||||
{ \
|
|
||||||
S, &im__input_intvec, NULL \
|
|
||||||
}
|
|
||||||
#define IM_INPUT_IMASK(S) \
|
|
||||||
{ \
|
|
||||||
S, &im__input_imask, NULL \
|
|
||||||
}
|
|
||||||
#define IM_OUTPUT_INT(S) \
|
|
||||||
{ \
|
|
||||||
S, &im__output_int, im__iprint \
|
|
||||||
}
|
|
||||||
#define IM_OUTPUT_INTVEC(S) \
|
|
||||||
{ \
|
|
||||||
S, &im__output_intvec, im__ivprint \
|
|
||||||
}
|
|
||||||
#define IM_OUTPUT_IMASK(S) \
|
|
||||||
{ \
|
|
||||||
S, &im__output_imask, NULL \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define IM_INPUT_DOUBLE(S) \
|
|
||||||
{ \
|
|
||||||
S, &im__input_double, NULL \
|
|
||||||
}
|
|
||||||
#define IM_INPUT_DOUBLEVEC(S) \
|
|
||||||
{ \
|
|
||||||
S, &im__input_doublevec, NULL \
|
|
||||||
}
|
|
||||||
#define IM_INPUT_DMASK(S) \
|
|
||||||
{ \
|
|
||||||
S, &im__input_dmask, NULL \
|
|
||||||
}
|
|
||||||
#define IM_OUTPUT_DOUBLE(S) \
|
|
||||||
{ \
|
|
||||||
S, &im__output_double, im__dprint \
|
|
||||||
}
|
|
||||||
#define IM_OUTPUT_DOUBLEVEC(S) \
|
|
||||||
{ \
|
|
||||||
S, &im__output_doublevec, im__dvprint \
|
|
||||||
}
|
|
||||||
#define IM_OUTPUT_DMASK(S) \
|
|
||||||
{ \
|
|
||||||
S, &im__output_dmask, NULL \
|
|
||||||
}
|
|
||||||
#define IM_OUTPUT_DMASK_STATS(S) \
|
|
||||||
{ \
|
|
||||||
S, &im__output_dmask_screen, im__dmsprint \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define IM_OUTPUT_COMPLEX(S) \
|
|
||||||
{ \
|
|
||||||
S, &im__output_complex, im__cprint \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define IM_INPUT_STRING(S) \
|
|
||||||
{ \
|
|
||||||
S, &im__input_string, NULL \
|
|
||||||
}
|
|
||||||
#define IM_OUTPUT_STRING(S) \
|
|
||||||
{ \
|
|
||||||
S, &im__output_string, im__sprint \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define IM_INPUT_IMAGE(S) \
|
|
||||||
{ \
|
|
||||||
S, &im__input_image, NULL \
|
|
||||||
}
|
|
||||||
#define IM_INPUT_IMAGEVEC(S) \
|
|
||||||
{ \
|
|
||||||
S, &im__input_imagevec, NULL \
|
|
||||||
}
|
|
||||||
#define IM_OUTPUT_IMAGE(S) \
|
|
||||||
{ \
|
|
||||||
S, &im__output_image, NULL \
|
|
||||||
}
|
|
||||||
#define IM_RW_IMAGE(S) \
|
|
||||||
{ \
|
|
||||||
S, &im__rw_image, NULL \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define IM_INPUT_DISPLAY(S) \
|
|
||||||
{ \
|
|
||||||
S, &im__input_display, NULL \
|
|
||||||
}
|
|
||||||
#define IM_OUTPUT_DISPLAY(S) \
|
|
||||||
{ \
|
|
||||||
S, &im__output_display, im__displayprint \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define IM_INPUT_GVALUE(S) \
|
|
||||||
{ \
|
|
||||||
S, &im__input_gvalue, NULL \
|
|
||||||
}
|
|
||||||
#define IM_OUTPUT_GVALUE(S) \
|
|
||||||
{ \
|
|
||||||
S, &im__output_gvalue, im__gprint \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define IM_INPUT_INTERPOLATE(S) \
|
|
||||||
{ \
|
|
||||||
S, &im__input_interpolate, NULL \
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Add a plug-in package.
|
|
||||||
*/
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
im_package *im_load_plugin(const char *name);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
int im_load_plugins(const char *fmt, ...)
|
|
||||||
G_GNUC_PRINTF(1, 2);
|
|
||||||
|
|
||||||
/* Close all plug-ins.
|
|
||||||
*/
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
int im_close_plugins(void);
|
|
||||||
|
|
||||||
/* Loop over all loaded packages.
|
|
||||||
*/
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
void *im_map_packages(VipsSListMap2Fn fn, void *a);
|
|
||||||
|
|
||||||
/* Convenience functions for finding packages, functions, etc.
|
|
||||||
*/
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
im_function *im_find_function(const char *name);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
im_package *im_find_package(const char *name);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
im_package *im_package_of_function(const char *name);
|
|
||||||
|
|
||||||
/* Allocate space for, and free im_object argument lists.
|
|
||||||
*/
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
int im_free_vargv(im_function *fn, im_object *vargv);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
int im_allocate_vargv(im_function *fn, im_object *vargv);
|
|
||||||
|
|
||||||
/* Run a VIPS command by name.
|
|
||||||
*/
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
int im_run_command(char *name, int argc, char **argv);
|
|
||||||
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
int vips__input_interpolate_init(im_object *obj, char *str);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
#endif /*IM_DISPATCH_H*/
|
|
||||||
@@ -1,113 +0,0 @@
|
|||||||
/* draw.h
|
|
||||||
*
|
|
||||||
* 3/11/09
|
|
||||||
* - from proto.h
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
This file is part of VIPS.
|
|
||||||
|
|
||||||
VIPS is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
||||||
02110-1301 USA
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef VIPS_DRAW_H
|
|
||||||
#define VIPS_DRAW_H
|
|
||||||
|
|
||||||
#include <glib.h>
|
|
||||||
#include <glib-object.h>
|
|
||||||
#include <vips/object.h>
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
VIPS_COMBINE_MODE_SET,
|
|
||||||
VIPS_COMBINE_MODE_ADD,
|
|
||||||
VIPS_COMBINE_MODE_LAST
|
|
||||||
} VipsCombineMode;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_draw_rect(VipsImage *image,
|
|
||||||
double *ink, int n, int left, int top, int width, int height, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_draw_rect1(VipsImage *image,
|
|
||||||
double ink, int left, int top, int width, int height, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_draw_point(VipsImage *image, double *ink, int n, int x, int y, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_draw_point1(VipsImage *image, double ink, int x, int y, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_draw_image(VipsImage *image, VipsImage *sub, int x, int y, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_draw_mask(VipsImage *image,
|
|
||||||
double *ink, int n, VipsImage *mask, int x, int y, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_draw_mask1(VipsImage *image,
|
|
||||||
double ink, VipsImage *mask, int x, int y, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_draw_line(VipsImage *image,
|
|
||||||
double *ink, int n, int x1, int y1, int x2, int y2, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_draw_line1(VipsImage *image,
|
|
||||||
double ink, int x1, int y1, int x2, int y2, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_draw_circle(VipsImage *image,
|
|
||||||
double *ink, int n, int cx, int cy, int radius, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_draw_circle1(VipsImage *image,
|
|
||||||
double ink, int cx, int cy, int radius, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_draw_flood(VipsImage *image, double *ink, int n, int x, int y, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_draw_flood1(VipsImage *image, double ink, int x, int y, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_draw_smudge(VipsImage *image,
|
|
||||||
int left, int top, int width, int height, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
#endif /*VIPS_DRAW_H*/
|
|
||||||
@@ -1,188 +0,0 @@
|
|||||||
|
|
||||||
/* This file is generated by glib-mkenums, do not modify it. This code is licensed under the same license as the containing project. Note that it links to GLib, so must comply with the LGPL linking clauses. */
|
|
||||||
|
|
||||||
#ifndef VIPS_ENUM_TYPES_H
|
|
||||||
#define VIPS_ENUM_TYPES_H
|
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
|
||||||
/* enumerations from "almostdeprecated.h" */
|
|
||||||
VIPS_API
|
|
||||||
GType vips_foreign_jpeg_subsample_get_type(void) G_GNUC_CONST;
|
|
||||||
#define VIPS_TYPE_FOREIGN_JPEG_SUBSAMPLE (vips_foreign_jpeg_subsample_get_type())
|
|
||||||
/* enumerations from "arithmetic.h" */
|
|
||||||
VIPS_API
|
|
||||||
GType vips_operation_math_get_type(void) G_GNUC_CONST;
|
|
||||||
#define VIPS_TYPE_OPERATION_MATH (vips_operation_math_get_type())
|
|
||||||
VIPS_API
|
|
||||||
GType vips_operation_math2_get_type(void) G_GNUC_CONST;
|
|
||||||
#define VIPS_TYPE_OPERATION_MATH2 (vips_operation_math2_get_type())
|
|
||||||
VIPS_API
|
|
||||||
GType vips_operation_round_get_type(void) G_GNUC_CONST;
|
|
||||||
#define VIPS_TYPE_OPERATION_ROUND (vips_operation_round_get_type())
|
|
||||||
VIPS_API
|
|
||||||
GType vips_operation_relational_get_type(void) G_GNUC_CONST;
|
|
||||||
#define VIPS_TYPE_OPERATION_RELATIONAL (vips_operation_relational_get_type())
|
|
||||||
VIPS_API
|
|
||||||
GType vips_operation_boolean_get_type(void) G_GNUC_CONST;
|
|
||||||
#define VIPS_TYPE_OPERATION_BOOLEAN (vips_operation_boolean_get_type())
|
|
||||||
VIPS_API
|
|
||||||
GType vips_operation_complex_get_type(void) G_GNUC_CONST;
|
|
||||||
#define VIPS_TYPE_OPERATION_COMPLEX (vips_operation_complex_get_type())
|
|
||||||
VIPS_API
|
|
||||||
GType vips_operation_complex2_get_type(void) G_GNUC_CONST;
|
|
||||||
#define VIPS_TYPE_OPERATION_COMPLEX2 (vips_operation_complex2_get_type())
|
|
||||||
VIPS_API
|
|
||||||
GType vips_operation_complexget_get_type(void) G_GNUC_CONST;
|
|
||||||
#define VIPS_TYPE_OPERATION_COMPLEXGET (vips_operation_complexget_get_type())
|
|
||||||
/* enumerations from "basic.h" */
|
|
||||||
VIPS_API
|
|
||||||
GType vips_precision_get_type(void) G_GNUC_CONST;
|
|
||||||
#define VIPS_TYPE_PRECISION (vips_precision_get_type())
|
|
||||||
/* enumerations from "colour.h" */
|
|
||||||
VIPS_API
|
|
||||||
GType vips_intent_get_type(void) G_GNUC_CONST;
|
|
||||||
#define VIPS_TYPE_INTENT (vips_intent_get_type())
|
|
||||||
VIPS_API
|
|
||||||
GType vips_pcs_get_type(void) G_GNUC_CONST;
|
|
||||||
#define VIPS_TYPE_PCS (vips_pcs_get_type())
|
|
||||||
/* enumerations from "conversion.h" */
|
|
||||||
VIPS_API
|
|
||||||
GType vips_extend_get_type(void) G_GNUC_CONST;
|
|
||||||
#define VIPS_TYPE_EXTEND (vips_extend_get_type())
|
|
||||||
VIPS_API
|
|
||||||
GType vips_compass_direction_get_type(void) G_GNUC_CONST;
|
|
||||||
#define VIPS_TYPE_COMPASS_DIRECTION (vips_compass_direction_get_type())
|
|
||||||
VIPS_API
|
|
||||||
GType vips_direction_get_type(void) G_GNUC_CONST;
|
|
||||||
#define VIPS_TYPE_DIRECTION (vips_direction_get_type())
|
|
||||||
VIPS_API
|
|
||||||
GType vips_align_get_type(void) G_GNUC_CONST;
|
|
||||||
#define VIPS_TYPE_ALIGN (vips_align_get_type())
|
|
||||||
VIPS_API
|
|
||||||
GType vips_angle_get_type(void) G_GNUC_CONST;
|
|
||||||
#define VIPS_TYPE_ANGLE (vips_angle_get_type())
|
|
||||||
VIPS_API
|
|
||||||
GType vips_angle45_get_type(void) G_GNUC_CONST;
|
|
||||||
#define VIPS_TYPE_ANGLE45 (vips_angle45_get_type())
|
|
||||||
VIPS_API
|
|
||||||
GType vips_interesting_get_type(void) G_GNUC_CONST;
|
|
||||||
#define VIPS_TYPE_INTERESTING (vips_interesting_get_type())
|
|
||||||
VIPS_API
|
|
||||||
GType vips_blend_mode_get_type(void) G_GNUC_CONST;
|
|
||||||
#define VIPS_TYPE_BLEND_MODE (vips_blend_mode_get_type())
|
|
||||||
/* enumerations from "convolution.h" */
|
|
||||||
VIPS_API
|
|
||||||
GType vips_combine_get_type(void) G_GNUC_CONST;
|
|
||||||
#define VIPS_TYPE_COMBINE (vips_combine_get_type())
|
|
||||||
/* enumerations from "create.h" */
|
|
||||||
VIPS_API
|
|
||||||
GType vips_text_wrap_get_type(void) G_GNUC_CONST;
|
|
||||||
#define VIPS_TYPE_TEXT_WRAP (vips_text_wrap_get_type())
|
|
||||||
VIPS_API
|
|
||||||
GType vips_sdf_shape_get_type(void) G_GNUC_CONST;
|
|
||||||
#define VIPS_TYPE_SDF_SHAPE (vips_sdf_shape_get_type())
|
|
||||||
/* enumerations from "draw.h" */
|
|
||||||
VIPS_API
|
|
||||||
GType vips_combine_mode_get_type(void) G_GNUC_CONST;
|
|
||||||
#define VIPS_TYPE_COMBINE_MODE (vips_combine_mode_get_type())
|
|
||||||
/* enumerations from "foreign.h" */
|
|
||||||
VIPS_API
|
|
||||||
GType vips_foreign_flags_get_type(void) G_GNUC_CONST;
|
|
||||||
#define VIPS_TYPE_FOREIGN_FLAGS (vips_foreign_flags_get_type())
|
|
||||||
VIPS_API
|
|
||||||
GType vips_fail_on_get_type(void) G_GNUC_CONST;
|
|
||||||
#define VIPS_TYPE_FAIL_ON (vips_fail_on_get_type())
|
|
||||||
VIPS_API
|
|
||||||
GType vips_saveable_get_type(void) G_GNUC_CONST;
|
|
||||||
#define VIPS_TYPE_SAVEABLE (vips_saveable_get_type())
|
|
||||||
VIPS_API
|
|
||||||
GType vips_foreign_keep_get_type(void) G_GNUC_CONST;
|
|
||||||
#define VIPS_TYPE_FOREIGN_KEEP (vips_foreign_keep_get_type())
|
|
||||||
VIPS_API
|
|
||||||
GType vips_foreign_subsample_get_type(void) G_GNUC_CONST;
|
|
||||||
#define VIPS_TYPE_FOREIGN_SUBSAMPLE (vips_foreign_subsample_get_type())
|
|
||||||
VIPS_API
|
|
||||||
GType vips_foreign_webp_preset_get_type(void) G_GNUC_CONST;
|
|
||||||
#define VIPS_TYPE_FOREIGN_WEBP_PRESET (vips_foreign_webp_preset_get_type())
|
|
||||||
VIPS_API
|
|
||||||
GType vips_foreign_tiff_compression_get_type(void) G_GNUC_CONST;
|
|
||||||
#define VIPS_TYPE_FOREIGN_TIFF_COMPRESSION (vips_foreign_tiff_compression_get_type())
|
|
||||||
VIPS_API
|
|
||||||
GType vips_foreign_tiff_predictor_get_type(void) G_GNUC_CONST;
|
|
||||||
#define VIPS_TYPE_FOREIGN_TIFF_PREDICTOR (vips_foreign_tiff_predictor_get_type())
|
|
||||||
VIPS_API
|
|
||||||
GType vips_foreign_tiff_resunit_get_type(void) G_GNUC_CONST;
|
|
||||||
#define VIPS_TYPE_FOREIGN_TIFF_RESUNIT (vips_foreign_tiff_resunit_get_type())
|
|
||||||
VIPS_API
|
|
||||||
GType vips_foreign_png_filter_get_type(void) G_GNUC_CONST;
|
|
||||||
#define VIPS_TYPE_FOREIGN_PNG_FILTER (vips_foreign_png_filter_get_type())
|
|
||||||
VIPS_API
|
|
||||||
GType vips_foreign_ppm_format_get_type(void) G_GNUC_CONST;
|
|
||||||
#define VIPS_TYPE_FOREIGN_PPM_FORMAT (vips_foreign_ppm_format_get_type())
|
|
||||||
VIPS_API
|
|
||||||
GType vips_foreign_dz_layout_get_type(void) G_GNUC_CONST;
|
|
||||||
#define VIPS_TYPE_FOREIGN_DZ_LAYOUT (vips_foreign_dz_layout_get_type())
|
|
||||||
VIPS_API
|
|
||||||
GType vips_foreign_dz_depth_get_type(void) G_GNUC_CONST;
|
|
||||||
#define VIPS_TYPE_FOREIGN_DZ_DEPTH (vips_foreign_dz_depth_get_type())
|
|
||||||
VIPS_API
|
|
||||||
GType vips_foreign_dz_container_get_type(void) G_GNUC_CONST;
|
|
||||||
#define VIPS_TYPE_FOREIGN_DZ_CONTAINER (vips_foreign_dz_container_get_type())
|
|
||||||
VIPS_API
|
|
||||||
GType vips_foreign_heif_compression_get_type(void) G_GNUC_CONST;
|
|
||||||
#define VIPS_TYPE_FOREIGN_HEIF_COMPRESSION (vips_foreign_heif_compression_get_type())
|
|
||||||
VIPS_API
|
|
||||||
GType vips_foreign_heif_encoder_get_type(void) G_GNUC_CONST;
|
|
||||||
#define VIPS_TYPE_FOREIGN_HEIF_ENCODER (vips_foreign_heif_encoder_get_type())
|
|
||||||
/* enumerations from "image.h" */
|
|
||||||
VIPS_API
|
|
||||||
GType vips_demand_style_get_type(void) G_GNUC_CONST;
|
|
||||||
#define VIPS_TYPE_DEMAND_STYLE (vips_demand_style_get_type())
|
|
||||||
VIPS_API
|
|
||||||
GType vips_image_type_get_type(void) G_GNUC_CONST;
|
|
||||||
#define VIPS_TYPE_IMAGE_TYPE (vips_image_type_get_type())
|
|
||||||
VIPS_API
|
|
||||||
GType vips_interpretation_get_type(void) G_GNUC_CONST;
|
|
||||||
#define VIPS_TYPE_INTERPRETATION (vips_interpretation_get_type())
|
|
||||||
VIPS_API
|
|
||||||
GType vips_band_format_get_type(void) G_GNUC_CONST;
|
|
||||||
#define VIPS_TYPE_BAND_FORMAT (vips_band_format_get_type())
|
|
||||||
VIPS_API
|
|
||||||
GType vips_coding_get_type(void) G_GNUC_CONST;
|
|
||||||
#define VIPS_TYPE_CODING (vips_coding_get_type())
|
|
||||||
VIPS_API
|
|
||||||
GType vips_access_get_type(void) G_GNUC_CONST;
|
|
||||||
#define VIPS_TYPE_ACCESS (vips_access_get_type())
|
|
||||||
/* enumerations from "morphology.h" */
|
|
||||||
VIPS_API
|
|
||||||
GType vips_operation_morphology_get_type(void) G_GNUC_CONST;
|
|
||||||
#define VIPS_TYPE_OPERATION_MORPHOLOGY (vips_operation_morphology_get_type())
|
|
||||||
/* enumerations from "object.h" */
|
|
||||||
VIPS_API
|
|
||||||
GType vips_argument_flags_get_type(void) G_GNUC_CONST;
|
|
||||||
#define VIPS_TYPE_ARGUMENT_FLAGS (vips_argument_flags_get_type())
|
|
||||||
/* enumerations from "operation.h" */
|
|
||||||
VIPS_API
|
|
||||||
GType vips_operation_flags_get_type(void) G_GNUC_CONST;
|
|
||||||
#define VIPS_TYPE_OPERATION_FLAGS (vips_operation_flags_get_type())
|
|
||||||
/* enumerations from "region.h" */
|
|
||||||
VIPS_API
|
|
||||||
GType vips_region_shrink_get_type(void) G_GNUC_CONST;
|
|
||||||
#define VIPS_TYPE_REGION_SHRINK (vips_region_shrink_get_type())
|
|
||||||
/* enumerations from "resample.h" */
|
|
||||||
VIPS_API
|
|
||||||
GType vips_kernel_get_type(void) G_GNUC_CONST;
|
|
||||||
#define VIPS_TYPE_KERNEL (vips_kernel_get_type())
|
|
||||||
VIPS_API
|
|
||||||
GType vips_size_get_type(void) G_GNUC_CONST;
|
|
||||||
#define VIPS_TYPE_SIZE (vips_size_get_type())
|
|
||||||
/* enumerations from "util.h" */
|
|
||||||
VIPS_API
|
|
||||||
GType vips_token_get_type(void) G_GNUC_CONST;
|
|
||||||
#define VIPS_TYPE_TOKEN (vips_token_get_type())
|
|
||||||
G_END_DECLS
|
|
||||||
|
|
||||||
#endif /*VIPS_ENUM_TYPES_H*/
|
|
||||||
|
|
||||||
/* Generated data ends here */
|
|
||||||
|
|
||||||
@@ -1,142 +0,0 @@
|
|||||||
/* Error handling.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
Copyright (C) 1991-2005 The National Gallery
|
|
||||||
|
|
||||||
This library is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU Lesser General Public
|
|
||||||
License as published by the Free Software Foundation; either
|
|
||||||
version 2.1 of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This library is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public
|
|
||||||
License along with this library; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
||||||
02110-1301 USA
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef VIPS_ERROR_H
|
|
||||||
#define VIPS_ERROR_H
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
const char *vips_error_buffer(void);
|
|
||||||
VIPS_API
|
|
||||||
char *vips_error_buffer_copy(void);
|
|
||||||
VIPS_API
|
|
||||||
void vips_error_clear(void);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
void vips_error_freeze(void);
|
|
||||||
VIPS_API
|
|
||||||
void vips_error_thaw(void);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
void vips_error(const char *domain, const char *fmt, ...)
|
|
||||||
G_GNUC_PRINTF(2, 3);
|
|
||||||
VIPS_API
|
|
||||||
void vips_verror(const char *domain, const char *fmt, va_list ap);
|
|
||||||
VIPS_API
|
|
||||||
void vips_error_system(int err, const char *domain, const char *fmt, ...)
|
|
||||||
G_GNUC_PRINTF(3, 4);
|
|
||||||
VIPS_API
|
|
||||||
void vips_verror_system(int err, const char *domain,
|
|
||||||
const char *fmt, va_list ap);
|
|
||||||
VIPS_API
|
|
||||||
void vips_error_g(GError **error);
|
|
||||||
VIPS_API
|
|
||||||
void vips_g_error(GError **error);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
void vips_error_exit(const char *fmt, ...)
|
|
||||||
G_GNUC_NORETURN G_GNUC_PRINTF(1, 2);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_check_uncoded(const char *domain, VipsImage *im);
|
|
||||||
VIPS_API
|
|
||||||
int vips_check_coding(const char *domain, VipsImage *im, VipsCoding coding);
|
|
||||||
VIPS_API
|
|
||||||
int vips_check_coding_known(const char *domain, VipsImage *im);
|
|
||||||
VIPS_API
|
|
||||||
int vips_check_coding_noneorlabq(const char *domain, VipsImage *im);
|
|
||||||
VIPS_API
|
|
||||||
int vips_check_coding_same(const char *domain, VipsImage *im1, VipsImage *im2);
|
|
||||||
VIPS_API
|
|
||||||
int vips_check_mono(const char *domain, VipsImage *im);
|
|
||||||
VIPS_API
|
|
||||||
int vips_check_bands(const char *domain, VipsImage *im, int bands);
|
|
||||||
VIPS_API
|
|
||||||
int vips_check_bands_1or3(const char *domain, VipsImage *im);
|
|
||||||
VIPS_API
|
|
||||||
int vips_check_bands_atleast(const char *domain, VipsImage *im, int bands);
|
|
||||||
VIPS_API
|
|
||||||
int vips_check_bands_1orn(const char *domain, VipsImage *im1, VipsImage *im2);
|
|
||||||
VIPS_API
|
|
||||||
int vips_check_bands_1orn_unary(const char *domain, VipsImage *im, int n);
|
|
||||||
VIPS_API
|
|
||||||
int vips_check_bands_same(const char *domain, VipsImage *im1, VipsImage *im2);
|
|
||||||
VIPS_API
|
|
||||||
int vips_check_bandno(const char *domain, VipsImage *im, int bandno);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_check_int(const char *domain, VipsImage *im);
|
|
||||||
VIPS_API
|
|
||||||
int vips_check_uint(const char *domain, VipsImage *im);
|
|
||||||
VIPS_API
|
|
||||||
int vips_check_uintorf(const char *domain, VipsImage *im);
|
|
||||||
VIPS_API
|
|
||||||
int vips_check_noncomplex(const char *domain, VipsImage *im);
|
|
||||||
VIPS_API
|
|
||||||
int vips_check_complex(const char *domain, VipsImage *im);
|
|
||||||
VIPS_API
|
|
||||||
int vips_check_twocomponents(const char *domain, VipsImage *im);
|
|
||||||
VIPS_API
|
|
||||||
int vips_check_format(const char *domain, VipsImage *im, VipsBandFormat fmt);
|
|
||||||
VIPS_API
|
|
||||||
int vips_check_u8or16(const char *domain, VipsImage *im);
|
|
||||||
VIPS_API
|
|
||||||
int vips_check_8or16(const char *domain, VipsImage *im);
|
|
||||||
VIPS_API
|
|
||||||
int vips_check_u8or16orf(const char *domain, VipsImage *im);
|
|
||||||
VIPS_API
|
|
||||||
int vips_check_format_same(const char *domain, VipsImage *im1, VipsImage *im2);
|
|
||||||
VIPS_API
|
|
||||||
int vips_check_size_same(const char *domain, VipsImage *im1, VipsImage *im2);
|
|
||||||
VIPS_API
|
|
||||||
int vips_check_oddsquare(const char *domain, VipsImage *im);
|
|
||||||
VIPS_API
|
|
||||||
int vips_check_vector_length(const char *domain, int n, int len);
|
|
||||||
VIPS_API
|
|
||||||
int vips_check_vector(const char *domain, int n, VipsImage *im);
|
|
||||||
VIPS_API
|
|
||||||
int vips_check_hist(const char *domain, VipsImage *im);
|
|
||||||
VIPS_API
|
|
||||||
int vips_check_matrix(const char *domain, VipsImage *im, VipsImage **out);
|
|
||||||
VIPS_API
|
|
||||||
int vips_check_separable(const char *domain, VipsImage *im);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_check_precision_intfloat(const char *domain,
|
|
||||||
VipsPrecision precision);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
#endif /*VIPS_ERROR_H*/
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,135 +0,0 @@
|
|||||||
/* Base type for supported image formats. Subclass this to add a new
|
|
||||||
* format.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
This file is part of VIPS.
|
|
||||||
|
|
||||||
VIPS is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
||||||
02110-1301 USA
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef VIPS_FORMAT_H
|
|
||||||
#define VIPS_FORMAT_H
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
#define VIPS_TYPE_FORMAT (vips_format_get_type())
|
|
||||||
#define VIPS_FORMAT(obj) \
|
|
||||||
(G_TYPE_CHECK_INSTANCE_CAST((obj), \
|
|
||||||
VIPS_TYPE_FORMAT, VipsFormat))
|
|
||||||
#define VIPS_FORMAT_CLASS(klass) \
|
|
||||||
(G_TYPE_CHECK_CLASS_CAST((klass), \
|
|
||||||
VIPS_TYPE_FORMAT, VipsFormatClass))
|
|
||||||
#define VIPS_IS_FORMAT(obj) \
|
|
||||||
(G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_FORMAT))
|
|
||||||
#define VIPS_IS_FORMAT_CLASS(klass) \
|
|
||||||
(G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_FORMAT))
|
|
||||||
#define VIPS_FORMAT_GET_CLASS(obj) \
|
|
||||||
(G_TYPE_INSTANCE_GET_CLASS((obj), \
|
|
||||||
VIPS_TYPE_FORMAT, VipsFormatClass))
|
|
||||||
|
|
||||||
/* Image file properties.
|
|
||||||
*/
|
|
||||||
typedef enum {
|
|
||||||
VIPS_FORMAT_NONE = 0, /* No flags set */
|
|
||||||
VIPS_FORMAT_PARTIAL = 1, /* Lazy read OK (eg. tiled tiff) */
|
|
||||||
VIPS_FORMAT_BIGENDIAN = 2 /* Most-significant byte first */
|
|
||||||
} VipsFormatFlags;
|
|
||||||
|
|
||||||
/* Don't instantiate these things, just use the class stuff.
|
|
||||||
*/
|
|
||||||
|
|
||||||
typedef struct _VipsFormat {
|
|
||||||
VipsObject parent_object;
|
|
||||||
/*< public >*/
|
|
||||||
|
|
||||||
} VipsFormat;
|
|
||||||
|
|
||||||
typedef struct _VipsFormatClass {
|
|
||||||
VipsObjectClass parent_class;
|
|
||||||
|
|
||||||
/*< public >*/
|
|
||||||
/* Is a file in this format.
|
|
||||||
*/
|
|
||||||
gboolean (*is_a)(const char *);
|
|
||||||
|
|
||||||
/* Read just the header into the VipsImage.
|
|
||||||
*/
|
|
||||||
int (*header)(const char *, VipsImage *);
|
|
||||||
|
|
||||||
/* Load the whole image.
|
|
||||||
*/
|
|
||||||
int (*load)(const char *, VipsImage *);
|
|
||||||
|
|
||||||
/* Write the VipsImage to the file in this format.
|
|
||||||
*/
|
|
||||||
int (*save)(VipsImage *, const char *);
|
|
||||||
|
|
||||||
/* Get the flags for this file in this format.
|
|
||||||
*/
|
|
||||||
VipsFormatFlags (*get_flags)(const char *);
|
|
||||||
|
|
||||||
/* Loop over formats in this order, default 0. We need this because
|
|
||||||
* some formats can be read by several loaders (eg. tiff can be read
|
|
||||||
* by the libMagick loader as well as by the tiff loader), and we want
|
|
||||||
* to make sure the better loader comes first.
|
|
||||||
*/
|
|
||||||
int priority;
|
|
||||||
|
|
||||||
/* Null-terminated list of allowed suffixes, eg. ".tif", ".tiff".
|
|
||||||
*/
|
|
||||||
const char **suffs;
|
|
||||||
} VipsFormatClass;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
GType vips_format_get_type(void);
|
|
||||||
|
|
||||||
/* Map over and find formats. This uses type introspection to loop over
|
|
||||||
* subclasses of VipsFormat.
|
|
||||||
*/
|
|
||||||
VIPS_API
|
|
||||||
void *vips_format_map(VipsSListMap2Fn fn, void *a, void *b);
|
|
||||||
VIPS_API
|
|
||||||
VipsFormatClass *vips_format_for_file(const char *filename);
|
|
||||||
VIPS_API
|
|
||||||
VipsFormatClass *vips_format_for_name(const char *filename);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
VipsFormatFlags vips_format_get_flags(VipsFormatClass *format,
|
|
||||||
const char *filename);
|
|
||||||
|
|
||||||
/* Read/write an image convenience functions.
|
|
||||||
*/
|
|
||||||
VIPS_API
|
|
||||||
int vips_format_read(const char *filename, VipsImage *out);
|
|
||||||
VIPS_API
|
|
||||||
int vips_format_write(VipsImage *in, const char *filename);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
#endif /*VIPS_FORMAT_H*/
|
|
||||||
@@ -1,64 +0,0 @@
|
|||||||
/* freq_filt.h
|
|
||||||
*
|
|
||||||
* 2/11/09
|
|
||||||
* - from proto.h
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
This file is part of VIPS.
|
|
||||||
|
|
||||||
VIPS is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
||||||
02110-1301 USA
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef VIPS_FREQFILT_H
|
|
||||||
#define VIPS_FREQFILT_H
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_fwfft(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_invfft(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_freqmult(VipsImage *in, VipsImage *mask, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_spectrum(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_phasecor(VipsImage *in1, VipsImage *in2, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
#endif /*VIPS_FREQFILT_H*/
|
|
||||||
@@ -1,90 +0,0 @@
|
|||||||
/* Thread profiling.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
This file is part of VIPS.
|
|
||||||
|
|
||||||
VIPS is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
||||||
02110-1301 USA
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef VIPS_GATE_H
|
|
||||||
#define VIPS_GATE_H
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
#include <vips/vips.h>
|
|
||||||
|
|
||||||
#define VIPS_GATE_START(NAME) \
|
|
||||||
G_STMT_START \
|
|
||||||
{ \
|
|
||||||
if (vips__thread_profile) \
|
|
||||||
vips__thread_gate_start(NAME); \
|
|
||||||
} \
|
|
||||||
G_STMT_END
|
|
||||||
|
|
||||||
#define VIPS_GATE_STOP(NAME) \
|
|
||||||
G_STMT_START \
|
|
||||||
{ \
|
|
||||||
if (vips__thread_profile) \
|
|
||||||
vips__thread_gate_stop(NAME); \
|
|
||||||
} \
|
|
||||||
G_STMT_END
|
|
||||||
|
|
||||||
#define VIPS_GATE_MALLOC(SIZE) \
|
|
||||||
G_STMT_START \
|
|
||||||
{ \
|
|
||||||
if (vips__thread_profile) \
|
|
||||||
vips__thread_malloc_free((gint64) (SIZE)); \
|
|
||||||
} \
|
|
||||||
G_STMT_END
|
|
||||||
|
|
||||||
#define VIPS_GATE_FREE(SIZE) \
|
|
||||||
G_STMT_START \
|
|
||||||
{ \
|
|
||||||
if (vips__thread_profile) \
|
|
||||||
vips__thread_malloc_free(-((gint64) (SIZE))); \
|
|
||||||
} \
|
|
||||||
G_STMT_END
|
|
||||||
|
|
||||||
extern gboolean vips__thread_profile;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
void vips_profile_set(gboolean profile);
|
|
||||||
|
|
||||||
void vips__thread_profile_attach(const char *thread_name);
|
|
||||||
void vips__thread_profile_detach(void);
|
|
||||||
void vips__thread_profile_stop(void);
|
|
||||||
|
|
||||||
void vips__thread_gate_start(const char *gate_name);
|
|
||||||
void vips__thread_gate_stop(const char *gate_name);
|
|
||||||
|
|
||||||
void vips__thread_malloc_free(gint64 size);
|
|
||||||
|
|
||||||
#endif /*VIPS_GATE_H*/
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
@@ -1,92 +0,0 @@
|
|||||||
/* Generate pixels.
|
|
||||||
*
|
|
||||||
* J.Cupitt, 8/4/93
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
This file is part of VIPS.
|
|
||||||
|
|
||||||
VIPS is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
||||||
02110-1301 USA
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef VIPS_GENERATE_H
|
|
||||||
#define VIPS_GENERATE_H
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
typedef int (*VipsRegionWrite)(VipsRegion *region, VipsRect *area, void *a);
|
|
||||||
VIPS_API
|
|
||||||
int vips_sink_disc(VipsImage *im, VipsRegionWrite write_fn, void *a);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_sink(VipsImage *im,
|
|
||||||
VipsStartFn start_fn, VipsGenerateFn generate_fn, VipsStopFn stop_fn,
|
|
||||||
void *a, void *b);
|
|
||||||
VIPS_API
|
|
||||||
int vips_sink_tile(VipsImage *im,
|
|
||||||
int tile_width, int tile_height,
|
|
||||||
VipsStartFn start_fn, VipsGenerateFn generate_fn, VipsStopFn stop_fn,
|
|
||||||
void *a, void *b);
|
|
||||||
|
|
||||||
typedef void (*VipsSinkNotify)(VipsImage *im, VipsRect *rect, void *a);
|
|
||||||
VIPS_API
|
|
||||||
int vips_sink_screen(VipsImage *in, VipsImage *out, VipsImage *mask,
|
|
||||||
int tile_width, int tile_height, int max_tiles,
|
|
||||||
int priority,
|
|
||||||
VipsSinkNotify notify_fn, void *a);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_sink_memory(VipsImage *im);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
void *vips_start_one(VipsImage *out, void *a, void *b);
|
|
||||||
VIPS_API
|
|
||||||
int vips_stop_one(void *seq, void *a, void *b);
|
|
||||||
VIPS_API
|
|
||||||
void *vips_start_many(VipsImage *out, void *a, void *b);
|
|
||||||
VIPS_API
|
|
||||||
int vips_stop_many(void *seq, void *a, void *b);
|
|
||||||
VIPS_API
|
|
||||||
VipsImage **vips_allocate_input_array(VipsImage *out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_image_generate(VipsImage *image,
|
|
||||||
VipsStartFn start_fn, VipsGenerateFn generate_fn, VipsStopFn stop_fn,
|
|
||||||
void *a, void *b);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_image_pipeline_array(VipsImage *image,
|
|
||||||
VipsDemandStyle hint, VipsImage **in);
|
|
||||||
VIPS_API
|
|
||||||
int vips_image_pipelinev(VipsImage *image, VipsDemandStyle hint, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
#endif /*VIPS_GENERATE_H*/
|
|
||||||
@@ -1,329 +0,0 @@
|
|||||||
/* image header funcs
|
|
||||||
*
|
|
||||||
* 20/9/09
|
|
||||||
* - from proto.h
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
This file is part of VIPS.
|
|
||||||
|
|
||||||
VIPS is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
||||||
02110-1301 USA
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef VIPS_HEADER_H
|
|
||||||
#define VIPS_HEADER_H
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* VIPS_META_EXIF_NAME:
|
|
||||||
*
|
|
||||||
* The name that read and write operations use for the image's EXIF data.
|
|
||||||
*/
|
|
||||||
#define VIPS_META_EXIF_NAME "exif-data"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* VIPS_META_XMP_NAME:
|
|
||||||
*
|
|
||||||
* The name that read and write operations use for the image's XMP data.
|
|
||||||
*/
|
|
||||||
#define VIPS_META_XMP_NAME "xmp-data"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* VIPS_META_IPTC_NAME:
|
|
||||||
*
|
|
||||||
* The name that read and write operations use for the image's IPTC data.
|
|
||||||
*/
|
|
||||||
#define VIPS_META_IPTC_NAME "iptc-data"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* VIPS_META_PHOTOSHOP_NAME:
|
|
||||||
*
|
|
||||||
* The name that TIFF read and write operations use for the image's
|
|
||||||
* TIFFTAG_PHOTOSHOP data.
|
|
||||||
*/
|
|
||||||
#define VIPS_META_PHOTOSHOP_NAME "photoshop-data"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* VIPS_META_ICC_NAME:
|
|
||||||
*
|
|
||||||
* The name we use to attach an ICC profile. The file read and write
|
|
||||||
* operations for TIFF, JPEG, PNG and others use this item of metadata to
|
|
||||||
* attach and save ICC profiles. The profile is updated by the
|
|
||||||
* vips_icc_transform() operations.
|
|
||||||
*/
|
|
||||||
#define VIPS_META_ICC_NAME "icc-profile-data"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* VIPS_META_IMAGEDESCRIPTION:
|
|
||||||
*
|
|
||||||
* The IMAGEDESCRIPTION tag. Often has useful metadata.
|
|
||||||
*/
|
|
||||||
#define VIPS_META_IMAGEDESCRIPTION "image-description"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* VIPS_META_RESOLUTION_UNIT:
|
|
||||||
*
|
|
||||||
* The JPEG and TIFF read and write operations use this to record the
|
|
||||||
* file's preferred unit for resolution.
|
|
||||||
*/
|
|
||||||
#define VIPS_META_RESOLUTION_UNIT "resolution-unit"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* VIPS_META_BITS_PER_SAMPLE:
|
|
||||||
*
|
|
||||||
* The bits per sample for each channel.
|
|
||||||
*/
|
|
||||||
#define VIPS_META_BITS_PER_SAMPLE "bits-per-sample"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* VIPS_META_PALETTE:
|
|
||||||
*
|
|
||||||
* Does this image have a palette?
|
|
||||||
*/
|
|
||||||
#define VIPS_META_PALETTE "palette"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* VIPS_META_LOADER:
|
|
||||||
*
|
|
||||||
* Record the name of the original loader here. Handy for hinting file formats
|
|
||||||
* and for debugging.
|
|
||||||
*/
|
|
||||||
#define VIPS_META_LOADER "vips-loader"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* VIPS_META_SEQUENTIAL:
|
|
||||||
*
|
|
||||||
* Images loaded via vips_sequential() have this int field defined. Some
|
|
||||||
* operations (eg. vips_shrinkv()) add extra caches if they see it on their
|
|
||||||
* input.
|
|
||||||
*/
|
|
||||||
#define VIPS_META_SEQUENTIAL "vips-sequential"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* VIPS_META_ORIENTATION:
|
|
||||||
*
|
|
||||||
* The orientation tag for this image. An int from 1 - 8 using the standard
|
|
||||||
* exif/tiff meanings.
|
|
||||||
*
|
|
||||||
* * 1 - The 0th row represents the visual top of the image, and the 0th column
|
|
||||||
* represents the visual left-hand side.
|
|
||||||
* * 2 - The 0th row represents the visual top of the image, and the 0th column
|
|
||||||
* represents the visual right-hand side.
|
|
||||||
* * 3 - The 0th row represents the visual bottom of the image, and the 0th
|
|
||||||
* column represents the visual right-hand side.
|
|
||||||
* * 4 - The 0th row represents the visual bottom of the image, and the 0th
|
|
||||||
* column represents the visual left-hand side.
|
|
||||||
* * 5 - The 0th row represents the visual left-hand side of the image, and the
|
|
||||||
* 0th column represents the visual top.
|
|
||||||
* * 6 - The 0th row represents the visual right-hand side of the image, and the
|
|
||||||
* 0th column represents the visual top.
|
|
||||||
* * 7 - The 0th row represents the visual right-hand side of the image, and the
|
|
||||||
* 0th column represents the visual bottom.
|
|
||||||
* * 8 - The 0th row represents the visual left-hand side of the image, and the
|
|
||||||
* 0th column represents the visual bottom.
|
|
||||||
*/
|
|
||||||
#define VIPS_META_ORIENTATION "orientation"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* VIPS_META_PAGE_HEIGHT:
|
|
||||||
*
|
|
||||||
* If set, the height of each page when this image was loaded. If you save an
|
|
||||||
* image with "page-height" set to a format that supports multiple pages, such
|
|
||||||
* as tiff, the image will be saved as a series of pages.
|
|
||||||
*/
|
|
||||||
#define VIPS_META_PAGE_HEIGHT "page-height"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* VIPS_META_N_PAGES:
|
|
||||||
*
|
|
||||||
* If set, the number of pages in the original file.
|
|
||||||
*/
|
|
||||||
#define VIPS_META_N_PAGES "n-pages"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* VIPS_META_N_SUBIFDS:
|
|
||||||
*
|
|
||||||
* If set, the number of subifds in the first page of the file.
|
|
||||||
*/
|
|
||||||
#define VIPS_META_N_SUBIFDS "n-subifds"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* VIPS_META_CONCURRENCY:
|
|
||||||
*
|
|
||||||
* If set, the suggested concurrency for this image.
|
|
||||||
*/
|
|
||||||
#define VIPS_META_CONCURRENCY "concurrency"
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
guint64 vips_format_sizeof(VipsBandFormat format);
|
|
||||||
VIPS_API
|
|
||||||
guint64 vips_format_sizeof_unsafe(VipsBandFormat format);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
double vips_interpretation_max_alpha(VipsInterpretation interpretation);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_image_get_width(const VipsImage *image);
|
|
||||||
VIPS_API
|
|
||||||
int vips_image_get_height(const VipsImage *image);
|
|
||||||
VIPS_API
|
|
||||||
int vips_image_get_bands(const VipsImage *image);
|
|
||||||
VIPS_API
|
|
||||||
VipsBandFormat vips_image_get_format(const VipsImage *image);
|
|
||||||
VIPS_API
|
|
||||||
double vips_image_get_format_max(VipsBandFormat format);
|
|
||||||
VIPS_API
|
|
||||||
VipsBandFormat vips_image_guess_format(const VipsImage *image);
|
|
||||||
VIPS_API
|
|
||||||
VipsCoding vips_image_get_coding(const VipsImage *image);
|
|
||||||
VIPS_API
|
|
||||||
VipsInterpretation vips_image_get_interpretation(const VipsImage *image);
|
|
||||||
VIPS_API
|
|
||||||
VipsInterpretation vips_image_guess_interpretation(const VipsImage *image);
|
|
||||||
VIPS_API
|
|
||||||
double vips_image_get_xres(const VipsImage *image);
|
|
||||||
VIPS_API
|
|
||||||
double vips_image_get_yres(const VipsImage *image);
|
|
||||||
VIPS_API
|
|
||||||
int vips_image_get_xoffset(const VipsImage *image);
|
|
||||||
VIPS_API
|
|
||||||
int vips_image_get_yoffset(const VipsImage *image);
|
|
||||||
VIPS_API
|
|
||||||
const char *vips_image_get_filename(const VipsImage *image);
|
|
||||||
VIPS_API
|
|
||||||
const char *vips_image_get_mode(const VipsImage *image);
|
|
||||||
VIPS_API
|
|
||||||
double vips_image_get_scale(const VipsImage *image);
|
|
||||||
VIPS_API
|
|
||||||
double vips_image_get_offset(const VipsImage *image);
|
|
||||||
VIPS_API
|
|
||||||
int vips_image_get_page_height(VipsImage *image);
|
|
||||||
VIPS_API
|
|
||||||
int vips_image_get_n_pages(VipsImage *image);
|
|
||||||
VIPS_API
|
|
||||||
int vips_image_get_n_subifds(VipsImage *image);
|
|
||||||
VIPS_API
|
|
||||||
int vips_image_get_orientation(VipsImage *image);
|
|
||||||
VIPS_API
|
|
||||||
gboolean vips_image_get_orientation_swap(VipsImage *image);
|
|
||||||
VIPS_API
|
|
||||||
int vips_image_get_concurrency(VipsImage *image, int default_concurrency);
|
|
||||||
VIPS_API
|
|
||||||
const void *vips_image_get_data(VipsImage *image);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
void vips_image_init_fields(VipsImage *image,
|
|
||||||
int xsize, int ysize, int bands,
|
|
||||||
VipsBandFormat format, VipsCoding coding,
|
|
||||||
VipsInterpretation interpretation,
|
|
||||||
double xres, double yres);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
void vips_image_set(VipsImage *image, const char *name, GValue *value);
|
|
||||||
VIPS_API
|
|
||||||
int vips_image_get(const VipsImage *image,
|
|
||||||
const char *name, GValue *value_copy);
|
|
||||||
VIPS_API
|
|
||||||
int vips_image_get_as_string(const VipsImage *image,
|
|
||||||
const char *name, char **out);
|
|
||||||
VIPS_API
|
|
||||||
GType vips_image_get_typeof(const VipsImage *image, const char *name);
|
|
||||||
VIPS_API
|
|
||||||
gboolean vips_image_remove(VipsImage *image, const char *name);
|
|
||||||
typedef void *(*VipsImageMapFn)(VipsImage *image,
|
|
||||||
const char *name, GValue *value, void *a);
|
|
||||||
VIPS_API
|
|
||||||
void *vips_image_map(VipsImage *image, VipsImageMapFn fn, void *a);
|
|
||||||
VIPS_API
|
|
||||||
gchar **vips_image_get_fields(VipsImage *image);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
void vips_image_set_area(VipsImage *image,
|
|
||||||
const char *name, VipsCallbackFn free_fn, void *data);
|
|
||||||
VIPS_API
|
|
||||||
int vips_image_get_area(const VipsImage *image,
|
|
||||||
const char *name, const void **data);
|
|
||||||
VIPS_API
|
|
||||||
void vips_image_set_blob(VipsImage *image,
|
|
||||||
const char *name,
|
|
||||||
VipsCallbackFn free_fn, const void *data, size_t length);
|
|
||||||
VIPS_API
|
|
||||||
void vips_image_set_blob_copy(VipsImage *image,
|
|
||||||
const char *name, const void *data, size_t length);
|
|
||||||
VIPS_API
|
|
||||||
int vips_image_get_blob(const VipsImage *image,
|
|
||||||
const char *name, const void **data, size_t *length);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_image_get_int(const VipsImage *image, const char *name, int *out);
|
|
||||||
VIPS_API
|
|
||||||
void vips_image_set_int(VipsImage *image, const char *name, int i);
|
|
||||||
VIPS_API
|
|
||||||
int vips_image_get_double(const VipsImage *image,
|
|
||||||
const char *name, double *out);
|
|
||||||
VIPS_API
|
|
||||||
void vips_image_set_double(VipsImage *image, const char *name, double d);
|
|
||||||
VIPS_API
|
|
||||||
int vips_image_get_string(const VipsImage *image,
|
|
||||||
const char *name, const char **out);
|
|
||||||
VIPS_API
|
|
||||||
void vips_image_set_string(VipsImage *image,
|
|
||||||
const char *name, const char *str);
|
|
||||||
VIPS_API
|
|
||||||
void vips_image_print_field(const VipsImage *image, const char *name);
|
|
||||||
VIPS_API
|
|
||||||
int vips_image_get_image(const VipsImage *image,
|
|
||||||
const char *name, VipsImage **out);
|
|
||||||
VIPS_API
|
|
||||||
void vips_image_set_image(VipsImage *image, const char *name, VipsImage *im);
|
|
||||||
VIPS_API
|
|
||||||
void vips_image_set_array_int(VipsImage *image, const char *name,
|
|
||||||
const int *array, int n);
|
|
||||||
VIPS_API
|
|
||||||
int vips_image_get_array_int(VipsImage *image, const char *name,
|
|
||||||
int **out, int *n);
|
|
||||||
VIPS_API
|
|
||||||
int vips_image_get_array_double(VipsImage *image, const char *name,
|
|
||||||
double **out, int *n);
|
|
||||||
VIPS_API
|
|
||||||
void vips_image_set_array_double(VipsImage *image, const char *name,
|
|
||||||
const double *array, int n);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_image_history_printf(VipsImage *image, const char *format, ...)
|
|
||||||
G_GNUC_PRINTF(2, 3);
|
|
||||||
VIPS_API
|
|
||||||
int vips_image_history_args(VipsImage *image,
|
|
||||||
const char *name, int argc, char *argv[]);
|
|
||||||
VIPS_API
|
|
||||||
const char *vips_image_get_history(VipsImage *image);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
#endif /*VIPS_HEADER_H*/
|
|
||||||
@@ -1,85 +0,0 @@
|
|||||||
/* histograms_lut.h
|
|
||||||
*
|
|
||||||
* 3/11/09
|
|
||||||
* - from proto.h
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
This file is part of VIPS.
|
|
||||||
|
|
||||||
VIPS is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
||||||
02110-1301 USA
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef VIPS_HISTOGRAM_H
|
|
||||||
#define VIPS_HISTOGRAM_H
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_maplut(VipsImage *in, VipsImage **out, VipsImage *lut, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_percent(VipsImage *in, double percent, int *threshold, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_stdif(VipsImage *in, VipsImage **out, int width, int height, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_hist_cum(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_hist_norm(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_hist_equal(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_hist_plot(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_hist_match(VipsImage *in, VipsImage *ref, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_hist_local(VipsImage *in, VipsImage **out,
|
|
||||||
int width, int height, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_hist_ismonotonic(VipsImage *in, gboolean *out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_hist_entropy(VipsImage *in, double *out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_case(VipsImage *index, VipsImage **cases, VipsImage **out, int n,
|
|
||||||
...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
#endif /*VIPS_HISTOGRAM_H*/
|
|
||||||
@@ -1,610 +0,0 @@
|
|||||||
/* VIPS image class.
|
|
||||||
*
|
|
||||||
* 7/7/09
|
|
||||||
* - from vips.h
|
|
||||||
* 2/3/11
|
|
||||||
* - move to GObject
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
This file is part of VIPS.
|
|
||||||
|
|
||||||
VIPS is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
||||||
02110-1301 USA
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef VIPS_IMAGE_H
|
|
||||||
#define VIPS_IMAGE_H
|
|
||||||
|
|
||||||
#include <glib.h>
|
|
||||||
#include <glib-object.h>
|
|
||||||
#include <vips/object.h>
|
|
||||||
#include <vips/connection.h>
|
|
||||||
#include <vips/rect.h>
|
|
||||||
#include <vips/region.h>
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
/* If you read MSB first, you get these two values.
|
|
||||||
* intel order: byte 0 = b6
|
|
||||||
* SPARC order: byte 0 = 08
|
|
||||||
*/
|
|
||||||
#define VIPS_MAGIC_INTEL (0xb6a6f208U)
|
|
||||||
#define VIPS_MAGIC_SPARC (0x08f2a6b6U)
|
|
||||||
|
|
||||||
/* We have a maximum value for a coordinate at various points for sanity
|
|
||||||
* checking. For example, vips_black() has a max with and height. We use int
|
|
||||||
* for width/height so we could go up to 2bn, but it's good to have a lower
|
|
||||||
* value set so we can see crazy numbers early.
|
|
||||||
*
|
|
||||||
* This can be overridden with the `VIPS_MAX_COORD` env var, or the
|
|
||||||
* `--vips-max-coord` CLI arg.
|
|
||||||
*/
|
|
||||||
#define VIPS_DEFAULT_MAX_COORD (100000000)
|
|
||||||
|
|
||||||
/* Fetch the overridden value.
|
|
||||||
*/
|
|
||||||
#define VIPS_MAX_COORD (vips_max_coord_get())
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
VIPS_DEMAND_STYLE_ERROR = -1,
|
|
||||||
VIPS_DEMAND_STYLE_SMALLTILE,
|
|
||||||
VIPS_DEMAND_STYLE_FATSTRIP,
|
|
||||||
VIPS_DEMAND_STYLE_THINSTRIP,
|
|
||||||
VIPS_DEMAND_STYLE_ANY
|
|
||||||
} VipsDemandStyle;
|
|
||||||
|
|
||||||
/* Types of image descriptor we may have. The type field is advisory only: it
|
|
||||||
* does not imply that any fields in IMAGE have valid data.
|
|
||||||
*/
|
|
||||||
typedef enum {
|
|
||||||
VIPS_IMAGE_ERROR = -1,
|
|
||||||
VIPS_IMAGE_NONE, /* no type set */
|
|
||||||
VIPS_IMAGE_SETBUF, /* malloced memory array */
|
|
||||||
VIPS_IMAGE_SETBUF_FOREIGN, /* memory array, don't free on close */
|
|
||||||
VIPS_IMAGE_OPENIN, /* input from fd with a window */
|
|
||||||
VIPS_IMAGE_MMAPIN, /* memory mapped input file */
|
|
||||||
VIPS_IMAGE_MMAPINRW, /* memory mapped read/write file */
|
|
||||||
VIPS_IMAGE_OPENOUT, /* output to fd */
|
|
||||||
VIPS_IMAGE_PARTIAL /* partial image */
|
|
||||||
} VipsImageType;
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
VIPS_INTERPRETATION_ERROR = -1,
|
|
||||||
VIPS_INTERPRETATION_MULTIBAND = 0,
|
|
||||||
VIPS_INTERPRETATION_B_W = 1,
|
|
||||||
VIPS_INTERPRETATION_HISTOGRAM = 10,
|
|
||||||
VIPS_INTERPRETATION_XYZ = 12,
|
|
||||||
VIPS_INTERPRETATION_LAB = 13,
|
|
||||||
VIPS_INTERPRETATION_CMYK = 15,
|
|
||||||
VIPS_INTERPRETATION_LABQ = 16,
|
|
||||||
VIPS_INTERPRETATION_RGB = 17,
|
|
||||||
VIPS_INTERPRETATION_CMC = 18,
|
|
||||||
VIPS_INTERPRETATION_LCH = 19,
|
|
||||||
VIPS_INTERPRETATION_LABS = 21,
|
|
||||||
VIPS_INTERPRETATION_sRGB = 22,
|
|
||||||
VIPS_INTERPRETATION_YXY = 23,
|
|
||||||
VIPS_INTERPRETATION_FOURIER = 24,
|
|
||||||
VIPS_INTERPRETATION_RGB16 = 25,
|
|
||||||
VIPS_INTERPRETATION_GREY16 = 26,
|
|
||||||
VIPS_INTERPRETATION_MATRIX = 27,
|
|
||||||
VIPS_INTERPRETATION_scRGB = 28,
|
|
||||||
VIPS_INTERPRETATION_HSV = 29,
|
|
||||||
VIPS_INTERPRETATION_LAST = 30
|
|
||||||
} VipsInterpretation;
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
VIPS_FORMAT_NOTSET = -1,
|
|
||||||
VIPS_FORMAT_UCHAR = 0,
|
|
||||||
VIPS_FORMAT_CHAR = 1,
|
|
||||||
VIPS_FORMAT_USHORT = 2,
|
|
||||||
VIPS_FORMAT_SHORT = 3,
|
|
||||||
VIPS_FORMAT_UINT = 4,
|
|
||||||
VIPS_FORMAT_INT = 5,
|
|
||||||
VIPS_FORMAT_FLOAT = 6,
|
|
||||||
VIPS_FORMAT_COMPLEX = 7,
|
|
||||||
VIPS_FORMAT_DOUBLE = 8,
|
|
||||||
VIPS_FORMAT_DPCOMPLEX = 9,
|
|
||||||
VIPS_FORMAT_LAST = 10
|
|
||||||
} VipsBandFormat;
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
VIPS_CODING_ERROR = -1,
|
|
||||||
VIPS_CODING_NONE = 0,
|
|
||||||
VIPS_CODING_LABQ = 2,
|
|
||||||
VIPS_CODING_RAD = 6,
|
|
||||||
VIPS_CODING_LAST = 7
|
|
||||||
} VipsCoding;
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
VIPS_ACCESS_RANDOM,
|
|
||||||
VIPS_ACCESS_SEQUENTIAL,
|
|
||||||
VIPS_ACCESS_SEQUENTIAL_UNBUFFERED,
|
|
||||||
VIPS_ACCESS_LAST
|
|
||||||
} VipsAccess;
|
|
||||||
|
|
||||||
typedef void *(*VipsStartFn)(VipsImage *out, void *a, void *b);
|
|
||||||
typedef int (*VipsGenerateFn)(VipsRegion *out,
|
|
||||||
void *seq, void *a, void *b, gboolean *stop);
|
|
||||||
typedef int (*VipsStopFn)(void *seq, void *a, void *b);
|
|
||||||
|
|
||||||
/* Struct we keep a record of execution time in. Passed to eval signal so
|
|
||||||
* it can assess progress.
|
|
||||||
*/
|
|
||||||
typedef struct _VipsProgress {
|
|
||||||
/*< private >*/
|
|
||||||
VipsImage *im; /* Image we are part of */
|
|
||||||
|
|
||||||
/*< public >*/
|
|
||||||
int run; /* Time we have been running */
|
|
||||||
int eta; /* Estimated seconds of computation left */
|
|
||||||
gint64 tpels; /* Number of pels we expect to calculate */
|
|
||||||
gint64 npels; /* Number of pels calculated so far */
|
|
||||||
int percent; /* Percent complete */
|
|
||||||
GTimer *start; /* Start time */
|
|
||||||
} VipsProgress;
|
|
||||||
|
|
||||||
#define VIPS_TYPE_IMAGE (vips_image_get_type())
|
|
||||||
#define VIPS_IMAGE(obj) \
|
|
||||||
(G_TYPE_CHECK_INSTANCE_CAST((obj), \
|
|
||||||
VIPS_TYPE_IMAGE, VipsImage))
|
|
||||||
#define VIPS_IMAGE_CLASS(klass) \
|
|
||||||
(G_TYPE_CHECK_CLASS_CAST((klass), \
|
|
||||||
VIPS_TYPE_IMAGE, VipsImageClass))
|
|
||||||
#define VIPS_IS_IMAGE(obj) \
|
|
||||||
(G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_IMAGE))
|
|
||||||
#define VIPS_IS_IMAGE_CLASS(klass) \
|
|
||||||
(G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_IMAGE))
|
|
||||||
#define VIPS_IMAGE_GET_CLASS(obj) \
|
|
||||||
(G_TYPE_INSTANCE_GET_CLASS((obj), \
|
|
||||||
VIPS_TYPE_IMAGE, VipsImageClass))
|
|
||||||
|
|
||||||
/* Matching typedef in basic.h.
|
|
||||||
*/
|
|
||||||
struct _VipsImage {
|
|
||||||
VipsObject parent_instance;
|
|
||||||
|
|
||||||
/*< private >*/
|
|
||||||
|
|
||||||
/* We have to keep these names for compatibility with the old API.
|
|
||||||
* Don't use them though, use vips_image_get_width() and friends.
|
|
||||||
*/
|
|
||||||
|
|
||||||
int Xsize; /* image width, in pixels */
|
|
||||||
int Ysize; /* image height, in pixels */
|
|
||||||
int Bands; /* number of image bands */
|
|
||||||
|
|
||||||
VipsBandFormat BandFmt; /* pixel format */
|
|
||||||
VipsCoding Coding; /* pixel coding */
|
|
||||||
VipsInterpretation Type; /* pixel interpretation */
|
|
||||||
double Xres; /* horizontal pixels per millimetre */
|
|
||||||
double Yres; /* vertical pixels per millimetre */
|
|
||||||
|
|
||||||
int Xoffset; /* image origin hint */
|
|
||||||
int Yoffset; /* image origin hint */
|
|
||||||
|
|
||||||
/* No longer used, the names are here for compat with very, very old
|
|
||||||
* code.
|
|
||||||
*/
|
|
||||||
int Length;
|
|
||||||
short Compression;
|
|
||||||
short Level;
|
|
||||||
int Bbits; /* was number of bits in this format */
|
|
||||||
|
|
||||||
/* Old code expects to see this member, newer code has a param on
|
|
||||||
* eval().
|
|
||||||
*/
|
|
||||||
VipsProgress *time;
|
|
||||||
|
|
||||||
/* Derived fields that some code can fiddle with. New code should use
|
|
||||||
* vips_image_get_history() and friends.
|
|
||||||
*/
|
|
||||||
char *Hist; /* don't use, see vips_image_get_history() */
|
|
||||||
char *filename; /* pointer to copy of filename */
|
|
||||||
VipsPel *data; /* start of image data for WIO */
|
|
||||||
int kill; /* set to non-zero to block eval */
|
|
||||||
|
|
||||||
/* Everything below this private and only used internally by
|
|
||||||
* VipsImage.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* During vips image read and write we need temporary float-sized
|
|
||||||
* fields in the struct for staging xres/yres. Don't use these any
|
|
||||||
* other time.
|
|
||||||
*/
|
|
||||||
float Xres_float;
|
|
||||||
float Yres_float;
|
|
||||||
|
|
||||||
char *mode; /* mode string passed to _new() */
|
|
||||||
VipsImageType dtype; /* descriptor type */
|
|
||||||
int fd; /* file descriptor */
|
|
||||||
void *baseaddr; /* pointer to the start of an mmap file */
|
|
||||||
size_t length; /* size of mmap area */
|
|
||||||
guint32 magic; /* magic from header, endian-ness of image */
|
|
||||||
|
|
||||||
/* Partial image stuff. All these fields are initialised
|
|
||||||
* to NULL and ignored unless set by vips_image_generate() etc.
|
|
||||||
*/
|
|
||||||
VipsStartFn start_fn;
|
|
||||||
VipsGenerateFn generate_fn;
|
|
||||||
VipsStopFn stop_fn;
|
|
||||||
void *client1; /* user arguments */
|
|
||||||
void *client2;
|
|
||||||
GMutex *sslock; /* start-stop lock */
|
|
||||||
GSList *regions; /* list of regions current for this image */
|
|
||||||
VipsDemandStyle dhint; /* demand style hint */
|
|
||||||
|
|
||||||
/* Extra user-defined fields ... see vips_image_get() etc.
|
|
||||||
*/
|
|
||||||
GHashTable *meta; /* GhashTable of GValue */
|
|
||||||
GSList *meta_traverse; /* traverse order for Meta */
|
|
||||||
|
|
||||||
/* Part of mmap() read ... the sizeof() the header we skip from the
|
|
||||||
* file start. Usually VIPS_SIZEOF_HEADER, but can be something else
|
|
||||||
* for binary file read.
|
|
||||||
*
|
|
||||||
* guint64 so that we can guarantee to work even on systems with
|
|
||||||
* strange ideas about large files.
|
|
||||||
*/
|
|
||||||
gint64 sizeof_header;
|
|
||||||
|
|
||||||
/* If this is a large disc image, don't map the whole thing, instead
|
|
||||||
* have a set of windows shared between the regions active on the
|
|
||||||
* image. List of VipsWindow.
|
|
||||||
*/
|
|
||||||
GSList *windows;
|
|
||||||
|
|
||||||
/* Upstream/downstream relationships, built from args to
|
|
||||||
* vips_demand_hint().
|
|
||||||
*
|
|
||||||
* We use these to invalidate downstream pixel buffers.
|
|
||||||
* Use 'serial' to spot circular dependencies.
|
|
||||||
*
|
|
||||||
* See also hint_set below.
|
|
||||||
*/
|
|
||||||
GSList *upstream;
|
|
||||||
GSList *downstream;
|
|
||||||
int serial;
|
|
||||||
|
|
||||||
/* Keep a list of recounted GValue strings so we can share hist
|
|
||||||
* efficiently.
|
|
||||||
*/
|
|
||||||
GSList *history_list;
|
|
||||||
|
|
||||||
/* The VipsImage (if any) we should signal eval progress on.
|
|
||||||
*/
|
|
||||||
VipsImage *progress_signal;
|
|
||||||
|
|
||||||
/* Record the file length here. We use this to stop ourselves mapping
|
|
||||||
* things beyond the end of the file in the case that the file has
|
|
||||||
* been truncated.
|
|
||||||
*
|
|
||||||
* gint64 so that we can guarantee to work even on systems with
|
|
||||||
* strange ideas about large files.
|
|
||||||
*/
|
|
||||||
gint64 file_length;
|
|
||||||
|
|
||||||
/* Set this when vips_demand_hint_array() is called, and check in any
|
|
||||||
* operation that will demand pixels from the image.
|
|
||||||
*
|
|
||||||
* We use vips_demand_hint_array() to build the tree of
|
|
||||||
* upstream/downstream relationships, so it's a mandatory thing.
|
|
||||||
*/
|
|
||||||
gboolean hint_set;
|
|
||||||
|
|
||||||
/* Delete-on-close is hard to do with signals and callbacks since we
|
|
||||||
* really need to do this in finalize after the fd has been closed,
|
|
||||||
* but you can't emit signals then.
|
|
||||||
*
|
|
||||||
* Also keep a private copy of the filename string to be deleted,
|
|
||||||
* since image->filename will be freed in _dispose().
|
|
||||||
*/
|
|
||||||
gboolean delete_on_close;
|
|
||||||
char *delete_on_close_filename;
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct _VipsImageClass {
|
|
||||||
VipsObjectClass parent_class;
|
|
||||||
|
|
||||||
/* Signals we emit.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Evaluation is starting.
|
|
||||||
*/
|
|
||||||
void (*preeval)(VipsImage *image, VipsProgress *progress, void *data);
|
|
||||||
|
|
||||||
/* Evaluation progress.
|
|
||||||
*/
|
|
||||||
void (*eval)(VipsImage *image, VipsProgress *progress, void *data);
|
|
||||||
|
|
||||||
/* Evaluation is ending.
|
|
||||||
*/
|
|
||||||
void (*posteval)(VipsImage *image, VipsProgress *progress, void *data);
|
|
||||||
|
|
||||||
/* An image has been written to.
|
|
||||||
* Used by eg. vips_image_new_mode("x.jpg", "w") to do the
|
|
||||||
* final write to jpeg.
|
|
||||||
* Set *result to non-zero to indicate an error on write.
|
|
||||||
*/
|
|
||||||
void (*written)(VipsImage *image, int *result, void *data);
|
|
||||||
|
|
||||||
/* An image has been modified in some way and all caches
|
|
||||||
* need dropping.
|
|
||||||
*/
|
|
||||||
void (*invalidate)(VipsImage *image, void *data);
|
|
||||||
|
|
||||||
/* Minimise this pipeline.
|
|
||||||
*
|
|
||||||
* This is triggered (sometimes) at the end of eval to signal that
|
|
||||||
* we're probably done and that operations involved should try to
|
|
||||||
* minimise memory use by, for example, dropping caches.
|
|
||||||
*
|
|
||||||
* See vips_tilecache().
|
|
||||||
*/
|
|
||||||
void (*minimise)(VipsImage *image, void *data);
|
|
||||||
|
|
||||||
} VipsImageClass;
|
|
||||||
|
|
||||||
/* Don't put spaces around void here, it breaks gtk-doc.
|
|
||||||
*/
|
|
||||||
VIPS_API
|
|
||||||
GType vips_image_get_type(void);
|
|
||||||
|
|
||||||
/* Has to be guint64 and not size_t/off_t since we have to be able to address
|
|
||||||
* huge images on platforms with 32-bit files.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Pixel address calculation macros.
|
|
||||||
*/
|
|
||||||
#define VIPS_IMAGE_SIZEOF_ELEMENT(I) \
|
|
||||||
(vips_format_sizeof_unsafe((I)->BandFmt))
|
|
||||||
#define VIPS_IMAGE_SIZEOF_PEL(I) \
|
|
||||||
(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
|
|
||||||
#define VIPS_IMAGE_SIZEOF_LINE(I) \
|
|
||||||
(VIPS_IMAGE_SIZEOF_PEL(I) * (I)->Xsize)
|
|
||||||
#define VIPS_IMAGE_SIZEOF_IMAGE(I) \
|
|
||||||
(VIPS_IMAGE_SIZEOF_LINE(I) * (I)->Ysize)
|
|
||||||
#define VIPS_IMAGE_N_ELEMENTS(I) \
|
|
||||||
((I)->Bands * (I)->Xsize)
|
|
||||||
#define VIPS_IMAGE_N_PELS(I) \
|
|
||||||
((guint64) (I)->Xsize * (I)->Ysize)
|
|
||||||
|
|
||||||
/* If VIPS_DEBUG is defined, add bounds checking.
|
|
||||||
*/
|
|
||||||
#ifdef VIPS_DEBUG
|
|
||||||
#define VIPS_IMAGE_ADDR(I, X, Y) \
|
|
||||||
(((X) >= 0 && (X) < VIPS_IMAGE(I)->Xsize && \
|
|
||||||
(Y) >= 0 && (Y) < VIPS_IMAGE(I)->Ysize && \
|
|
||||||
VIPS_IMAGE(I)->data) \
|
|
||||||
? (VIPS_IMAGE(I)->data + \
|
|
||||||
(Y) *VIPS_IMAGE_SIZEOF_LINE(I) + \
|
|
||||||
(X) *VIPS_IMAGE_SIZEOF_PEL(I)) \
|
|
||||||
: (fprintf(stderr, \
|
|
||||||
"VIPS_IMAGE_ADDR: point out of bounds, " \
|
|
||||||
"file \"%s\", line %d\n" \
|
|
||||||
"(point x=%d, y=%d\n" \
|
|
||||||
" should have been within VipsRect left=%d, top=%d, " \
|
|
||||||
"width=%d, height=%d)\n", \
|
|
||||||
__FILE__, __LINE__, \
|
|
||||||
(X), (Y), \
|
|
||||||
0, 0, \
|
|
||||||
VIPS_IMAGE(I)->Xsize, \
|
|
||||||
VIPS_IMAGE(I)->Ysize), \
|
|
||||||
(VipsPel *) NULL))
|
|
||||||
#else /*!VIPS_DEBUG*/
|
|
||||||
#define VIPS_IMAGE_ADDR(I, X, Y) \
|
|
||||||
((I)->data + \
|
|
||||||
(Y) *VIPS_IMAGE_SIZEOF_LINE(I) + \
|
|
||||||
(X) *VIPS_IMAGE_SIZEOF_PEL(I))
|
|
||||||
#endif /*VIPS_DEBUG*/
|
|
||||||
|
|
||||||
#ifdef VIPS_DEBUG
|
|
||||||
#define VIPS_MATRIX(I, X, Y) \
|
|
||||||
((VIPS_IMAGE(I)->BandFmt == VIPS_FORMAT_DOUBLE && \
|
|
||||||
VIPS_IMAGE(I)->Bands == 1) \
|
|
||||||
? ((double *) VIPS_IMAGE_ADDR(I, X, Y)) \
|
|
||||||
: (fprintf(stderr, "VIPS_MATRIX: not a matrix image\n"), \
|
|
||||||
(double *) NULL))
|
|
||||||
#else /*!VIPS_DEBUG*/
|
|
||||||
#define VIPS_MATRIX(I, X, Y) \
|
|
||||||
((double *) VIPS_IMAGE_ADDR(I, X, Y))
|
|
||||||
#endif /*VIPS_DEBUG*/
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
void vips_progress_set(gboolean progress);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
void vips_image_invalidate_all(VipsImage *image);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
void vips_image_minimise_all(VipsImage *image);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
gboolean vips_image_is_sequential(VipsImage *image);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
void vips_image_set_progress(VipsImage *image, gboolean progress);
|
|
||||||
VIPS_API
|
|
||||||
gboolean vips_image_iskilled(VipsImage *image);
|
|
||||||
VIPS_API
|
|
||||||
void vips_image_set_kill(VipsImage *image, gboolean kill);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
char *vips_filename_get_filename(const char *vips_filename);
|
|
||||||
VIPS_API
|
|
||||||
char *vips_filename_get_options(const char *vips_filename);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
VipsImage *vips_image_new(void);
|
|
||||||
VIPS_API
|
|
||||||
VipsImage *vips_image_new_memory(void);
|
|
||||||
VIPS_API
|
|
||||||
VipsImage *vips_image_memory(void);
|
|
||||||
VIPS_API
|
|
||||||
VipsImage *vips_image_new_from_file(const char *name, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
VipsImage *vips_image_new_from_file_RW(const char *filename);
|
|
||||||
VIPS_API
|
|
||||||
VipsImage *vips_image_new_from_file_raw(const char *filename,
|
|
||||||
int xsize, int ysize, int bands, guint64 offset);
|
|
||||||
VIPS_API
|
|
||||||
VipsImage *vips_image_new_from_memory(const void *data, size_t size,
|
|
||||||
int width, int height, int bands, VipsBandFormat format);
|
|
||||||
VIPS_API
|
|
||||||
VipsImage *vips_image_new_from_memory_copy(const void *data, size_t size,
|
|
||||||
int width, int height, int bands, VipsBandFormat format);
|
|
||||||
VIPS_API
|
|
||||||
VipsImage *vips_image_new_from_buffer(const void *buf, size_t len,
|
|
||||||
const char *option_string, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
VipsImage *vips_image_new_from_source(VipsSource *source,
|
|
||||||
const char *option_string, ...) G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
VipsImage *vips_image_new_matrix(int width, int height);
|
|
||||||
VIPS_API
|
|
||||||
VipsImage *vips_image_new_matrixv(int width, int height, ...);
|
|
||||||
VIPS_API
|
|
||||||
VipsImage *vips_image_new_matrix_from_array(int width, int height,
|
|
||||||
const double *array, int size);
|
|
||||||
VIPS_API
|
|
||||||
VipsImage *vips_image_matrix_from_array(int width, int height,
|
|
||||||
const double *array, int size);
|
|
||||||
VIPS_API
|
|
||||||
VipsImage *vips_image_new_from_image(VipsImage *image,
|
|
||||||
const double *c, int n);
|
|
||||||
VIPS_API
|
|
||||||
VipsImage *vips_image_new_from_image1(VipsImage *image, double c);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
void vips_image_set_delete_on_close(VipsImage *image,
|
|
||||||
gboolean delete_on_close);
|
|
||||||
VIPS_API
|
|
||||||
guint64 vips_get_disc_threshold(void);
|
|
||||||
VIPS_API
|
|
||||||
VipsImage *vips_image_new_temp_file(const char *format);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_image_write(VipsImage *image, VipsImage *out);
|
|
||||||
VIPS_API
|
|
||||||
int vips_image_write_to_file(VipsImage *image, const char *name, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_image_write_to_buffer(VipsImage *in,
|
|
||||||
const char *suffix, void **buf, size_t *size, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_image_write_to_target(VipsImage *in,
|
|
||||||
const char *suffix, VipsTarget *target, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
void *vips_image_write_to_memory(VipsImage *in, size_t *size);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_image_decode_predict(VipsImage *in,
|
|
||||||
int *bands, VipsBandFormat *format);
|
|
||||||
VIPS_API
|
|
||||||
int vips_image_decode(VipsImage *in, VipsImage **out);
|
|
||||||
VIPS_API
|
|
||||||
int vips_image_encode(VipsImage *in, VipsImage **out, VipsCoding coding);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
gboolean vips_image_isMSBfirst(VipsImage *image);
|
|
||||||
VIPS_API
|
|
||||||
gboolean vips_image_isfile(VipsImage *image);
|
|
||||||
VIPS_API
|
|
||||||
gboolean vips_image_ispartial(VipsImage *image);
|
|
||||||
VIPS_API
|
|
||||||
gboolean vips_image_hasalpha(VipsImage *image);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
VipsImage *vips_image_copy_memory(VipsImage *image);
|
|
||||||
VIPS_API
|
|
||||||
int vips_image_wio_input(VipsImage *image);
|
|
||||||
VIPS_API
|
|
||||||
int vips_image_pio_input(VipsImage *image);
|
|
||||||
VIPS_API
|
|
||||||
int vips_image_pio_output(VipsImage *image);
|
|
||||||
VIPS_API
|
|
||||||
int vips_image_inplace(VipsImage *image);
|
|
||||||
VIPS_API
|
|
||||||
int vips_image_write_prepare(VipsImage *image);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_image_write_line(VipsImage *image, int ypos, VipsPel *linebuffer);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
gboolean vips_band_format_isint(VipsBandFormat format);
|
|
||||||
VIPS_API
|
|
||||||
gboolean vips_band_format_isuint(VipsBandFormat format);
|
|
||||||
VIPS_API
|
|
||||||
gboolean vips_band_format_is8bit(VipsBandFormat format);
|
|
||||||
VIPS_API
|
|
||||||
gboolean vips_band_format_isfloat(VipsBandFormat format);
|
|
||||||
VIPS_API
|
|
||||||
gboolean vips_band_format_iscomplex(VipsBandFormat format);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_system(const char *cmd_format, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
/* Defined in type.c but declared here, since they use VipsImage.
|
|
||||||
*/
|
|
||||||
VIPS_API
|
|
||||||
VipsArrayImage *vips_array_image_new(VipsImage **array, int n);
|
|
||||||
VIPS_API
|
|
||||||
VipsArrayImage *vips_array_image_newv(int n, ...);
|
|
||||||
VIPS_API
|
|
||||||
VipsArrayImage *vips_array_image_new_from_string(const char *string,
|
|
||||||
VipsAccess flags);
|
|
||||||
VIPS_API
|
|
||||||
VipsArrayImage *vips_array_image_empty(void);
|
|
||||||
VIPS_API
|
|
||||||
VipsArrayImage *vips_array_image_append(VipsArrayImage *array,
|
|
||||||
VipsImage *image);
|
|
||||||
VIPS_API
|
|
||||||
VipsImage **vips_array_image_get(VipsArrayImage *array, int *n);
|
|
||||||
VIPS_API
|
|
||||||
VipsImage **vips_value_get_array_image(const GValue *value, int *n);
|
|
||||||
VIPS_API
|
|
||||||
void vips_value_set_array_image(GValue *value, int n);
|
|
||||||
|
|
||||||
/* Defined in reorder.c, but really a function on image.
|
|
||||||
*/
|
|
||||||
VIPS_API
|
|
||||||
int vips_reorder_prepare_many(VipsImage *image,
|
|
||||||
VipsRegion **regions, VipsRect *r);
|
|
||||||
VIPS_API
|
|
||||||
void vips_reorder_margin_hint(VipsImage *image, int margin);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
void vips_image_free_buffer(VipsImage *image, void *buffer);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
#endif /*VIPS_IMAGE_H*/
|
|
||||||
@@ -1,139 +0,0 @@
|
|||||||
/* Various interpolators.
|
|
||||||
*
|
|
||||||
* J.Cupitt, 15/10/08
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
This file is part of VIPS.
|
|
||||||
|
|
||||||
VIPS is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
||||||
02110-1301 USA
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef VIPS_INTERPOLATE_H
|
|
||||||
#define VIPS_INTERPOLATE_H
|
|
||||||
|
|
||||||
#include <glib.h>
|
|
||||||
#include <glib-object.h>
|
|
||||||
#include <vips/object.h>
|
|
||||||
#include <vips/region.h>
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
#define VIPS_TYPE_INTERPOLATE (vips_interpolate_get_type())
|
|
||||||
#define VIPS_INTERPOLATE(obj) \
|
|
||||||
(G_TYPE_CHECK_INSTANCE_CAST((obj), \
|
|
||||||
VIPS_TYPE_INTERPOLATE, VipsInterpolate))
|
|
||||||
#define VIPS_INTERPOLATE_CLASS(klass) \
|
|
||||||
(G_TYPE_CHECK_CLASS_CAST((klass), \
|
|
||||||
VIPS_TYPE_INTERPOLATE, VipsInterpolateClass))
|
|
||||||
#define VIPS_IS_INTERPOLATE(obj) \
|
|
||||||
(G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_INTERPOLATE))
|
|
||||||
#define VIPS_IS_INTERPOLATE_CLASS(klass) \
|
|
||||||
(G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_INTERPOLATE))
|
|
||||||
#define VIPS_INTERPOLATE_GET_CLASS(obj) \
|
|
||||||
(G_TYPE_INSTANCE_GET_CLASS((obj), \
|
|
||||||
VIPS_TYPE_INTERPOLATE, VipsInterpolateClass))
|
|
||||||
|
|
||||||
struct _VipsInterpolate {
|
|
||||||
VipsObject parent_object;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* An interpolation function. This is a class method, but we have a lookup
|
|
||||||
* function for it to speed up dispatch. Write to the memory at "out",
|
|
||||||
* interpolate the value at position (x, y) in "in".
|
|
||||||
*/
|
|
||||||
typedef void (*VipsInterpolateMethod)(VipsInterpolate *interpolate,
|
|
||||||
void *out, VipsRegion *in, double x, double y);
|
|
||||||
|
|
||||||
typedef struct _VipsInterpolateClass {
|
|
||||||
VipsObjectClass parent_class;
|
|
||||||
|
|
||||||
/* Write to pixel out(x,y), interpolating from in(x,y). The caller has
|
|
||||||
* to set the regions up.
|
|
||||||
*/
|
|
||||||
VipsInterpolateMethod interpolate;
|
|
||||||
|
|
||||||
/* This interpolator needs a window this many pixels across and down.
|
|
||||||
*/
|
|
||||||
int (*get_window_size)(VipsInterpolate *interpolate);
|
|
||||||
|
|
||||||
/* Or just set this if you want a constant.
|
|
||||||
*/
|
|
||||||
int window_size;
|
|
||||||
|
|
||||||
/* Stencils are offset by this much. Default to window_size / 2 - 1
|
|
||||||
* (centering) if get_window_offset is NULL and window_offset is -1.
|
|
||||||
*/
|
|
||||||
int (*get_window_offset)(VipsInterpolate *interpolate);
|
|
||||||
int window_offset;
|
|
||||||
} VipsInterpolateClass;
|
|
||||||
|
|
||||||
/* Don't put spaces around void here, it breaks gtk-doc.
|
|
||||||
*/
|
|
||||||
VIPS_API
|
|
||||||
GType vips_interpolate_get_type(void);
|
|
||||||
VIPS_API
|
|
||||||
void vips_interpolate(VipsInterpolate *interpolate,
|
|
||||||
void *out, VipsRegion *in, double x, double y);
|
|
||||||
VIPS_API
|
|
||||||
VipsInterpolateMethod vips_interpolate_get_method(VipsInterpolate *interpolate);
|
|
||||||
VIPS_API
|
|
||||||
int vips_interpolate_get_window_size(VipsInterpolate *interpolate);
|
|
||||||
VIPS_API
|
|
||||||
int vips_interpolate_get_window_offset(VipsInterpolate *interpolate);
|
|
||||||
|
|
||||||
/* How many bits of precision we keep for transformations, ie. how many
|
|
||||||
* pre-computed matrices we have.
|
|
||||||
*/
|
|
||||||
#define VIPS_TRANSFORM_SHIFT (6)
|
|
||||||
#define VIPS_TRANSFORM_SCALE (1 << VIPS_TRANSFORM_SHIFT)
|
|
||||||
|
|
||||||
/* How many bits of precision we keep for interpolation, ie. where the decimal
|
|
||||||
* is in the fixed-point tables. For 16-bit pixels, we need 16 bits for the
|
|
||||||
* data and 4 bits to add 16 values together. That leaves 12 bits for the
|
|
||||||
* fractional part.
|
|
||||||
*/
|
|
||||||
#define VIPS_INTERPOLATE_SHIFT (12)
|
|
||||||
#define VIPS_INTERPOLATE_SCALE (1 << VIPS_INTERPOLATE_SHIFT)
|
|
||||||
|
|
||||||
/* Convenience: return static interpolators, no need to unref.
|
|
||||||
*/
|
|
||||||
VIPS_API
|
|
||||||
VipsInterpolate *vips_interpolate_nearest_static(void);
|
|
||||||
VIPS_API
|
|
||||||
VipsInterpolate *vips_interpolate_bilinear_static(void);
|
|
||||||
|
|
||||||
/* Convenience: make an interpolator from a nickname. g_object_unref() when
|
|
||||||
* you're done with it.
|
|
||||||
*/
|
|
||||||
VIPS_API
|
|
||||||
VipsInterpolate *vips_interpolate_new(const char *nickname);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
#endif /*VIPS_INTERPOLATE_H*/
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
/* i18n stuff for vips. Deprecated in favour of glib/gi18n.h.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef VIPS_INTL_H
|
|
||||||
#define VIPS_INTL_H
|
|
||||||
|
|
||||||
#ifdef ENABLE_NLS
|
|
||||||
|
|
||||||
#include <glib/gi18n.h>
|
|
||||||
|
|
||||||
#else /*!ENABLE_NLS*/
|
|
||||||
|
|
||||||
#define _(String) (String)
|
|
||||||
#define N_(String) (String)
|
|
||||||
|
|
||||||
#endif /* ENABLE_NLS */
|
|
||||||
|
|
||||||
#endif /* VIPS_INTL_H */
|
|
||||||
@@ -1,163 +0,0 @@
|
|||||||
/* mask.h
|
|
||||||
*
|
|
||||||
* 20/9/09
|
|
||||||
* - from proto.h
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* All deprecated.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
This file is part of VIPS.
|
|
||||||
|
|
||||||
VIPS is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
||||||
02110-1301 USA
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef IM_MASK_H
|
|
||||||
#define IM_MASK_H
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
typedef struct im__INTMASK {
|
|
||||||
int xsize;
|
|
||||||
int ysize;
|
|
||||||
int scale;
|
|
||||||
int offset;
|
|
||||||
int *coeff;
|
|
||||||
char *filename;
|
|
||||||
} INTMASK;
|
|
||||||
|
|
||||||
typedef struct im__DOUBLEMASK {
|
|
||||||
int xsize;
|
|
||||||
int ysize;
|
|
||||||
double scale;
|
|
||||||
double offset;
|
|
||||||
double *coeff;
|
|
||||||
char *filename;
|
|
||||||
} DOUBLEMASK;
|
|
||||||
|
|
||||||
#define IM_MASK(M, X, Y) ((M)->coeff[(X) + (Y) * (M)->xsize])
|
|
||||||
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
INTMASK *im_create_imask(const char *filename, int xsize, int ysize);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
INTMASK *im_create_imaskv(const char *filename, int xsize, int ysize, ...);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
DOUBLEMASK *im_create_dmask(const char *filename, int xsize, int ysize);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
DOUBLEMASK *im_create_dmaskv(const char *filename, int xsize, int ysize, ...);
|
|
||||||
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
INTMASK *im_read_imask(const char *filename);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
DOUBLEMASK *im_read_dmask(const char *filename);
|
|
||||||
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
void im_print_imask(INTMASK *in);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
void im_print_dmask(DOUBLEMASK *in);
|
|
||||||
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
int im_write_imask(INTMASK *in);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
int im_write_dmask(DOUBLEMASK *in);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
int im_write_imask_name(INTMASK *in, const char *filename);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
int im_write_dmask_name(DOUBLEMASK *in, const char *filename);
|
|
||||||
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
int im_free_imask(INTMASK *in);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
int im_free_dmask(DOUBLEMASK *in);
|
|
||||||
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
INTMASK *im_log_imask(const char *filename, double sigma, double min_ampl);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
DOUBLEMASK *im_log_dmask(const char *filename, double sigma, double min_ampl);
|
|
||||||
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
INTMASK *im_gauss_imask(const char *filename, double sigma, double min_ampl);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
INTMASK *im_gauss_imask_sep(const char *filename,
|
|
||||||
double sigma, double min_ampl);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
DOUBLEMASK *im_gauss_dmask(const char *filename,
|
|
||||||
double sigma, double min_ampl);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
DOUBLEMASK *im_gauss_dmask_sep(const char *filename,
|
|
||||||
double sigma, double min_ampl);
|
|
||||||
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
INTMASK *im_dup_imask(INTMASK *in, const char *filename);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
DOUBLEMASK *im_dup_dmask(DOUBLEMASK *in, const char *filename);
|
|
||||||
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
INTMASK *im_scale_dmask(DOUBLEMASK *in, const char *filename);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
void im_norm_dmask(DOUBLEMASK *mask);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
DOUBLEMASK *im_imask2dmask(INTMASK *in, const char *filename);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
INTMASK *im_dmask2imask(DOUBLEMASK *in, const char *filename);
|
|
||||||
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
INTMASK *im_rotate_imask90(INTMASK *in, const char *filename);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
INTMASK *im_rotate_imask45(INTMASK *in, const char *filename);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
DOUBLEMASK *im_rotate_dmask90(DOUBLEMASK *in, const char *filename);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
DOUBLEMASK *im_rotate_dmask45(DOUBLEMASK *in, const char *filename);
|
|
||||||
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
DOUBLEMASK *im_mattrn(DOUBLEMASK *in, const char *filename);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
DOUBLEMASK *im_matcat(DOUBLEMASK *top, DOUBLEMASK *bottom,
|
|
||||||
const char *filename);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
DOUBLEMASK *im_matmul(DOUBLEMASK *in1, DOUBLEMASK *in2, const char *filename);
|
|
||||||
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
DOUBLEMASK *im_lu_decomp(const DOUBLEMASK *mat, const char *filename);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
int im_lu_solve(const DOUBLEMASK *lu, double *vec);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
DOUBLEMASK *im_matinv(const DOUBLEMASK *mat, const char *filename);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
int im_matinv_inplace(DOUBLEMASK *mat);
|
|
||||||
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
DOUBLEMASK *im_local_dmask(struct _VipsImage *out, DOUBLEMASK *mask);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
INTMASK *im_local_imask(struct _VipsImage *out, INTMASK *mask);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
#endif /*IM_MASK_H*/
|
|
||||||
@@ -1,123 +0,0 @@
|
|||||||
/* memory utilities
|
|
||||||
*
|
|
||||||
* J.Cupitt, 8/4/93
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
This file is part of VIPS.
|
|
||||||
|
|
||||||
VIPS is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
||||||
02110-1301 USA
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef VIPS_MEMORY_H
|
|
||||||
#define VIPS_MEMORY_H
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
#define VIPS_FREEF(F, S) \
|
|
||||||
G_STMT_START \
|
|
||||||
{ \
|
|
||||||
if (S) { \
|
|
||||||
(void) F((S)); \
|
|
||||||
(S) = 0; \
|
|
||||||
} \
|
|
||||||
} \
|
|
||||||
G_STMT_END
|
|
||||||
|
|
||||||
#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
|
|
||||||
|
|
||||||
#define VIPS_SETSTR(S, V) \
|
|
||||||
G_STMT_START \
|
|
||||||
{ \
|
|
||||||
const char *sst = (V); \
|
|
||||||
\
|
|
||||||
if ((S) != sst) { \
|
|
||||||
if (!(S) || !sst || strcmp((S), sst) != 0) { \
|
|
||||||
VIPS_FREE(S); \
|
|
||||||
if (sst) \
|
|
||||||
(S) = g_strdup(sst); \
|
|
||||||
} \
|
|
||||||
} \
|
|
||||||
} \
|
|
||||||
G_STMT_END
|
|
||||||
|
|
||||||
#define VIPS_MALLOC(OBJ, S) \
|
|
||||||
(vips_malloc(VIPS_OBJECT(OBJ), S))
|
|
||||||
#define VIPS_NEW(OBJ, T) \
|
|
||||||
((T *) VIPS_MALLOC(OBJ, sizeof(T)))
|
|
||||||
#define VIPS_ARRAY(OBJ, N, T) \
|
|
||||||
((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T)))
|
|
||||||
|
|
||||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(VipsImage, g_object_unref)
|
|
||||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(VipsObject, g_object_unref)
|
|
||||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(VipsRegion, g_object_unref)
|
|
||||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(VipsConnection, g_object_unref)
|
|
||||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(VipsSource, g_object_unref)
|
|
||||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(VipsSourceCustom, g_object_unref)
|
|
||||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(VipsGInputStream, g_object_unref)
|
|
||||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(VipsSourceGInputStream, g_object_unref)
|
|
||||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(VipsTarget, g_object_unref)
|
|
||||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(VipsTargetCustom, g_object_unref)
|
|
||||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(VipsSbuf, g_object_unref)
|
|
||||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(VipsInterpolate, g_object_unref)
|
|
||||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(VipsOperation, g_object_unref)
|
|
||||||
|
|
||||||
// FIXME ... need more of these
|
|
||||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(VipsArrayDouble, VipsArrayDouble_unref)
|
|
||||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(VipsArrayImage, VipsArrayImage_unref)
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
void *vips_malloc(VipsObject *object, size_t size);
|
|
||||||
VIPS_API
|
|
||||||
char *vips_strdup(VipsObject *object, const char *str);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
void vips_tracked_free(void *s);
|
|
||||||
VIPS_API
|
|
||||||
void vips_tracked_aligned_free(void *s);
|
|
||||||
VIPS_API
|
|
||||||
void *vips_tracked_malloc(size_t size);
|
|
||||||
VIPS_API
|
|
||||||
void *vips_tracked_aligned_alloc(size_t size, size_t align);
|
|
||||||
VIPS_API
|
|
||||||
size_t vips_tracked_get_mem(void);
|
|
||||||
VIPS_API
|
|
||||||
size_t vips_tracked_get_mem_highwater(void);
|
|
||||||
VIPS_API
|
|
||||||
int vips_tracked_get_allocs(void);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_tracked_open(const char *pathname, int flags, int mode);
|
|
||||||
VIPS_API
|
|
||||||
int vips_tracked_close(int fd);
|
|
||||||
VIPS_API
|
|
||||||
int vips_tracked_get_files(void);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
#endif /*VIPS_MEMORY_H*/
|
|
||||||
@@ -1,73 +0,0 @@
|
|||||||
/* morphology.h
|
|
||||||
*
|
|
||||||
* 20/9/09
|
|
||||||
* - from proto.h
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
This file is part of VIPS.
|
|
||||||
|
|
||||||
VIPS is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
||||||
02110-1301 USA
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef VIPS_MORPHOLOGY_H
|
|
||||||
#define VIPS_MORPHOLOGY_H
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
VIPS_OPERATION_MORPHOLOGY_ERODE,
|
|
||||||
VIPS_OPERATION_MORPHOLOGY_DILATE,
|
|
||||||
VIPS_OPERATION_MORPHOLOGY_LAST
|
|
||||||
} VipsOperationMorphology;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_morph(VipsImage *in, VipsImage **out, VipsImage *mask,
|
|
||||||
VipsOperationMorphology morph, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_rank(VipsImage *in, VipsImage **out,
|
|
||||||
int width, int height, int index, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_median(VipsImage *in, VipsImage **out, int size, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_countlines(VipsImage *in, double *nolines,
|
|
||||||
VipsDirection direction, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_labelregions(VipsImage *in, VipsImage **mask, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_fill_nearest(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
#endif /*VIPS_MORPHOLOGY_H*/
|
|
||||||
@@ -1,79 +0,0 @@
|
|||||||
/* mosaicing.h
|
|
||||||
*
|
|
||||||
* 20/9/09
|
|
||||||
* - from proto.h
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
This file is part of VIPS.
|
|
||||||
|
|
||||||
VIPS is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
||||||
02110-1301 USA
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef VIPS_MOSAICING_H
|
|
||||||
#define VIPS_MOSAICING_H
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_merge(VipsImage *ref, VipsImage *sec, VipsImage **out,
|
|
||||||
VipsDirection direction, int dx, int dy, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_mosaic(VipsImage *ref, VipsImage *sec, VipsImage **out,
|
|
||||||
VipsDirection direction, int xref, int yref, int xsec, int ysec, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_mosaic1(VipsImage *ref, VipsImage *sec, VipsImage **out,
|
|
||||||
VipsDirection direction,
|
|
||||||
int xr1, int yr1, int xs1, int ys1,
|
|
||||||
int xr2, int yr2, int xs2, int ys2, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_match(VipsImage *ref, VipsImage *sec, VipsImage **out,
|
|
||||||
int xr1, int yr1, int xs1, int ys1,
|
|
||||||
int xr2, int yr2, int xs2, int ys2, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_globalbalance(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_remosaic(VipsImage *in, VipsImage **out,
|
|
||||||
const char *old_str, const char *new_str, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_matrixinvert(VipsImage *m, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
#endif /*VIPS_MOSAICING_H*/
|
|
||||||
@@ -1,720 +0,0 @@
|
|||||||
/* abstract base class for all vips objects
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
Copyright (C) 1991-2003 The National Gallery
|
|
||||||
|
|
||||||
This library is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU Lesser General Public
|
|
||||||
License as published by the Free Software Foundation; either
|
|
||||||
version 2.1 of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This library is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public
|
|
||||||
License along with this library; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
||||||
02110-1301 USA
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef VIPS_OBJECT_H
|
|
||||||
#define VIPS_OBJECT_H
|
|
||||||
|
|
||||||
#include <glib.h>
|
|
||||||
#include <glib-object.h>
|
|
||||||
#include <vips/buf.h>
|
|
||||||
#include <vips/basic.h>
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
/* Handy!
|
|
||||||
*/
|
|
||||||
#ifdef VIPS_DEBUG
|
|
||||||
#define VIPS_UNREF(X) \
|
|
||||||
G_STMT_START \
|
|
||||||
{ \
|
|
||||||
if (X) { \
|
|
||||||
g_assert(G_OBJECT(X)->ref_count > 0); \
|
|
||||||
g_object_unref(X); \
|
|
||||||
(X) = 0; \
|
|
||||||
} \
|
|
||||||
} \
|
|
||||||
G_STMT_END
|
|
||||||
#else /*!VIPS_DEBUG*/
|
|
||||||
#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
|
|
||||||
#endif /*VIPS_DEBUG*/
|
|
||||||
|
|
||||||
typedef struct _VipsObject VipsObject;
|
|
||||||
typedef struct _VipsObjectClass VipsObjectClass;
|
|
||||||
|
|
||||||
/* Track extra stuff for arguments to objects
|
|
||||||
*/
|
|
||||||
|
|
||||||
typedef enum /*< flags >*/ {
|
|
||||||
VIPS_ARGUMENT_NONE = 0,
|
|
||||||
VIPS_ARGUMENT_REQUIRED = 1,
|
|
||||||
VIPS_ARGUMENT_CONSTRUCT = 2,
|
|
||||||
VIPS_ARGUMENT_SET_ONCE = 4,
|
|
||||||
VIPS_ARGUMENT_SET_ALWAYS = 8,
|
|
||||||
VIPS_ARGUMENT_INPUT = 16,
|
|
||||||
VIPS_ARGUMENT_OUTPUT = 32,
|
|
||||||
VIPS_ARGUMENT_DEPRECATED = 64,
|
|
||||||
VIPS_ARGUMENT_MODIFY = 128,
|
|
||||||
VIPS_ARGUMENT_NON_HASHABLE = 256
|
|
||||||
} VipsArgumentFlags;
|
|
||||||
|
|
||||||
/* Useful flag combinations. User-visible ones are:
|
|
||||||
*
|
|
||||||
* VIPS_ARGUMENT_REQUIRED_INPUT Eg. the "left" argument for an add operation
|
|
||||||
*
|
|
||||||
* VIPS_ARGUMENT_OPTIONAL_INPUT Eg. the "caption" for an object
|
|
||||||
*
|
|
||||||
* VIPS_ARGUMENT_REQUIRED_OUTPUT Eg. the "result" of an add operation
|
|
||||||
*
|
|
||||||
* VIPS_ARGUMENT_OPTIONAL_OUTPUT Eg. the x pos of the image minimum
|
|
||||||
*
|
|
||||||
* Other combinations are used internally, eg. supplying the cast-table for an
|
|
||||||
* arithmetic operation
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define VIPS_ARGUMENT_REQUIRED_INPUT \
|
|
||||||
(VIPS_ARGUMENT_INPUT | \
|
|
||||||
VIPS_ARGUMENT_REQUIRED | \
|
|
||||||
VIPS_ARGUMENT_CONSTRUCT)
|
|
||||||
|
|
||||||
#define VIPS_ARGUMENT_OPTIONAL_INPUT \
|
|
||||||
(VIPS_ARGUMENT_INPUT | \
|
|
||||||
VIPS_ARGUMENT_CONSTRUCT)
|
|
||||||
|
|
||||||
#define VIPS_ARGUMENT_REQUIRED_OUTPUT \
|
|
||||||
(VIPS_ARGUMENT_OUTPUT | \
|
|
||||||
VIPS_ARGUMENT_REQUIRED | \
|
|
||||||
VIPS_ARGUMENT_CONSTRUCT)
|
|
||||||
|
|
||||||
#define VIPS_ARGUMENT_OPTIONAL_OUTPUT \
|
|
||||||
(VIPS_ARGUMENT_OUTPUT | \
|
|
||||||
VIPS_ARGUMENT_CONSTRUCT)
|
|
||||||
|
|
||||||
#define VIPS_ARG_IMAGE(CLASS, NAME, PRIORITY, LONG, DESC, FLAGS, OFFSET) \
|
|
||||||
{ \
|
|
||||||
GParamSpec *pspec; \
|
|
||||||
\
|
|
||||||
pspec = g_param_spec_object((NAME), (LONG), (DESC), \
|
|
||||||
VIPS_TYPE_IMAGE, \
|
|
||||||
(GParamFlags) (G_PARAM_READWRITE)); \
|
|
||||||
g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
|
|
||||||
vips_argument_get_id(), pspec); \
|
|
||||||
vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
|
|
||||||
pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define VIPS_ARG_OBJECT(CLASS, NAME, PRIORITY, LONG, DESC, FLAGS, OFFSET, TYPE) \
|
|
||||||
{ \
|
|
||||||
GParamSpec *pspec; \
|
|
||||||
\
|
|
||||||
pspec = g_param_spec_object((NAME), (LONG), (DESC), \
|
|
||||||
TYPE, \
|
|
||||||
(GParamFlags) (G_PARAM_READWRITE)); \
|
|
||||||
g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
|
|
||||||
vips_argument_get_id(), pspec); \
|
|
||||||
vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
|
|
||||||
pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define VIPS_ARG_INTERPOLATE(CLASS, NAME, PRIORITY, LONG, DESC, FLAGS, OFFSET) \
|
|
||||||
VIPS_ARG_OBJECT(CLASS, NAME, PRIORITY, LONG, DESC, FLAGS, OFFSET, VIPS_TYPE_INTERPOLATE)
|
|
||||||
|
|
||||||
#define VIPS_ARG_BOOL(CLASS, NAME, PRIORITY, LONG, DESC, \
|
|
||||||
FLAGS, OFFSET, VALUE) \
|
|
||||||
{ \
|
|
||||||
GParamSpec *pspec; \
|
|
||||||
\
|
|
||||||
pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
|
|
||||||
(VALUE), \
|
|
||||||
(GParamFlags) (G_PARAM_READWRITE)); \
|
|
||||||
g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
|
|
||||||
vips_argument_get_id(), pspec); \
|
|
||||||
vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
|
|
||||||
pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define VIPS_ARG_DOUBLE(CLASS, NAME, PRIORITY, LONG, DESC, \
|
|
||||||
FLAGS, OFFSET, MIN, MAX, VALUE) \
|
|
||||||
{ \
|
|
||||||
GParamSpec *pspec; \
|
|
||||||
\
|
|
||||||
pspec = g_param_spec_double((NAME), (LONG), (DESC), \
|
|
||||||
(MIN), (MAX), (VALUE), \
|
|
||||||
(GParamFlags) (G_PARAM_READWRITE)); \
|
|
||||||
g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
|
|
||||||
vips_argument_get_id(), pspec); \
|
|
||||||
vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
|
|
||||||
pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define VIPS_ARG_BOXED(CLASS, NAME, PRIORITY, LONG, DESC, \
|
|
||||||
FLAGS, OFFSET, TYPE) \
|
|
||||||
{ \
|
|
||||||
GParamSpec *pspec; \
|
|
||||||
\
|
|
||||||
pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
|
|
||||||
(TYPE), \
|
|
||||||
(GParamFlags) (G_PARAM_READWRITE)); \
|
|
||||||
g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
|
|
||||||
vips_argument_get_id(), pspec); \
|
|
||||||
vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
|
|
||||||
pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define VIPS_ARG_INT(CLASS, NAME, PRIORITY, LONG, DESC, \
|
|
||||||
FLAGS, OFFSET, MIN, MAX, VALUE) \
|
|
||||||
{ \
|
|
||||||
GParamSpec *pspec; \
|
|
||||||
\
|
|
||||||
pspec = g_param_spec_int((NAME), (LONG), (DESC), \
|
|
||||||
(MIN), (MAX), (VALUE), \
|
|
||||||
(GParamFlags) (G_PARAM_READWRITE)); \
|
|
||||||
g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
|
|
||||||
vips_argument_get_id(), pspec); \
|
|
||||||
vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
|
|
||||||
pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define VIPS_ARG_UINT64(CLASS, NAME, PRIORITY, LONG, DESC, \
|
|
||||||
FLAGS, OFFSET, MIN, MAX, VALUE) \
|
|
||||||
{ \
|
|
||||||
GParamSpec *pspec; \
|
|
||||||
\
|
|
||||||
pspec = g_param_spec_uint64((NAME), (LONG), (DESC), \
|
|
||||||
(MIN), (MAX), (VALUE), \
|
|
||||||
(GParamFlags) (G_PARAM_READWRITE)); \
|
|
||||||
g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
|
|
||||||
vips_argument_get_id(), pspec); \
|
|
||||||
vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
|
|
||||||
pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define VIPS_ARG_ENUM(CLASS, NAME, PRIORITY, LONG, DESC, \
|
|
||||||
FLAGS, OFFSET, TYPE, VALUE) \
|
|
||||||
{ \
|
|
||||||
GParamSpec *pspec; \
|
|
||||||
\
|
|
||||||
pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
|
|
||||||
(TYPE), (VALUE), \
|
|
||||||
(GParamFlags) (G_PARAM_READWRITE)); \
|
|
||||||
g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
|
|
||||||
vips_argument_get_id(), pspec); \
|
|
||||||
vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
|
|
||||||
pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define VIPS_ARG_FLAGS(CLASS, NAME, PRIORITY, LONG, DESC, \
|
|
||||||
FLAGS, OFFSET, TYPE, VALUE) \
|
|
||||||
{ \
|
|
||||||
GParamSpec *pspec; \
|
|
||||||
\
|
|
||||||
pspec = g_param_spec_flags((NAME), (LONG), (DESC), \
|
|
||||||
(TYPE), (VALUE), \
|
|
||||||
(GParamFlags) (G_PARAM_READWRITE)); \
|
|
||||||
g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
|
|
||||||
vips_argument_get_id(), pspec); \
|
|
||||||
vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
|
|
||||||
pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define VIPS_ARG_STRING(CLASS, NAME, PRIORITY, LONG, DESC, FLAGS, OFFSET, \
|
|
||||||
VALUE) \
|
|
||||||
{ \
|
|
||||||
GParamSpec *pspec; \
|
|
||||||
\
|
|
||||||
pspec = g_param_spec_string((NAME), (LONG), (DESC), \
|
|
||||||
(VALUE), \
|
|
||||||
(GParamFlags) (G_PARAM_READWRITE)); \
|
|
||||||
g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
|
|
||||||
vips_argument_get_id(), pspec); \
|
|
||||||
vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
|
|
||||||
pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define VIPS_ARG_POINTER(CLASS, NAME, PRIORITY, LONG, DESC, FLAGS, OFFSET) \
|
|
||||||
{ \
|
|
||||||
GParamSpec *pspec; \
|
|
||||||
\
|
|
||||||
pspec = g_param_spec_pointer((NAME), (LONG), (DESC), \
|
|
||||||
(GParamFlags) (G_PARAM_READWRITE)); \
|
|
||||||
g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
|
|
||||||
vips_argument_get_id(), pspec); \
|
|
||||||
vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
|
|
||||||
pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Keep one of these for every argument.
|
|
||||||
*/
|
|
||||||
typedef struct _VipsArgument {
|
|
||||||
GParamSpec *pspec; /* pspec for this argument */
|
|
||||||
|
|
||||||
/* More stuff, see below */
|
|
||||||
} VipsArgument;
|
|
||||||
|
|
||||||
/* Keep one of these in the class struct for every argument.
|
|
||||||
*/
|
|
||||||
typedef struct _VipsArgumentClass {
|
|
||||||
VipsArgument parent;
|
|
||||||
|
|
||||||
/* The class of the object we are an arg for.
|
|
||||||
*/
|
|
||||||
VipsObjectClass *object_class;
|
|
||||||
|
|
||||||
VipsArgumentFlags flags;
|
|
||||||
int priority; /* Order args by this */
|
|
||||||
guint offset; /* G_STRUCT_OFFSET of member in object */
|
|
||||||
} VipsArgumentClass;
|
|
||||||
|
|
||||||
/* Keep one of these in the object struct for every argument instance.
|
|
||||||
*/
|
|
||||||
typedef struct _VipsArgumentInstance {
|
|
||||||
VipsArgument parent;
|
|
||||||
|
|
||||||
/* The class we are part of.
|
|
||||||
*/
|
|
||||||
VipsArgumentClass *argument_class;
|
|
||||||
|
|
||||||
/* The object we are attached to.
|
|
||||||
*/
|
|
||||||
VipsObject *object;
|
|
||||||
|
|
||||||
/* Has been set.
|
|
||||||
*/
|
|
||||||
gboolean assigned;
|
|
||||||
|
|
||||||
/* If this is an output argument, keep the id of our "close" handler
|
|
||||||
* here.
|
|
||||||
*/
|
|
||||||
gulong close_id;
|
|
||||||
|
|
||||||
/* We need to listen for "invalidate" on input images and send our own
|
|
||||||
* "invalidate" out. If we go, we need to disconnect.
|
|
||||||
*/
|
|
||||||
gulong invalidate_id;
|
|
||||||
} VipsArgumentInstance;
|
|
||||||
|
|
||||||
/* Need to look up our VipsArgument structs from a pspec. Just hash the
|
|
||||||
* pointer (ie. we assume pspecs are never shared, is this correct?)
|
|
||||||
*/
|
|
||||||
typedef GHashTable VipsArgumentTable;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_argument_get_id(void);
|
|
||||||
void vips__object_set_member(VipsObject *object, GParamSpec *pspec,
|
|
||||||
GObject **member, GObject *argument);
|
|
||||||
typedef void *(*VipsArgumentMapFn)(VipsObject *object, GParamSpec *pspec,
|
|
||||||
VipsArgumentClass *argument_class,
|
|
||||||
VipsArgumentInstance *argument_instance, void *a, void *b);
|
|
||||||
VIPS_API
|
|
||||||
void *vips_argument_map(VipsObject *object,
|
|
||||||
VipsArgumentMapFn fn, void *a, void *b);
|
|
||||||
VIPS_API
|
|
||||||
int vips_object_get_args(VipsObject *object,
|
|
||||||
const char ***names, int **flags, int *n_args);
|
|
||||||
typedef void *(*VipsArgumentClassMapFn)(VipsObjectClass *object_class,
|
|
||||||
GParamSpec *pspec,
|
|
||||||
VipsArgumentClass *argument_class, void *a, void *b);
|
|
||||||
VIPS_API
|
|
||||||
void *vips_argument_class_map(VipsObjectClass *object_class,
|
|
||||||
VipsArgumentClassMapFn fn, void *a, void *b);
|
|
||||||
VIPS_API
|
|
||||||
gboolean vips_argument_class_needsstring(VipsArgumentClass *argument_class);
|
|
||||||
VIPS_API
|
|
||||||
int vips_object_get_argument(VipsObject *object, const char *name,
|
|
||||||
GParamSpec **pspec,
|
|
||||||
VipsArgumentClass **argument_class,
|
|
||||||
VipsArgumentInstance **argument_instance);
|
|
||||||
VIPS_API
|
|
||||||
gboolean vips_object_argument_isset(VipsObject *object, const char *name);
|
|
||||||
VIPS_API
|
|
||||||
VipsArgumentFlags vips_object_get_argument_flags(VipsObject *object,
|
|
||||||
const char *name);
|
|
||||||
VIPS_API
|
|
||||||
int vips_object_get_argument_priority(VipsObject *object, const char *name);
|
|
||||||
|
|
||||||
/* We have to loop over an objects args in several places, and we can't always
|
|
||||||
* use vips_argument_map(), the preferred looper. Have the loop code as a
|
|
||||||
* macro as well for these odd cases.
|
|
||||||
*/
|
|
||||||
#define VIPS_ARGUMENT_FOR_ALL(OBJECT, PSPEC, ARG_CLASS, ARG_INSTANCE) \
|
|
||||||
{ \
|
|
||||||
VipsObjectClass *object_class = VIPS_OBJECT_GET_CLASS(OBJECT); \
|
|
||||||
GSList *p; \
|
|
||||||
\
|
|
||||||
for (p = object_class->argument_table_traverse; p; p = p->next) { \
|
|
||||||
VipsArgumentClass *ARG_CLASS = \
|
|
||||||
(VipsArgumentClass *) p->data; \
|
|
||||||
VipsArgument *argument = (VipsArgument *) argument_class; \
|
|
||||||
GParamSpec *PSPEC = argument->pspec; \
|
|
||||||
VipsArgumentInstance *ARG_INSTANCE G_GNUC_UNUSED = \
|
|
||||||
vips__argument_get_instance(argument_class, \
|
|
||||||
VIPS_OBJECT(OBJECT));
|
|
||||||
|
|
||||||
#define VIPS_ARGUMENT_FOR_ALL_END \
|
|
||||||
} \
|
|
||||||
}
|
|
||||||
|
|
||||||
/* And some macros to collect args from a va list.
|
|
||||||
*
|
|
||||||
* Use something like this:
|
|
||||||
*
|
|
||||||
* GParamSpec *pspec;
|
|
||||||
* VipsArgumentClass *argument_class;
|
|
||||||
* VipsArgumentInstance *argument_instance;
|
|
||||||
*
|
|
||||||
* if (vips_object_get_argument(VIPS_OBJECT(operation), name,
|
|
||||||
* &pspec, &argument_class, &argument_instance))
|
|
||||||
* return -1;
|
|
||||||
*
|
|
||||||
* VIPS_ARGUMENT_COLLECT_SET(pspec, argument_class, ap);
|
|
||||||
*
|
|
||||||
* GValue value holds the value of an input argument, do
|
|
||||||
* something with it
|
|
||||||
*
|
|
||||||
* VIPS_ARGUMENT_COLLECT_GET(pspec, argument_class, ap);
|
|
||||||
*
|
|
||||||
* void **arg points to where to write an output argument
|
|
||||||
*
|
|
||||||
* VIPS_ARGUMENT_COLLECT_END
|
|
||||||
*/
|
|
||||||
#define VIPS_ARGUMENT_COLLECT_SET(PSPEC, ARG_CLASS, AP) \
|
|
||||||
if ((ARG_CLASS->flags & VIPS_ARGUMENT_INPUT)) { \
|
|
||||||
GValue value = G_VALUE_INIT; \
|
|
||||||
gchar *error = NULL; \
|
|
||||||
\
|
|
||||||
/* Input args are given inline, eg. ("factor", 12.0) \
|
|
||||||
* and must be collected. \
|
|
||||||
*/ \
|
|
||||||
G_VALUE_COLLECT_INIT(&value, \
|
|
||||||
G_PARAM_SPEC_VALUE_TYPE(PSPEC), AP, 0, &error); \
|
|
||||||
\
|
|
||||||
/* Don't bother with the error message. \
|
|
||||||
*/ \
|
|
||||||
if (error) { \
|
|
||||||
VIPS_DEBUG_MSG("VIPS_OBJECT_COLLECT_SET: err\n"); \
|
|
||||||
g_free(error); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define VIPS_ARGUMENT_COLLECT_GET(PSPEC, ARG_CLASS, AP) \
|
|
||||||
g_value_unset(&value); \
|
|
||||||
} \
|
|
||||||
else if ((ARG_CLASS->flags & VIPS_ARGUMENT_OUTPUT)) \
|
|
||||||
{ \
|
|
||||||
void **arg G_GNUC_UNUSED; \
|
|
||||||
\
|
|
||||||
/* Output args are a pointer to where to send the \
|
|
||||||
* result. \
|
|
||||||
*/ \
|
|
||||||
arg = va_arg(AP, void **);
|
|
||||||
|
|
||||||
#define VIPS_ARGUMENT_COLLECT_END \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define VIPS_TYPE_OBJECT (vips_object_get_type())
|
|
||||||
#define VIPS_OBJECT(obj) \
|
|
||||||
(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
|
|
||||||
#define VIPS_OBJECT_CLASS(klass) \
|
|
||||||
(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
|
|
||||||
#define VIPS_IS_OBJECT(obj) \
|
|
||||||
(G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_OBJECT))
|
|
||||||
#define VIPS_IS_OBJECT_CLASS(klass) \
|
|
||||||
(G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_OBJECT))
|
|
||||||
#define VIPS_OBJECT_GET_CLASS(obj) \
|
|
||||||
(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
|
|
||||||
|
|
||||||
struct _VipsObject {
|
|
||||||
GObject parent_instance;
|
|
||||||
|
|
||||||
/* Set after ->build() has run successfully: construct is fully done
|
|
||||||
* and checked.
|
|
||||||
*/
|
|
||||||
gboolean constructed;
|
|
||||||
|
|
||||||
/* Set for static objects which are allocated at startup and never
|
|
||||||
* freed. These objects are omitted from leak reports.
|
|
||||||
*/
|
|
||||||
gboolean static_object;
|
|
||||||
|
|
||||||
/* Table of argument instances for this class and any derived classes.
|
|
||||||
*/
|
|
||||||
VipsArgumentTable *argument_table;
|
|
||||||
|
|
||||||
/* Class properties (see below), duplicated in the instance so we can
|
|
||||||
* get at them easily via the property system.
|
|
||||||
*/
|
|
||||||
char *nickname;
|
|
||||||
char *description;
|
|
||||||
|
|
||||||
/* The pre/post/close callbacks are all fire-once.
|
|
||||||
*/
|
|
||||||
gboolean preclose;
|
|
||||||
gboolean close;
|
|
||||||
gboolean postclose;
|
|
||||||
|
|
||||||
/* Total memory allocated relative to this object, handy for
|
|
||||||
* profiling.
|
|
||||||
*/
|
|
||||||
size_t local_memory;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct _VipsObjectClass {
|
|
||||||
GObjectClass parent_class;
|
|
||||||
|
|
||||||
/* Build the object ... all argument properties have been set,
|
|
||||||
* now build the thing.
|
|
||||||
*/
|
|
||||||
int (*build)(VipsObject *object);
|
|
||||||
|
|
||||||
/* Just after build ... the object is fully ready for work.
|
|
||||||
*/
|
|
||||||
int (*postbuild)(VipsObject *object, void *data);
|
|
||||||
|
|
||||||
/* Try to print something about the class, handy for help displays.
|
|
||||||
* Keep to one line.
|
|
||||||
*/
|
|
||||||
void (*summary_class)(struct _VipsObjectClass *cls, VipsBuf *buf);
|
|
||||||
|
|
||||||
/* Try to print a one-line summary for the object, the user can see
|
|
||||||
* this output via things like "header fred.tif", --vips-cache-trace,
|
|
||||||
* etc.
|
|
||||||
*/
|
|
||||||
void (*summary)(VipsObject *object, VipsBuf *buf);
|
|
||||||
|
|
||||||
/* Try to print everything about the object, handy for debugging.
|
|
||||||
*/
|
|
||||||
void (*dump)(VipsObject *object, VipsBuf *buf);
|
|
||||||
|
|
||||||
/* Sanity-check the object. Print messages and stuff.
|
|
||||||
* Handy for debugging.
|
|
||||||
*/
|
|
||||||
void (*sanity)(VipsObject *object, VipsBuf *buf);
|
|
||||||
|
|
||||||
/* Rewind. Save and restore any stuff that needs to survive a
|
|
||||||
* dispose().
|
|
||||||
*/
|
|
||||||
void (*rewind)(VipsObject *object);
|
|
||||||
|
|
||||||
/* Just before close, everything is still alive.
|
|
||||||
*/
|
|
||||||
void (*preclose)(VipsObject *object);
|
|
||||||
|
|
||||||
/* Close, time to free stuff.
|
|
||||||
*/
|
|
||||||
void (*close)(VipsObject *object);
|
|
||||||
|
|
||||||
/* Post-close, everything is dead, except the VipsObject pointer.
|
|
||||||
* Useful for eg. deleting the file associated with a temp image.
|
|
||||||
*/
|
|
||||||
void (*postclose)(VipsObject *object);
|
|
||||||
|
|
||||||
/* The CLI interface. Implement these four to get CLI input and output
|
|
||||||
* for your object.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Given a command-line arg (eg. a filename), make an instance of the
|
|
||||||
* object. Just do the g_object_new(), don't call _build().
|
|
||||||
*
|
|
||||||
* Don't call this directly, see vips_object_new_from_string().
|
|
||||||
*/
|
|
||||||
VipsObject *(*new_from_string)(const char *string);
|
|
||||||
|
|
||||||
/* The inverse of ^^. Given an object, output what ->new_from_string()
|
|
||||||
* would have been given to make that object.
|
|
||||||
*/
|
|
||||||
void (*to_string)(VipsObject *object, VipsBuf *buf);
|
|
||||||
|
|
||||||
/* Does this output arg need an arg from the command line? Image
|
|
||||||
* output, for example, needs a filename to write to.
|
|
||||||
*/
|
|
||||||
gboolean output_needs_arg;
|
|
||||||
|
|
||||||
/* Write the object to the string. Return 0 for success, or -1 on
|
|
||||||
* error, setting vips_error(). string is NULL if output_needs_arg()
|
|
||||||
* was FALSE.
|
|
||||||
*/
|
|
||||||
int (*output_to_arg)(VipsObject *object, const char *string);
|
|
||||||
|
|
||||||
/* Class nickname, eg. "VipsInterpolateBicubic" has "bicubic" as a
|
|
||||||
* nickname. Not internationalised.
|
|
||||||
*/
|
|
||||||
const char *nickname;
|
|
||||||
|
|
||||||
/* Class description. Used for help messages, so internationalised.
|
|
||||||
*/
|
|
||||||
const char *description;
|
|
||||||
|
|
||||||
/* Hash from pspec to VipsArgumentClass.
|
|
||||||
*
|
|
||||||
* This records the VipsArgumentClass for every pspec used in
|
|
||||||
* VipsObject and any subclass (ie. everywhere), so it's huge. Don't
|
|
||||||
* loop over this hash! Fine for lookups though.
|
|
||||||
*/
|
|
||||||
VipsArgumentTable *argument_table;
|
|
||||||
|
|
||||||
/* A sorted (by priority) list of the VipsArgumentClass for this class
|
|
||||||
* and any superclasses. This is small and specific to this class.
|
|
||||||
*
|
|
||||||
* Use the stored GType to work out when to restart the list for a
|
|
||||||
* subclass.
|
|
||||||
*/
|
|
||||||
GSList *argument_table_traverse;
|
|
||||||
GType argument_table_traverse_gtype;
|
|
||||||
|
|
||||||
/* This class is deprecated and therefore hidden from various UI bits.
|
|
||||||
*
|
|
||||||
* VipsOperation has a deprecated flag, use that in preference to this
|
|
||||||
* if you can.
|
|
||||||
*/
|
|
||||||
gboolean deprecated;
|
|
||||||
|
|
||||||
/* Reserved for future expansion.
|
|
||||||
*/
|
|
||||||
void (*_vips_reserved1)(void);
|
|
||||||
void (*_vips_reserved2)(void);
|
|
||||||
void (*_vips_reserved3)(void);
|
|
||||||
void (*_vips_reserved4)(void);
|
|
||||||
};
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
gboolean vips_value_is_null(GParamSpec *psoec, const GValue *value);
|
|
||||||
VIPS_API
|
|
||||||
void vips_object_set_property(GObject *gobject,
|
|
||||||
guint property_id, const GValue *value, GParamSpec *pspec);
|
|
||||||
VIPS_API
|
|
||||||
void vips_object_get_property(GObject *gobject,
|
|
||||||
guint property_id, GValue *value, GParamSpec *pspec);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
void vips_object_preclose(VipsObject *object);
|
|
||||||
VIPS_API
|
|
||||||
int vips_object_build(VipsObject *object);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
void vips_object_summary_class(VipsObjectClass *klass, VipsBuf *buf);
|
|
||||||
VIPS_API
|
|
||||||
void vips_object_summary(VipsObject *object, VipsBuf *buf);
|
|
||||||
VIPS_API
|
|
||||||
void vips_object_dump(VipsObject *object, VipsBuf *buf);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
void vips_object_print_summary_class(VipsObjectClass *klass);
|
|
||||||
VIPS_API
|
|
||||||
void vips_object_print_summary(VipsObject *object);
|
|
||||||
VIPS_API
|
|
||||||
void vips_object_print_dump(VipsObject *object);
|
|
||||||
VIPS_API
|
|
||||||
void vips_object_print_name(VipsObject *object);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
gboolean vips_object_sanity(VipsObject *object);
|
|
||||||
|
|
||||||
/* Don't put spaces around void here, it breaks gtk-doc.
|
|
||||||
*/
|
|
||||||
VIPS_API
|
|
||||||
GType vips_object_get_type(void);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
void vips_object_class_install_argument(VipsObjectClass *cls,
|
|
||||||
GParamSpec *pspec, VipsArgumentFlags flags,
|
|
||||||
int priority, guint offset);
|
|
||||||
VIPS_API
|
|
||||||
int vips_object_set_argument_from_string(VipsObject *object,
|
|
||||||
const char *name, const char *value);
|
|
||||||
VIPS_API
|
|
||||||
gboolean vips_object_argument_needsstring(VipsObject *object,
|
|
||||||
const char *name);
|
|
||||||
VIPS_API
|
|
||||||
int vips_object_get_argument_to_string(VipsObject *object,
|
|
||||||
const char *name, const char *arg);
|
|
||||||
VIPS_API
|
|
||||||
int vips_object_set_required(VipsObject *object, const char *value);
|
|
||||||
|
|
||||||
typedef void *(*VipsObjectSetArguments)(VipsObject *object, void *a, void *b);
|
|
||||||
VIPS_API
|
|
||||||
VipsObject *vips_object_new(GType type,
|
|
||||||
VipsObjectSetArguments set, void *a, void *b);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_object_set_valist(VipsObject *object, va_list ap);
|
|
||||||
VIPS_API
|
|
||||||
int vips_object_set(VipsObject *object, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_object_set_from_string(VipsObject *object, const char *string);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
VipsObject *vips_object_new_from_string(VipsObjectClass *object_class,
|
|
||||||
const char *p);
|
|
||||||
VIPS_API
|
|
||||||
void vips_object_to_string(VipsObject *object, VipsBuf *buf);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
void *vips_object_map(VipsSListMap2Fn fn, void *a, void *b);
|
|
||||||
|
|
||||||
typedef void *(*VipsTypeMapFn)(GType type, void *a);
|
|
||||||
typedef void *(*VipsTypeMap2Fn)(GType type, void *a, void *b);
|
|
||||||
typedef void *(*VipsClassMapFn)(VipsObjectClass *cls, void *a);
|
|
||||||
VIPS_API
|
|
||||||
void *vips_type_map(GType base, VipsTypeMap2Fn fn, void *a, void *b);
|
|
||||||
VIPS_API
|
|
||||||
void *vips_type_map_all(GType base, VipsTypeMapFn fn, void *a);
|
|
||||||
VIPS_API
|
|
||||||
int vips_type_depth(GType type);
|
|
||||||
VIPS_API
|
|
||||||
GType vips_type_find(const char *basename, const char *nickname);
|
|
||||||
VIPS_API
|
|
||||||
const char *vips_nickname_find(GType type);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
void *vips_class_map_all(GType type, VipsClassMapFn fn, void *a);
|
|
||||||
VIPS_API
|
|
||||||
const VipsObjectClass *vips_class_find(const char *basename,
|
|
||||||
const char *nickname);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
VipsObject **vips_object_local_array(VipsObject *parent, int n);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
void vips_object_local_cb(VipsObject *vobject, GObject *gobject);
|
|
||||||
#define vips_object_local(V, G) \
|
|
||||||
(g_signal_connect(V, "close", G_CALLBACK(vips_object_local_cb), G))
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
void vips_object_set_static(VipsObject *object, gboolean static_object);
|
|
||||||
VIPS_API
|
|
||||||
void vips_object_print_all(void);
|
|
||||||
VIPS_API
|
|
||||||
void vips_object_sanity_all(void);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
void vips_object_rewind(VipsObject *object);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
void vips_object_unref_outputs(VipsObject *object);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
const char *vips_object_get_description(VipsObject *object);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
#endif /*VIPS_OBJECT_H*/
|
|
||||||
@@ -1,178 +0,0 @@
|
|||||||
/* base class for all vips operations
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
Copyright (C) 1991-2005 The National Gallery
|
|
||||||
|
|
||||||
This library is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU Lesser General Public
|
|
||||||
License as published by the Free Software Foundation; either
|
|
||||||
version 2.1 of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This library is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public
|
|
||||||
License along with this library; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
||||||
02110-1301 USA
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef VIPS_OPERATION_H
|
|
||||||
#define VIPS_OPERATION_H
|
|
||||||
|
|
||||||
#include <glib.h>
|
|
||||||
#include <glib-object.h>
|
|
||||||
#include <vips/object.h>
|
|
||||||
#include <vips/buf.h>
|
|
||||||
#include <vips/basic.h>
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
typedef enum /*< flags >*/ {
|
|
||||||
VIPS_OPERATION_NONE = 0,
|
|
||||||
VIPS_OPERATION_SEQUENTIAL = 1,
|
|
||||||
VIPS_OPERATION_SEQUENTIAL_UNBUFFERED = 2,
|
|
||||||
VIPS_OPERATION_NOCACHE = 4,
|
|
||||||
VIPS_OPERATION_DEPRECATED = 8,
|
|
||||||
VIPS_OPERATION_UNTRUSTED = 16,
|
|
||||||
VIPS_OPERATION_BLOCKED = 32,
|
|
||||||
VIPS_OPERATION_REVALIDATE = 64
|
|
||||||
} VipsOperationFlags;
|
|
||||||
|
|
||||||
#define VIPS_TYPE_OPERATION (vips_operation_get_type())
|
|
||||||
#define VIPS_OPERATION(obj) \
|
|
||||||
(G_TYPE_CHECK_INSTANCE_CAST((obj), \
|
|
||||||
VIPS_TYPE_OPERATION, VipsOperation))
|
|
||||||
#define VIPS_OPERATION_CLASS(klass) \
|
|
||||||
(G_TYPE_CHECK_CLASS_CAST((klass), \
|
|
||||||
VIPS_TYPE_OPERATION, VipsOperationClass))
|
|
||||||
#define VIPS_IS_OPERATION(obj) \
|
|
||||||
(G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_OPERATION))
|
|
||||||
#define VIPS_IS_OPERATION_CLASS(klass) \
|
|
||||||
(G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_OPERATION))
|
|
||||||
#define VIPS_OPERATION_GET_CLASS(obj) \
|
|
||||||
(G_TYPE_INSTANCE_GET_CLASS((obj), \
|
|
||||||
VIPS_TYPE_OPERATION, VipsOperationClass))
|
|
||||||
|
|
||||||
typedef gboolean (*VipsOperationBuildFn)(VipsObject *object);
|
|
||||||
|
|
||||||
struct _VipsOperation {
|
|
||||||
VipsObject parent_instance;
|
|
||||||
|
|
||||||
/* Keep the hash here.
|
|
||||||
*/
|
|
||||||
guint hash;
|
|
||||||
gboolean found_hash;
|
|
||||||
|
|
||||||
/* Pixels calculated ... handy for measuring over-calculation.
|
|
||||||
*/
|
|
||||||
int pixels;
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct _VipsOperationClass {
|
|
||||||
VipsObjectClass parent_class;
|
|
||||||
|
|
||||||
/* Print the usage message.
|
|
||||||
*/
|
|
||||||
void (*usage)(struct _VipsOperationClass *cls, VipsBuf *buf);
|
|
||||||
|
|
||||||
/* Return a set of operation flags.
|
|
||||||
*/
|
|
||||||
VipsOperationFlags (*get_flags)(VipsOperation *operation);
|
|
||||||
VipsOperationFlags flags;
|
|
||||||
|
|
||||||
/* One of our input images has signalled "invalidate". The cache uses
|
|
||||||
* VipsOperation::invalidate to drop dirty ops.
|
|
||||||
*/
|
|
||||||
void (*invalidate)(VipsOperation *operation);
|
|
||||||
} VipsOperationClass;
|
|
||||||
|
|
||||||
/* Don't put spaces around void here, it breaks gtk-doc.
|
|
||||||
*/
|
|
||||||
VIPS_API
|
|
||||||
GType vips_operation_get_type(void);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
VipsOperationFlags vips_operation_get_flags(VipsOperation *operation);
|
|
||||||
VIPS_API
|
|
||||||
void vips_operation_class_print_usage(VipsOperationClass *operation_class);
|
|
||||||
VIPS_API
|
|
||||||
void vips_operation_invalidate(VipsOperation *operation);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_operation_call_valist(VipsOperation *operation, va_list ap);
|
|
||||||
VIPS_API
|
|
||||||
VipsOperation *vips_operation_new(const char *name);
|
|
||||||
VIPS_API
|
|
||||||
int vips_call_required_optional(VipsOperation **operation,
|
|
||||||
va_list required, va_list optional);
|
|
||||||
VIPS_API
|
|
||||||
int vips_call(const char *operation_name, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_call_split(const char *operation_name, va_list optional, ...);
|
|
||||||
VIPS_API
|
|
||||||
int vips_call_split_option_string(const char *operation_name,
|
|
||||||
const char *option_string, va_list optional, ...);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
void vips_call_options(GOptionGroup *group, VipsOperation *operation);
|
|
||||||
VIPS_API
|
|
||||||
int vips_call_argv(VipsOperation *operation, int argc, char **argv);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
void vips_cache_drop_all(void);
|
|
||||||
VIPS_API
|
|
||||||
int vips_cache_operation_buildp(VipsOperation **operation);
|
|
||||||
VIPS_API
|
|
||||||
VipsOperation *vips_cache_operation_build(VipsOperation *operation);
|
|
||||||
VIPS_API
|
|
||||||
void vips_cache_print(void);
|
|
||||||
VIPS_API
|
|
||||||
void vips_cache_set_max(int max);
|
|
||||||
VIPS_API
|
|
||||||
void vips_cache_set_max_mem(size_t max_mem);
|
|
||||||
VIPS_API
|
|
||||||
int vips_cache_get_max(void);
|
|
||||||
VIPS_API
|
|
||||||
int vips_cache_get_size(void);
|
|
||||||
VIPS_API
|
|
||||||
size_t vips_cache_get_max_mem(void);
|
|
||||||
VIPS_API
|
|
||||||
int vips_cache_get_max_files(void);
|
|
||||||
VIPS_API
|
|
||||||
void vips_cache_set_max_files(int max_files);
|
|
||||||
VIPS_API
|
|
||||||
void vips_cache_set_dump(gboolean dump);
|
|
||||||
VIPS_API
|
|
||||||
void vips_cache_set_trace(gboolean trace);
|
|
||||||
|
|
||||||
/* Part of threadpool, really, but we want these in a header that gets scanned
|
|
||||||
* for our typelib.
|
|
||||||
*/
|
|
||||||
VIPS_API
|
|
||||||
void vips_concurrency_set(int concurrency);
|
|
||||||
VIPS_API
|
|
||||||
int vips_concurrency_get(void);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
void vips_operation_block_set(const char *name, gboolean state);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
#endif /*VIPS_OPERATION_H*/
|
|
||||||
@@ -1,234 +0,0 @@
|
|||||||
/* Declarations which are public-facing, but private. See internal.h for
|
|
||||||
* declarations which are only used internally by vips and which are not
|
|
||||||
* externally visible.
|
|
||||||
*
|
|
||||||
* 6/7/09
|
|
||||||
* - from vips.h
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
This file is part of VIPS.
|
|
||||||
|
|
||||||
VIPS is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
||||||
02110-1301 USA
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef VIPS_PRIVATE_H
|
|
||||||
#define VIPS_PRIVATE_H
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
#define VIPS_SPARE (8)
|
|
||||||
|
|
||||||
/* Private to iofuncs: the minimum number of scanlines we add above and below
|
|
||||||
* the window as a margin for slop.
|
|
||||||
*/
|
|
||||||
#define VIPS__WINDOW_MARGIN_PIXELS (128)
|
|
||||||
|
|
||||||
/* Private to iofuncs: add at least this many bytes above and below the window.
|
|
||||||
* There's no point mapping just a few KB of a small image.
|
|
||||||
*/
|
|
||||||
#define VIPS__WINDOW_MARGIN_BYTES (1024 * 1024 * 10)
|
|
||||||
|
|
||||||
/* sizeof() a VIPS header on disc.
|
|
||||||
*/
|
|
||||||
#define VIPS_SIZEOF_HEADER (64)
|
|
||||||
|
|
||||||
/* What we track for each mmap window. Have a list of these on an openin
|
|
||||||
* VipsImage.
|
|
||||||
*/
|
|
||||||
typedef struct {
|
|
||||||
int ref_count; /* # of regions referencing us */
|
|
||||||
struct _VipsImage *im; /* VipsImage we are attached to */
|
|
||||||
|
|
||||||
int top; /* Area of image we have mapped, in pixels */
|
|
||||||
int height;
|
|
||||||
VipsPel *data; /* First pixel of line 'top' */
|
|
||||||
|
|
||||||
void *baseaddr; /* Base of window */
|
|
||||||
size_t length; /* Size of window */
|
|
||||||
} VipsWindow;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_window_unref(VipsWindow *window);
|
|
||||||
VIPS_API
|
|
||||||
void vips_window_print(VipsWindow *window);
|
|
||||||
|
|
||||||
/* Per-thread buffer state. Held in a GPrivate.
|
|
||||||
*/
|
|
||||||
typedef struct {
|
|
||||||
GHashTable *hash; /* VipsImage -> VipsBufferCache* */
|
|
||||||
GThread *thread; /* Just for sanity checking */
|
|
||||||
} VipsBufferThread;
|
|
||||||
|
|
||||||
/* Per-image buffer cache. This keeps a list of "done" VipsBuffer that this
|
|
||||||
* worker has generated. We use this to reuse results within a thread.
|
|
||||||
*
|
|
||||||
* Hash to this from VipsBufferThread::hash.
|
|
||||||
* We can't store the GSList directly in the hash table as GHashTable lacks an
|
|
||||||
* update operation and we'd need to _remove() and _insert() on every list
|
|
||||||
* operation.
|
|
||||||
*/
|
|
||||||
typedef struct _VipsBufferCache {
|
|
||||||
GSList *buffers; /* GSList of "done" VipsBuffer* */
|
|
||||||
GThread *thread; /* Just for sanity checking */
|
|
||||||
struct _VipsImage *im;
|
|
||||||
VipsBufferThread *buffer_thread;
|
|
||||||
GSList *reserve; /* VipsBuffer kept in reserve */
|
|
||||||
int n_reserve; /* Number in reserve */
|
|
||||||
} VipsBufferCache;
|
|
||||||
|
|
||||||
/* What we track for each pixel buffer. These can move between caches and
|
|
||||||
* between threads, but not between images.
|
|
||||||
*
|
|
||||||
* Moving between threads is difficult, use region ownership stuff.
|
|
||||||
*/
|
|
||||||
typedef struct _VipsBuffer {
|
|
||||||
int ref_count; /* # of regions referencing us */
|
|
||||||
struct _VipsImage *im; /* VipsImage we are attached to */
|
|
||||||
|
|
||||||
VipsRect area; /* Area this pixel buffer covers */
|
|
||||||
gboolean done; /* Calculated and in a cache */
|
|
||||||
VipsBufferCache *cache; /* The cache this buffer is published on */
|
|
||||||
VipsPel *buf; /* Private malloc() area */
|
|
||||||
size_t bsize; /* Size of private malloc() */
|
|
||||||
} VipsBuffer;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
void vips_buffer_dump_all(void);
|
|
||||||
VIPS_API
|
|
||||||
void vips_buffer_done(VipsBuffer *buffer);
|
|
||||||
VIPS_API
|
|
||||||
void vips_buffer_undone(VipsBuffer *buffer);
|
|
||||||
VIPS_API
|
|
||||||
void vips_buffer_unref(VipsBuffer *buffer);
|
|
||||||
VIPS_API
|
|
||||||
VipsBuffer *vips_buffer_new(struct _VipsImage *im, VipsRect *area);
|
|
||||||
VIPS_API
|
|
||||||
VipsBuffer *vips_buffer_ref(struct _VipsImage *im, VipsRect *area);
|
|
||||||
VIPS_API
|
|
||||||
VipsBuffer *vips_buffer_unref_ref(VipsBuffer *buffer,
|
|
||||||
struct _VipsImage *im, VipsRect *area);
|
|
||||||
VIPS_API
|
|
||||||
void vips_buffer_print(VipsBuffer *buffer);
|
|
||||||
|
|
||||||
void vips__render_shutdown(void);
|
|
||||||
|
|
||||||
/* Sections of region.h that are private to VIPS.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Region types.
|
|
||||||
*/
|
|
||||||
typedef enum _RegionType {
|
|
||||||
VIPS_REGION_NONE,
|
|
||||||
VIPS_REGION_BUFFER, /* A VipsBuffer */
|
|
||||||
VIPS_REGION_OTHER_REGION, /* Memory on another region */
|
|
||||||
VIPS_REGION_OTHER_IMAGE, /* Memory on another image */
|
|
||||||
VIPS_REGION_WINDOW /* A VipsWindow on fd */
|
|
||||||
} RegionType;
|
|
||||||
|
|
||||||
/* Private to iofuncs: the size of the `tiles' requested by
|
|
||||||
* vips_image_generate() when acting as a data sink.
|
|
||||||
*/
|
|
||||||
#define VIPS__TILE_WIDTH (128)
|
|
||||||
#define VIPS__TILE_HEIGHT (128)
|
|
||||||
|
|
||||||
/* The height of the strips for the other two request styles.
|
|
||||||
*/
|
|
||||||
#define VIPS__THINSTRIP_HEIGHT (1)
|
|
||||||
#define VIPS__FATSTRIP_HEIGHT (16)
|
|
||||||
|
|
||||||
/* Functions on regions.
|
|
||||||
*/
|
|
||||||
struct _VipsRegion;
|
|
||||||
void vips__region_take_ownership(struct _VipsRegion *reg);
|
|
||||||
void vips__region_check_ownership(struct _VipsRegion *reg);
|
|
||||||
/* TODO(kleisauke): VIPS_API is required by vipsdisp.
|
|
||||||
*/
|
|
||||||
VIPS_API
|
|
||||||
void vips__region_no_ownership(struct _VipsRegion *reg);
|
|
||||||
|
|
||||||
typedef int (*VipsRegionFillFn)(struct _VipsRegion *, void *);
|
|
||||||
VIPS_API
|
|
||||||
int vips_region_fill(struct _VipsRegion *reg,
|
|
||||||
const VipsRect *r, VipsRegionFillFn fn, void *a);
|
|
||||||
|
|
||||||
int vips__image_wio_output(struct _VipsImage *image);
|
|
||||||
int vips__image_pio_output(struct _VipsImage *image);
|
|
||||||
|
|
||||||
/* VIPS_ARGUMENT_FOR_ALL() needs to have this visible.
|
|
||||||
*/
|
|
||||||
VIPS_API
|
|
||||||
VipsArgumentInstance *vips__argument_get_instance(
|
|
||||||
VipsArgumentClass *argument_class,
|
|
||||||
VipsObject *object);
|
|
||||||
VipsArgument *vips__argument_table_lookup(VipsArgumentTable *table,
|
|
||||||
GParamSpec *pspec);
|
|
||||||
|
|
||||||
/* im_demand_hint_array() needs to have this visible.
|
|
||||||
*/
|
|
||||||
#if VIPS_ENABLE_DEPRECATED
|
|
||||||
VIPS_API
|
|
||||||
#endif
|
|
||||||
void vips__demand_hint_array(struct _VipsImage *image,
|
|
||||||
int hint, struct _VipsImage **in);
|
|
||||||
/* im_cp_desc_array() needs to have this visible.
|
|
||||||
*/
|
|
||||||
#if VIPS_ENABLE_DEPRECATED
|
|
||||||
VIPS_API
|
|
||||||
#endif
|
|
||||||
int vips__image_copy_fields_array(struct _VipsImage *out,
|
|
||||||
struct _VipsImage *in[]);
|
|
||||||
|
|
||||||
void vips__region_count_pixels(struct _VipsRegion *region, const char *nickname);
|
|
||||||
VIPS_API
|
|
||||||
void vips_region_dump_all(void);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_region_prepare_many(struct _VipsRegion **reg, const VipsRect *r);
|
|
||||||
|
|
||||||
/* Handy for debugging.
|
|
||||||
*/
|
|
||||||
int vips__view_image(struct _VipsImage *image);
|
|
||||||
|
|
||||||
/* Pre 8.7 libvipses used this for allocating argument ids.
|
|
||||||
*/
|
|
||||||
VIPS_API
|
|
||||||
int _vips__argument_id;
|
|
||||||
|
|
||||||
void vips__meta_init(void);
|
|
||||||
|
|
||||||
// autoptr needs typed functions for autofree ... this needs to be in the
|
|
||||||
// public API since downstream projects can use our auto defs
|
|
||||||
VIPS_API
|
|
||||||
void VipsArrayDouble_unref(VipsArrayDouble *array);
|
|
||||||
VIPS_API
|
|
||||||
void VipsArrayImage_unref(VipsArrayImage *array);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
#endif /*VIPS_PRIVATE_H*/
|
|
||||||
@@ -1,80 +0,0 @@
|
|||||||
/* Simple rectangle algebra.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
This file is part of VIPS.
|
|
||||||
|
|
||||||
VIPS is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
||||||
02110-1301 USA
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef VIPS_RECT_H
|
|
||||||
#define VIPS_RECT_H
|
|
||||||
|
|
||||||
#include <glib.h>
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
typedef struct _VipsRect {
|
|
||||||
/*< public >*/
|
|
||||||
int left;
|
|
||||||
int top;
|
|
||||||
int width;
|
|
||||||
int height;
|
|
||||||
} VipsRect;
|
|
||||||
|
|
||||||
#define VIPS_RECT_RIGHT(R) ((R)->left + (R)->width)
|
|
||||||
#define VIPS_RECT_BOTTOM(R) ((R)->top + (R)->height)
|
|
||||||
#define VIPS_RECT_HCENTRE(R) ((R)->left + (R)->width / 2)
|
|
||||||
#define VIPS_RECT_VCENTRE(R) ((R)->top + (R)->height / 2)
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
gboolean vips_rect_isempty(const VipsRect *r);
|
|
||||||
VIPS_API
|
|
||||||
gboolean vips_rect_includespoint(const VipsRect *r, int x, int y);
|
|
||||||
VIPS_API
|
|
||||||
gboolean vips_rect_includesrect(const VipsRect *r1, const VipsRect *r2);
|
|
||||||
VIPS_API
|
|
||||||
gboolean vips_rect_equalsrect(const VipsRect *r1, const VipsRect *r2);
|
|
||||||
VIPS_API
|
|
||||||
gboolean vips_rect_overlapsrect(const VipsRect *r1, const VipsRect *r2);
|
|
||||||
VIPS_API
|
|
||||||
void vips_rect_marginadjust(VipsRect *r, int n);
|
|
||||||
VIPS_API
|
|
||||||
void vips_rect_intersectrect(const VipsRect *r1, const VipsRect *r2,
|
|
||||||
VipsRect *out);
|
|
||||||
VIPS_API
|
|
||||||
void vips_rect_unionrect(const VipsRect *r1, const VipsRect *r2,
|
|
||||||
VipsRect *out);
|
|
||||||
VIPS_API
|
|
||||||
VipsRect *vips_rect_dup(const VipsRect *r);
|
|
||||||
VIPS_API
|
|
||||||
void vips_rect_normalise(VipsRect *r);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
#endif /*VIPS_RECT_H*/
|
|
||||||
@@ -1,238 +0,0 @@
|
|||||||
/* Definitions for partial image regions.
|
|
||||||
*
|
|
||||||
* J.Cupitt, 8/4/93
|
|
||||||
*
|
|
||||||
* 2/3/11
|
|
||||||
* - move to GObject
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
This file is part of VIPS.
|
|
||||||
|
|
||||||
VIPS is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
||||||
02110-1301 USA
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef VIPS_REGION_H
|
|
||||||
#define VIPS_REGION_H
|
|
||||||
|
|
||||||
#include <glib.h>
|
|
||||||
#include <glib-object.h>
|
|
||||||
#include <vips/object.h>
|
|
||||||
#include <vips/image.h>
|
|
||||||
#include <vips/rect.h>
|
|
||||||
#include <vips/private.h>
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
#define VIPS_TYPE_REGION (vips_region_get_type())
|
|
||||||
#define VIPS_REGION(obj) \
|
|
||||||
(G_TYPE_CHECK_INSTANCE_CAST((obj), \
|
|
||||||
VIPS_TYPE_REGION, VipsRegion))
|
|
||||||
#define VIPS_REGION_CLASS(klass) \
|
|
||||||
(G_TYPE_CHECK_CLASS_CAST((klass), \
|
|
||||||
VIPS_TYPE_REGION, VipsRegionClass))
|
|
||||||
#define VIPS_IS_REGION(obj) \
|
|
||||||
(G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_REGION))
|
|
||||||
#define VIPS_IS_REGION_CLASS(klass) \
|
|
||||||
(G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_REGION))
|
|
||||||
#define VIPS_REGION_GET_CLASS(obj) \
|
|
||||||
(G_TYPE_INSTANCE_GET_CLASS((obj), \
|
|
||||||
VIPS_TYPE_REGION, VipsRegionClass))
|
|
||||||
|
|
||||||
/**
|
|
||||||
* VipsRegionShrink:
|
|
||||||
* @VIPS_REGION_SHRINK_MEAN: use the average
|
|
||||||
* @VIPS_REGION_SHRINK_MEDIAN: use the median
|
|
||||||
* @VIPS_REGION_SHRINK_MODE: use the mode
|
|
||||||
* @VIPS_REGION_SHRINK_MAX: use the maximum
|
|
||||||
* @VIPS_REGION_SHRINK_MIN: use the minimum
|
|
||||||
* @VIPS_REGION_SHRINK_NEAREST: use the top-left pixel
|
|
||||||
*
|
|
||||||
* How to calculate the output pixels when shrinking a 2x2 region.
|
|
||||||
*/
|
|
||||||
typedef enum {
|
|
||||||
VIPS_REGION_SHRINK_MEAN,
|
|
||||||
VIPS_REGION_SHRINK_MEDIAN,
|
|
||||||
VIPS_REGION_SHRINK_MODE,
|
|
||||||
VIPS_REGION_SHRINK_MAX,
|
|
||||||
VIPS_REGION_SHRINK_MIN,
|
|
||||||
VIPS_REGION_SHRINK_NEAREST,
|
|
||||||
VIPS_REGION_SHRINK_LAST
|
|
||||||
} VipsRegionShrink;
|
|
||||||
|
|
||||||
/* Sub-area of image.
|
|
||||||
*
|
|
||||||
* Matching typedef in basic.h.
|
|
||||||
*/
|
|
||||||
struct _VipsRegion {
|
|
||||||
VipsObject parent_object;
|
|
||||||
|
|
||||||
/*< public >*/
|
|
||||||
/* Users may read these two fields.
|
|
||||||
*/
|
|
||||||
VipsImage *im; /* Link back to parent image */
|
|
||||||
VipsRect valid; /* Area of parent we can see */
|
|
||||||
|
|
||||||
/* The rest of VipsRegion is private.
|
|
||||||
*/
|
|
||||||
/*< private >*/
|
|
||||||
RegionType type; /* What kind of attachment */
|
|
||||||
VipsPel *data; /* Off here to get data */
|
|
||||||
int bpl; /* Bytes-per-line for data */
|
|
||||||
void *seq; /* Sequence we are using to fill region */
|
|
||||||
|
|
||||||
/* The thread that made this region. Used to assert() test that
|
|
||||||
* regions are not being shared between threads.
|
|
||||||
*/
|
|
||||||
GThread *thread;
|
|
||||||
|
|
||||||
/* Ref to the window we use for this region, if any.
|
|
||||||
*/
|
|
||||||
VipsWindow *window;
|
|
||||||
|
|
||||||
/* Ref to the buffer we use for this region, if any.
|
|
||||||
*/
|
|
||||||
VipsBuffer *buffer;
|
|
||||||
|
|
||||||
/* The image this region is on has changed and caches need to be
|
|
||||||
* dropped.
|
|
||||||
*/
|
|
||||||
gboolean invalid;
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct _VipsRegionClass {
|
|
||||||
VipsObjectClass parent_class;
|
|
||||||
|
|
||||||
} VipsRegionClass;
|
|
||||||
|
|
||||||
/* Don't put spaces around void here, it breaks gtk-doc.
|
|
||||||
*/
|
|
||||||
VIPS_API
|
|
||||||
GType vips_region_get_type(void);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
VipsRegion *vips_region_new(VipsImage *image);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_region_buffer(VipsRegion *reg, const VipsRect *r);
|
|
||||||
VIPS_API
|
|
||||||
int vips_region_image(VipsRegion *reg, const VipsRect *r);
|
|
||||||
VIPS_API
|
|
||||||
int vips_region_region(VipsRegion *reg, VipsRegion *dest,
|
|
||||||
const VipsRect *r, int x, int y);
|
|
||||||
VIPS_API
|
|
||||||
int vips_region_equalsregion(VipsRegion *reg1, VipsRegion *reg2);
|
|
||||||
VIPS_API
|
|
||||||
int vips_region_position(VipsRegion *reg, int x, int y);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
void vips_region_paint(VipsRegion *reg, const VipsRect *r, int value);
|
|
||||||
VIPS_API
|
|
||||||
void vips_region_paint_pel(VipsRegion *reg,
|
|
||||||
const VipsRect *r, const VipsPel *ink);
|
|
||||||
VIPS_API
|
|
||||||
void vips_region_black(VipsRegion *reg);
|
|
||||||
VIPS_API
|
|
||||||
void vips_region_copy(VipsRegion *reg, VipsRegion *dest,
|
|
||||||
const VipsRect *r, int x, int y);
|
|
||||||
VIPS_API
|
|
||||||
int vips_region_shrink_method(VipsRegion *from, VipsRegion *to,
|
|
||||||
const VipsRect *target, VipsRegionShrink method);
|
|
||||||
VIPS_API
|
|
||||||
int vips_region_shrink(VipsRegion *from, VipsRegion *to,
|
|
||||||
const VipsRect *target);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_region_prepare(VipsRegion *reg, const VipsRect *r);
|
|
||||||
VIPS_API
|
|
||||||
int vips_region_prepare_to(VipsRegion *reg,
|
|
||||||
VipsRegion *dest, const VipsRect *r, int x, int y);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
VipsPel *vips_region_fetch(VipsRegion *region,
|
|
||||||
int left, int top, int width, int height, size_t *len);
|
|
||||||
VIPS_API
|
|
||||||
int vips_region_width(VipsRegion *region);
|
|
||||||
VIPS_API
|
|
||||||
int vips_region_height(VipsRegion *region);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
void vips_region_invalidate(VipsRegion *reg);
|
|
||||||
|
|
||||||
/* Use this to count pixels passing through key points. Handy for spotting bad
|
|
||||||
* overcomputation.
|
|
||||||
*/
|
|
||||||
#ifdef DEBUG_LEAK
|
|
||||||
#define VIPS_COUNT_PIXELS(R, N) vips__region_count_pixels(R, N)
|
|
||||||
#else /*!DEBUG_LEAK*/
|
|
||||||
#define VIPS_COUNT_PIXELS(R, N)
|
|
||||||
#endif /*DEBUG_LEAK*/
|
|
||||||
|
|
||||||
#define VIPS_REGION_LSKIP(R) \
|
|
||||||
((size_t) ((R)->bpl))
|
|
||||||
#define VIPS_REGION_N_ELEMENTS(R) \
|
|
||||||
((size_t) ((R)->valid.width * (R)->im->Bands))
|
|
||||||
#define VIPS_REGION_SIZEOF_ELEMENT(R) \
|
|
||||||
(VIPS_IMAGE_SIZEOF_ELEMENT((R)->im))
|
|
||||||
#define VIPS_REGION_SIZEOF_PEL(R) \
|
|
||||||
(VIPS_IMAGE_SIZEOF_PEL((R)->im))
|
|
||||||
#define VIPS_REGION_SIZEOF_LINE(R) \
|
|
||||||
((size_t) ((R)->valid.width * VIPS_REGION_SIZEOF_PEL(R)))
|
|
||||||
|
|
||||||
/* If DEBUG is defined, add bounds checking.
|
|
||||||
*/
|
|
||||||
#ifdef DEBUG
|
|
||||||
#define VIPS_REGION_ADDR(R, X, Y) \
|
|
||||||
((vips_rect_includespoint(&(R)->valid, (X), (Y))) \
|
|
||||||
? ((R)->data + ((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
|
|
||||||
((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R)) \
|
|
||||||
: (fprintf(stderr, \
|
|
||||||
"VIPS_REGION_ADDR: point out of bounds, " \
|
|
||||||
"file \"%s\", line %d\n" \
|
|
||||||
"(point x=%d, y=%d\n" \
|
|
||||||
" should have been within VipsRect left=%d, top=%d, " \
|
|
||||||
"width=%d, height=%d)\n", \
|
|
||||||
__FILE__, __LINE__, \
|
|
||||||
(X), (Y), \
|
|
||||||
(R)->valid.left, \
|
|
||||||
(R)->valid.top, \
|
|
||||||
(R)->valid.width, \
|
|
||||||
(R)->valid.height), \
|
|
||||||
abort(), (VipsPel *) NULL))
|
|
||||||
#else /*DEBUG*/
|
|
||||||
#define VIPS_REGION_ADDR(R, X, Y) \
|
|
||||||
((R)->data + \
|
|
||||||
((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
|
|
||||||
((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
|
|
||||||
#endif /*DEBUG*/
|
|
||||||
|
|
||||||
#define VIPS_REGION_ADDR_TOPLEFT(R) ((R)->data)
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
#endif /*VIPS_REGION_H*/
|
|
||||||
@@ -1,123 +0,0 @@
|
|||||||
/* resample.h
|
|
||||||
*
|
|
||||||
* 20/9/09
|
|
||||||
* - from proto.h
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
This file is part of VIPS.
|
|
||||||
|
|
||||||
VIPS is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
||||||
02110-1301 USA
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef VIPS_RESAMPLE_H
|
|
||||||
#define VIPS_RESAMPLE_H
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
VIPS_KERNEL_NEAREST,
|
|
||||||
VIPS_KERNEL_LINEAR,
|
|
||||||
VIPS_KERNEL_CUBIC,
|
|
||||||
VIPS_KERNEL_MITCHELL,
|
|
||||||
VIPS_KERNEL_LANCZOS2,
|
|
||||||
VIPS_KERNEL_LANCZOS3,
|
|
||||||
VIPS_KERNEL_LAST
|
|
||||||
} VipsKernel;
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
VIPS_SIZE_BOTH,
|
|
||||||
VIPS_SIZE_UP,
|
|
||||||
VIPS_SIZE_DOWN,
|
|
||||||
VIPS_SIZE_FORCE,
|
|
||||||
VIPS_SIZE_LAST
|
|
||||||
} VipsSize;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_shrink(VipsImage *in, VipsImage **out,
|
|
||||||
double hshrink, double vshrink, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_shrinkh(VipsImage *in, VipsImage **out, int hshrink, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_shrinkv(VipsImage *in, VipsImage **out, int vshrink, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_reduce(VipsImage *in, VipsImage **out,
|
|
||||||
double hshrink, double vshrink, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_reduceh(VipsImage *in, VipsImage **out, double hshrink, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_reducev(VipsImage *in, VipsImage **out, double vshrink, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_thumbnail(const char *filename, VipsImage **out, int width, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_thumbnail_buffer(void *buf, size_t len, VipsImage **out,
|
|
||||||
int width, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_thumbnail_image(VipsImage *in, VipsImage **out, int width, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_thumbnail_source(VipsSource *source, VipsImage **out,
|
|
||||||
int width, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_similarity(VipsImage *in, VipsImage **out, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_rotate(VipsImage *in, VipsImage **out, double angle, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
VIPS_API
|
|
||||||
int vips_affine(VipsImage *in, VipsImage **out,
|
|
||||||
double a, double b, double c, double d, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_resize(VipsImage *in, VipsImage **out, double scale, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_mapim(VipsImage *in, VipsImage **out, VipsImage *index, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_quadratic(VipsImage *in, VipsImage **out, VipsImage *coeff, ...)
|
|
||||||
G_GNUC_NULL_TERMINATED;
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
#endif /*VIPS_RESAMPLE_H*/
|
|
||||||
@@ -1,143 +0,0 @@
|
|||||||
/* Buffered inputput from a VipsSource
|
|
||||||
*
|
|
||||||
* J.Cupitt, 18/11/19
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
This file is part of VIPS.
|
|
||||||
|
|
||||||
VIPS is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
||||||
02110-1301 USA
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef VIPS_SBUF_H
|
|
||||||
#define VIPS_SBUF_H
|
|
||||||
|
|
||||||
#include <glib.h>
|
|
||||||
#include <glib-object.h>
|
|
||||||
#include <vips/object.h>
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
#define VIPS_TYPE_SBUF (vips_sbuf_get_type())
|
|
||||||
#define VIPS_SBUF(obj) \
|
|
||||||
(G_TYPE_CHECK_INSTANCE_CAST((obj), \
|
|
||||||
VIPS_TYPE_SBUF, VipsSbuf))
|
|
||||||
#define VIPS_SBUF_CLASS(klass) \
|
|
||||||
(G_TYPE_CHECK_CLASS_CAST((klass), \
|
|
||||||
VIPS_TYPE_SBUF, VipsSbufClass))
|
|
||||||
#define VIPS_IS_SBUF(obj) \
|
|
||||||
(G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_SBUF))
|
|
||||||
#define VIPS_IS_SBUF_CLASS(klass) \
|
|
||||||
(G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_SBUF))
|
|
||||||
#define VIPS_SBUF_GET_CLASS(obj) \
|
|
||||||
(G_TYPE_INSTANCE_GET_CLASS((obj), \
|
|
||||||
VIPS_TYPE_SBUF, VipsSbufClass))
|
|
||||||
|
|
||||||
#define VIPS_SBUF_BUFFER_SIZE (4096)
|
|
||||||
|
|
||||||
/* Layer over source: read with an input buffer.
|
|
||||||
*
|
|
||||||
* Libraries like libjpeg do their own input buffering and need raw IO, but
|
|
||||||
* others, like radiance, need to parse the input into lines. A buffered read
|
|
||||||
* class is very convenient.
|
|
||||||
*/
|
|
||||||
typedef struct _VipsSbuf {
|
|
||||||
VipsObject parent_object;
|
|
||||||
|
|
||||||
/*< private >*/
|
|
||||||
|
|
||||||
/* The VipsSource we wrap.
|
|
||||||
*/
|
|
||||||
VipsSource *source;
|
|
||||||
|
|
||||||
/* The +1 means there's always a \0 byte at the end.
|
|
||||||
*
|
|
||||||
* Unsigned char, since we don't want >127 to be -ve.
|
|
||||||
*
|
|
||||||
* chars_in_buffer is how many chars we have in input_buffer,
|
|
||||||
* read_point is the current read position in that buffer.
|
|
||||||
*/
|
|
||||||
unsigned char input_buffer[VIPS_SBUF_BUFFER_SIZE + 1];
|
|
||||||
int chars_in_buffer;
|
|
||||||
int read_point;
|
|
||||||
|
|
||||||
/* Build lines of text here.
|
|
||||||
*/
|
|
||||||
unsigned char line[VIPS_SBUF_BUFFER_SIZE + 1];
|
|
||||||
|
|
||||||
} VipsSbuf;
|
|
||||||
|
|
||||||
typedef struct _VipsSbufClass {
|
|
||||||
VipsObjectClass parent_class;
|
|
||||||
|
|
||||||
} VipsSbufClass;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
GType vips_sbuf_get_type(void);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
VipsSbuf *vips_sbuf_new_from_source(VipsSource *source);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
void vips_sbuf_unbuffer(VipsSbuf *sbuf);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_sbuf_getc(VipsSbuf *sbuf);
|
|
||||||
#define VIPS_SBUF_GETC(S) ( \
|
|
||||||
(S)->read_point < (S)->chars_in_buffer \
|
|
||||||
? (S)->input_buffer[(S)->read_point++] \
|
|
||||||
: vips_sbuf_getc(S))
|
|
||||||
VIPS_API
|
|
||||||
void vips_sbuf_ungetc(VipsSbuf *sbuf);
|
|
||||||
#define VIPS_SBUF_UNGETC(S) \
|
|
||||||
{ \
|
|
||||||
if ((S)->read_point > 0) \
|
|
||||||
(S)->read_point -= 1; \
|
|
||||||
}
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_sbuf_require(VipsSbuf *sbuf, int require);
|
|
||||||
#define VIPS_SBUF_REQUIRE(S, R) ( \
|
|
||||||
(S)->read_point + (R) <= (S)->chars_in_buffer \
|
|
||||||
? 0 \
|
|
||||||
: vips_sbuf_require((S), (R)))
|
|
||||||
#define VIPS_SBUF_PEEK(S) ((S)->input_buffer + (S)->read_point)
|
|
||||||
#define VIPS_SBUF_FETCH(S) ((S)->input_buffer[(S)->read_point++])
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
const char *vips_sbuf_get_line(VipsSbuf *sbuf);
|
|
||||||
VIPS_API
|
|
||||||
char *vips_sbuf_get_line_copy(VipsSbuf *sbuf);
|
|
||||||
VIPS_API
|
|
||||||
const char *vips_sbuf_get_non_whitespace(VipsSbuf *sbuf);
|
|
||||||
VIPS_API
|
|
||||||
int vips_sbuf_skip_whitespace(VipsSbuf *sbuf);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
#endif /*VIPS_SBUF_H*/
|
|
||||||
@@ -1,77 +0,0 @@
|
|||||||
/* Definitions for thread support.
|
|
||||||
*
|
|
||||||
* JC, 9/5/94
|
|
||||||
* 30/7/99 RP, JC
|
|
||||||
* - reworked for posix/solaris threads
|
|
||||||
* 28/9/99 JC
|
|
||||||
* - restructured, made part of public API
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
This file is part of VIPS.
|
|
||||||
|
|
||||||
VIPS is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
||||||
02110-1301 USA
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef VIPS_SEMAPHORE_H
|
|
||||||
#define VIPS_SEMAPHORE_H
|
|
||||||
|
|
||||||
#include <glib.h>
|
|
||||||
#include <vips/vips.h>
|
|
||||||
#include <vips/thread.h>
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
/* Implement our own semaphores.
|
|
||||||
*/
|
|
||||||
typedef struct {
|
|
||||||
char *name;
|
|
||||||
int v;
|
|
||||||
|
|
||||||
GMutex *mutex;
|
|
||||||
GCond *cond;
|
|
||||||
} VipsSemaphore;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_semaphore_up(VipsSemaphore *s);
|
|
||||||
VIPS_API
|
|
||||||
int vips_semaphore_upn(VipsSemaphore *s, int n);
|
|
||||||
VIPS_API
|
|
||||||
int vips_semaphore_down(VipsSemaphore *s);
|
|
||||||
VIPS_API
|
|
||||||
int vips_semaphore_downn(VipsSemaphore *s, int n);
|
|
||||||
VIPS_API
|
|
||||||
int vips_semaphore_down_timeout(VipsSemaphore *s, gint64 timeout);
|
|
||||||
VIPS_API
|
|
||||||
void vips_semaphore_destroy(VipsSemaphore *s);
|
|
||||||
VIPS_API
|
|
||||||
void vips_semaphore_init(VipsSemaphore *s, int v, char *name);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
#endif /*VIPS_SEMAPHORE_H*/
|
|
||||||
@@ -1,75 +0,0 @@
|
|||||||
/* Private include file ... if we've been configured without gthread, we need
|
|
||||||
* to point the g_thread_*() and g_mutex_*() functions at our own stubs.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
This file is part of VIPS.
|
|
||||||
|
|
||||||
VIPS is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
||||||
02110-1301 USA
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef VIPS_THREAD_H
|
|
||||||
#define VIPS_THREAD_H
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
/* We need wrappers over g_mutex_new(), it was replaced by g_mutex_init() in
|
|
||||||
* glib 2.32+
|
|
||||||
*/
|
|
||||||
VIPS_API
|
|
||||||
GMutex *vips_g_mutex_new(void);
|
|
||||||
VIPS_API
|
|
||||||
void vips_g_mutex_free(GMutex *);
|
|
||||||
|
|
||||||
/* Same for GCond.
|
|
||||||
*/
|
|
||||||
VIPS_API
|
|
||||||
GCond *vips_g_cond_new(void);
|
|
||||||
VIPS_API
|
|
||||||
void vips_g_cond_free(GCond *);
|
|
||||||
|
|
||||||
/* ... and for GThread.
|
|
||||||
*/
|
|
||||||
VIPS_API
|
|
||||||
GThread *vips_g_thread_new(const char *, GThreadFunc, gpointer);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
gboolean vips_thread_isvips(void);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_thread_execute(const char *domain, GFunc func, gpointer data);
|
|
||||||
|
|
||||||
typedef struct _VipsThreadset VipsThreadset;
|
|
||||||
VipsThreadset *vips_threadset_new(int max_threads);
|
|
||||||
int vips_threadset_run(VipsThreadset *set,
|
|
||||||
const char *domain, GFunc func, gpointer data);
|
|
||||||
void vips_threadset_free(VipsThreadset *set);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
#endif /*VIPS_THREAD_H*/
|
|
||||||
@@ -1,159 +0,0 @@
|
|||||||
/* Thread eval for VIPS.
|
|
||||||
*
|
|
||||||
* 29/9/99 JC
|
|
||||||
* - from thread.h
|
|
||||||
* 17/3/10
|
|
||||||
* - from threadgroup
|
|
||||||
* - rework with a simpler distributed work allocation model
|
|
||||||
* 02/02/20 kleisauke
|
|
||||||
* - reuse threads by using GLib's threadpool
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
This file is part of VIPS.
|
|
||||||
|
|
||||||
VIPS is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
||||||
02110-1301 USA
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef VIPS_THREADPOOL_H
|
|
||||||
#define VIPS_THREADPOOL_H
|
|
||||||
|
|
||||||
#include <glib.h>
|
|
||||||
#include <glib-object.h>
|
|
||||||
#include <vips/image.h>
|
|
||||||
#include <vips/object.h>
|
|
||||||
#include <vips/region.h>
|
|
||||||
#include <vips/rect.h>
|
|
||||||
#include <vips/semaphore.h>
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
/* Per-thread state. Allocate functions can use these members to
|
|
||||||
* communicate with work functions.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define VIPS_TYPE_THREAD_STATE (vips_thread_state_get_type())
|
|
||||||
#define VIPS_THREAD_STATE(obj) \
|
|
||||||
(G_TYPE_CHECK_INSTANCE_CAST((obj), \
|
|
||||||
VIPS_TYPE_THREAD_STATE, VipsThreadState))
|
|
||||||
#define VIPS_THREAD_STATE_CLASS(klass) \
|
|
||||||
(G_TYPE_CHECK_CLASS_CAST((klass), \
|
|
||||||
VIPS_TYPE_THREAD_STATE, VipsThreadStateClass))
|
|
||||||
#define VIPS_IS_THREAD_STATE(obj) \
|
|
||||||
(G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_THREAD_STATE))
|
|
||||||
#define VIPS_IS_THREAD_STATE_CLASS(klass) \
|
|
||||||
(G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_THREAD_STATE))
|
|
||||||
#define VIPS_THREAD_STATE_GET_CLASS(obj) \
|
|
||||||
(G_TYPE_INSTANCE_GET_CLASS((obj), \
|
|
||||||
VIPS_TYPE_THREAD_STATE, VipsThreadStateClass))
|
|
||||||
|
|
||||||
typedef struct _VipsThreadState {
|
|
||||||
VipsObject parent_object;
|
|
||||||
|
|
||||||
/*< public >*/
|
|
||||||
/* Image we run on.
|
|
||||||
*/
|
|
||||||
VipsImage *im;
|
|
||||||
|
|
||||||
/* This region is created and destroyed by the threadpool for the
|
|
||||||
* use of the worker.
|
|
||||||
*/
|
|
||||||
VipsRegion *reg;
|
|
||||||
|
|
||||||
/* Neither used nor set, do what you like with them.
|
|
||||||
*/
|
|
||||||
VipsRect pos;
|
|
||||||
int x, y;
|
|
||||||
|
|
||||||
/* Set in work to get the allocate to signal stop.
|
|
||||||
*/
|
|
||||||
gboolean stop;
|
|
||||||
|
|
||||||
/* The client data passed to the enclosing vips_threadpool_run().
|
|
||||||
*/
|
|
||||||
void *a;
|
|
||||||
|
|
||||||
/* Set in allocate to stall this thread for a moment. Handy for
|
|
||||||
* debugging race conditions.
|
|
||||||
*/
|
|
||||||
gboolean stall;
|
|
||||||
|
|
||||||
} VipsThreadState;
|
|
||||||
|
|
||||||
typedef struct _VipsThreadStateClass {
|
|
||||||
VipsObjectClass parent_class;
|
|
||||||
/*< public >*/
|
|
||||||
|
|
||||||
} VipsThreadStateClass;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
void *vips_thread_state_set(VipsObject *object, void *a, void *b);
|
|
||||||
|
|
||||||
/* Don't put spaces around void here, it breaks gtk-doc.
|
|
||||||
*/
|
|
||||||
VIPS_API
|
|
||||||
GType vips_thread_state_get_type(void);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
VipsThreadState *vips_thread_state_new(VipsImage *im, void *a);
|
|
||||||
|
|
||||||
/* Constructor for per-thread state.
|
|
||||||
*/
|
|
||||||
typedef VipsThreadState *(*VipsThreadStartFn)(VipsImage *im, void *a);
|
|
||||||
|
|
||||||
/* A work allocate function. This is run single-threaded by a worker to
|
|
||||||
* set up a new work unit.
|
|
||||||
* Return non-zero for errors. Set *stop for "no more work to do"
|
|
||||||
*/
|
|
||||||
typedef int (*VipsThreadpoolAllocateFn)(VipsThreadState *state,
|
|
||||||
void *a, gboolean *stop);
|
|
||||||
|
|
||||||
/* A work function. This does a unit of work (eg. processing a tile or
|
|
||||||
* whatever). Return non-zero for errors.
|
|
||||||
*/
|
|
||||||
typedef int (*VipsThreadpoolWorkFn)(VipsThreadState *state, void *a);
|
|
||||||
|
|
||||||
/* A progress function. This is run by the main thread once for every
|
|
||||||
* allocation. Return an error to kill computation early.
|
|
||||||
*/
|
|
||||||
typedef int (*VipsThreadpoolProgressFn)(void *a);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_threadpool_run(VipsImage *im,
|
|
||||||
VipsThreadStartFn start,
|
|
||||||
VipsThreadpoolAllocateFn allocate,
|
|
||||||
VipsThreadpoolWorkFn work,
|
|
||||||
VipsThreadpoolProgressFn progress,
|
|
||||||
void *a);
|
|
||||||
VIPS_API
|
|
||||||
void vips_get_tile_size(VipsImage *im,
|
|
||||||
int *tile_width, int *tile_height, int *n_lines);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
#endif /*VIPS_THREADPOOL_H*/
|
|
||||||
@@ -1,89 +0,0 @@
|
|||||||
/* Affine transforms.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
Copyright (C) 1991-2003 The National Gallery
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
||||||
02110-1301 USA
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef VIPS_TRANSFORM_H
|
|
||||||
#define VIPS_TRANSFORM_H
|
|
||||||
|
|
||||||
#include <glib.h>
|
|
||||||
#include <vips/image.h>
|
|
||||||
#include <vips/rect.h>
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
/* Params for an affine transformation.
|
|
||||||
*/
|
|
||||||
typedef struct {
|
|
||||||
/* Area of input we can use. This can be smaller than the real input
|
|
||||||
* image: we expand the input to add extra pixels for interpolation.
|
|
||||||
*/
|
|
||||||
VipsRect iarea;
|
|
||||||
|
|
||||||
/* The area of the output we've been asked to generate. left/top can
|
|
||||||
* be negative.
|
|
||||||
*/
|
|
||||||
VipsRect oarea;
|
|
||||||
|
|
||||||
/* The transform.
|
|
||||||
*/
|
|
||||||
double a, b, c, d;
|
|
||||||
double idx, idy;
|
|
||||||
double odx, ody;
|
|
||||||
|
|
||||||
double ia, ib, ic, id; /* Inverse of matrix abcd */
|
|
||||||
} VipsTransformation;
|
|
||||||
|
|
||||||
void vips__transform_init(VipsTransformation *trn);
|
|
||||||
int vips__transform_calc_inverse(VipsTransformation *trn);
|
|
||||||
int vips__transform_isidentity(const VipsTransformation *trn);
|
|
||||||
int vips__transform_add(const VipsTransformation *in1,
|
|
||||||
const VipsTransformation *in2,
|
|
||||||
VipsTransformation *out);
|
|
||||||
void vips__transform_print(const VipsTransformation *trn);
|
|
||||||
|
|
||||||
void vips__transform_forward_point(const VipsTransformation *trn,
|
|
||||||
const double x, const double y, double *ox, double *oy);
|
|
||||||
void vips__transform_invert_point(const VipsTransformation *trn,
|
|
||||||
const double x, const double y, double *ox, double *oy);
|
|
||||||
void vips__transform_forward_rect(const VipsTransformation *trn,
|
|
||||||
const VipsRect *in, VipsRect *out);
|
|
||||||
void vips__transform_invert_rect(const VipsTransformation *trn,
|
|
||||||
const VipsRect *in, VipsRect *out);
|
|
||||||
|
|
||||||
void vips__transform_set_area(VipsTransformation *);
|
|
||||||
|
|
||||||
int vips__affine(VipsImage *in, VipsImage *out, VipsTransformation *trn);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
#endif /*VIPS_TRANSFORM_H*/
|
|
||||||
@@ -1,310 +0,0 @@
|
|||||||
/* the GTypes we define
|
|
||||||
*
|
|
||||||
* 27/10/11
|
|
||||||
* - from header.h
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
This file is part of VIPS.
|
|
||||||
|
|
||||||
VIPS is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
||||||
02110-1301 USA
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef VIPS_TYPE_H
|
|
||||||
#define VIPS_TYPE_H
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
/* A very simple boxed type for testing. Just holds an int.
|
|
||||||
*/
|
|
||||||
typedef struct _VipsThing {
|
|
||||||
int i;
|
|
||||||
} VipsThing;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* VIPS_TYPE_THING:
|
|
||||||
*
|
|
||||||
* The #GType for a #VipsThing.
|
|
||||||
*/
|
|
||||||
#define VIPS_TYPE_THING (vips_thing_get_type())
|
|
||||||
VIPS_API
|
|
||||||
GType vips_thing_get_type(void);
|
|
||||||
VIPS_API
|
|
||||||
VipsThing *vips_thing_new(int i);
|
|
||||||
|
|
||||||
/* A ref-counted area of memory. Can hold arrays of things as well.
|
|
||||||
*/
|
|
||||||
typedef struct _VipsArea {
|
|
||||||
void *data;
|
|
||||||
size_t length; /* 0 if not known */
|
|
||||||
|
|
||||||
/* If this area represents an array, the number of elements in the
|
|
||||||
* array. Equal to length / sizeof(element).
|
|
||||||
*/
|
|
||||||
int n;
|
|
||||||
|
|
||||||
/*< private >*/
|
|
||||||
|
|
||||||
/* Reference count and lock.
|
|
||||||
*
|
|
||||||
* We could use an atomic int, but this is not a high-traffic data
|
|
||||||
* structure, so a simple GMutex is OK.
|
|
||||||
*/
|
|
||||||
int count;
|
|
||||||
GMutex *lock;
|
|
||||||
|
|
||||||
/* Things like ICC profiles need their own free functions.
|
|
||||||
*
|
|
||||||
* Set client to anything you like -- VipsArea doesn't use this.
|
|
||||||
*/
|
|
||||||
VipsCallbackFn free_fn;
|
|
||||||
void *client;
|
|
||||||
|
|
||||||
/* If we are holding an array (for example, an array of double), the
|
|
||||||
* GType of the elements and their size. 0 for not known.
|
|
||||||
*
|
|
||||||
* n is always length / sizeof_type, we keep it as a member for
|
|
||||||
* convenience.
|
|
||||||
*/
|
|
||||||
GType type;
|
|
||||||
size_t sizeof_type;
|
|
||||||
} VipsArea;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
VipsArea *vips_area_copy(VipsArea *area);
|
|
||||||
VIPS_API
|
|
||||||
int vips_area_free_cb(void *mem, VipsArea *area);
|
|
||||||
VIPS_API
|
|
||||||
void vips_area_unref(VipsArea *area);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
VipsArea *vips_area_new(VipsCallbackFn free_fn, void *data);
|
|
||||||
VIPS_API
|
|
||||||
VipsArea *vips_area_new_array(GType type, size_t sizeof_type, int n);
|
|
||||||
VIPS_API
|
|
||||||
VipsArea *vips_area_new_array_object(int n);
|
|
||||||
VIPS_API
|
|
||||||
void *vips_area_get_data(VipsArea *area,
|
|
||||||
size_t *length, int *n, GType *type, size_t *sizeof_type);
|
|
||||||
|
|
||||||
#ifdef VIPS_DEBUG
|
|
||||||
#define VIPS_ARRAY_ADDR(X, I) \
|
|
||||||
(((I) >= 0 && (I) < VIPS_AREA(X)->n) \
|
|
||||||
? (void *) ((VipsPel *) VIPS_AREA(X)->data + \
|
|
||||||
VIPS_AREA(X)->sizeof_type * (I)) \
|
|
||||||
: (fprintf(stderr, \
|
|
||||||
"VIPS_ARRAY_ADDR: index out of bounds, " \
|
|
||||||
"file \"%s\", line %d\n" \
|
|
||||||
"(index %d should have been within [0,%d])\n", \
|
|
||||||
__FILE__, __LINE__, \
|
|
||||||
(I), VIPS_AREA(X)->n), \
|
|
||||||
NULL))
|
|
||||||
#else /*!VIPS_DEBUG*/
|
|
||||||
#define VIPS_ARRAY_ADDR(X, I) \
|
|
||||||
((void *) ((VipsPel *) VIPS_AREA(X)->data + \
|
|
||||||
VIPS_AREA(X)->sizeof_type * (I)))
|
|
||||||
#endif /*VIPS_DEBUG*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* VIPS_TYPE_AREA:
|
|
||||||
*
|
|
||||||
* The #GType for a #VipsArea.
|
|
||||||
*/
|
|
||||||
#define VIPS_TYPE_AREA (vips_area_get_type())
|
|
||||||
#define VIPS_AREA(X) ((VipsArea *) (X))
|
|
||||||
VIPS_API
|
|
||||||
GType vips_area_get_type(void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* VIPS_TYPE_SAVE_STRING:
|
|
||||||
*
|
|
||||||
* The #GType for a #VipsSaveString.
|
|
||||||
*/
|
|
||||||
#define VIPS_TYPE_SAVE_STRING (vips_save_string_get_type())
|
|
||||||
VIPS_API
|
|
||||||
GType vips_save_string_get_type(void);
|
|
||||||
|
|
||||||
typedef struct _VipsSaveString {
|
|
||||||
char *s;
|
|
||||||
} VipsSaveString;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* VIPS_TYPE_REF_STRING:
|
|
||||||
*
|
|
||||||
* The #GType for a #VipsRefString.
|
|
||||||
*/
|
|
||||||
#define VIPS_TYPE_REF_STRING (vips_ref_string_get_type())
|
|
||||||
|
|
||||||
typedef struct _VipsRefString {
|
|
||||||
VipsArea area;
|
|
||||||
} VipsRefString;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
VipsRefString *vips_ref_string_new(const char *str);
|
|
||||||
VIPS_API
|
|
||||||
const char *vips_ref_string_get(VipsRefString *refstr, size_t *length);
|
|
||||||
VIPS_API
|
|
||||||
GType vips_ref_string_get_type(void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* VIPS_TYPE_BLOB:
|
|
||||||
*
|
|
||||||
* The %GType for a #VipsBlob.
|
|
||||||
*/
|
|
||||||
#define VIPS_TYPE_BLOB (vips_blob_get_type())
|
|
||||||
|
|
||||||
typedef struct _VipsBlob {
|
|
||||||
VipsArea area;
|
|
||||||
} VipsBlob;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
VipsBlob *vips_blob_new(VipsCallbackFn free_fn,
|
|
||||||
const void *data, size_t length);
|
|
||||||
VIPS_API
|
|
||||||
VipsBlob *vips_blob_copy(const void *data, size_t length);
|
|
||||||
VIPS_API
|
|
||||||
const void *vips_blob_get(VipsBlob *blob, size_t *length);
|
|
||||||
VIPS_API
|
|
||||||
void vips_blob_set(VipsBlob *blob,
|
|
||||||
VipsCallbackFn free_fn, const void *data, size_t length);
|
|
||||||
VIPS_API
|
|
||||||
GType vips_blob_get_type(void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* VIPS_TYPE_ARRAY_DOUBLE:
|
|
||||||
*
|
|
||||||
* The #GType for a #VipsArrayDouble.
|
|
||||||
*/
|
|
||||||
#define VIPS_TYPE_ARRAY_DOUBLE (vips_array_double_get_type())
|
|
||||||
|
|
||||||
typedef struct _VipsArrayDouble {
|
|
||||||
VipsArea area;
|
|
||||||
} VipsArrayDouble;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
VipsArrayDouble *vips_array_double_new(const double *array, int n);
|
|
||||||
VIPS_API
|
|
||||||
VipsArrayDouble *vips_array_double_newv(int n, ...);
|
|
||||||
VIPS_API
|
|
||||||
double *vips_array_double_get(VipsArrayDouble *array, int *n);
|
|
||||||
VIPS_API
|
|
||||||
GType vips_array_double_get_type(void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* VIPS_TYPE_ARRAY_INT:
|
|
||||||
*
|
|
||||||
* The #GType for a #VipsArrayInt.
|
|
||||||
*/
|
|
||||||
#define VIPS_TYPE_ARRAY_INT (vips_array_int_get_type())
|
|
||||||
|
|
||||||
typedef struct _VipsArrayInt {
|
|
||||||
VipsArea area;
|
|
||||||
} VipsArrayInt;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
VipsArrayInt *vips_array_int_new(const int *array, int n);
|
|
||||||
VIPS_API
|
|
||||||
VipsArrayInt *vips_array_int_newv(int n, ...);
|
|
||||||
VIPS_API
|
|
||||||
int *vips_array_int_get(VipsArrayInt *array, int *n);
|
|
||||||
VIPS_API
|
|
||||||
GType vips_array_int_get_type(void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* VIPS_TYPE_ARRAY_IMAGE:
|
|
||||||
*
|
|
||||||
* The #GType for a #VipsArrayImage.
|
|
||||||
*/
|
|
||||||
#define VIPS_TYPE_ARRAY_IMAGE (vips_array_image_get_type())
|
|
||||||
|
|
||||||
typedef struct _VipsArrayImage {
|
|
||||||
VipsArea area;
|
|
||||||
} VipsArrayImage;
|
|
||||||
|
|
||||||
/* See image.h for vips_array_image_new() etc., they need to be declared after
|
|
||||||
* VipsImage.
|
|
||||||
*/
|
|
||||||
VIPS_API
|
|
||||||
GType vips_array_image_get_type(void);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
void vips_value_set_area(GValue *value, VipsCallbackFn free_fn, void *data);
|
|
||||||
VIPS_API
|
|
||||||
void *vips_value_get_area(const GValue *value, size_t *length);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
const char *vips_value_get_save_string(const GValue *value);
|
|
||||||
VIPS_API
|
|
||||||
void vips_value_set_save_string(GValue *value, const char *str);
|
|
||||||
VIPS_API
|
|
||||||
void vips_value_set_save_stringf(GValue *value, const char *fmt, ...)
|
|
||||||
G_GNUC_PRINTF(2, 3);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
const char *vips_value_get_ref_string(const GValue *value, size_t *length);
|
|
||||||
VIPS_API
|
|
||||||
void vips_value_set_ref_string(GValue *value, const char *str);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
void *vips_value_get_blob(const GValue *value, size_t *length);
|
|
||||||
VIPS_API
|
|
||||||
void vips_value_set_blob(GValue *value,
|
|
||||||
VipsCallbackFn free_fn, const void *data, size_t length);
|
|
||||||
VIPS_API
|
|
||||||
void vips_value_set_blob_free(GValue *value, void *data, size_t length);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
void vips_value_set_array(GValue *value,
|
|
||||||
int n, GType type, size_t sizeof_type);
|
|
||||||
VIPS_API
|
|
||||||
void *vips_value_get_array(const GValue *value,
|
|
||||||
int *n, GType *type, size_t *sizeof_type);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
double *vips_value_get_array_double(const GValue *value, int *n);
|
|
||||||
VIPS_API
|
|
||||||
void vips_value_set_array_double(GValue *value, const double *array, int n);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int *vips_value_get_array_int(const GValue *value, int *n);
|
|
||||||
VIPS_API
|
|
||||||
void vips_value_set_array_int(GValue *value, const int *array, int n);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
GObject **vips_value_get_array_object(const GValue *value, int *n);
|
|
||||||
VIPS_API
|
|
||||||
void vips_value_set_array_object(GValue *value, int n);
|
|
||||||
|
|
||||||
/* See also image.h, that has vips_array_image_get(), vips_array_image_new(),
|
|
||||||
* vips_value_get_array_image() and vips_value_set_array_image(). They need
|
|
||||||
* to be declared after VipsImage.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
#endif /*VIPS_TYPE_H*/
|
|
||||||
@@ -1,432 +0,0 @@
|
|||||||
/* Various useful definitions.
|
|
||||||
*
|
|
||||||
* J.Cupitt, 8/4/93
|
|
||||||
* 15/7/96 JC
|
|
||||||
* - C++ stuff added
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
This file is part of VIPS.
|
|
||||||
|
|
||||||
VIPS is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
||||||
02110-1301 USA
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef VIPS_UTIL_H
|
|
||||||
#define VIPS_UTIL_H
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <math.h>
|
|
||||||
|
|
||||||
/* Some platforms don't have M_PI :-(
|
|
||||||
*/
|
|
||||||
#define VIPS_PI (3.14159265358979323846)
|
|
||||||
|
|
||||||
/* Convert degrees->rads and vice-versa.
|
|
||||||
*/
|
|
||||||
#define VIPS_RAD(R) (((R) / 360.0) * 2.0 * VIPS_PI)
|
|
||||||
#define VIPS_DEG(A) (((A) / (2.0 * VIPS_PI)) * 360.0)
|
|
||||||
|
|
||||||
#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
|
|
||||||
#define VIPS_MIN(A, B) ((A) < (B) ? (A) : (B))
|
|
||||||
|
|
||||||
#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
|
|
||||||
#define VIPS_FCLIP(A, V, B) VIPS_FMAX((A), VIPS_FMIN((B), (V)))
|
|
||||||
|
|
||||||
#define VIPS_NUMBER(R) ((int) (sizeof(R) / sizeof(R[0])))
|
|
||||||
|
|
||||||
#define VIPS_ABS(X) (((X) >= 0) ? (X) : -(X))
|
|
||||||
|
|
||||||
// is something (eg. a pointer) N aligned
|
|
||||||
#define VIPS_ALIGNED(P, N) ((((guint64) (P)) & ((N) - 1)) == 0)
|
|
||||||
|
|
||||||
/* The built-in isnan and isinf functions provided by gcc 4+ and clang are
|
|
||||||
* up to 7x faster than their libc equivalent included from <math.h>.
|
|
||||||
*/
|
|
||||||
#if defined(__clang__) || (__GNUC__ >= 4)
|
|
||||||
#define VIPS_ISNAN(V) __builtin_isnan(V)
|
|
||||||
#define VIPS_FLOOR(V) __builtin_floor(V)
|
|
||||||
#define VIPS_CEIL(V) __builtin_ceil(V)
|
|
||||||
#define VIPS_RINT(V) __builtin_rint(V)
|
|
||||||
#define VIPS_ROUND(V) __builtin_round(V)
|
|
||||||
#define VIPS_FABS(V) __builtin_fabs(V)
|
|
||||||
#define VIPS_FMAX(A, B) __builtin_fmax(A, B)
|
|
||||||
#define VIPS_FMIN(A, B) __builtin_fmin(A, B)
|
|
||||||
#else
|
|
||||||
#define VIPS_ISNAN(V) isnan(V)
|
|
||||||
#define VIPS_FLOOR(V) floor(V)
|
|
||||||
#define VIPS_CEIL(V) ceil(V)
|
|
||||||
#define VIPS_RINT(V) rint(V)
|
|
||||||
#define VIPS_ROUND(V) round(V)
|
|
||||||
#define VIPS_FABS(V) VIPS_ABS(V)
|
|
||||||
#define VIPS_FMAX(A, B) VIPS_MAX(A, B)
|
|
||||||
#define VIPS_FMIN(A, B) VIPS_MIN(A, B)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Testing status before the function call saves a lot of time.
|
|
||||||
*/
|
|
||||||
#define VIPS_ONCE(ONCE, FUNC, CLIENT) \
|
|
||||||
G_STMT_START \
|
|
||||||
{ \
|
|
||||||
if (G_UNLIKELY((ONCE)->status != G_ONCE_STATUS_READY)) \
|
|
||||||
(void) g_once(ONCE, FUNC, CLIENT); \
|
|
||||||
} \
|
|
||||||
G_STMT_END
|
|
||||||
|
|
||||||
/* VIPS_RINT() does "bankers rounding", it rounds to the nearest even integer.
|
|
||||||
* For things like image geometry, we want strict nearest int.
|
|
||||||
*
|
|
||||||
* If you know it's unsigned, _UINT is a little faster.
|
|
||||||
*/
|
|
||||||
#define VIPS_ROUND_INT(R) ((int) ((R) > 0 ? ((R) + 0.5) : ((R) -0.5)))
|
|
||||||
#define VIPS_ROUND_UINT(R) ((int) ((R) + 0.5))
|
|
||||||
|
|
||||||
/* Round N down and up to the nearest multiple of P.
|
|
||||||
*/
|
|
||||||
#define VIPS_ROUND_DOWN(N, P) ((N) - ((N) % (P)))
|
|
||||||
#define VIPS_ROUND_UP(N, P) (VIPS_ROUND_DOWN((N) + (P) -1, (P)))
|
|
||||||
|
|
||||||
#define VIPS_SWAP(TYPE, A, B) \
|
|
||||||
G_STMT_START \
|
|
||||||
{ \
|
|
||||||
TYPE t = (A); \
|
|
||||||
(A) = (B); \
|
|
||||||
(B) = t; \
|
|
||||||
} \
|
|
||||||
G_STMT_END
|
|
||||||
|
|
||||||
/* Duff's device. Do OPERation N times in a 16-way unrolled loop.
|
|
||||||
*/
|
|
||||||
#define VIPS_UNROLL(N, OPER) \
|
|
||||||
G_STMT_START \
|
|
||||||
{ \
|
|
||||||
if ((N)) { \
|
|
||||||
int duff_count = ((N) + 15) / 16; \
|
|
||||||
\
|
|
||||||
switch ((N) % 16) { \
|
|
||||||
case 0: \
|
|
||||||
do { \
|
|
||||||
OPER; \
|
|
||||||
case 15: \
|
|
||||||
OPER; \
|
|
||||||
case 14: \
|
|
||||||
OPER; \
|
|
||||||
case 13: \
|
|
||||||
OPER; \
|
|
||||||
case 12: \
|
|
||||||
OPER; \
|
|
||||||
case 11: \
|
|
||||||
OPER; \
|
|
||||||
case 10: \
|
|
||||||
OPER; \
|
|
||||||
case 9: \
|
|
||||||
OPER; \
|
|
||||||
case 8: \
|
|
||||||
OPER; \
|
|
||||||
case 7: \
|
|
||||||
OPER; \
|
|
||||||
case 6: \
|
|
||||||
OPER; \
|
|
||||||
case 5: \
|
|
||||||
OPER; \
|
|
||||||
case 4: \
|
|
||||||
OPER; \
|
|
||||||
case 3: \
|
|
||||||
OPER; \
|
|
||||||
case 2: \
|
|
||||||
OPER; \
|
|
||||||
case 1: \
|
|
||||||
OPER; \
|
|
||||||
} while (--duff_count > 0); \
|
|
||||||
} \
|
|
||||||
} \
|
|
||||||
} \
|
|
||||||
G_STMT_END
|
|
||||||
|
|
||||||
/* Various integer range clips. Record over/under flows.
|
|
||||||
*/
|
|
||||||
#define VIPS_CLIP_UCHAR(V, SEQ) \
|
|
||||||
G_STMT_START \
|
|
||||||
{ \
|
|
||||||
if ((V) < 0) { \
|
|
||||||
(SEQ)->underflow++; \
|
|
||||||
(V) = 0; \
|
|
||||||
} \
|
|
||||||
else if ((V) > UCHAR_MAX) { \
|
|
||||||
(SEQ)->overflow++; \
|
|
||||||
(V) = UCHAR_MAX; \
|
|
||||||
} \
|
|
||||||
} \
|
|
||||||
G_STMT_END
|
|
||||||
|
|
||||||
#define VIPS_CLIP_CHAR(V, SEQ) \
|
|
||||||
G_STMT_START \
|
|
||||||
{ \
|
|
||||||
if ((V) < SCHAR_MIN) { \
|
|
||||||
(SEQ)->underflow++; \
|
|
||||||
(V) = SCHAR_MIN; \
|
|
||||||
} \
|
|
||||||
else if ((V) > SCHAR_MAX) { \
|
|
||||||
(SEQ)->overflow++; \
|
|
||||||
(V) = SCHAR_MAX; \
|
|
||||||
} \
|
|
||||||
} \
|
|
||||||
G_STMT_END
|
|
||||||
|
|
||||||
#define VIPS_CLIP_USHORT(V, SEQ) \
|
|
||||||
G_STMT_START \
|
|
||||||
{ \
|
|
||||||
if ((V) < 0) { \
|
|
||||||
(SEQ)->underflow++; \
|
|
||||||
(V) = 0; \
|
|
||||||
} \
|
|
||||||
else if ((V) > USHRT_MAX) { \
|
|
||||||
(SEQ)->overflow++; \
|
|
||||||
(V) = USHRT_MAX; \
|
|
||||||
} \
|
|
||||||
} \
|
|
||||||
G_STMT_END
|
|
||||||
|
|
||||||
#define VIPS_CLIP_SHORT(V, SEQ) \
|
|
||||||
G_STMT_START \
|
|
||||||
{ \
|
|
||||||
if ((V) < SHRT_MIN) { \
|
|
||||||
(SEQ)->underflow++; \
|
|
||||||
(V) = SHRT_MIN; \
|
|
||||||
} \
|
|
||||||
else if ((V) > SHRT_MAX) { \
|
|
||||||
(SEQ)->overflow++; \
|
|
||||||
(V) = SHRT_MAX; \
|
|
||||||
} \
|
|
||||||
} \
|
|
||||||
G_STMT_END
|
|
||||||
|
|
||||||
#define VIPS_CLIP_UINT(V, SEQ) \
|
|
||||||
G_STMT_START \
|
|
||||||
{ \
|
|
||||||
if ((V) < 0) { \
|
|
||||||
(SEQ)->underflow++; \
|
|
||||||
(V) = 0; \
|
|
||||||
} \
|
|
||||||
} \
|
|
||||||
G_STMT_END
|
|
||||||
|
|
||||||
#define VIPS_CLIP_NONE(V, SEQ) \
|
|
||||||
{ \
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Not all platforms have PATH_MAX (eg. Hurd) and we don't need a platform one
|
|
||||||
* anyway, just a static buffer big enough for almost any path.
|
|
||||||
*/
|
|
||||||
#define VIPS_PATH_MAX (4096)
|
|
||||||
|
|
||||||
/* Create multiple copies of a function targeted at groups of SIMD intrinsics,
|
|
||||||
* with the most suitable selected at runtime via dynamic dispatch.
|
|
||||||
*/
|
|
||||||
#ifdef HAVE_TARGET_CLONES
|
|
||||||
#define VIPS_TARGET_CLONES(TARGETS) \
|
|
||||||
__attribute__((target_clones(TARGETS)))
|
|
||||||
#else
|
|
||||||
#define VIPS_TARGET_CLONES(TARGETS)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
const char *vips_enum_string(GType enm, int value);
|
|
||||||
VIPS_API
|
|
||||||
const char *vips_enum_nick(GType enm, int value);
|
|
||||||
VIPS_API
|
|
||||||
int vips_enum_from_nick(const char *domain, GType type, const char *str);
|
|
||||||
VIPS_API
|
|
||||||
int vips_flags_from_nick(const char *domain, GType type, const char *nick);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
gboolean vips_slist_equal(GSList *l1, GSList *l2);
|
|
||||||
VIPS_API
|
|
||||||
void *vips_slist_map2(GSList *list, VipsSListMap2Fn fn, void *a, void *b);
|
|
||||||
VIPS_API
|
|
||||||
void *vips_slist_map2_rev(GSList *list, VipsSListMap2Fn fn, void *a, void *b);
|
|
||||||
VIPS_API
|
|
||||||
void *vips_slist_map4(GSList *list,
|
|
||||||
VipsSListMap4Fn fn, void *a, void *b, void *c, void *d);
|
|
||||||
VIPS_API
|
|
||||||
void *vips_slist_fold2(GSList *list, void *start,
|
|
||||||
VipsSListFold2Fn fn, void *a, void *b);
|
|
||||||
VIPS_API
|
|
||||||
GSList *vips_slist_filter(GSList *list, VipsSListMap2Fn fn, void *a, void *b);
|
|
||||||
VIPS_API
|
|
||||||
void vips_slist_free_all(GSList *list);
|
|
||||||
VIPS_API
|
|
||||||
void *vips_map_equal(void *a, void *b);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
void *vips_hash_table_map(GHashTable *hash,
|
|
||||||
VipsSListMap2Fn fn, void *a, void *b);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
gboolean vips_iscasepostfix(const char *a, const char *b);
|
|
||||||
VIPS_API
|
|
||||||
gboolean vips_isprefix(const char *a, const char *b);
|
|
||||||
VIPS_API
|
|
||||||
char *vips_break_token(char *str, const char *brk);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_filename_suffix_match(const char *path, const char *suffixes[]);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
gint64 vips_file_length(int fd);
|
|
||||||
/* TODO(kleisauke): VIPS_API is required by vipsedit.
|
|
||||||
*/
|
|
||||||
VIPS_API
|
|
||||||
int vips__write(int fd, const void *buf, size_t count);
|
|
||||||
|
|
||||||
/* TODO(kleisauke): VIPS_API is required by test_connections.
|
|
||||||
*/
|
|
||||||
VIPS_API
|
|
||||||
int vips__open(const char *filename, int flags, int mode);
|
|
||||||
int vips__open_read(const char *filename);
|
|
||||||
FILE *vips__fopen(const char *filename, const char *mode);
|
|
||||||
|
|
||||||
FILE *vips__file_open_read(const char *filename,
|
|
||||||
const char *fallback_dir, gboolean text_mode);
|
|
||||||
FILE *vips__file_open_write(const char *filename,
|
|
||||||
gboolean text_mode);
|
|
||||||
/* TODO(kleisauke): VIPS_API is required by vipsedit.
|
|
||||||
*/
|
|
||||||
VIPS_API
|
|
||||||
char *vips__file_read(FILE *fp, const char *name, size_t *length_out);
|
|
||||||
char *vips__file_read_name(const char *name, const char *fallback_dir,
|
|
||||||
size_t *length_out);
|
|
||||||
int vips__file_write(void *data, size_t size, size_t nmemb, FILE *stream);
|
|
||||||
/* TODO(kleisauke): VIPS_API is required by the magick module.
|
|
||||||
*/
|
|
||||||
VIPS_API
|
|
||||||
gint64 vips__get_bytes(const char *filename, unsigned char buf[], gint64 len);
|
|
||||||
int vips__fgetc(FILE *fp);
|
|
||||||
|
|
||||||
GValue *vips__gvalue_ref_string_new(const char *text);
|
|
||||||
void vips__gslist_gvalue_free(GSList *list);
|
|
||||||
GSList *vips__gslist_gvalue_copy(const GSList *list);
|
|
||||||
GSList *vips__gslist_gvalue_merge(GSList *a, const GSList *b);
|
|
||||||
char *vips__gslist_gvalue_get(const GSList *list);
|
|
||||||
|
|
||||||
gint64 vips__seek_no_error(int fd, gint64 pos, int whence);
|
|
||||||
/* TODO(kleisauke): VIPS_API is required by vipsedit.
|
|
||||||
*/
|
|
||||||
VIPS_API
|
|
||||||
gint64 vips__seek(int fd, gint64 pos, int whence);
|
|
||||||
int vips__ftruncate(int fd, gint64 pos);
|
|
||||||
VIPS_API
|
|
||||||
int vips_existsf(const char *name, ...)
|
|
||||||
G_GNUC_PRINTF(1, 2);
|
|
||||||
VIPS_API
|
|
||||||
int vips_isdirf(const char *name, ...)
|
|
||||||
G_GNUC_PRINTF(1, 2);
|
|
||||||
VIPS_API
|
|
||||||
int vips_mkdirf(const char *name, ...)
|
|
||||||
G_GNUC_PRINTF(1, 2);
|
|
||||||
VIPS_API
|
|
||||||
int vips_rmdirf(const char *name, ...)
|
|
||||||
G_GNUC_PRINTF(1, 2);
|
|
||||||
VIPS_API
|
|
||||||
int vips_rename(const char *old_name, const char *new_name);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* VipsToken:
|
|
||||||
* @VIPS_TOKEN_LEFT: left bracket
|
|
||||||
* @VIPS_TOKEN_RIGHT: right bracket
|
|
||||||
* @VIPS_TOKEN_STRING: string constant
|
|
||||||
* @VIPS_TOKEN_EQUALS: equals sign
|
|
||||||
* @VIPS_TOKEN_COMMA: comma
|
|
||||||
*
|
|
||||||
* Tokens returned by the vips lexical analyzer, see vips__token_get(). This
|
|
||||||
* is used to parse option strings for arguments.
|
|
||||||
*
|
|
||||||
* Left and right brackets can be any of (, {, [, <.
|
|
||||||
*
|
|
||||||
* Strings may be in double quotes, and may contain escaped quote characters,
|
|
||||||
* for example string, "string" and "str\"ing".
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
typedef enum {
|
|
||||||
VIPS_TOKEN_LEFT = 1,
|
|
||||||
VIPS_TOKEN_RIGHT,
|
|
||||||
VIPS_TOKEN_STRING,
|
|
||||||
VIPS_TOKEN_EQUALS,
|
|
||||||
VIPS_TOKEN_COMMA
|
|
||||||
} VipsToken;
|
|
||||||
|
|
||||||
// we expose this one in the API for testing
|
|
||||||
VIPS_API
|
|
||||||
const char *vips__token_get(const char *buffer,
|
|
||||||
VipsToken *token, char *string, int size);
|
|
||||||
const char *vips__token_must(const char *buffer, VipsToken *token,
|
|
||||||
char *string, int size);
|
|
||||||
const char *vips__token_need(const char *buffer, VipsToken need_token,
|
|
||||||
char *string, int size);
|
|
||||||
const char *vips__token_segment(const char *p, VipsToken *token,
|
|
||||||
char *string, int size);
|
|
||||||
const char *vips__token_segment_need(const char *p, VipsToken need_token,
|
|
||||||
char *string, int size);
|
|
||||||
const char *vips__find_rightmost_brackets(const char *p);
|
|
||||||
/* TODO(kleisauke): VIPS_API is required by libvips-cpp and vipsheader.
|
|
||||||
*/
|
|
||||||
VIPS_API
|
|
||||||
void vips__filename_split8(const char *name,
|
|
||||||
char *filename, char *option_string);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_ispoweroftwo(int p);
|
|
||||||
VIPS_API
|
|
||||||
int vips_amiMSBfirst(void);
|
|
||||||
|
|
||||||
/* TODO(kleisauke): VIPS_API is required by jpegsave_file_fuzzer.
|
|
||||||
*/
|
|
||||||
VIPS_API
|
|
||||||
char *vips__temp_name(const char *format);
|
|
||||||
|
|
||||||
void vips__change_suffix(const char *name, char *out, int mx,
|
|
||||||
const char *new_suff, const char **olds, int nolds);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
char *vips_realpath(const char *path);
|
|
||||||
|
|
||||||
guint32 vips__random(guint32 seed);
|
|
||||||
guint32 vips__random_add(guint32 seed, int value);
|
|
||||||
|
|
||||||
const char *vips__icc_dir(void);
|
|
||||||
const char *vips__windows_prefix(void);
|
|
||||||
|
|
||||||
char *vips__get_iso8601(void);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_strtod(const char *str, double *out);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
#endif /*VIPS_UTIL_H*/
|
|
||||||
@@ -1,63 +0,0 @@
|
|||||||
/* helper stuff for Highway
|
|
||||||
*
|
|
||||||
* 16/03/21 kleisauke
|
|
||||||
* - from vector.h
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
This file is part of VIPS.
|
|
||||||
|
|
||||||
VIPS is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
||||||
02110-1301 USA
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef VIPS_VECTOR_H
|
|
||||||
#define VIPS_VECTOR_H
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
/* Set from the command-line.
|
|
||||||
*/
|
|
||||||
extern gboolean vips__vector_enabled;
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
gboolean vips_vector_isenabled(void);
|
|
||||||
VIPS_API
|
|
||||||
void vips_vector_set_enabled(gboolean enabled);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
gint64 vips_vector_get_builtin_targets(void);
|
|
||||||
VIPS_API
|
|
||||||
gint64 vips_vector_get_supported_targets(void);
|
|
||||||
VIPS_API
|
|
||||||
const char *vips_vector_target_name(gint64 target);
|
|
||||||
VIPS_API
|
|
||||||
void vips_vector_disable_targets(gint64 disabled_targets);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
#endif /*VIPS_VECTOR_H*/
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
/* Macros for the header version.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef VIPS_VERSION_H
|
|
||||||
#define VIPS_VERSION_H
|
|
||||||
|
|
||||||
#define VIPS_VERSION "8.16.1"
|
|
||||||
#define VIPS_VERSION_STRING "8.16.1"
|
|
||||||
#define VIPS_MAJOR_VERSION (8)
|
|
||||||
#define VIPS_MINOR_VERSION (16)
|
|
||||||
#define VIPS_MICRO_VERSION (1)
|
|
||||||
|
|
||||||
/* The ABI version, as used for library versioning.
|
|
||||||
*/
|
|
||||||
#define VIPS_LIBRARY_CURRENT (60)
|
|
||||||
#define VIPS_LIBRARY_REVISION (1)
|
|
||||||
#define VIPS_LIBRARY_AGE (18)
|
|
||||||
|
|
||||||
#define VIPS_CONFIG "enable debug: false\nenable deprecated: true\nenable modules: false\nenable cplusplus: true\nenable RAD load/save: true\nenable Analyze7 load: true\nenable PPM load/save: true\nenable GIF load: true\nFFTs with fftw3: true\nSIMD support with libhwy or liborc: false\nICC profile support with lcms2: false\ndeflate compression with zlib: true\ntext rendering with pangocairo: false\nfont file support with fontconfig: false\nEXIF metadata support with libexif: false\nJPEG load/save with libjpeg: true\nJXL load/save with libjxl: false (dynamic module: false)\nJPEG2000 load/save with OpenJPEG: false\nPNG load/save with libpng: true\nimage quantisation with imagequant or quantizr: false\nTIFF load/save with libtiff: false\nimage pyramid save with libarchive: false\nHEIC/AVIF load/save with libheif: false (dynamic module: false)\nWebP load/save with libwebp: true\nPDF load with PDFium or Poppler: false (dynamic module: false)\nSVG load with librsvg: false\nEXR load with OpenEXR: false\nWSI load with OpenSlide: false (dynamic module: false)\nMatlab load with Matio: false\nNIfTI load/save with libnifti: false\nFITS load/save with cfitsio: false\nGIF save with cgif: false\nMagick load/save with MagickCore: false (dynamic module: false)"
|
|
||||||
|
|
||||||
/* Not really anything to do with versions, but this is a handy place to put
|
|
||||||
* it.
|
|
||||||
*/
|
|
||||||
#define VIPS_ENABLE_DEPRECATED 1
|
|
||||||
|
|
||||||
#endif /*VIPS_VERSION_H*/
|
|
||||||
@@ -1,52 +0,0 @@
|
|||||||
/* video.h
|
|
||||||
*
|
|
||||||
* 20/9/09
|
|
||||||
* - from proto.h
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
This file is part of VIPS.
|
|
||||||
|
|
||||||
VIPS is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
||||||
02110-1301 USA
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef IM_VIDEO_H
|
|
||||||
#define IM_VIDEO_H
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
int im_video_v4l1(VipsImage *im, const char *device,
|
|
||||||
int channel, int brightness, int colour, int contrast, int hue,
|
|
||||||
int ngrabs);
|
|
||||||
VIPS_DEPRECATED
|
|
||||||
int im_video_test(VipsImage *im, int brightness, int error);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
#endif /*IM_VIDEO_H*/
|
|
||||||
@@ -1,201 +0,0 @@
|
|||||||
/* @(#) Header file for Birkbeck/VIPS Image Processing Library
|
|
||||||
* Authors: N. Dessipris, K. Martinez, Birkbeck College, London.
|
|
||||||
* Sept 94
|
|
||||||
*
|
|
||||||
* 15/7/96 JC
|
|
||||||
* - now does C++ extern stuff
|
|
||||||
* - many more protos
|
|
||||||
* 15/4/97 JC
|
|
||||||
* - protos split out
|
|
||||||
* 4/3/98 JC
|
|
||||||
* - IM_ANY added
|
|
||||||
* - sRGB colourspace added
|
|
||||||
* 28/10/98 JC
|
|
||||||
* - VASARI_MAGIC_INTEL and VASARI_MAGIC_SPARC added
|
|
||||||
* 29/9/99 JC
|
|
||||||
* - new locks for threading, no more threadgroup stuff in IMAGE
|
|
||||||
* 30/11/00 JC
|
|
||||||
* - override RGB/CMYK macros on cygwin
|
|
||||||
* 21/9/02 JC
|
|
||||||
* - new Xoffset/Yoffset fields
|
|
||||||
* - rationalized macro names
|
|
||||||
* 6/6/05 Markus Wollgarten
|
|
||||||
* - added Meta header field
|
|
||||||
* 31/7/05
|
|
||||||
* - added meta.h for new metadata API
|
|
||||||
* 22/8/05
|
|
||||||
* - scrapped stupid VAS_HD
|
|
||||||
* 30/9/05
|
|
||||||
* - added sizeof_header field for mmap window read of RAW files
|
|
||||||
* 4/10/05
|
|
||||||
* - now you have to define IM_ENABLE_DEPRECATED to get broken #defined
|
|
||||||
* 5/10/05
|
|
||||||
* - added GNUC attributes
|
|
||||||
* 8/5/06
|
|
||||||
* - added RGB16, GREY16
|
|
||||||
* 30/10/06
|
|
||||||
* - added im_window_t
|
|
||||||
* 7/11/07
|
|
||||||
* - added preclose and evalstart callbacks
|
|
||||||
* - brought time struct in here
|
|
||||||
* 7/3/08
|
|
||||||
* - MAGIC values should be unsigned
|
|
||||||
* 2/7/08
|
|
||||||
* - added invalidate callbacks
|
|
||||||
* 7/8/08
|
|
||||||
* - include <time.h>, thanks nicola
|
|
||||||
* 30/6/09
|
|
||||||
* - move deprecated stuff to its own header
|
|
||||||
* 16/5/18
|
|
||||||
* - remove old vips7 stuff, you must explicitly include it now
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
This file is part of VIPS.
|
|
||||||
|
|
||||||
VIPS is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
||||||
02110-1301 USA
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef VIPS_VIPS_H
|
|
||||||
#define VIPS_VIPS_H
|
|
||||||
|
|
||||||
#include <glib.h>
|
|
||||||
#include <glib/gstdio.h>
|
|
||||||
#include <gmodule.h>
|
|
||||||
#include <glib-object.h>
|
|
||||||
|
|
||||||
/* Needed for VipsGInputStream.
|
|
||||||
*/
|
|
||||||
#include <gio/gio.h>
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
#include <vips/basic.h>
|
|
||||||
|
|
||||||
#include <vips/buf.h>
|
|
||||||
#include <vips/dbuf.h>
|
|
||||||
#include <vips/util.h>
|
|
||||||
#include <vips/object.h>
|
|
||||||
#include <vips/type.h>
|
|
||||||
#include <vips/gate.h>
|
|
||||||
#include <vips/connection.h>
|
|
||||||
#include <vips/sbuf.h>
|
|
||||||
|
|
||||||
#include <vips/version.h>
|
|
||||||
#include <vips/rect.h>
|
|
||||||
|
|
||||||
#include <vips/private.h>
|
|
||||||
|
|
||||||
#include <vips/image.h>
|
|
||||||
#include <vips/memory.h>
|
|
||||||
#include <vips/error.h>
|
|
||||||
#include <vips/format.h>
|
|
||||||
#include <vips/region.h>
|
|
||||||
#include <vips/generate.h>
|
|
||||||
#include <vips/interpolate.h>
|
|
||||||
#include <vips/semaphore.h>
|
|
||||||
#include <vips/threadpool.h>
|
|
||||||
#include <vips/header.h>
|
|
||||||
#include <vips/operation.h>
|
|
||||||
#include <vips/foreign.h>
|
|
||||||
|
|
||||||
#include <vips/enumtypes.h>
|
|
||||||
|
|
||||||
#include <vips/arithmetic.h>
|
|
||||||
#include <vips/conversion.h>
|
|
||||||
#include <vips/convolution.h>
|
|
||||||
#include <vips/morphology.h>
|
|
||||||
#include <vips/mosaicing.h>
|
|
||||||
#include <vips/histogram.h>
|
|
||||||
#include <vips/freqfilt.h>
|
|
||||||
#include <vips/resample.h>
|
|
||||||
#include <vips/colour.h>
|
|
||||||
#include <vips/draw.h>
|
|
||||||
#include <vips/create.h>
|
|
||||||
|
|
||||||
/* VIPS_DISABLE_COMPAT:
|
|
||||||
*
|
|
||||||
* Disable automatically inclusion of `vips7compat.h`.
|
|
||||||
*
|
|
||||||
* This has no effect when building with `-Ddeprecated=false`.
|
|
||||||
*/
|
|
||||||
#if VIPS_ENABLE_DEPRECATED && !defined(VIPS_DISABLE_COMPAT)
|
|
||||||
#include <vips/vips7compat.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* We can't use _ here since this will be compiled by our clients and they may
|
|
||||||
* not have _().
|
|
||||||
*/
|
|
||||||
#define VIPS_INIT(ARGV0) \
|
|
||||||
(vips_version(3) - vips_version(5) != \
|
|
||||||
VIPS_LIBRARY_CURRENT - VIPS_LIBRARY_AGE \
|
|
||||||
? ( \
|
|
||||||
g_warning("ABI mismatch"), \
|
|
||||||
g_warning("library has ABI version %d", \
|
|
||||||
vips_version(3) - vips_version(5)), \
|
|
||||||
g_warning("application needs ABI version %d", \
|
|
||||||
VIPS_LIBRARY_CURRENT - VIPS_LIBRARY_AGE), \
|
|
||||||
vips_error("vips_init", "ABI mismatch"), \
|
|
||||||
-1) \
|
|
||||||
: vips_init(ARGV0))
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
int vips_max_coord_get(void);
|
|
||||||
VIPS_API
|
|
||||||
int vips_init(const char *argv0);
|
|
||||||
VIPS_API
|
|
||||||
const char *vips_get_argv0(void);
|
|
||||||
VIPS_API
|
|
||||||
const char *vips_get_prgname(void);
|
|
||||||
VIPS_API
|
|
||||||
void vips_shutdown(void);
|
|
||||||
VIPS_API
|
|
||||||
void vips_thread_shutdown(void);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
void vips_add_option_entries(GOptionGroup *option_group);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
void vips_leak_set(gboolean leak);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
void vips_block_untrusted_set(gboolean state);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
const char *vips_version_string(void);
|
|
||||||
VIPS_API
|
|
||||||
int vips_version(int flag);
|
|
||||||
|
|
||||||
VIPS_API
|
|
||||||
const char *vips_guess_prefix(const char *argv0, const char *env_name);
|
|
||||||
VIPS_API
|
|
||||||
const char *vips_guess_libdir(const char *argv0, const char *env_name);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif /*__cplusplus*/
|
|
||||||
|
|
||||||
#endif /*VIPS_VIPS_H*/
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,67 +0,0 @@
|
|||||||
// Include file to get vips C++ binding
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
This file is part of VIPS.
|
|
||||||
|
|
||||||
VIPS is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
||||||
02110-1301 USA
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef VIPS_CPLUSPLUS
|
|
||||||
#define VIPS_CPLUSPLUS
|
|
||||||
|
|
||||||
/* avoid conflict with Qt definitions, if they exist */
|
|
||||||
#if defined(signals) && defined(Q_SIGNALS)
|
|
||||||
#define _VIPS_QT_SIGNALS_DEFINED
|
|
||||||
#undef signals
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <vips/version.h>
|
|
||||||
|
|
||||||
#include <glib-object.h>
|
|
||||||
|
|
||||||
/* Note: when building without Meson, it may be necessary to define
|
|
||||||
* _VIPS_PUBLIC as __declspec(dllexport) when building a DLL.
|
|
||||||
*/
|
|
||||||
#ifndef _VIPS_PUBLIC
|
|
||||||
#define _VIPS_PUBLIC
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define VIPS_CPLUSPLUS_API _VIPS_PUBLIC
|
|
||||||
|
|
||||||
#define VIPS_NAMESPACE_START namespace vips {
|
|
||||||
#define VIPS_NAMESPACE_END }
|
|
||||||
|
|
||||||
#include "VError8.h"
|
|
||||||
#include "VImage8.h"
|
|
||||||
#include "VInterpolate8.h"
|
|
||||||
#include "VRegion8.h"
|
|
||||||
#include "VConnection8.h"
|
|
||||||
|
|
||||||
/* restore Qt keywords if they were disabled for GLib inclusion */
|
|
||||||
#ifdef _VIPS_QT_SIGNALS_DEFINED
|
|
||||||
#define signals Q_SIGNALS
|
|
||||||
#undef _VIPS_QT_SIGNALS_DEFINED
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /*VIPS_CPLUSPLUS*/
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
prefix=/out
|
|
||||||
includedir=${prefix}/include
|
|
||||||
libdir=${prefix}/lib
|
|
||||||
|
|
||||||
Name: vips-cpp
|
|
||||||
Description: C++ API for vips8 image processing library
|
|
||||||
Version: 8.16.1
|
|
||||||
Requires: vips, glib-2.0 >= 2.52, gio-2.0, gobject-2.0, expat, zlib >= 0.4, fftw3, libjpeg, libpng >= 1.2.9, libwebp >= 0.6, libwebpmux >= 0.6, libwebpdemux >= 0.6
|
|
||||||
Libs: -L${libdir} -lvips-cpp -pthread -lm
|
|
||||||
Cflags: -I${includedir} -DHAVE_CONFIG_H=1 -pthread
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
prefix=/out
|
|
||||||
includedir=${prefix}/include
|
|
||||||
libdir=${prefix}/lib
|
|
||||||
|
|
||||||
Name: vips
|
|
||||||
Description: Image processing library
|
|
||||||
Version: 8.16.1
|
|
||||||
Requires: glib-2.0 >= 2.52, gio-2.0, gobject-2.0, expat, zlib >= 0.4, fftw3, libjpeg, libpng >= 1.2.9, libwebp >= 0.6, libwebpmux >= 0.6, libwebpdemux >= 0.6
|
|
||||||
Libs: -L${libdir} -lvips -pthread -lm
|
|
||||||
Cflags: -I${includedir} -DHAVE_CONFIG_H=1 -pthread
|
|
||||||
Binary file not shown.
Binary file not shown.
@@ -1,93 +0,0 @@
|
|||||||
.TH VIPS 1 "30 June 1993"
|
|
||||||
.SH NAME
|
|
||||||
vips \- run vips operations from the command line
|
|
||||||
.SH SYNOPSIS
|
|
||||||
.B vips [options] [command] [command-options] [command-args]
|
|
||||||
.SH DESCRIPTION
|
|
||||||
.B vips(1)
|
|
||||||
is the VIPS universal main program. You can use it to run any VIPS operation
|
|
||||||
from the command line, to query the VIPS class hierarchy, and to
|
|
||||||
maintain parts of the VIPS library.
|
|
||||||
|
|
||||||
To run a VIPS operation, the first argument should be the name of the
|
|
||||||
operation
|
|
||||||
and following arguments should be the operation arguments. For example:
|
|
||||||
|
|
||||||
$ vips invert lena.v lena2.v
|
|
||||||
|
|
||||||
.SH OPTIONS
|
|
||||||
.TP
|
|
||||||
.B -l BASE-NAME, --list=BASE-NAME
|
|
||||||
List operations below BASE-NAME. This prints a one-line summary of every
|
|
||||||
operation in vips below the class BASE-NAME, where BASE-NAME may be a full
|
|
||||||
vips class name, or a nickname.
|
|
||||||
|
|
||||||
If BASE-NAME is not supplied, this will list all classes below VipsOperation.
|
|
||||||
|
|
||||||
.TP
|
|
||||||
.B -p PLUGIN, --plugin=PLUGIN
|
|
||||||
Load PLUGIN. Note that plugins in $VIPSHOME/lib/vips-plugins-MAJOR.MINOR are
|
|
||||||
loaded automatically.
|
|
||||||
|
|
||||||
.TP
|
|
||||||
.B -v, --version
|
|
||||||
Show VIPS version.
|
|
||||||
|
|
||||||
.TP
|
|
||||||
.B -c NAME, --completion NAME
|
|
||||||
Print completions for
|
|
||||||
.B NAME
|
|
||||||
|
|
||||||
.SH COMMANDS
|
|
||||||
|
|
||||||
.TP
|
|
||||||
.B operation-name operation-arguments
|
|
||||||
Execute a named operation, for example add.
|
|
||||||
|
|
||||||
.SH EXAMPLES
|
|
||||||
|
|
||||||
Run a vips operation. Operation options must follow the operation name.
|
|
||||||
|
|
||||||
$ vips insert lena.v lena2.v out.v 0 0 --background "128 0 0"
|
|
||||||
|
|
||||||
Get a "usage" message for an operation.
|
|
||||||
|
|
||||||
$ vips insert
|
|
||||||
insert image @sub into @main at @x, @y
|
|
||||||
usage:
|
|
||||||
insert main sub out x y
|
|
||||||
where:
|
|
||||||
main - Main input image, input VipsImage
|
|
||||||
sub - Sub-image to insert into main image, input VipsImage
|
|
||||||
out - Output image, output VipsImage
|
|
||||||
x - Left edge of sub in main, input gint
|
|
||||||
default: 0
|
|
||||||
min: -100000000, max: 100000000
|
|
||||||
y - Top edge of sub in main, input gint
|
|
||||||
default: 0
|
|
||||||
min: -100000000, max: 100000000
|
|
||||||
optional arguments:
|
|
||||||
expand - Expand output to hold all of both inputs, input gboolean
|
|
||||||
default: false
|
|
||||||
background - Colour for new pixels, input VipsArrayDouble
|
|
||||||
operation flags: sequential
|
|
||||||
|
|
||||||
List all draw operations.
|
|
||||||
|
|
||||||
$ vips -l draw
|
|
||||||
VipsDraw (draw), draw operations
|
|
||||||
VipsDrawink (drawink), draw with ink operations
|
|
||||||
VipsDrawRect (draw_rect), paint a rectangle on an image
|
|
||||||
VipsDrawMask (draw_mask), draw a mask on an image
|
|
||||||
VipsDrawLine (draw_line), draw a line on an image
|
|
||||||
VipsDrawCircle (draw_circle), draw a circle on an image
|
|
||||||
VipsDrawFlood (draw_flood), flood-fill an area
|
|
||||||
VipsDrawImage (draw_image), paint an image into another image
|
|
||||||
VipsDrawSmudge (draw_smudge), blur a rectangle on an image
|
|
||||||
|
|
||||||
.SH RETURN VALUE
|
|
||||||
returns 0 on success and non-zero on error.
|
|
||||||
.SH SEE ALSO
|
|
||||||
vipsheader(1)
|
|
||||||
.SH COPYRIGHT
|
|
||||||
The National Gallery and Birkbeck College, 1989-1996.
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
.TH VIPSEDIT 1 "30 June 1993"
|
|
||||||
.SH NAME
|
|
||||||
vipsedit \- edit header of a vips image file
|
|
||||||
.SH SYNOPSIS
|
|
||||||
.B vipsedit [OPTION...] vipsfile
|
|
||||||
.SH DESCRIPTION
|
|
||||||
.B vipsedit
|
|
||||||
alters a VIPS image file's header. This is useful for setting the resolution,
|
|
||||||
for example.
|
|
||||||
|
|
||||||
The options are:
|
|
||||||
|
|
||||||
-x, --xsize=N set Xsize to N
|
|
||||||
-y, --ysize=N set Ysize to N
|
|
||||||
-b, --bands=N set Bands to N
|
|
||||||
-f, --format=F set BandFmt to F (eg. uchar)
|
|
||||||
-i, --interpretation=I
|
|
||||||
set Interpretation to I (eg. xyz)
|
|
||||||
-c, --coding=C set Coding to C (eg. labq)
|
|
||||||
-X, --xres=R set Xres to R pixels/mm
|
|
||||||
-Y, --yres=R set Yres to R pixels/mm
|
|
||||||
-u, --xoffset=N set Xoffset to N
|
|
||||||
-v, --yoffset=N set Yoffset to N
|
|
||||||
-e, --setext replace extension block with stdin
|
|
||||||
|
|
||||||
Be very careful when changing Xsize, Ysize, BandFmt or Bands. vipsedit does no
|
|
||||||
checking!
|
|
||||||
|
|
||||||
.SH EXAMPLES
|
|
||||||
To set the Xsize to 512 and Bands to 6:
|
|
||||||
|
|
||||||
vipsedit --xsize=512 --bands=6 fred.v
|
|
||||||
|
|
||||||
or
|
|
||||||
|
|
||||||
vipsedit -x 512 -b 6 fred.v
|
|
||||||
|
|
||||||
Extract the XML metadata from an image with
|
|
||||||
.B vipsheader(1),
|
|
||||||
edit it, and reattach with
|
|
||||||
.B vipsedit(1).
|
|
||||||
|
|
||||||
vipsheader -f getext fred.v | sed s/banana/pineapple/ | vipsedit -e fred.v
|
|
||||||
|
|
||||||
.SH RETURN VALUE
|
|
||||||
returns 0 on success and non-zero on error.
|
|
||||||
.SH SEE ALSO
|
|
||||||
vipsheader(1)
|
|
||||||
.SH COPYRIGHT
|
|
||||||
K. Martinez 1993
|
|
||||||
@@ -1,47 +0,0 @@
|
|||||||
.TH VIPSHEADER 1 "12 July 1990"
|
|
||||||
.SH NAME
|
|
||||||
vipsheader \- prints information about an image file
|
|
||||||
.SH SYNOPSIS
|
|
||||||
vipsheader [OPTIONS ...] files ...
|
|
||||||
.SH DESCRIPTION
|
|
||||||
.B vipsheader(1)
|
|
||||||
prints image header fields to stdout.
|
|
||||||
|
|
||||||
.SH OPTIONS
|
|
||||||
|
|
||||||
.TP
|
|
||||||
.B -a, --all
|
|
||||||
Show all fields. Fields are displayed to be convenient for humans to
|
|
||||||
read, so binary data, for example, is summarized rather than simply printed.
|
|
||||||
|
|
||||||
.TP
|
|
||||||
.B -f FIELD, --field=FIELD
|
|
||||||
Print the value of
|
|
||||||
.B FIELD
|
|
||||||
from the image header. Fields are printed in a way suitable for programs to
|
|
||||||
understand, so, for example, binary data is base64-encoded and printed as a
|
|
||||||
stream of characters.
|
|
||||||
|
|
||||||
The special field name
|
|
||||||
.B getext
|
|
||||||
prints the VIPS extension block: the XML defining the image metadata. You can
|
|
||||||
alter this, then reattach with
|
|
||||||
.B vipsedit(1).
|
|
||||||
|
|
||||||
You can use multiple "-f" arguments to print the values
|
|
||||||
of many fields.
|
|
||||||
|
|
||||||
.SH EXAMPLES
|
|
||||||
$ vipsheader -f width ~/pics/*.v
|
|
||||||
1024
|
|
||||||
1279
|
|
||||||
22865
|
|
||||||
1
|
|
||||||
256
|
|
||||||
|
|
||||||
.SH SEE ALSO
|
|
||||||
vipsedit(1)
|
|
||||||
.SH COPYRIGHT
|
|
||||||
N. Dessipris
|
|
||||||
.SH AUTHOR
|
|
||||||
N. Dessipris \- 12/07/1990
|
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
.TH VIPSPROFILE 1 "13 December 2013"
|
|
||||||
.SH NAME
|
|
||||||
vipsprofile \- analyze vips profiles
|
|
||||||
.SH SYNOPSIS
|
|
||||||
.B vipsprofile
|
|
||||||
.SH DESCRIPTION
|
|
||||||
.B vipsprofile(1)
|
|
||||||
analyzes the file written by the --vips-profile option, calculates some
|
|
||||||
statistics, and draws a graph of evaluation.
|
|
||||||
|
|
||||||
Run any vips program with the --vips-profile option to generate a file called
|
|
||||||
"vips-profile.txt". This contains timing information about CPU use, memory use
|
|
||||||
and thread synchronisation.
|
|
||||||
|
|
||||||
Run
|
|
||||||
.B vipsprofile(1)
|
|
||||||
to load this file, calculate some
|
|
||||||
statistics, and draw a graph of evaluation saved to vips-profile.svg. This
|
|
||||||
analysis can help track down performance problems.
|
|
||||||
|
|
||||||
For example:
|
|
||||||
|
|
||||||
$ vips sharpen shark.jpg x.jpg --vips-profile
|
|
||||||
recording profile in vips-profile.txt
|
|
||||||
$ vipsprofile
|
|
||||||
reading from vips-profile.txt
|
|
||||||
loaded 3622 events
|
|
||||||
total time = 0.138322
|
|
||||||
name alive wait% work% unkn% memory peakm
|
|
||||||
worker 20 0.069 34.5 58.9 6.65 3.14 5.56
|
|
||||||
worker 21 0.07 1.36 60.2 38.4 2.65 5.07
|
|
||||||
worker 22 0.07 33 55.8 11.1 2.62 5.04
|
|
||||||
worker 23 0.072 34.2 59.7 6.15 2.72 5.14
|
|
||||||
wbuffer 24 0.075 99 1.03 0.00401 0 0
|
|
||||||
wbuffer 25 0.075 95.6 4.39 0.00667 0 0
|
|
||||||
main 26 0.14 52.8 0 47.2 -11.1 0.787
|
|
||||||
peak memory = 21.6 MB
|
|
||||||
writing to vips-profile.svg
|
|
||||||
|
|
||||||
.SH RETURN VALUE
|
|
||||||
returns 0 on success and non-zero on error.
|
|
||||||
.SH SEE ALSO
|
|
||||||
vips(1)
|
|
||||||
@@ -1,117 +0,0 @@
|
|||||||
.TH VIPSTHUMBNAIL 1 "13 May 2010"
|
|
||||||
.SH NAME
|
|
||||||
vipsthumbnail \- make thumbnails of image files
|
|
||||||
.SH SYNOPSIS
|
|
||||||
.B vipsthumbnail [flags] imagefile1 imagefile2 ...
|
|
||||||
.SH DESCRIPTION
|
|
||||||
.B vipsthumbnail(1)
|
|
||||||
processes each
|
|
||||||
.B imagefile
|
|
||||||
in turn, shrinking each image to fit within a 128 by 128 pixel square.
|
|
||||||
The shrunk image is written to a new file named
|
|
||||||
.B tn_imagefile.jpg.
|
|
||||||
This program is typically faster and uses less memory than
|
|
||||||
other image thumbnail programs.
|
|
||||||
|
|
||||||
For example:
|
|
||||||
|
|
||||||
$ vipsthumbnail fred.png jim.tif
|
|
||||||
|
|
||||||
will read image files
|
|
||||||
.B fred.png
|
|
||||||
and
|
|
||||||
.B jim.tif
|
|
||||||
and write thumbnails to the files
|
|
||||||
.B tn_fred.jpg
|
|
||||||
and
|
|
||||||
.B tn_jim.jpg.
|
|
||||||
|
|
||||||
$ vipsthumbnail --size=64 -o thumbnails/%s.png fred.jpg
|
|
||||||
|
|
||||||
will read image file
|
|
||||||
.B fred.jpg
|
|
||||||
and write a 64 x 64 pixel thumbnail to the file
|
|
||||||
.B thumbnails/fred.png.
|
|
||||||
|
|
||||||
.SH OPTIONS
|
|
||||||
.TP
|
|
||||||
.B -s N, --size=N
|
|
||||||
Set the output thumbnail size to
|
|
||||||
.B N
|
|
||||||
x
|
|
||||||
.B N
|
|
||||||
pixels.
|
|
||||||
|
|
||||||
You can use "MxN" to specify a rectangular bounding box.
|
|
||||||
The image is shrunk so that it just fits within this area, images
|
|
||||||
which are smaller than this are expanded.
|
|
||||||
|
|
||||||
Use "xN" or "Mx" to just resize on
|
|
||||||
one axis.
|
|
||||||
|
|
||||||
Append "<" to only resize if the input image is smaller than the
|
|
||||||
target, append ">" to only resize if the input image is larger than the target.
|
|
||||||
|
|
||||||
.TP
|
|
||||||
.B -o FORMAT, --output=FORMAT
|
|
||||||
Set the output format string. The input filename has any file type suffix
|
|
||||||
removed, then that value is substituted into
|
|
||||||
.B FORMAT
|
|
||||||
replacing
|
|
||||||
.B %s.
|
|
||||||
If
|
|
||||||
.B FORMAT
|
|
||||||
is a relative path, the name of the input directory is prepended. In other
|
|
||||||
words, any path in
|
|
||||||
.B FORMAT
|
|
||||||
is relative to the directory of the current input file.
|
|
||||||
|
|
||||||
The default value is
|
|
||||||
.B tn_%s.jpg
|
|
||||||
meaning JPEG output, with
|
|
||||||
.B tn_
|
|
||||||
prepended. You can add format options too, for example
|
|
||||||
.B tn_%s.jpg[Q=20]
|
|
||||||
will write JPEG images with Q set to 20.
|
|
||||||
|
|
||||||
.TP
|
|
||||||
.B -e PROFILE, --eprofile=PROFILE
|
|
||||||
Export thumbnails with this ICC profile. Images are only colour-transformed if
|
|
||||||
there is both an output and an input profile available. The input profile can
|
|
||||||
either be embedded in the input image or supplied with the
|
|
||||||
.B --iprofile
|
|
||||||
option.
|
|
||||||
|
|
||||||
.TP
|
|
||||||
.B -i PROFILE, --iprofile=PROFILE
|
|
||||||
Import images with this ICC profile, if no profile is embedded in the image.
|
|
||||||
Images are only colour-transformed if
|
|
||||||
there is both an output and an input profile available. The output profile
|
|
||||||
should be supplied with the
|
|
||||||
.B --oprofile
|
|
||||||
option.
|
|
||||||
|
|
||||||
.TP
|
|
||||||
.B -c, --crop
|
|
||||||
Crop the output image down. The image is shrunk so as to completely fill the
|
|
||||||
bounding box in both axes, then any excess is cropped off.
|
|
||||||
|
|
||||||
.TP
|
|
||||||
.B -d, --delete
|
|
||||||
Delete the output profile from the image. This can save a small amount of
|
|
||||||
space.
|
|
||||||
|
|
||||||
.TP
|
|
||||||
.B -t, --rotate
|
|
||||||
Auto-rotate images using EXIF orientation tags.
|
|
||||||
|
|
||||||
.TP
|
|
||||||
.B -a, --linear
|
|
||||||
Shrink images in linear light colour space. This can be much slower.
|
|
||||||
|
|
||||||
.SH RETURN VALUE
|
|
||||||
returns 0 on success and non-zero on error. Error can mean one or more
|
|
||||||
conversions failed.
|
|
||||||
|
|
||||||
.SH SEE ALSO
|
|
||||||
vipsheader(1)
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
// No-op stubs when libintl.a is unavailable (gettext NLS not needed for image resize).
|
|
||||||
const char* libintl_bindtextdomain(const char* domain, const char* dir) {
|
|
||||||
(void)dir;
|
|
||||||
return domain;
|
|
||||||
}
|
|
||||||
|
|
||||||
const char* libintl_bind_textdomain_codeset(const char* domain, const char* codeset) {
|
|
||||||
(void)codeset;
|
|
||||||
return domain;
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user