如何使用Image.GetInstance()创建独特的图像?

时间:2014-11-21 20:57:40

标签: c# image itextsharp

我需要使用接受原始位图数据的GetInstance()变体:

Image.GetInstance(int width, int height, int components, int bpc, byte[] data);

但是如果我反复调用它,即使位图数据实际上不同,我也会得到第一个实例而不是新实例。这是一个非常好的功能,例如,基于路径的固定图像,但对于即时图像生成不是那么好。我怎样才能保证每次都有新的位图?

版本5.5.3。

1 个答案:

答案 0 :(得分:1)

请查看RawImages示例。在这个例子中,我使用你提到的方法创建8个图像,一个用彩色空间灰色,三个用彩色空间RGB,四个用彩色空间CMYK:

Image gray = Image.getInstance(1, 1, 1, 8, new byte[] { (byte)0x80 });
gray.scaleAbsolute(30, 30);
Image red = Image.getInstance(1, 1, 3, 8, new byte[] { (byte)255, (byte)0, (byte)0 });
red.scaleAbsolute(30, 30);
Image green = Image.getInstance(1, 1, 3, 8, new byte[] { (byte)0, (byte)255, (byte)0 });
green.scaleAbsolute(30, 30);
Image blue = Image.getInstance(1, 1, 3, 8, new byte[] { (byte)0, (byte)0, (byte)255, });
blue.scaleAbsolute(30, 30);
Image cyan = Image.getInstance(1, 1, 4, 8, new byte[] { (byte)255, (byte)0, (byte)0, (byte)0 });
cyan.scaleAbsolute(30, 30);
Image magenta = Image.getInstance(1, 1, 4, 8, new byte[] { (byte)0, (byte)255, (byte)0, (byte)0 });
magenta.scaleAbsolute(30, 30);
Image yellow = Image.getInstance(1, 1, 4, 8, new byte[] { (byte)0, (byte)0, (byte)255, (byte)0 });
yellow.scaleAbsolute(30, 30);
Image black = Image.getInstance(1, 1, 4, 8, new byte[] { (byte)0, (byte)0, (byte)0, (byte)255 });
black.scaleAbsolute(30, 30);

正如您所看到的,每个图像的大小恰好是一个像素,我选择了不同的byte[]值,以便获得灰色,红色,绿色,蓝色,青色,品红色,黄色和黑色的像素。我还将这些图像缩放到更大的尺寸(否则很难看到它们)。

现在我添加这样的图像:

document.add(gray);
document.add(red);
document.add(green);
document.add(blue);
document.add(cyan);
document.add(magenta);
document.add(yellow);
document.add(black);
document.close();

结果与您在问题中声明的内容不符:raw_images.pdf

enter image description here

您的代码中必定存在其他错误,但由于您不会共享任何代码,因此没有人可以回答您的问题。