Преобразование / запись BufferedImage в postscript - PullRequest
2 голосов
/ 07 февраля 2011

Я знаю, как нарисовать несколько простых фигур, используя postcript

Сейчас я смотрю, как нарисовать содержимое BufferedImage (ширина * высота) в постскриптуместраница (x, y, ширина, высота) без какой-либо внешней библиотеки (FOP, PDFBox ...).

У вас есть подсказка / код / ​​алгоритм?

Спасибо!: -)

1 Ответ

3 голосов
/ 08 февраля 2011

Нужно использовать операторы image или colorimage. В отличие от простого текстового оператора с линией и show, это сложные операторы которые принимают несколько параметров.

Я помещаю пример фрагмента постскриптума, который отображает изображение 8 x 8, используя 7 параметров colorimage оператор. Обратите внимание, что 5-й параметр на самом деле является процедурой обратного вызова, которая может вызываться несколько раз оператором colorimage, каждый раз возвращая некоторые данные изображения в строке. В этом примере я возвращаю данные всего изображения сразу. В этом примере эти данные кодируются ASCII, причем каждый байт представляется в виде 2-значного шестнадцатеричного числа. Возможны более эффективные кодировки, поскольку Postscript может декодировать кодирование base64, base85 и RLE во время выполнения.

Этот параметр может быть одной строкой вместо процедуры обратного вызова, но в этом случае двоичные данные должны быть экранированы в восьмеричном виде с предшествующей косой чертой (например, \ 377) для десятичной 255. Использование встроенных данных, которые читаются с помощью оператора currentfile, довольно обычно для представления изображений PostScript.

Обратите внимание, что изображение обычно отображается в квадрат (0,0,1,1) в пространстве визуализации, и перед установкой изображения необходимо установить матрицу глобального преобразования (с операторами translate, scale, rotate).

Полную справку по image и colorimage можно найти в Справочнике по языку Postscript, доступном по адресу http://www.adobe.com/products/postscript/pdfs/PLRM.pdf

В другом примере попробуйте запустить программу GIMP и сохранить изображение как Postscript из него.

%!PS-Adobe-3.0

% builds string to hold all image data at once:
/imgdata 8 8 3 mul mul string def

% set context to scale image to 256 X 256 pt (from 1 x1 pt)

256 256 scale

% Dimensions of image (width * height * bpp)

8 8 8

% Image transformation Matrix - [width 0 0 -height 0 height]: flips 
% vertical axis so we have top to bottom data:
[8 0 0 -8 0 8] 

% Procedure to read the image data and return it as a string:
{ currentfile % read inline data
  imgdata  % put read data into this variable
  readhexstring % performs the reading
  pop % discards read operation status
}

%indicates single data source:
false

%number of colors per pixel:
3
% Image operator: consumes previous parameters and renders the image
% followed by Image hexadecimal data in ASCII
colorimage 
0000000000200000400000600000800000a00000c00000e0200000200020
2000402000602000802000a02000c02000e0400000400020400040400060
4000804000a04000c04000e06000006000206000406000606000806000a0
6000c06000e08000008000208000408000608000808000a08000c08000e0
a00000a00020a00040a00060a00080a000a0a000c0a000e0c00000c00020
c00040c00060c00080c000a0c000c0c000e0e00000e00020e00040e00060
e00080e000a0e000c0e000e0

showpage
...