Avatar billede Syska Mester
09. oktober 2008 - 19:24 Der er 10 kommentarer og
1 løsning

Silverlight 2 - kan man gemme ?

Hej,

Simpelt spørgsmål ... er det muligt i silverlight at gemme ens "silverlight" object som et billede ?

Grund:
Brugeren laver noget grafik, og jeg ønsker at gemme det ... men synes ikke rigtig jeg kan finde en mulighed for det ... hvilket jo er lidt træls ...

// ouT
Avatar billede Slettet bruger
09. oktober 2008 - 19:51 #1
og du har været herinde og kigge.

http://www.microsoft.com/silverlight/overview/default.aspx

m.v.h
Avatar billede Syska Mester
09. oktober 2008 - 22:37 #2
og
www.silverlight.net

google.com you name it ... kan intet finde ... og derfor tyder det desværre nok på at det ikke er muligt, men det kunne jo ske at jeg havde overset en smart måde at gøre det på ..

Nu er det jo vector grafik vi snakker om ... så det undre mig at muligheden ikke er der ... eller i hvert fald nemmere at finde hvis den skulle være der :-p

// ouT
Avatar billede montago Praktikant
11. oktober 2008 - 00:08 #3
Jeg husker at man i WPF kan kopiere en region, som outputtes som bitmap billede... hvordan og hvorledes fandt jeg aldrig ud af :-(

WPF og Silverlight har jo en del tilfældes, så mon ik ?
Avatar billede montago Praktikant
11. oktober 2008 - 00:12 #5
not supported in current version :

http://silverlight.net/forums/t/17984.aspx
14. oktober 2008 - 10:37 #6
Hejsa.

Jeg skal lige være helt med :)

Dine brugere laver noget grafik i browseren og du vil gerne gemme det de har lavet ?

Hvordan laver de den grafik ?
Avatar billede montago Praktikant
14. oktober 2008 - 11:36 #7
om ikke andet, kan man da altid serialize det object det tegner på/med...
Avatar billede Syska Mester
15. oktober 2008 - 09:24 #8
montago:
Ja, de har en del til fælles, og jeg vil da kigge videre på den mulighed for at gemme en region i WPF ... så er det måske nemmere at finde ligheden med Silverlight.

Og så læser jeg lige dit næste link ... not supported in current version, men det lader til at det så kommer engang ... haster heller ikke vildt meget pt da jeg stadig leger med Silverlight, men kunne være sjovt hvis det kom, god feature.

danielmellgaardfrost:
I starten er det en graf ... som jeg ønsker at give brugeren mulighed for at gemme ... det kan selvf laves som i almindeligt Image object på serveren i C#, men det synes jeg er sådan lidt at lave det hele 2 gange, der søgte jeg en mulighed for at gøre noget tilsvarende i silverlight, så jeg blev fri for at lave det samme igen, på en anden måde.

Håber du kan følge mig eller sig endelig til.

montago:
Ikke helt med på hvad du mener? Hvordan ville det hjælpe at serialize det? Hvordan får jeg et billede ud af det?

Smid et svar Montago, da det ene af dine link besvarer mit spm, at det ikke kan lade sig gøre endnu ...

mvh.
Avatar billede montago Praktikant
15. oktober 2008 - 12:03 #9
svar.
Avatar billede montago Praktikant
22. oktober 2008 - 22:43 #10
kig lige på det her :

http://blog.galasoft.ch/archive/2008/10/10/converting-and-customizing-xaml-to-png-with-server-side-wpf.aspx

serverside PNG generation with WPF (XAML -> PNG)
Avatar billede montago Praktikant
06. november 2008 - 22:47 #11
måske noget man kan bruge :-)

using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.IO;

namespace Silverlight.Samples
{
  public class EditableImage
  {
    private int                      _width=0;
    private int                      _height=0;
    private bool                      _init=false;
    private byte[]                    _buffer;
    private int                      _rowLength;

    public event EventHandler<EditableImageErrorEventArgs>    ImageError;
   
    public EditableImage(int width, int height)
    {
      this.Width = width;
      this.Height = height;
    }

    public int Width
    {
      get
      {
        return _width;
      }
      set
      {
        if (_init)
        {
          OnImageError("Error: Cannot change Width after the EditableImage has been initialized");
        }
        else if ((value <= 0) || (value > 2047))
        {
          OnImageError("Error: Width must be between 0 and 2047");
        }
        else
        {
          _width = value;
        }
      }
    }

    public int Height
    {
      get
      {
        return _height;
      }
      set
      {
        if (_init)
        {
          OnImageError("Error: Cannot change Height after the EditableImage has been initialized");
        }
        else if ((value <= 0) || (value > 2047))
        {
          OnImageError("Error: Height must be between 0 and 2047");
        }
        else
        {
          _height = value;
        }
      }
    }
   
    public void SetPixel(int col, int row, Color color)
    {
      SetPixel(col, row, color.R, color.G, color.B, color.A);
    }
   
    public void SetPixel(int col, int row, byte red, byte green, byte blue, byte alpha)
    {
      if (!_init)
      {
        _rowLength = _width*4 + 1;
        _buffer = new byte[_rowLength *_height];

        // Initialize
        for (int idx=0; idx<_height; idx++)
        {
          _buffer[idx*_rowLength] = 0;      // Filter bit
        }

        _init = true;
      }

      if ((col > _width) || (col < 0))
      {
        OnImageError("Error: Column must be greater than 0 and less than the Width");
      }
      else if ((row > _height) || (row < 0))
      {
        OnImageError("Error: Row must be greater than 0 and less than the Height");
      }
     
      // Set the pixel
      int  start = _rowLength*row + col*4 + 1;
      _buffer[start] = red;
      _buffer[start + 1] = green;
      _buffer[start + 2] = blue;
      _buffer[start + 3] = alpha;
    }
   
    public Color GetPixel(int col, int row)
    {
      if ((col > _width) || (col < 0))
      {
        OnImageError("Error: Column must be greater than 0 and less than the Width");
      }
      else if ((row > _height) || (row < 0))
      {
        OnImageError("Error: Row must be greater than 0 and less than the Height");
      }
     
      Color color = new Color();
      int  _base = _rowLength * row + col + 1;

      color.R = _buffer[_base];
      color.G = _buffer[_base + 1];
      color.B = _buffer[_base + 2];
      color.A = _buffer[_base + 3];
     
      return color;
    }
   
    public Stream GetStream()
    {
      Stream  stream;

      if (!_init)
      {
        OnImageError("Error: Image has not been initialized");
        stream = null;
      }
      else
      {
        stream = PngEncoder.Encode(_buffer, _width, _height);
      }
     
      return stream;
    }

    private void OnImageError(string msg)
    {
      if (null != ImageError)
      {
        EditableImageErrorEventArgs args = new EditableImageErrorEventArgs();
        args.ErrorMessage = msg;
        ImageError(this, args);
      }
    }
   
    public class EditableImageErrorEventArgs : EventArgs
    {
      private string    _errorMessage=string.Empty;
     
      public string ErrorMessage
      {
        get { return _errorMessage; }
        set { _errorMessage = value; }
      }
    }
   
  }
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester



IT-JOB

Nitor Energy A/S

IT Infrastructure Specialist

Udviklings- og Forenklingsstyrelsen

Erfaren udvikler/DevOps til Integrationsplatforme

Udviklings- og Forenklingsstyrelsen

Scrum Master