Сохранение изображения - PullRequest
0 голосов
/ 17 мая 2011

Я делаю программу для рисования на C # для Windows Phone.

Это для Windows Phone , поэтому не работает куча вещей, которые могли бы работать в C #.

В начале открытия страницы .XAML у меня есть пустой холст. Пользователь рисует на холсте, затем нажимает Сохранить. Когда он / она нажимает кнопку Сохранить, я хочу, чтобы программа смогла сохранить изображение на холсте.

Пока у меня есть следующий код:

        IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication();
        StreamReader sr = null;

        sr = new StreamReader(new IsolatedStorageFileStream("Data\\imagenum.txt", FileMode.Open, isf));
        test = sr.ReadLine();
        sr.Close();

        int.TryParse(test, out test2);

        test2 = test2 + 1;

        IsolatedStorageFile isf2 = IsolatedStorageFile.GetUserStoreForApplication();
        isf2.CreateDirectory("Data");
        StreamWriter sw = new StreamWriter(new IsolatedStorageFileStream("Data\\imagenum.txt", FileMode.Create, isf2));
        sw.WriteLine(test2);
        //This writes the content of textBox1 to the StreamWriter. The StreamWriter writes the text to the file.
        sw.Close();

Этот код находит подходящее имя для изображения.

Я также нашел различные другие фрагменты кода в Интернете:

            // Construct a bitmap from the button image resource.
        test = "Images/" + test + ".jpg";
        using (IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication())
        {
            WriteableBitmap bmImage = new WriteableBitmap(image);
            if (!store.DirectoryExists("Images"))
            {
                store.CreateDirectory("Images");
            }
            using (IsolatedStorageFileStream isoStream =
            store.OpenFile(@"Images\" + test + ".jpg", FileMode.OpenOrCreate))
            {
                Extensions.SaveJpeg(
                bmImage,
                isoStream,
                bmImage.PixelWidth,
                bmImage.PixelHeight,
                0,
                100);
            }
        }

Выше приведен ужасный код из учебников по MSDN и моего собственного плохо собранного кода.

(не работает, по очевидным причинам)

Как сохранить холст в IsolatedStorage как изображение?

Ответы [ 2 ]

4 голосов
/ 17 мая 2011

Ваш первый раздел, в котором вы, кажется, записываете последнее использованное число в текстовый файл в IsolatedStorage, кажется большой работой, чтобы сделать что-то относительно простое. Вы можете заменить весь этот раздел следующим образом:

IsolatedStorageSettings settings = IsolatedStorageSettings.ApplicationSettings;
int imageNumber = 0;
settings.TryGetValue<int>("PreviousImageNumber", out imageNumber);
imageNumber++;

Вы можете сохранить изображение в IsolatedStorage так:

using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication())
{
    if (!isf.DirectoryExists("Images"))
    {
        isf.CreateDirectory("Images");
    }
    IsolatedStorageFileStream fstream = isf.CreateFile(string.Format("Images\\{0}.jpg",imageNumber));

    WriteableBitmap wbmp = new WriteableBitmap(image);
    Extensions.SaveJpeg(wbmp, fstream, wbmp.PixelWidth, wbmp.PixelHeight, 0, 100);
    fstream.Close();
}

Но, возможно, было бы более разумно сохранить изображение в MediaLibrary, например:

MediaLibrary library = new MediaLibrary();
WriteableBitmap wbmp = new WriteableBitmap(image);

MemoryStream ms = new MemoryStream();
Extensions.SaveJpeg(wbmp, ms, wbmp.PixelWidth, wbmp.PixelHeight, 0, 100);
ms.Seek(0, SeekOrigin.Begin);
library.SavePicture(string.Format("Images\\{0}.jpg",imageNumber), ms);

В любом случае, вы можете затем сохранить imageNumber обратно в IsolatedStorageSettings следующим образом:

settings["PreviousImageNumber"] = imageNumber;
settings.Save();

Я предполагал, что image, использованный выше, был установлен где-то еще в вашем коде. Я не сохранял Canvas в изображение раньше, но некоторые быстрые поиски обнаружили этот блог , где приведен пример с использованием WriteableBitmap, который указывает, что вы можете просто заменить переменную изображения на свой элемент canvas:

WriteableBitmap wbmp = new WriteableBitmap(yourCanvas, null);

В статье также указывается, что фон холста будет игнорироваться и заменяться черным изображением, но вы можете преодолеть это, сначала добавив прямоугольник к холсту с любым фоном, который вы хотите. Опять же, Я не пробовал это . Если это не сработает, вам следует рассмотреть возможность публикации другого вопроса, конкретно связанного с преобразованием Canvas в изображение, поскольку это действительно отдельная проблема по сравнению с первоначальным вопросом о сохранении изображений.

0 голосов
/ 18 мая 2011

Если вы можете сохранить записываемое изображение с помощью CE и хотите узнать, как сохранить холст, то вам нужно либо визуализировать холст на изображение, либо, если вы хотите сохранить рисунок, тогда пользователь должен рисовать непосредственно на изображение, а не на холстепоместив пустое изображение (с альфа-каналом) на холст, затем используя событие перемещения мыши, чтобы добавить метки кисти к изображению.Таким образом, изменяя как отображение, так и ввод в будущем, чтобы сохранить метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...