GDI + Система. Рисование. Битовый массив дает параметр ошибок, не допустимо периодически

Добро пожаловать в мир, где сложные вещи легки, а простые вещи сложны!

Команда включения OpenJSCAD будет искать файл включения относительно URL включаемого файла, и когда вы попытайтесь перетащить и удалить файлы через браузер, и поведение, по-видимому, сильно зависит от браузера.

Поэтому было бы проще, если бы ваше «рабочее пространство» с файлом, который вы хотели бы использовать, находилось в веб-сервисе, предлагаемом решением OpenJSCAD.

В разделе примеров OpenJSCAD, по-видимому, в данный момент используется оператор «include», см.

https://www.openjscad.org/examples/globe.jscad.

Вы можете попробовать это через https://www.openjscad.org/index.html#examples/globe.jscad

Обратите внимание, что как при обновлении вы получаете сообщение об ошибке:


404 Not Found

Not Found

The requested URL /openjscad.jscadplatonics/maths_geodesic.jscad was not found on this server.


Apache/2.4.25 (Debian) Server at www.openjscad.org Port 443

Чтобы получить тот же эффект локально, вам нужно создать дочерний каталог «examples» в вашей локальной установке. Это не будет работать, если вы вызываете «index.html» с помощью файла url

file: ///usr/local/lib/node_modules/@jscad/openjscad/index.html#examples/globe.jscad [ 1123]

Чтобы показать принцип работы каталога «Рабочая область», я создал докеризованную версию OpenJSCAD, которая доступна по адресу:

Она также доступна через Docker Hub, так что вы можете просто попробовать ее, выполнив команду :

docker run --publish=8080:8080 --name openjscad  bitplan/openjscad:latest

Теперь вы должны иметь OpenJSCAD, работающий в док-контейнере на вашем компьютере, который вы можете попробовать, например,

http: // localhost: 8080 /

и, в частности,

, чтобы увидеть использование включения. [ 1129]

Теперь нам нужно применить этот принцип к каталогу рабочей области, который подготовлен в контейнере Docker и готов к локальной установке.

Чтобы это работало, необходимо соблюдать некоторые правила, которые в настоящее время обсуждаются по адресу: https://openjscad.nodebb.com/topic/6/dockerized-openjscad

Смонтируйте свой каталог рабочего пространства

docker run \
  --publish=8080:8080 \
  --name openjscad \
  --volume $HOME/openjscad/workspace:/openjscad/packages/web/examples/workspace \
  bitplan/openjscad:latest

теперь файл из вашего рабочего пространства должен быть доступен через соответствующий URL. Чтобы попробовать что-то, вы можете скопировать папку platonics из

https://github.com/jscad/OpenJSCAD.org/tree/master/packages/examples/platonics [1134 ]

в папку рабочей области и попробуйте получить доступ с помощью:

http: // localhost: 8080 / index.html # examples / workspace / platonics

сейчас у вас должно быть все готово для использования

include() 

в соответствии с просьбой

13
задан 25 September 2008 в 00:27
поделиться

5 ответов

Прекратите использовать GDI + и начните использовать WPF классы Обработки изображений (.NET 3.0). Это главная очистка GDI + классы и настроенный для производительности. Кроме того, это настраивает "растровую цепочку", которая позволяет Вам легко выполнять несколько действий с битовым массивом эффективным способом.

Находят больше путем чтения приблизительно , BitmapSource

Здесь является примером запуска с пустого битового массива, просто ожидая для получения некоторых пикселей:

using System.Windows.Media.Imaging;
class Program {
    public static void Main(string[] args) {
        var bmp = new WriteableBitmap(1184, 1900, 96.0, 96.0, PixelFormat.Bgr32, null);
    }
}
10
ответ дан 1 December 2019 в 22:58
поделиться

Для любого то, кому интересно, решение, которое я собираюсь использовать, является Моно. Каирские библиотеки от моно распределения C# вместо того, чтобы использовать system.drawing. Если я просто перетаскиваю mono.cairo.dll, libcairo-2.dll, libpng13.dll и файлы zlib1.dll от версии для Windows моно в ту же папку как мой исполняемый файл, то я могу разработать в окнах с помощью Visual Studio 2005 и все это работает приятно.

Обновление - я сделал вышеупомянутое и подчеркиваю, протестировал приложение, и все это, кажется, работает гладко теперь и использует на 200 МБ меньше поршня для начальной загрузки. Очень счастливый.

6
ответ дан 1 December 2019 в 22:58
поделиться

Все, что я видел до настоящего времени в моем контексте, связано с утечками памяти / утечки дескриптора. Я рекомендую заставить новую пару глаз исследовать код.

то, Что на самом деле происходит, - то, что изображение расположено в случайной точке в будущем даже при создании его на предыдущей строке кода. Это может быть из-за утечки памяти/дескриптора (убирающий, некоторые из моего кода, кажется, улучшаются, но не полностью разрешают эту проблему).

, поскольку эта ошибка происходит после того, как приложение использовалось некоторое время, иногда с помощью большой памяти, иногда не, я чувствую, что сборщик "мусора" не соблюдает правила из-за некоторых специальных тонких настроек, связанных с сервисами, и именно поэтому Microsoft промывает их руки от этой проблемы.

http://blog.lavablast.com/post/2007/11/The-Mysterious-Parameter-Is-Not-Valid-Exception.aspx

3
ответ дан 1 December 2019 в 22:58
поделиться

Вам не только нужно достаточно памяти, это должно быть непрерывно. Со временем память становится фрагментированной, и становится более трудно найти большие блоки. Нет большого количества хороших решений этого кроме создания изображений от меньших битовых массивов.

новый Битовый массив (x, y) в значительной степени просто должен выделить память - предполагающий, что Ваша программа не повреждается в некотором роде (там любой небезопасный код, который мог повредить "кучу"), тогда я запущу с этого сбоя выделения. Быть необходимостью непрерывный блок - то, как на вид маленькое выделение могло перестать работать. Фрагментация "кучи" - что-то, что обычно решается с пользовательским средством выделения - я не думаю, что это - хорошая идея в IIS (или возможный).

Для наблюдения, в какую ошибку Вы входите из памяти попробуйте просто выделение гигантский Битовый массив, поскольку тест - видит, какую ошибку это бросает.

Одна стратегия, которую я видел, состоит в том, чтобы предварительно выделить некоторые большие блоки памяти (в Ваших Битовых массивах случая) и рассматривать их как пул (получите и возвратите их пулу). Если Вам только нужны они в течение короткого промежутка времени, Вы могли бы быть в состоянии сойти с рук просто хранение некоторых в памяти и совместном использовании их.

1
ответ дан 1 December 2019 в 22:58
поделиться

Я просто получил ответ от поддержки Microsoft. По-видимому, если Вы смотрите здесь:

http://msdn.microsoft.com/en-us/library/system.drawing.aspx

Вы видите, что это говорит "Классы в Системе. Рисование пространства имен не поддерживается для использования в сервисе Windows или ASP.NET. Попытка использовать эти классы из одного из этих типов приложения может произвести неожиданные проблемы, такие как уменьшенная эффективность услуг и исключения на этапе выполнения". Таким образом, они в основном промывают руки проблемы. Кажется, что они признают, что этот раздел платформы .NET ненадежен. Я немного разочарован.

Следующий - кто-либо может рекомендовать подобной библиотеке открыть gif файл, наложить некоторый текст и сохранить его снова?

0
ответ дан 1 December 2019 в 22:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: