|
stranger2287 1 / 0 / 1 Регистрация: 03.05.2020 Сообщений: 34 |
||||
|
1 |
||||
|
16.10.2020, 17:19. Показов 5101. Ответов 3 Метки icc, rgb, Игра, проблема (Все метки)
Пытаюсь написать мини игру, подключил спрайты, запуска, чтобы проверить, что они выводятся на экран и тут ошибка:
__________________
0 |
|
1 / 0 / 1 Регистрация: 01.06.2019 Сообщений: 61 |
|
|
17.10.2020, 23:05 |
2 |
|
Подозреваю что проблема в этом месте win.blit(bg, (0, 0)) Цвет состоит из 3 значений RED GREEN BLUE а у вас только 2 значения, вот он и ругается.
0 |
|
1 / 0 / 1 Регистрация: 03.05.2020 Сообщений: 34 |
|
|
23.10.2020, 16:06 [ТС] |
3 |
|
Kxarog, не, здесь (0, 0) это координаты откуда начинается прорисовываться задний фон
0 |
|
1 / 0 / 1 Регистрация: 01.06.2019 Сообщений: 61 |
|
|
24.10.2020, 12:56 |
4 |
|
Да тупанул посмотрел мельком, посмотрел повнимательнее скопировал ваш код, пришлось заливать свои текстуры(я теперь понимаю почему tooru ругался на меня когда я выкладывал код без текстур) У меня такой ошибки нет(хотя код все равно не рабочий) + погуглив подозреваю что дело в ваших текстурах. Я не спец (да че уж там полный нубас), но могу предложить вам сделать 2 варианта
0 |
Когда я запускаю свою программу, это дает мне следующее предупреждение:
libpng warning: iCCP: known incorrect sRGB profile
Я знаю, почему это вызвано, sRGB — это то, что он хочет, но я использую Adobe Photoshop RGB.
Просто интересно, есть ли какой-либо код для отключения предупреждения. Это не влияет на мою программу. Это просто раздражает.
Любая помощь будет принята с благодарностью!
(Пожалуйста, не просите меня показать мой код, мой код не имеет ничего общего с этой ситуацией)
20 июнь 2014, в 20:44
Поделиться
Источник
1 ответ
ну, вы можете игнорировать предупреждение.
Я использую ImageMagick для изменения размера изображения, а для некоторого png файла следующий код будет генерировать исключение:
iCCP: известный неправильный профиль sRGB `@@warning/png.c/MagickPNGWarningHandler/1830
Blob ablob(cont.data(), cont.size()); // cont is the png file content.
Image image;
image.read(ablob);
image.resize( Geometry(100, 100) );
Как говорится, это просто предупреждение, вы можете поместить image.read(ablob) в блок try {} catch {} и игнорировать исключение. Изображение объекта теперь содержит интегрированные данные png и может управляться правильно.
sparkling
30 дек. 2014, в 06:40
Поделиться
Ещё вопросы
- 0распределить количество нулей в любом месте сетки
- 0Использование пользовательской страницы просмотра для предварительного просмотра изображения в Sonata Admin в проекте Symfony 2
- 1Создание метода с использованием C # в ASP.NET с синтаксисом Razor
- 1JS Promise wait для обновления токена
- 0Неправильное поведение с кодом AngularJS
- 1дизайн классов и конструкторов для программы арифметических выражений на Java
- 0JQuery AJAX вызов с codeigniter
- 1Создайте словарь подсчета категорий для столбца панд
- 1Ленивая оценка numpy.max
- 1Многопоточный код для работы с использованием настроенного количества потоков
- 1App Engine gcloud: Не удается найти файлы Python в домашнем каталоге, но они работают?
- 0Кнопка «Назад» и слайд-шоу
- 0Дизайн материала не работает с угловыми состояниями
- 0Возникли проблемы с проверкой, существует ли URL PHP
- 1Discord — BOT отправляет личное сообщение
- 1Dropzonejs вызывает ошибку и отменяет загрузку
- 1Создание Discord Bot в Python: Как сделать разговор о переключателе для ChatBot
- 1Java — Ошибка не может найти символ
- 1Добавление нового настраиваемого поля определенного типа MIME в приложении «Контакты»
- 0Как скрыть атрибут метки опции выбора?
- 0MySql: динамическое добавление столбцов, столько же строк, сколько в другой таблице
- 0извлечь список функций в заголовочном файле
- 0Транспортир не работает с Firefox 40.0.2
- 0Отображение имени отдела во внешнем запросе — sql
- 1производительность и объем памяти функций стрелок
- 1Как извлечь конкретное число в строку, окруженную цифрами и текстом C #
- 0Время Python / MySQL
- 0Ошибка: [ng: areq] Аргумент не является функцией, получил неопределенный
- 0Получить JSON ошибку при звонке с угловой с Zend Framework 1
- 0php curl_multi_exec () занимает больше времени, чем установлено в CURLOPT_TIMEOUT_MS
- 1Получение уникального массива из сервиса в Angular
- 1Java заставляет спящие потоки работать в пуле потоков
- 1JavaScript RegEx (0-100), но не ведущий 0
- 0обратное преобразование Фурье, ручное слияние реального и мнимого
- 0php jquery отправляет параметры сообщения на другую страницу php
- 0Функция маршрутизатора узла .delete возвращает 404 Not Found?
- 1Обновлять словарь за итерацию, а не за весь
- 0извлекать невыпуклую оболочку из результата суммы Минковского с помощью наддува
- 1Вставка значений в базу данных SQL Server
- 1Нерыночная публикация контента
- 0Вызов базового метода Zurb Foundation 4 содержит код, конфликтующий с Prototype.js
- 0Выбор удостоверения Outlook Express с использованием кода
- 0как получить атрибут sessioncope в HTML
- 0Использование jQuery для определения индекса ссылки на основе текста ссылки
- 1Android: перечислить все блокировки в системе
- 0индекс текущего выбранного элемента в массиве
- 1Как использовать System.Windows.Controls.WebBrowser без его отображения?
- 1файл не может быть удален даже после закрытия потоков
- 1Vue.js — как визуализировать вложенный компонент в этом простом примере?
- 0CKEDITOR — используйте клавишу Backspace для выделения текста

ibpng-1.6 более жестко проверяет профили ICC, чем предыдущие. Вы можете игнорировать предупреждение. Чтобы избавиться от него, удалите кусок iCCP из изображения PNG.
Некоторые приложения (в моём случае OpenGL) рассматривают предупреждения как ошибки; если вы используете такое приложение, вам нужно удалить iCCP кусок из изображения PNG. Это можно сделать с помощью любого из множества редакторов PNG (по правде говоря стандартный paint в windows у меня не смог). Пример редактор ImageMagick’s : convert in.png out.png.
Что бы удалить дефектный кусок (iCCP) из всех файлов PNG лежащих в директории можно воспользоваться командой mogrify *.png при условии, что ваш ImageMagick был собран с помощью libpng16(запустите такой командой convert -list format | grep PNG что бы быть уверренным в том что собираете в «верных» настройках).
Если вы хотите узнать, какие файлы нужно исправлять, а не слепо обрабатывать их все, вы можете запустить pngcrush -n -q *.png, где -n означает, что вы не переписываете файлы и - q означает подавление «технической» части вывода, за исключением предупреждений. К сожалению, в pngcrush еще нет опции для подавления всех «технических» сообщений, кроме предупреждений.
Бинарные релизы ImageMagick здесь
Для Android-проектов (Android Studio) перейдите в папку res.
Пример: C:AndroidProjects{your_project_folder}appsrcmainresdrawable-hdpimogrify *.png
Используйте pngcrush чтобы удалить неправильный профиль sRGB из файла png:
pngcrush -ow -rem allb -reduce file.png
owбудет перезаписывать входной файлrem allbудалит все вспомогательные куски, кроме tRNS и gAMAreduceсохраняет цвет и глубину
На выходе консоли вы должны увидеть Removed the sRGB chunk. , и, возможно, больше сообщений об удалении кусков iCCP. В конечном итоге вы получите меньший оптимизированный файл png. Когда команда перезапишет исходный файл, обязательно создайте резервную копию или контроль версий (гит_хаб, тартуисеХГ и т.д.).
Решение (мне это вариант нравится потому что он в Qt-е :3 )
Не корректный файл может быть исправлен :
- Открываем картинку(некорректный файл) с помощью
QPixmap::load - Сохраняем картинку(уже корректный файл) на диск с помощью
QPixmap::save
Примечание это решение использует Qt билиотеку.
Пример:
Вот минимальный пример, который я написал на C++, чтобы продемонстрировать, как реализовать предлагаемое решение:
QPixmap pixmap;
pixmap.load("badProfileImage.png");
QFile file("goodProfileImage.png");
file.open(QIODevice::WriteOnly);
pixmap.save(&file, "PNG");
Полный исходный код «GUI приложение», основано на этом примере, доступно в GitHub.
Вы можете исправить это в фотошопе…. У меня есть CC2015, но я уверен, что такая возможность присутствует во всех версиях.
- Откройте ваш .png файл
- File -> Save As и в открывшемся диалоговом окне снимите флажок «ICC Profile: sRGB IEC61966-2.1»
- снимите флажок «As a Copy»
- Смело сохраняйте свой «новый» оригинальный .png.
- Двигайтесь своей жизнью, зная, что вы удалили маленький кусочек зла из этого мира.
Я использовал функцию «mogrify * .png» ImageMagik. Однако у меня были изображения, зарытые в под папках, поэтому я использовал этот простой скрипт Python для применения ко всем изображениям во всех под папках и думал, что он может помочь другим людям:
import os
import subprocess
def system_call(args, cwd="."):
print("Running '{}' in '{}'".format(str(args), cwd))
subprocess.call(args, cwd=cwd)
pass
def fix_image_files(root=os.curdir):
for path, dirs, files in os.walk(os.path.abspath(root)):
# sys.stdout.write('.')
for dir in dirs:
system_call("mogrify *.png", "{}".format(os.path.join(path, dir)))
fix_image_files(os.curdir)
Используя первый метод решения сего вопроса изменил вид запроса :
find . -name "*.png" -type f -print0 | xargs -0 pngcrush_1_8_8_w64.exe -n -q > pngError.txt 2>&1
Я использовал find и xargs, потому что pngcrush не мог обрабатывать множество аргументов (которые были возвращены ** / *. Png). Параметры -print0 и -0 необходимы для обработки имен файлов, содержащих пробелы.
Затем выполните поиск в вывод для этих строк: iCCP: Not recognizing known sRGB profile that has been edited.
./Installer/Images/installer_background.png:
Total length of data found in critical chunks = 11286
pngcrush: iCCP: Not recognizing known sRGB profile that has been edited
И для каждого из них, запустить mogrify, чтобы исправить их.
mogrify ./Installer/Images/installer_background.png
Это предотвращает возможность индексации будто бы все png файлы изменены, когда только некоторые из них действительно были изменены. Кроме того, у этого метода есть преимущество, чтобы точно показать, какие файлы были неисправны.
Я тестировал это на Windows с консолью Cygwin и оболочкой zsh. И еще спасибо первому варианту(автор которого глен ) за точное пояснение как эту проблему можно решить.
вот более простой способ исправить эту проблему с Mac OS с помощью Homebrew:
> install homebrew if it is not installed yet
$brew install libpng
$pngfix --strip=color --out=file2.png file.png
или сделать с каждым файлом в текущем каталоге:
mkdir tmp; for f in ./*.png; do pngfix --strip=color --out=tmp/"$f" "$f"; done
Homebrew создаст фиксированную копию для каждого файла png в текущем каталоге и поместит его в подкаталог tmp. После этого, если все в порядке, вам просто нужно переопределить исходные файлы.
Иной совет- использовать приложения Keynote и Preview для создания иконок. Я рисую их, используя Keynote, размером около 120×120 пикселей, над слайдом с белым фоном (опция для редактирования многоугольников — это замечательно!). Перед экспортом в Preview я рисую прямоугольник вокруг значка (без заливки или тени, только контур размером около 135×135) и скопируйте все в буфер обмена. После этого вам просто нужно открыть его с помощью инструмента «Просмотр» с помощью «Создать из буфера обмена», выбрать область размером 128×128 пикселей вокруг значка, скопировать, снова использовать «Создать из буфера обмена» и экспортировать его в PNG. Вам не нужно будет запускать инструмент pngfix.
Используя программу просмотра изображений IrfanView в Windows, я просто сохранил изображение PNG и исправил проблему.
Попробовав пару предложений на этой странице, я остановился на использовании pngcrush. Вы можете использовать скрипт bash ниже для рекурсивного обнаружения и исправления плохих профилей png. Просто передайте ему полный путь к каталогу, который вы хотите найти для png-файлов.
fixpng "/path/to/png/folder"
скрипт:
#!/bin/bash
FILES=$(find "$1" -type f -iname '*.png')
FIXED=0
for f in $FILES; do
WARN=$(pngcrush -n -warn "$f" 2>&1)
if [[ "$WARN" == *"PCS illuminant is not D50"* ]] || [[ "$WARN" == *"known incorrect sRGB profile"* ]]; then
pngcrush -s -ow -rem allb -reduce "$f"
FIXED=$((FIXED + 1))
fi
done
echo "$FIXED errors fixed"
некоторые справочные данные по этому поводу:
Некоторые изменения в версии libpng 1.6+ приводят к тому, что он
выдаёт предупреждение или даже неправильно работает с исходным
профилем HP / MS sRGB, что приводит к следующему предупреждению
libpng warning: iCCP: known incorrect sRGB profile. Старый
профиль использует стандарт белой точки D50, когда в новом стандарте D65 является белой точкой .
Этот профиль не редкость, используеться в Adobe Photoshop, хотя он по
умолчанию не был встроен в изображения.
(источник: https://wiki.archlinux.org/index.php/Libpng_errors)
Обнаружение ошибок было улучшено в некоторых элементах.в частности, читатель
iCCP элемента теперь делает довольно полную проверку базового
формата.Некоторые неудачные профили, которые были ранее приняты,
теперь отклонены, в частности, очень старый сломанный профиль
Microsoft / HP sRGB. Требование спецификации PNG, что только
изображения с оттенками серого могут отображаться на изображениях с
типом цвета 0 или 4, и даже если изображение содержит только серые
пиксели, теперь применяются только профили RGB в изображениях с типом
цвета 2, 3 или 6. Элементу sRGB разрешено появляться на изображениях с
любым типом цвета.
(источник: https://forum.qt.io/topic/58638/solved-libpng-warning-iccp-known-incorrect-srgb-profile-drive-me-nuts/16)
