有没有办法缩放/重新映射/转换颜色在 pstricks 的图片中?
更详细:我有一些使用灰度颜色的 pstricks 代码。我想重新映射颜色[0,1]到[a,b], 在哪里0 <= a <= b <= 1。
显然我可以做任何几何变换,例如:
\rput(0,0) % translating...
{
\psscalebox{0.166} % scaling...
{
\psset{xunit=.5pt,yunit=.5pt,runit=.5pt} % changing units...
\pspicture*(725,725)
\input{./somepstricks.tex} % including alien pstricks-code
\endpspicture%
}
}
但是我怎样才能在这里添加颜色变换somepstricks.tex
呢?
一些额外的想法:
- 我可以用两个透明的黑色和白色层叠加图片,并实现任意组合A和b(使用
opacity
属性)。问题:通常,很难准确地覆盖元素而不覆盖somepstricks.tex
其他内容。在我不知道外部代码内容的情况下,我甚至不知道如何实现这一点。 - 虽然我目前还不需要它,但我仍然很欣赏一些附加功能:
- 包括颜色重新映射(不仅仅是灰度)
- 支持非线性重映射
- 允许饱和,即允许 a < 0 且 b > 1
答案1
您可以重新定义setgray
PostScript的功能:
\documentclass[a4paper]{article}
\usepackage{pstricks,multido}
\begin{document}
Color range from $0\cdots1$\\
\pspicture(10,4)
\multido{\rA=0.0+0.2,\rB=0.0+0.05}{20}{%
\psline[linewidth=2mm,linecolor={[gray]{\rB}}](0,\rA)(10,\rA)}
\endpspicture
\def\rLeft{0.2 } \def\rRight{0.6 }% spaces!!
\pstVerb{% redefine /setgray
/savesetgray /setgray load def
/setgray { % on the stack is the value for gray
\rRight \rLeft sub mul \rLeft add savesetgray } def
}
\bigskip
Color range from $0.2\cdots0.6$\\
\pspicture(10,4)
\multido{\rA=0.0+0.2,\rB=0.0+0.05}{20}{%
\psline[linewidth=2mm,linecolor={[gray]{\rB}}](0,\rA)(10,\rA)}
\endpspicture
\end {document}