Laden...
Avatar #avatar-2982.jpg
dennisspohr myCSharp.de - Member
Ausbildung Fachinformatiker Westerwald Dabei seit 07.08.2007 420 Beiträge
Benutzerbeschreibung

Forenbeiträge von dennisspohr Ingesamt 420 Beiträge

29.09.2010 - 09:37 Uhr

Hallo zusammen,

ich habe bei meiner Hauptanwendung als Zielplattform "Any CPU" eingestellt. Diese wird also auf 32Bit-System als 32Bit und auf 64Bit-System als 64Bit ausgeführt.

Meine referenzierte Klassenbibliothek muss leider unter 32 Bit laufen. Diese greift auf meinen installierten Canon RAW Codex zu, welcher leider nur in 32Bit existiert.

Ist es möglich, mit meiner 64Bit-Anwendung auf meine 32Bit-Klassenbibliothek zuzugreifen?

Ich weiß, ich könnte meine Anwendung auch insgesamt auf 32Bit umstellen, würde aber aus verschiedenen Gründen (bsp. Perfomance) gerne bei 64Bit (bzw. Any CPU) bleiben.

Vielen Dank & Grüße
Dennis

16.07.2010 - 08:58 Uhr

Hallo zusammen,

ich habe eine Lösung gefunden 😃

Anstatt einer Viewbox benutze ich nun einen ScrollViewer, wo ich beide Scrollbars ausblende. Funktioniert perfekt.

Grüße
Dennis

16.07.2010 - 08:43 Uhr

Hallo zusammen,

meine Anwendung soll ein Bild anzeigen können, welches sich mit einem Schieberegler zoomen lässt. Das klappt alles. Ich benutze dafür eine Viewbox und ein ScaleTransform.

Das Problem ist allerdings folgendes: wenn ich das Bild so zoome, dass es größer als die Viewbox wird, tritt das Bild über die Viewbox hinaus.

Etwas schwer zu erklären - ich habe mal ein Beispielprojekt angehangen.

Ich könnte Controls (z.B. Grids) um die Viewbox herum platzieren, welche im Vordergrund sind. Das klappt auch. Allerdings benutze ich in meiner Hauptanwendung den Glass-Effekt von Windows Vista/7 und muss die Oberfläche deshalb an der entsprechenden Stelle von Controls freihalten.

Habt ihr vielleicht eine Lösung, wie ich das heraustreten des Bildes verhindern kann? Vielen Dank.

Grüße
Dennis

15.07.2010 - 19:39 Uhr

Danke, ich werds mir gleich mal anschauen.

15.07.2010 - 19:27 Uhr

So, hier kommt die Lösung 😃 Nachdem ich tagelang gesucht und gesucht habe.. die Lösung ist so verdammt einfach. Folgender Quellcode-Schnispel sollte Erklärung genug sein:


        public BitmapSource Execute(BitmapSource bitmap)
        {
            double newWidth = bitmap.PixelWidth + config.Thickness * 2;
            double newHeight = bitmap.PixelHeight + config.Thickness * 2;

            RenderTargetBitmap renderTarget = new RenderTargetBitmap(
                (int)newWidth,
                (int)newHeight,
                bitmap.DpiX,
                bitmap.DpiY,
                PixelFormats.Default);

            DrawingVisual drawingVisual = new DrawingVisual();
            DrawingContext drawingContext = drawingVisual.RenderOpen();

            Rect imageRect = new Rect(config.Thickness, config.Thickness, bitmap.PixelWidth, bitmap.PixelHeight);
            Pen pen = new Pen(Brushes.Black, config.Thickness);

            using (drawingContext)
            {
                drawingContext.DrawRectangle(Brushes.Black, pen, new Rect(0, 0, newWidth, newHeight));
                drawingContext.DrawImage(bitmap, imageRect);
            }

            renderTarget.Render(drawingVisual);
            return renderTarget as BitmapSource;
        }

15.07.2010 - 15:10 Uhr

dr4g0n76, vielen Dank für deinen Link. Das sieht sehr gut und vielseitig aus! Ich muss nur gucken, wie ich das ganze in WPF abbilden kann..

Ja talla, du hast Recht.

Ich werde mich mal damit beschäftigen und dann versuchen mit der WriteableBitmap zu arbeiten. Mal sehen ob mir das gelingt 😃

Vielen Dank & Grüße
Dennis

15.07.2010 - 14:37 Uhr

Hallo dr4g0n76,

wenn ich auf deinen Link klicke bekomme ich folgende Fehlermeldung:
Die Seite wurde gelöscht ODER der Zugriff auf diese Seite wurde verweigert.

15.07.2010 - 14:17 Uhr

Auf der Oberfläche wird der Effect problemlos angewendet. Ich habe das Testprojekt mal in den Anhang getan.

15.07.2010 - 12:28 Uhr

Das ist interessant.. ich hatte vorher die Postion des ImageControls auf der Oberfläche vorher mit Margins festgelegt und _Stretch _auf "Uniform" gestellt.

Nun habe ich die Margins entfernt und _Stretch _auf "None" gestellt.

<Image Name="imageControl" Stretch="None" />

Ergebnis: Das gespeicherte Bild ist nun nicht schwarz - jetzt ist es hellblau. Hä? 😃

15.07.2010 - 12:12 Uhr

Ich habe es mal folgendermaßen versucht:

this.imageControl.Source = new BitmapImage(new Uri(@"C:\test\go.jpg"));
this.imageControl.Effect = new MyEffect(@"C:\test\ps\ZoomBlur.ps");

Das Bild blieb auf der Oberfläche unverändert. Komisch - ich hatte im Kopf, dass dieser Filter funktioniert. Nun habe ich einen anderen genommen, welcher mit den obigen beiden Zeilen funktioniert (InvertColor). Wenn ich das Bild allerdings speichere, ist dies komplett schwarz.

Irgendwie funktioniert das mit dem Rendern wohl nicht.

15.07.2010 - 11:46 Uhr

Vielen Dank für das Beispiel. Ich habe es mal versucht auf mein Szenario umzuändern:

            // Bild und Effekt laden
            this.imageControl.Source = new BitmapImage(new Uri(@"C:\test\go.jpg"));
            this.imageControl.Effect = new MyEffect(@"C:\test\ps\ZoomBlur.ps");
            this.imageControl.Measure(new Size(this.imageControl.Source.Width, this.imageControl.Source.Height));
            this.imageControl.Arrange(new Rect(0, 0, this.imageControl.Source.Width, this.imageControl.Source.Height));

            // DPI herausfinden
            float dpi = System.Drawing.Graphics.FromImage(System.Drawing.Image.FromFile((@"C:\test\go.jpg"))).DpiX;

            // RenderTargetBitmap erstellen
            RenderTargetBitmap rtb = new RenderTargetBitmap(
                Convert.ToInt32(this.imageControl.Source.Width),
                Convert.ToInt32(this.imageControl.Source.Height),
                dpi, dpi,
                PixelFormats.Pbgra32);

            // RenderTargetBitmap rendern
            rtb.Render(this.imageControl);

            // Neues Bild speichern
            JpegBitmapEncoder encoder = new JpegBitmapEncoder();
            encoder.Frames.Add(BitmapFrame.Create(rtb));
            FileStream stream = new FileStream(@"C:\test\go2.jpg", FileMode.Create, FileAccess.ReadWrite);
            encoder.Save(stream);
            stream.Close();

Effekt-Klasse:

    public class MyEffect : ShaderEffect
    {
        public MyEffect(string file)
        {
            this.PixelShader = new PixelShader()
            {
                UriSource = new Uri(file, UriKind.Absolute)
            };
        }
    }

Irgendetwas mache ich falsch, denn leider komme ich zu dem Ergebnis wie im Anhang.

15.07.2010 - 11:07 Uhr

Achso - ich dachte, dass würde nur funktionieren, wenn das ImageControl auf der Oberfläche sichtbar ist. Also wird ja nicht direkt Screenshot gemacht. Hast du vielleicht schon ein funktionierendes Beispiel dazu?

Ich hätte den HLSL-Code nur in c# umgewandelt, wenn ich die PixelShader nicht benutzen würde. 😉

15.07.2010 - 10:39 Uhr

Ganz genau das ist das schöne an den PixelShadern: Es gibt massenhaft Beispiele, also könnte ich sehr viele Filter anbieten. Ganz abgesehen von den anderen Problemen, ist es überhaupt möglich auf ein ImageControl mehrere PixelShader anzuwenden? Dazu noch eine Frage: Wenn die das Bild auf der Oberfläche anzeige um ein Screenshot zu machen - dann habe ich doch (alleine von der Größe her) einen immensen Qualitätsverlust gegenüber dem originalen, oder? In den meisten Fällen werde ich das ImageControl nach nicht so groß wie das originale Bild machen können, ganz geschweige davon, dass das der Benutzer ja nicht sehen soll.

Mit C habe ich leider noch nie gearbeitet. Wenn das mit den PixelShadern nicht funktioniert werde ich wohl wirklich versuchen, den HLSL-Code in c#-Code umzuwandeln.

15.07.2010 - 09:52 Uhr

Hallo zusammen,

ich bin gerade dran, ein Programm für eine Bild-Stapelverarbeitung zu entwickeln. Soll heißen: Der Benutzer kann eine beliebige Anzahl von Bildern auswählen und diese mit beliebig vielen Bearbeitungsschritten bearbeiten (bsp. Rahmen setzen, Schrift einfügen, Größe ändern, Drehen, usw.)

Nun möchte ich Filter einbauen. Das heißt zum Beispiel eine Schwarz/Weiss-Konvertierung, Sepia oder die Veränderung des Kontrastes. Dazu gibt es endlos viele Möglichkeiten.

Mit dem .NET Framework 3.5 kamen die PixelShader. Leider können diese wohl nicht auf ein BitmapSource angewendet werden. Ich habe im Internet nirgends eine Lösung gefunden.

Ein weitere Möglichkeit wäre die Verarbeitung auf Pixelebene. Allerdings ist diese erstens langsam und zweitens kompliziert - ich wüsste beispielsweise nicht wie ich dann den Kontrast erhöhen könnte, ganz geschweige von vielen anderen Szenarien.

Bei System.Drawing gibt es die ColorMatrix, mit der man viel machen konnte. Leider scheint diese in WPF zu fehlen. Und jedes mal ein BitmapSource in ein Bitmap umwandeln und wieder zurück wird sehr viel Zeit beanspruchen.

Nun stehe ich da und finde keine richtige Lösung. PixelShader fände ich sehr interessant. Erstens sind diese sehr schnell und zweitens gibt es einige Beispiele. Nur doof, dass ich sie anscheinend technisch nicht verwenden kann.

Habt ihr eventuell eine Lösung für mich - wie ich die Bilder möglichst schnell verarbeiten kann und wozu es auch einige Beispiele gibt? Vielen Dank für eure Hilfe.

Ich arbeite mit dem .NET Framework 4.0

Grüße
Dennis

08.07.2010 - 12:50 Uhr

Vielen Dank für den Link. Ich werde mir das Tool heute Abend zu Hause mal anschauen.

Das mit man mit den Shaders sehr viel machen kann, habe ich schon bemerkt 😃 Ich habe nur nichts gefunden, wie ich diese auf ein BitmapImage anwenden kann. Bei den Beispielen im Internet sind diese immer direkt an ein Image-Control gebunden, was mir an dieser Stelle ja nichts bringt.

Ich könnte ein PlugIn für Filter und ein PlugIn für Sonstiges (also bsp. Rahmen) anbieten. Das klingt gut 😃

08.07.2010 - 12:30 Uhr

WPF kann ich ja trotzdem weiter benutzen, eben nur nicht für die eigentliche Bearbeitung. Diese könnte ich dann mit System.Drawing machen.

Auf die Pixelshader bin ich auch gestoßen, allerdings habe ich dort sehr wenige Tutorials gefunden, wie man diese genau anwendet. Für Filter wären diese aufgrund ihrer hohen Geschwindigkeit eigentlich sehr interessant.

Ich weiß, dass das mit System.Drawing alles relativ einfach funktioniert. Ich habe die einzelnen Bearbeitungsschritte damit ja alle schon mal so ähnlich gemacht.

08.07.2010 - 11:55 Uhr

Warum macht das niemand mit WPF? Wenn ich mit System.Drawing mehr Vorteile habe, kann ich das auch damit machen. Ich dachte nur, dass mir WPF (bzw. .NET 4.0) mehr Funktionalität und Performance bietet.

Das Vorschaubild soll erst am Ende angezeigt werden. Es können sich beliebig viele PlugIns _einschalten _und einen Bearbeitungsschritt zur Verfügung stellen. Ist die Frage, ob ich den PlugIns eine System.Drawing.Bitmap oder ein System.Windows.Media.Imaging.BitmapImage übergebe.

Eventuell könnten die einzelnen Bearbeitungsschritte mit einer Bitmap arbeiten und ganz am Ende wird diese zur Anzeige in ein BitmapImage umwandelt.

08.07.2010 - 11:33 Uhr

Das Programm soll viele einzelne Bildbearbeitungsschritte auf einen Bilderstapel machen. Das heißt, es geht in einer Schleife alle Bilder durch und wendet die einzelnen Bearbeitungsschritte (z.B. Rahmen setzen, Größe ändern, S/W, ...) an. Deshalb versuche ich sehr auf Geschwindigkeit zu achten, auch wegen der Erstellung eines Vorschaubildes.

Schade ist, dass es im Internet kaum Beispiele gibt, wie man BitmapImages bearbeiten kann.

08.07.2010 - 11:01 Uhr

zu Möglichkeit 1:
Nützt mir nichts, weil ich eben nicht anzeigen möchte, sondern als neue Datei speichern möchte.

zu Möglichkeit 2:
Nochmal meine Frage: Ist das ganze mit dem BitmapImage kompatibel?

zu Möglichkeit 3:
Wäre eine Möglichkeit, hört sich aber langsam an.

08.07.2010 - 09:57 Uhr

Ich weiß, wie ich ein BitmapImage einem Image zuweise 😃

Ein Image ist doch ein Control, was eigentlich nur zum Anzeigen auf einer Oberfläche gedacht ist, oder?

Und damit hätte ich ja immernoch das Problem, einen Rahmen ums Bild zu setzen. Am liebsten würde ich das ohne die Verwendung von System.Drawing machen, was glaube ich sinnvoller ist.

08.07.2010 - 09:26 Uhr

Graphics ist im Namespace System.Drawing drin. Ist dieses überhaupt zu einer BitmapImage (!= Bitmap) kompatibel? Bzw. wäre das denn sauber?

08.07.2010 - 08:36 Uhr

Hallo zusammen,

ich hatte vor einer Weile mal ein kleines Bildbearbeitungsprogramm in .NET 2.0 geschrieben. Nun bin ich gerade dran, dieses in .NET 4.0 - in einer WPF-Anwendung - zu entwickeln.

Es gibt eine Methode, die ein BitmapImage übergeben bekommt und auch ein solches zurückliefert. In der Methode soll in (!) dem BitmapImage ein Rahmen mit bestimmter Farbe/Größe gesetzt werden.

Weiß jemand, wie ich das am besten lösen könnte? Im Internet finde ich leider nichts dazu.
Vielen Dank für eure Hilfe.

Grüße
Dennis

23.06.2010 - 10:28 Uhr

Hallo zusammen,

vielen Dank für eure Antworten.

MEF kannte ich bisher noch nicht. Klingt sehr interessant und vielversprechend, werde mir das mal genauer anschauen. Danke für den Tipp.

Grüße
Dennis

22.06.2010 - 15:39 Uhr

Hallo zusammen,

ich bin gerade dabei ein kleines Bildbearbeitungsprogramm zu entwickeln, welches sich durch AddIns erweitern lassen soll. Hier sollen den AddIns nacheinander das entsprechende BitmapImage übergeben werden, welche dieses dann bearbeitet können. (Stapelprozess)

Ich benutze System.AddIn. Das Problem: Ich kann das BitmapImage leider nicht übergeben, dass dieses nicht serialisierbar ist. (Es wird ein Fehler geworfen)

Wegen der Performance wäre es sehr schlecht, wenn jedes AddIn das Bild öffnen, bearbeiten und wieder speichern müsste.

Gibt es irgendwie eine Möglichkeit, das BitmapImage zu übergeben?

Velen Dank für eure Hilfe.

Grüße
Dennis

26.02.2010 - 12:08 Uhr

Hallo xbredoillex,

hast du das Problem inzwischen lösen können? Ich habe das gleiche und benutze die selbe Bibliothek.

Grüße
Dennis

16.02.2010 - 11:26 Uhr

Hallo ujr,

ja das wird er.

Grüße
Dennis

16.02.2010 - 11:08 Uhr

Hallo Schlopp,

interessant, eigentlich ist es ja genau das gleiche, was der BackgroundWorker auch macht. Ich werde es trotzdem mal ausprobieren.

Danke & Grüße
Dennis

16.02.2010 - 10:23 Uhr

Hallo zusammen,

ich habe ein Problem mit dem BackgroundWorker und das Laden eines BitmapImages von der URL. Über folgenden Code lade ich das Bild in der DoWork-Methode des BackroundWorkers herunter:

    
            BitmapImage image = new BitmapImage();
            image.BeginInit();
            image.CacheOption = BitmapCacheOption.None;
            image.UriCachePolicy = new RequestCachePolicy(RequestCacheLevel.BypassCache);
            image.UriSource = new Uri(url);
            image.EndInit();
            //image.Freeze();

            e.Result = image;

Das BItmapImage wird über e.Result an das Event RunWorkerCompleted übergeben. Wenn ich dann das BitmapImage einem Image-Control übergebe, kommt folgender Fehler:

Der aufrufende Thread kann nicht auf dieses Objekt zugreifen, da sich das Objekt im Besitz eines anderen Threads befindet.

Im Internet gibt es ein paar Antworten auf dieses Problem, die sagen, man solle nach dem image.EndInit() ein image.Freeze() aufrufen, doch dann kommt bei mir folgender Fehler:

Dieses Freezable-Objekt kann nicht fixiert werden.

Habt ihr eine Idee, was ich evtl. falsch mache? Danke!

Grüße
Dennis

26.12.2009 - 16:34 Uhr

Hallo Programmierhans,

Dein Vorschlag funktioniert leider nicht, trotzdem danke. Hat sonst noch jemand eine Idee? Ich habe bisher nichts anderes gefunden.

Grüße
Dennis

23.12.2009 - 14:15 Uhr

Hallo zusammen,

in jedem AddOn gibt's eine Klasse für die Datenhaltung. Dieser Klasse ist von IAddOnData abgeleitet. Contract, die Adapters und Views implementieren dieses Interface und machen es nach außen zugänglich. Nun versuche ich den Inhalt der Datenhaltungs-Klassen zu serialisieren:


SoapFormatter formatter = new SoapFormatter();
Stream stream = File.Create("C:\\test.xml");

try
{
    formatter.Serialize(stream, addInInstance.Data);
}
finally
{
    stream.Close();
}

Dabei bekomme ich bei formatter.Serialize folgende Fehlermeldung:

{"Die Assembly PicReady.AddIn.Test, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null kann nicht gefunden werden."}

Wisst ihr, woran das leigen könnte? Ich danke euch!

Grüße
Dennis

21.12.2009 - 08:07 Uhr

Hallo zusammen

heute und noch 2 Tage.. dann habe ich auch Urlaub 😃 Passiert aber nicht mehr viel..
Wünsche euch allen ein frohes Fest und einen erholsamen Urlaub! Sitzt nicht zu viel vor dem PC 😃

Grüße
Dennis

03.12.2009 - 09:30 Uhr

Hallo EvilMM,

ich kann deine Entscheidung gut verstehen. So ein Projekt zieht viel, viel Arbeit mit sich. Du kannst/musst keinen Support leisten.

Was machst du jetzt genau mit dem Projekt? Gibst du es an einen anderen Entwickler weiter oder stellst du es vielleicht OpenSource? Ich wäre schade die ganze Energie, die du fast 2 Jahre lang in das Projekt gesteckt hast, einfach "verpuffen" würde und mehr oder weniger umsonst gewesen wäre.

Grüße Dennis

12.11.2009 - 16:19 Uhr

Hallo zusammen,

ich beschäftige mich momentan mit System.AddIn. Ich denke ich habe das Prinzip verstanden und das Grundgerüst läuft soweit.

Nun möchte ich den AddIn noch ein UserControl hinzufügen. Dieses soll später in der Host-Anwendung angezeigt werden können. Wenn ich in der Host-Anwendung versuche, dass AddIn zu laden, kommt folgende Fehlermeldung:

Der Typ "PicReady.AddIn.Resize.Classes.ResizeGUI" in Assembly "PicReady.AddIn.Resize, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" ist nicht als serialisierbar gekennzeichnet.

Logisch, ein UserControl ist nicht serialisierbar. Doch wie bekomme ich das AddIn trotzdem geladen und das UserControl angezeigt?

Im Internet schwirren viele Fragen dazu herum, doch nirgends gibt es eine richtige Antwort oder geschweige denn ein Beispiel.

Kann mir einer von euch weiterhelfen? Danke!

Gruß Dennis

15.10.2009 - 15:17 Uhr

Hi Jéré,

das einbinden von "System.Windows.Controls.DataVisualization.Toolkit" nützt leider nichts.

Gruß Dennis

14.10.2009 - 09:23 Uhr

Hi Jéré,

ich werde das mal Testen, danke für deine Vermutung.
An dieser Stelle vielen, vielen Dank für deine investierte Zeit! 😃

Gruß Dennis

13.10.2009 - 12:20 Uhr

Hi Jéré,

hier der XAML-Code:


<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:chartingToolkit="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit" x:Class="PicReady.Window1"
    Title="Window1" Height="318" Width="345">
	<chartingToolkit:Chart Title="Chart Title">
		<chartingToolkit:Chart.DataContext>
			<PointCollection>1,10 2,20 3,30 4,40</PointCollection>
		</chartingToolkit:Chart.DataContext>
		<chartingToolkit:ColumnSeries DependentValuePath="X" IndependentValuePath="Y" ItemsSource="{Binding}"/>
	</chartingToolkit:Chart>
</Window>

Im c#-Code habe ich nichts geändert:


using System.Windows;

namespace PicReady
{
    /// <summary>
    /// Interaction logic for Window1.xaml
    /// </summary>
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
        }
    }
}

Erstellen und starten lässt sich das Projekt übrigens fehlerfrei.

Gruß Dennis

13.10.2009 - 08:55 Uhr

Hi Jéré,

mit dem Wort "herumgespielt" habe ich es ein bisschen blöd ausgedrückt. Ich habe eigentlich nur dieses Chart hinzugefügt und gespeichert. Ansonsten habe ich rein gar nichts gemacht.

Hast du ne Property genutzt, die gar nicht verwendet werden dürfte? Was machst du mit "Source"?[/QUOTE
Ich habe nicht verändert oder gemacht, nur das Chart...

Gruß Dennis

13.10.2009 - 08:02 Uhr

Vielleicht hilft euch das noch weiter: Wenn ich auf "Click here to reload the designer" klicke bekomme ich eine andere Fehlermeldung:

Unable to cast object of type 'MS.Internal.NamedObject' to type 'System.Windows.Input.Cursor'.

Gruß Dennis

13.10.2009 - 08:00 Uhr

Hallo zusammen,

ich fange gerade an mich mit WPF zu beschäftigen. Dazu habe ich mir die 60-Tage-Testversion on Expression Blend 3 installiert.

Ich habe in Visual Stiso 2008 Pro eine neue WPF-Application erstellt, diese gespeichert und geschlossen und dann Expression Blend geöffnet. Dort habe ich ein wenig mit der Window1 herumgespielt und ein Chart hinzugefügt.

Wenn ich nun die Solution in Visual Studio öffne, bekomme ich beim anzeigen vim Window1 im Designer folgende Fehlermeldung:

'/Microsoft.Windows.Design.Developer;component/themes/GridAdorners.xaml' value cannot be assigned to property 'Source' of object 'System.Windows.ResourceDictionary'. Cannot create instance of 'GenericTheme' defined in assembly 'Microsoft.Windows.Design.Interaction, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. Exception has been thrown by the target of an invocation. Error at object 'ResourceDictionary_4'.

Bei Google habe ich leider keine Hilfe gefunden. Ich habe es in der Firma (bei mir und einem Kollegen) und zu Hause ausprobiert, jedes Mal der gleiche Fehler.

Vielleicht habe ihr ja eine Idee woran es liegen könnte.
Danke!

Gruß Dennis

04.09.2009 - 10:58 Uhr

Hallo dN!3L,

ich werde mir dieses Interface mal anschauen 😃

Ich muss mich unbedingt mal mit Interfaces beschäftigen. In der Firma komme ich nicht dazu und zu Hause habe ich leider kaum Zeit - irgendwann...

Ich danke euch nochmals für eure Hilfe. Ich werde jetzt erstmal alleine versuchen weiterzukommen, ansonsten melde ich mich nochmal. Danke 😃

Gruß Dennis

04.09.2009 - 10:47 Uhr

Hallo herbivore,

ja, du hast vermutlich Recht. Ich glaube mir fehlt das nötige Hintergrundwissen, deshalb "frimel" ich mir hier anscheinend irgendetwas zusammen.

Hallo dN!3L,

du kannst ja z.B. einem XmlReader/XmlWriter "herumreichen".

Die Idee gefällt mir. Ich müsste allerdings eine eigene Klasse dafür schreiben, denn ansonsten habe ich mehere XML-Header in einer Datei, oder? Oder kann der XMLSerializer das von alleine?

Gruß Dennis

04.09.2009 - 10:13 Uhr

Hallo,

kannst du nicht ein Interface implementieren

Leider habe ich mich noch nie richtig mit Interfaces beschäftigt, habe mir aber schon gedacht, dass ich da vielleicht nicht dran vorbeikomme.

Das Speichern überlässt du den eigendlichen Objekten die wissen schon was sie wollen 😉.

Dann hätte ich eine Datei pro Addon, aber ich möchte ja alles in einer einzigen Projektdatei speichern.

Also wohin speicherst du das deserialisierte Objekt, sodass du casten musst?

Das deserialisierte Objekt bekommt das Addon um die Einstellungen in der Oberfläche anzuzeigen.

Gruß Dennis

03.09.2009 - 15:44 Uhr

Hallo dN!3L,

ich weiß nicht wie ich es besser beschreiben könnte. Zeigen ist auch nicht so leicht, mehrere Klassen, usw.

Gehen wir mal anderes dran: Ich habt ein Programm mit mehren Addons, nun sollen in einer einzigen Projektdatei alle (verschiedenen!) Einstellungen der Addons gespeichert werden. Wie würdet ihr vorgehen? Vielleicht ist mein Weg auch einfach zu umständlich oder gar der "falsche"..

Gruß Dennis

03.09.2009 - 14:50 Uhr

Hallo dN!3L,

Es gibt zum Beispiel das Addon "ResizeModule", das die Daten in "ResizeData" abspeichert. Außerdem gibt es das Addon "TonalityModule", das die Daten in "TonalityData" abspeichert, usw.

Ich kenne den Typ der Variable (z.B. ResizeData) da mir das Addon den Typ mitteilt. Nun bekomme ich noch das Object und soll das dann speichern. Das Hautprogramm weiß den Typ nicht, weil jedes Addon einen anderen Typ zum Speichern hat.

Gruß Dennis

03.09.2009 - 14:37 Uhr

Hallo zusammen,

erstmal danke für eure Hilfe.

Ich versuche gerade Addons für meine Anwendung zu schreiben. Jedes Addon besitzt Daten die mit dem Hautprogram per XmlSerializer gespeichert/geladen werden sollen. Nun hat jedes Addon natürlich verschiedene Daten, deshalb wollte ich ein Object nehmen und dieses dann speichern/laden.

Hilft euch das weiter?
Gruß Dennis

03.09.2009 - 14:17 Uhr

Hallo zusammen,

ich bekomme ein Objekt zurück und kenne in einer Type-Variable aus welchem Typ das Objekt besteht. Schaut euch am besten folgenden Code an:


            Type myType = typeof(BatchList);
            Object myObject = this.BatchList;
        
            using (FileStream fileStream = File.OpenRead("C:\\_batchList.xml"))
            {
                XmlSerializer xmlSerializer = new XmlSerializer(myType);               
                this.BatchList = xmlSerializer.Deserialize(fileStream);  // Funktioniert so nicht
            }

Normalerweise benutzt man ja folgendes:


this.BatchList = (BatchList)xmlSerializer.Deserialize(fileStream);

Nun müsste ich so etwas in der Art benutzen:


this.BatchList = (typeof(myType))xmlSerializer.Deserialize(fileStream);

Leider geht das so nicht. Gibt es eine andere Möglichkeit?
Danke für eure Hilfe!

Gruß Dennis

27.08.2009 - 12:21 Uhr

Hallo zusammen,

ich schreibe gerade an einem Grafikbearbeitungs-Programm, dass durch mehrere "Module" aufgebaut ist. Jedes Modul hat die Aufgabe ein übergebens Bitmap zu bearbeiten.

Zum Beispiel:

  • Modul A: Größenveränderung
  • Modul B: Änderung der Tönung

Jedes Modul besteht aus einem Usercontroll und einer Klasse für die Daten.

Der Ablauf: Das Modul bekommt ein Bitmap, welches es anhand der eingestellten Werte (im Usercontroll bzw. der Oberfläche eingestellte) bearbeitet und dann das fertige Bitmap zurückgibt.

Ich hoffe ich habe es einigermaßen Verständlich erklärt. Nun zu meinem Problem:

Wenn ich im Programm das Projekt in einer einzigen(!) Datei speichern möchte, muss logischerweise jedes Modul durchgegangen werden. Alles Module sind in einer einzigen Klasse initialisiert. Nun wollte ich mit dem XmlSerialiser über alle Usercontroll laufen und die Daten (Propertie "ModuleData") serialisieren. Leider funktioniert das nicht. Kann ich dem XmlSerialiser irgendwie mitteilen, dass er aus dem Usercontroll nur das eine Propertie auslesen soll, nichts mit dem Usercontroll an sich machen soll?


    public partial class ResizeModule : UserControl
    {
        public event EventHandler ValuesChanged;

        private ResizeData data;

        // Dieses Propertie soll serialisiert werden
        public ResizeData Data
        {
            get
            {
                return this.data;
            }
            set
            {
                this.data = value;
            }
        }

        public ResizeModule()
        {
            this.InitializeComponent();
            this.Data = new ResizeData();

            this.Dock = DockStyle.Fill;
            this.comboBoxResizeType.SelectedItem = this.comboBoxResizeType.Items[0];

            this.SetValuesTOGUI(this.Data);
        }
    // usw ... (Events und Methoden)
}

Ich hoffe ihr versteht mich, vielen Dank für jede Hilfe!
Gruß Dennis

09.07.2009 - 15:43 Uhr

Hallo,

uns hat es (und wird) es wahrscheinlich nicht treffen. Wir schreiben Software für den Energiemarkt - und Energie wird immer benötigt.

Ich wünsche euch auf jeden Fall einen baldigen Aufstieg.

Gruß Dennis

26.06.2009 - 10:26 Uhr

Hallo zusammen,

in unserem Framework gibt es eine Collection namenes "Customers". Diese wird mit unseren Kunden gefüllt.
Nun würde ich alle Kunden gerne mittels einer einzigen Quellcodezeile in eine generische Liste kopieren.


Customers customers = session.CreateCustomers();
customers.FindAll();

List<Customer> customerList = new List<Customer>(customers.GetEnumerator());

Ist es möglich einen IEnumerator innerhalb einer Zeile in IEnumerable<T> "umzuwandeln"?

Danke für eure Hilfe!
Gruß Dennis

25.06.2009 - 12:35 Uhr

Hallo Daniel83,

das verstehe ich nicht. Ich habe ja nur 3 Koordinaten, wie mach ich dann 2 Dreiecke daraus. Bzw. welche beiden Dreiecke und welchen Winkel meinst du genau?

Gruß Dennis