может, кто-нибудь сталкивался с такой проблемой по w98:
Если Image::FromFile передать имя файа, в котором имеются пробелы (например, "kot .jpg"), вылетает виндусовое белое окошко с ошибкой "Cannot find the file kot .jpg". Хотя файл существует. Причем файлы типа "C:\My Documents\jjj.jpg" грузятся нормально.
Продебажив насколько это возможно, упираюсь в вызов GdipLoadImageFromFile, из которого это окошко и вылетает. при этом оттуда возвращается OK.
под 2000 работает без проблем..
пробовал на c# создать и сохранить gif файл. Возникла такая проблема:
при
Bitmap img =new Bitmap(width,height);
картинка создается 32bit цветности. я рисую 2-мя — 3мя цветами.
хочу сохранить в гиф. Он мало того что сохраняет в 256 цветах, так еще и в стандартной палитре обрезанной.
Вместо строки
RectangleF bounds = clipBox;
нужно написать
RectangleF bounds = this.ClientRectangle;
иначе возникают глюки при перемещении формы за пределы экрана...
В жизни мало быть умным, надо еще быть не дураком.
Все работает хорошо и красиво, но черезвычайно медленно....
В 10 — 15 раз медленние при отсутствии антиальясинга и в 10-25 раз медленние при включином антиальясинге. Тестировалось на разных наборах примитивах (только примитивах).
Буду сильно рад если я ошибаюсь или неправильно чтото сделал...
Расследование показало, что проблему вызывает любой файл, имеющий в конце имени (перед точкой) пробелы. GdipLoadImageFromFile их обрезает и пытается грузить файл без завершающих пробелов в имени. (Хотя файловая система отличает файлы с пробелами на конце и без оных — "kot .jpg" и "kot.jpg" — два разных файла).
Пробелы в середине и длинные файлы грузятся на ура.
Ни на микрософте, ни в форумах такое поведение никак не упоминается..
Что это? бага?
Странно, я слышал, что color reduction GIF-кодек делает вполне культурно.
Если никаких ошибок нет (а где код?), то остается вариант "против лома нет приема" — создать битмап на 8bpp, установить свою палитру и сделать ему LockBits, а потом скопировать туда точки из нарисованного битмапа, выбирая нужные цвета.
Подробнее об этом я расскажу в 3-ей части (а все вторую никак не успеваю закончить :( )
Да, вопрос скорости, конечно, стоит остро. На CodeProject есть маленькая статейка об измерении производительности: http://www.codeproject.com/dotnet/gdiplusspeed.asp
Но ответов там не дается. Одну из будущих статей я планирую посветить вопросам производительности.
Если будут полезные мысли — пишите.
Бага, однозначно. На форуме MS (microsoft.public.win32.programming.gdi) упоминалась неоднократно.
У меня были похожие проблемы (окошко Application Error) при попытке загрузки некоторых файлов с русскими буквами. Причем закономерности я так и не установил, а с переходом на XP они и вовсе пропали.
Какая версия gdiplus.dll у тебя? Попробуй последнюю. Если не поможет, попробуй взять соответствующую dll из Windows XP.
Я слышал, что GDI+ будет поддерживать специальные драйверы. Если вывод будет производиться через какойнибудь ДиректХ, то скорость должна быть на высоте.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
К сожалению, для версии 1.0 это осталось лишь на уровне пожеланий. По заявлениям Microsoft Developer Support, GDI+ версии 1.0 не имеет собственного DDI (возможно, он появится в будущем).
Однако, во многом сравнивать производительность GDI и GDI+ некорректно. GDI не имеет многих возможностей, предоставляемых ядром GDI+ (антиалиасинг, 32-битный цвет с альфа-каналом, floating-point координатная система без пресловутых 16-битных ограничений на 95/98/ME и т.д.), и, естественно, они сказываются на производительности.
Hei dudes.. Sorry, i can type in Russian but having trouble with keystrokes :)
The keyboard is layed out in Norwegian...
Anyway, yes, i tested the GDI+ thingie, it is awfully slow. And, Retalik, you state that we should note that GDI+ does AA, and text quality drawing — well, i disabled the "FUNKY" effects, and the speed gain is about 15% :(
Как я понимаю Pen(Color(255, 0, 0), 1), Color(255, 0, 0) — это вызовы конструкторов, за которыми стоит много кода GDI. Поэтому предыдущий вызов GDI+ эквивалентен следующему коду GDI: