Я пытаюсь редактировать многостраничный tiff, создавая графику с изображения, но я столкнулся с сообщением об ошибке: "Объект Graphics не может быть создан с изображения с индексированным пиксельным форматом".
Как я могу редактировать многостраничный tiff?
Ошибка: графический объект не может быть создан из образа с индексированным пиксельным форматом.
... не имеет ничего общего с тем, что это многостраничный TIFF. Формат индексированного изображения означает, что он имеет палитру цветов, например. это 256-цветное изображение. 1-битное изображение (B & W) также будет считаться имеющим палитру из двух цветов.
Вы не можете выполнять операции Graphics
на изображениях с использованием палитры, их нужно сначала преобразовать в 15-битную или более цветовую глубину.
Я написал что-то, чтобы извлечь отдельные страницы из многостраничного файла tiff.
// Load as Bitmap
using (Bitmap bmp = new Bitmap(file))
{
// Get pages in bitmap
int frames = bmp.GetFrameCount(System.Drawing.Imaging.FrameDimension.Page);
bmp.SelectActiveFrame(System.Drawing.Imaging.FrameDimension.Page, tiffpage);
if (bmp.PixelFormat != PixelFormat.Format1bppIndexed)
{
using (Bitmap bmp2 = new Bitmap(bmp.Width, bmp.Height))
{
bmp2.Palette = bmp.Palette;
bmp2.SetResolution(bmp.HorizontalResolution, bmp.VerticalResolution);
// create graphics object for new bitmap
using (Graphics g = Graphics.FromImage(bmp2))
{
// copy current page into new bitmap
g.DrawImageUnscaled(bmp, 0, 0);
// do whatever you migth to do
...
}
}
}
}
Фрагмент загружает файл tif и извлекает одну страницу (число в переменной tiffpage) в новое растровое изображение. Это не индексируется, и можно создать графический объект.
Я написал небольшую утилиту для создания зашифрованных PDF файлов из tiff-изображений. Вот фрагмент кода для получения страниц с изображения tiff:
var bm= new System.Drawing.Bitmap('tif path');
var total = bm.GetFrameCount(System.Drawing.Imaging.FrameDimension.Page);
for(var x=0;x<total;x++)
{
bm.SelectActiveFrame(System.Drawing.Imaging.FrameDimension.Page,x);
var img=Image.GetInstance(bm,null,false);
//do what ever you want with img object
}
Вот ссылка на образец CodeProject, который включает в себя код для преобразования файла TIFF в обычное растровое изображение, с которым вы можете работать, как и любое другое растровое изображение:
http://www.codeproject.com/KB/GDI-plus/BitonalImageConverter.aspx