Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WinForms, .Net Framework Новый топик    Ответить
 Невозможно создать объект графики из изображения, имеющего индексированный формат пикселей  [new]
Eolt
Member

Откуда:
Сообщений: 1474
Почему падает говношарп на 7 строке? Пытаюсь впечатать дату в изображение, а оно упирается.


   private void PrintDataInLabel()
        {
            PointF location = new PointF(270, 383);
            Bitmap newBitmap;
            using (var bitmap = (Bitmap)Image.FromFile(Settings.TempLabelPng)) 
            {
                using (Graphics graphics = Graphics.FromImage(bitmap))
                {
                    using (Font arialFont = new Font("Arial", 25))
                    {
                        graphics.DrawString(DateTime.Now.ToString("dd.MM.yyyy"), arialFont, Brushes.Black, location);
                    }
                }
                newBitmap = new Bitmap(bitmap);
            }

            newBitmap.Save(Settings.TempLabelPng); 
            newBitmap.Dispose();
        }
23 май 19, 14:44    [21892052]     Ответить | Цитировать Сообщить модератору
 Re: Невозможно создать объект графики из изображения, имеющего индексированный формат пикселей  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 3351
ошибка то какая?
23 май 19, 14:47    [21892059]     Ответить | Цитировать Сообщить модератору
 Re: Невозможно создать объект графики из изображения, имеющего индексированный формат пикселей  [new]
Eolt
Member

Откуда:
Сообщений: 1474
Roman Mejtes,

Невозможно создать объект графики из изображения, имеющего индексированный формат пикселей
23 май 19, 14:53    [21892077]     Ответить | Цитировать Сообщить модератору
 Re: Невозможно создать объект графики из изображения, имеющего индексированный формат пикселей  [new]
Konst_One
Member

Откуда:
Сообщений: 11251
https://docs.microsoft.com/ru-ru/dotnet/api/system.drawing.graphics.fromimage?view=netframework-4.8
23 май 19, 14:57    [21892082]     Ответить | Цитировать Сообщить модератору
 Re: Невозможно создать объект графики из изображения, имеющего индексированный формат пикселей  [new]
Konst_One
Member

Откуда:
Сообщений: 11251
Комментарии
Если изображение имеет индексированный формат пикселей, этот метод создает исключение с сообщением, «графический объект невозможно создать из образа, который имеет индексированный формат пикселей.» В следующем списке показаны форматы индексированных пикселей.

Format1bppIndexed

Format4bppIndexed

Format8bppIndexed

Индексированное изображение можно сохранить в другой формат с помощью Save(String, ImageFormat) метод и затем извлекать Graphics объект нового образа.

Этот метод также вызывает исключение, если изображение имеет один из следующих форматов пикселей.

Undefined

DontCare

Format16bppArgb1555

Format16bppGrayScale

Следует всегда вызывать Dispose метод для освобождения Graphics и связанные с ней ресурсы, созданные FromImage метод.
23 май 19, 14:58    [21892087]     Ответить | Цитировать Сообщить модератору
 Re: Невозможно создать объект графики из изображения, имеющего индексированный формат пикселей  [new]
Супер_Пав
Member

Откуда: Москва
Сообщений: 356
Eolt
Почему падает говношарп

язык не для говнокодеров
23 май 19, 15:03    [21892093]     Ответить | Цитировать Сообщить модератору
 Re: Невозможно создать объект графики из изображения, имеющего индексированный формат пикселей  [new]
Eolt
Member

Откуда:
Сообщений: 1474
Konst_One,

Ясно, надо тогда так переделать.

 private void PrintDataInLabel()
        {
            PointF location = new PointF(270, 383);
            Bitmap newBitmap;
            using (var bitmap = (Bitmap)Image.FromFile(Settings.TempLabelPng))
            {
                var EditableImg = new Bitmap(bitmap);
                using (Graphics graphics = Graphics.FromImage(EditableImg))
                {
                    using (Font arialFont = new Font("Arial", 25))
                    {
                        graphics.DrawString(DateTime.Now.ToString("dd.MM.yyyy"), arialFont, Brushes.Black, location);
                    }
                }
                newBitmap = new Bitmap(EditableImg);
            }
            newBitmap.Save(Settings.TempLabelPng);
            newBitmap.Dispose();
        }
23 май 19, 15:24    [21892128]     Ответить | Цитировать Сообщить модератору
 Re: Невозможно создать объект графики из изображения, имеющего индексированный формат пикселей  [new]
Cat2
Member

Откуда: Petroskoi, Karjala
Сообщений: 145601
Eolt
Почему падает говношарп на 7 строке? Пытаюсь впечатать дату в изображение, а оно упирается.


   private void PrintDataInLabel()
        {
            PointF location = new PointF(270, 383);
            Bitmap newBitmap;
            using (var bitmap = (Bitmap)Image.FromFile(Settings.TempLabelPng)) 
            {
                using (Graphics graphics = Graphics.FromImage(bitmap))
                {
                    using (Font arialFont = new Font("Arial", 25))
                    {
                        graphics.DrawString(DateTime.Now.ToString("dd.MM.yyyy"), arialFont, Brushes.Black, location);
                    }
                }
                newBitmap = new Bitmap(bitmap);
            }

            newBitmap.Save(Settings.TempLabelPng); 
            newBitmap.Dispose();
        }


Я попробовал - у меня все нормально работает.
Что там у вас в Settings.TempLabelPng ?
23 май 19, 15:42    [21892167]     Ответить | Цитировать Сообщить модератору
 Re: Невозможно создать объект графики из изображения, имеющего индексированный формат пикселей  [new]
Eolt
Member

Откуда:
Сообщений: 1474
Cat2,

путь к черно-белому PNG файлу
23 май 19, 15:43    [21892169]     Ответить | Цитировать Сообщить модератору
 Re: Невозможно создать объект графики из изображения, имеющего индексированный формат пикселей  [new]
fkthat
Member

Откуда:
Сообщений: 1143
Cat2,

У него формат файла неподдерживаемый.

ТC, я бы создал битмап в памяти, с нужными параметрами, потом отрисовал бы туда твою картинку, потом поверх отрисовал бы текст и все сохранял. Или, другой вариант, создать копию файла с другим форматом и рисовать текст уже туда (собственно, по ссылке, что выше приводили, там даже пример есть).
23 май 19, 15:47    [21892177]     Ответить | Цитировать Сообщить модератору
 Re: Невозможно создать объект графики из изображения, имеющего индексированный формат пикселей  [new]
Cat2
Member

Откуда: Petroskoi, Karjala
Сообщений: 145601
fkthat
Cat2,

У него формат файла неподдерживаемый.

ТC, я бы создал битмап в памяти, с нужными параметрами, потом отрисовал бы туда твою картинку, потом поверх отрисовал бы текст и все сохранял. Или, другой вариант, создать копию файла с другим форматом и рисовать текст уже туда (собственно, по ссылке, что выше приводили, там даже пример есть).


+1. Примерно так

private void PrintDataInLabel()
        {
            PointF location = new PointF(10, 10);
            Bitmap newBitmap;
            string SettingsTempLabelPng = @"D:\Pictures\config.png";
            using (var bitmap1 = Image.FromFile(SettingsTempLabelPng))
            {
                MemoryStream ms = new MemoryStream();
                bitmap1.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
                var bitmap = Image.FromStream(ms);
                using (Graphics graphics = Graphics.FromImage(bitmap))
                {
                    using (Font arialFont = new Font("Arial", 25))
                    {
                        graphics.DrawString(DateTime.Now.ToString("dd.MM.yyyy"), arialFont, Brushes.Black, location);
                    }
                }
                newBitmap = new Bitmap(bitmap);
            }

            newBitmap.Save(SettingsTempLabelPng);
            newBitmap.Dispose();
        }
23 май 19, 16:27    [21892254]     Ответить | Цитировать Сообщить модератору
 Re: Невозможно создать объект графики из изображения, имеющего индексированный формат пикселей  [new]
Eolt
Member

Откуда:
Сообщений: 1474
Cat2,

Проще же к одной строчке свести

 var EditableImg = new Bitmap(bitmap);
23 май 19, 16:31    [21892260]     Ответить | Цитировать Сообщить модератору
 Re: Невозможно создать объект графики из изображения, имеющего индексированный формат пикселей  [new]
Cat2
Member

Откуда: Petroskoi, Karjala
Сообщений: 145601
Eolt
Cat2,

Проще же к одной строчке свести

 var EditableImg = new Bitmap(bitmap);

Проще в качестве заготовки взять png 32 разряда
23 май 19, 17:20    [21892328]     Ответить | Цитировать Сообщить модератору
 Re: Невозможно создать объект графики из изображения, имеющего индексированный формат пикселей  [new]
Eolt
Member

Откуда:
Сообщений: 1474
Cat2,

Не могу, мне png другое приложение генерит
23 май 19, 17:54    [21892363]     Ответить | Цитировать Сообщить модератору
 Re: Невозможно создать объект графики из изображения, имеющего индексированный формат пикселей  [new]
Eolt
Member

Откуда:
Сообщений: 1474
А как увеличить изображение в png по высоте? Имеется этикетка слева, нужно ее сделать более вытянутой, как с права.

К сообщению приложен файл. Размер - 43Kb
24 май 19, 12:46    [21893041]     Ответить | Цитировать Сообщить модератору
 Re: Невозможно создать объект графики из изображения, имеющего индексированный формат пикселей  [new]
hVostt
Member

Откуда:
Сообщений: 15397
Eolt,

Разместить изображение на чистое полотно другого размера?
24 май 19, 12:49    [21893048]     Ответить | Цитировать Сообщить модератору
 Re: Невозможно создать объект графики из изображения, имеющего индексированный формат пикселей  [new]
Eolt
Member

Откуда:
Сообщений: 1474
hVostt,

Наверное можно. А что более простых вариантов в шарпе нет?
24 май 19, 12:51    [21893051]     Ответить | Цитировать Сообщить модератору
 Re: Невозможно создать объект графики из изображения, имеющего индексированный формат пикселей  [new]
Eolt
Member

Откуда:
Сообщений: 1474
     private void TuningPrintSheet(object o, PrintPageEventArgs e)
        {
            Image img  = Image.FromFile(Settings.TempSheetPng);
            Bitmap newImg = new Bitmap(img, new Size(img.Size.Height+ 200,img.Size.Width));
            e.Graphics.DrawImage(newImg, e.PageBounds);
        }


Вот такое не срабатывает. Размер изображения остается прежним
24 май 19, 13:15    [21893082]     Ответить | Цитировать Сообщить модератору
 Re: Невозможно создать объект графики из изображения, имеющего индексированный формат пикселей  [new]
hVostt
Member

Откуда:
Сообщений: 15397
Eolt
hVostt,

Наверное можно. А что более простых вариантов в шарпе нет?


Вот этот умеет: https://imageprocessor.org/
24 май 19, 13:37    [21893109]     Ответить | Цитировать Сообщить модератору
 Re: Невозможно создать объект графики из изображения, имеющего индексированный формат пикселей  [new]
Eolt
Member

Откуда:
Сообщений: 1474
Короче удалось удлиннить этикетку вот так.

        private void TuningPrintSheet(object o, PrintPageEventArgs e)
        {
            var img  = Image.FromFile(Settings.TempSheetPng);
            var copy = new Bitmap(img.Size.Width, img.Size.Height + 40);
            using (Graphics graphics = Graphics.FromImage(copy))
            {
                var imageRectangle = new Rectangle(0, 0, copy.Width, copy.Height);
                graphics.DrawImage(img, imageRectangle, imageRectangle, GraphicsUnit.Pixel);
            }
             e.Graphics.DrawImage(copy, e.PageBounds);
        }
24 май 19, 13:52    [21893122]     Ответить | Цитировать Сообщить модератору
 Re: Невозможно создать объект графики из изображения, имеющего индексированный формат пикселей  [new]
Eolt
Member

Откуда:
Сообщений: 1474
Мдя

Штрихкод не читается:
   var copy = new Bitmap(img.Size.Width, img.Size.Height + 40);


Штрихкод читается:
   var copy = new Bitmap(img.Size.Width, img.Size.Height + 50);
24 май 19, 13:59    [21893134]     Ответить | Цитировать Сообщить модератору
 Re: Невозможно создать объект графики из изображения, имеющего индексированный формат пикселей  [new]
Cat2
Member

Откуда: Petroskoi, Karjala
Сообщений: 145601
Eolt
Короче удалось удлиннить этикетку вот так.

        private void TuningPrintSheet(object o, PrintPageEventArgs e)
        {
            var img  = Image.FromFile(Settings.TempSheetPng);
            var copy = new Bitmap(img.Size.Width, img.Size.Height + 40);
            using (Graphics graphics = Graphics.FromImage(copy))
            {
                var imageRectangle = new Rectangle(0, 0, copy.Width, copy.Height);
                graphics.DrawImage(img, imageRectangle, imageRectangle, GraphicsUnit.Pixel);
            }
             e.Graphics.DrawImage(copy, e.PageBounds);
        }

Офигеть. Это Нобелевка, однозначно
24 май 19, 22:14    [21893547]     Ответить | Цитировать Сообщить модератору
 Re: Невозможно создать объект графики из изображения, имеющего индексированный формат пикселей  [new]
hVostt
Member

Откуда:
Сообщений: 15397
Eolt
Короче удалось удлиннить этикетку вот так.


Ага, разместить на полотне по-больше :)
25 май 19, 00:22    [21893590]     Ответить | Цитировать Сообщить модератору
Все форумы / WinForms, .Net Framework Ответить