Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
4 / 4 / 1
Регистрация: 23.01.2015
Сообщений: 330
1

Редактирование png файла

14.01.2020, 21:17. Показов 3038. Ответов 7

Author24 — интернет-сервис помощи студентам
Задача, как мне сначала показалось, проста: есть png файл, нужно в нём кое-что подредактировать и сохранить.
Для удобства, пускай это будет квадратик 10X10 цвета #123456 в левом верхнем углу.
Только вот пара часов поисков и попыток это сделать практически ничего не дали.

ps. Одна из попыток закончилась такой ошибкой (SetPixel не поддерживается для изображений, имеющих форматы с индексированными пикселями), думаю это пригодится.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.01.2020, 21:17
Ответы с готовыми решениями:

Чтение png файла и вывод данных о нем в таблицу
Всем привет, столкнулся с проблемой: надо прочитать png файл вручную(без BitMap и прочего), затем...

Редактирование файла
Есть файл с текстом, состоящим из блоков, например <Account> <Login>Логин</Login>...

Редактирование существующего файла
Доброго времени суток! Я не могу понять почему не выполняется перезапись уже имеющегося файла...

Редактирование текстового файла.
В общем есть задание: В текстовом файле хранятся строки, среди которых надо удалить те, которые...

7
31 / 21 / 10
Регистрация: 08.10.2017
Сообщений: 181
14.01.2020, 21:28 2
А сделать-то что нужно?
0
4 / 4 / 1
Регистрация: 23.01.2015
Сообщений: 330
14.01.2020, 21:54  [ТС] 3
Цитата Сообщение от Slepoyi Посмотреть сообщение
А сделать-то что нужно?
Цитата Сообщение от Zagadohnik37 Посмотреть сообщение
нужно в нём кое-что подредактировать и сохранить.
Для удобства, пускай это будет квадратик 10X10 цвета #123456 в левом верхнем углу.
Я думал я очень понятно написал... То есть нарисовать этот квадратик

Добавлено через 10 минут
Немного разобравшись, понял, что заменить на свой цвет в индексированном изображении просто так не выйдет, хотя если знаете как, буду рад услышать, в результате, мне достаточно заменить некоторые пиксели цветом, который уже есть в палитре
0
1517 / 908 / 328
Регистрация: 17.05.2015
Сообщений: 3,430
14.01.2020, 22:00 4
Zagadohnik37, у вас изображение, которое не хранит значения RGB, а всего лишь индекс в некоторой таблице цветов. Это здорово уменьшает вес картинки.
Стандартный gdi+ врятли с таким работать умеет.
Попробуйте сначала конвертнуть изображение в RGB формат.
-Получите указатель на это изображение (gethbitmap)
-создайте объект graphics.FromHBitmap
-сохраните как bmp
1
4 / 4 / 1
Регистрация: 23.01.2015
Сообщений: 330
14.01.2020, 22:13  [ТС] 5
Цитата Сообщение от Рядовой Посмотреть сообщение
Стандартный gdi+ врятли с таким работать умеет.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Bitmap bm = new Bitmap(filename);
 
                    var data = bm.LockBits(new System.Drawing.Rectangle(0, 0, bm.Width, bm.Height),
                    ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format8bppIndexed);
 
                    var bytes = new byte[data.Height * data.Stride];
                    Marshal.Copy(data.Scan0, bytes, 0, bytes.Length);
 
                   
                    for (int i1 = 0; i1 < 700; i1++)
                    {
                        for (int i2 = 0; i2 < 700; i2++)
                        {
                            bytes[i1 * data.Stride + i2] = 0;
                        }
                    }
                    Marshal.Copy(bytes, 0, data.Scan0, bytes.Length);
 
                    bm.UnlockBits(data);
 
                    
                    bm.Save("....png");
Хм... Пока пытался, заработало... Конечно нужно заранее знать палитру и индекс нужного цвета, если такой вообще есть... Но для моей задачи подходит, ибо нужно просто удалить кое-какую надпись из угла картинки.

Чуть позже, ради эксперимента попробую конвертировать в RGB.

И ещё вопрос, в палитре (8 бит), максимум 256 цветов, и далеко не всегда используются все, может возможно как-нибудь добавить туда свой цвет?
*раз уж взялся, по изучаю данный вопросик, авось однажды пригодится.
0
1517 / 908 / 328
Регистрация: 17.05.2015
Сообщений: 3,430
14.01.2020, 22:26 6
Zagadohnik37, что значит не всегда все используются?
И какой свой цвет? Ваш цвет все равно будет в пределах 0-255
0
4 / 4 / 1
Регистрация: 23.01.2015
Сообщений: 330
14.01.2020, 22:37  [ТС] 7
(скриншот) , получается, что в палитре находятся всего 23 цвета, и логично предположить, что туда возможно добавить ещё 233 цвета.
Миниатюры
Редактирование png файла  
0
1517 / 908 / 328
Регистрация: 17.05.2015
Сообщений: 3,430
14.01.2020, 22:47 8
Zagadohnik37, я думаю после этого придется поменять структуру файла. Надо экспериментировать.

Добавлено через 1 минуту
Врятли файл за собой впустую таскает этот объем. png же специально делали легким.
0
14.01.2020, 22:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.01.2020, 22:47
Помогаю со студенческими работами здесь

Запретить редактирование файла
Всем доброго времени суток. Дано: 1) Очень важный xml файл, который (не обязательно, но...

Редактирование xls файла
Доброго времени суток, форумчане! Задача состоит в том чтобы отредактировать Exel файл, вот код: ...

Редактирование текстового файла
Доброго времени суток. Есть текст 1-я Благодатная Улица...

Редактирование word файла из C#
всем привет! может кто встречался с такой проблемой в общем суть проблемы такова есть ворд...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru