1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
% Copyright (C) 2001-2022 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
% implied.
%
% This software is distributed under license and may not be copied,
% modified or distributed except as expressly authorized under the terms
% of the license contained in the file LICENSE in this distribution.
%
% Refer to licensing information at http://www.artifex.com or contact
% Artifex Software, Inc., 1305 Grant Avenue - Suite 200, Novato,
% CA 94945, U.S.A., +1(415)492-9861, for further information.
%
%
% Paths in this example are relative to the MATLAB
% folder in the ghostscript project. MATLAB only
% runs on Windows 64 bit machines. Interface is
% limited to a subset of the API methods due to
% the fact that the MATLAB API does not allow
% function pointers. We want to use the display
% device callbacks to get the image data created
% from Ghostscript. To do this, we have to wrap the
% callback set up and associated functions into a
% MEX-file that will serve as an interface between MATLAB
% and the Ghostscript DLL. We use the C MEX API (as opposed to
% the C++ MEX API). The mex file is gs_displaydevice.c
% The creation of the mex file for the display device handling only
% needs to be done once. Note the use of -R2018a as we are using
% type-safe data access in the mex file. This also is doing a debug version -g.
mex 'gs_displaydevice.c' -R2018a -g '../../debugbin/gpdldll64.lib'
% You have to load the library to get the mex file to find the library and
% to make direct calls to gpdldll64 directly from MATLAB
if not(libisloaded('gpdldll64'))
[nf,warn] = loadlibrary('../../debugbin/gpdldll64.dll','../../pcl/pl/plapi.h')
end
% Show us the various methods in the DLL
% libfunctions('gpdldll64')
% Use planar format for MATLAB. See gdevdsp.h for what these bits mean.
PlanarGray = 0x800802;
PlanarRGB = 0x800804;
PlanarCMYK = 0x800808;
PlanarSpots = 0x880800;
% Let try the display device and return the image
page_number = 1;
resolution = 200;
input_file = '../../examples/tiger.eps';
tiger_image_rgb = gs_displaydevice(input_file, PlanarRGB, page_number, resolution);
figure(1);
imshow(tiger_image_rgb);
title('RGB rendering');
tiger_image_gray = gs_displaydevice(input_file, PlanarGray, page_number, resolution);
figure(2);
imshow(tiger_image_gray);
title('Gray rendering');
% MATLAB will not display CMYK or NColor Images. We have to show
% the separations for this case
tiger_image_cmyk = gs_displaydevice(input_file, PlanarCMYK, page_number, resolution);
for k=1:4
eval(sprintf('figure(2+k);'));
imshow(tiger_image_cmyk(:,:,k));
switch k
case 1
title('Cyan Separation');
case 2
title('Magenta Separation');
case 3
title('Yellow Separation');
case 4
title('Black Separation');
end
end
% At this stage, you can push the image data through MATLAB's ocr if you
% have the Computer Vision Toolbox and want to do some sort of text
% analysis. You can also use direct calls into gpdldll64. See the
% C-API demo for examples on what can be done to render to file output or
% save as PDF, PS, etc.
|