Печать холста с изображением серебряного света - PullRequest
1 голос
/ 29 января 2012

Я щедро добавил холст в растровое изображение, используя класс WritebleBitmap, а затем пытаюсь использовать растровое изображение для сохранения изображения в клиентской системе через SaveFileDilogue. Я использую метод кодирования изображений FluxJpegCore, где мы используем растровые массивы для генерации изображения по пикселям. Ниже приведена часть кода, которая выполняет эту работу.

        byte[][,] raster = new byte[bands][,];

        for (int i = 0; i < bands; i++)
        {
            raster[i] = new byte[width, height];
        }

        for (int row = 0; row < height; row++)
        {
            for (int column = 0; column < width; column++)
            {
                int pixel = bitmap.Pixels[width * row + column];
                raster[0][column, row] = (byte)(pixel >> 16);
                raster[1][column, row] = (byte)(pixel >> 8);
                raster[2][column, row] = (byte)pixel;
            }
        }    

Все идет нормально с сохранением изображения, однако, когда я масштабирую изображение, а затем печатаю его, код завершается ошибкой в ​​строке "raster [i] = new byte [width, height];". Ошибка системной памяти. Может кто-нибудь помочь мне найти решение по этому вопросу?

Ответы [ 2 ]

2 голосов
/ 30 января 2012

Я не уверен, что можно найти решение.У вас есть 3 массива, каждый из которых требует непрерывного блока памяти объемом 163 МБ.Проблема будет в том, что у процесса нет 3 таких доступных адресных блоков такого размера.

Имейте также в виду, что bitmap.Pixels будет массивом размером 653 МБ.

Ваша единственная реальная надежда (и) будет

  1. Используйте приложение OOB, надеюсь, фрагментация VM будет ограничена и позволит выделять такие очень большие массивы.
  2. Если FluxJpegCore может использовать Stream вместо байтового массива и делает это эффективно (еще много работы для вас)
  3. Перейдите в Silverlight 5 и разместите свое приложение в 64-битном браузереэкземпляр.
0 голосов
/ 30 января 2012

Переходя к @AnthonyWJones, я почти уверен, что ширина или высота - это что-то вроде double.NAN.Убедитесь, что вы поставили галочку, чтобы увидеть, что ширина и высота - это действительное число.Также убедитесь, что в Silverlight

ваш массив работает не так много, как возможно.
...