Autor Beitrag
Christoph1972
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 690
Erhaltene Danke: 16


VS2015 Pro / C# & VB.Net
BeitragVerfasst: Do 01.04.10 17:05 
Hallo zusammen,

ich habe eine Vektorgrafik (*.emf), diese hat ca. eine Auflösung von 4700*2700 Pixel. Die Grafik ist ein Diagramm, in schwarz weis. Diese muss ich nun auf eine handliche Größe runter skalieren. Wenn ich das mit der PictureBox mache, sieht es fürchterlich aus, da die Linien z.T. unterbrochen sind.


Wenn ich das Image, so wie hier beschrieben, runterskaliere, sind die Linien nur noch grau und schlecht zu erkennen. Das Ergebnis ist jedoch deutlich besser als das Stretchen der PictureBox.


Hat hier jemand eine Idee, wie man eine gescheite Skalierung in solchen Dimensionen hinbekommt?

_________________
Gruß
Christoph
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Do 01.04.10 19:56 
Wenn die Linien ihre Dicke beibehalten sollen, kann das logischerweise nur durch Bearbeiten der Rohdaten funktionieren. Wenn du allerdings keine .NET-EMF-Lib findest, würde ich es zuerst nach SVG konvertieren, XML lässt sich dann doch etwas einfacher bearbeiten ;) .

_________________
>λ=
Christoph1972 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 690
Erhaltene Danke: 16


VS2015 Pro / C# & VB.Net
BeitragVerfasst: Do 01.04.10 22:12 
Hi, vielen Dank für die Anregung! Hast du was spezielles für .Net im Auge? Ich habe mal Google befragt, habe aber "noch" nichts "seriöses" gefunden.

_________________
Gruß
Christoph
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Do 01.04.10 22:26 
Zum Konvertieren? Wiki nennt Batik, das könntest du mit etwas Glück sogar mit IKVM.NET für .NET kompilieren.

_________________
>λ=
Christoph1972 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 690
Erhaltene Danke: 16


VS2015 Pro / C# & VB.Net
BeitragVerfasst: Sa 03.04.10 21:22 
Hi,

vielen Dank für die Info! Ich habe heute beinahe den ganzen Tag gegoogelt, leider ist mir das mit Batik zu aufwendig. Ich möchte ja "nur" ein Image auf eine handliche Größe skalieren. Mich ärgert es schon etwas, das ich nur eine mangelhaftes, oder ein völlig over sized Image zur verfügung habe, keine Ahnung, was sich die Entwickler dabei gedacht haben....

Gibt es noch andere Vorschläge?

_________________
Gruß
Christoph
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: So 04.04.10 00:10 
Äh, geht es jetzt eigentlich nur um genau ein Image :?: Dann kannst du das doch mit einem beliebigen WMF2SVG-Programm schnell konvertieren, die Strichstärke kannst du wahrscheinlich sogar ohne Code direkt in Inkscape bearbeiten.

_________________
>λ=
Christoph1972 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 690
Erhaltene Danke: 16


VS2015 Pro / C# & VB.Net
BeitragVerfasst: So 04.04.10 08:52 
Ja genau, ich muss Images skalieren, die im .emf Format vorliegen. Mir wäre sehr geholfen, wenn ich eine Klasse oder Dll hätte, die das erledigt, da die Bearbeitnung aus meinem Programm erfolgen muss und zwar so, das die User sich nicht damit beschäftigen müssen, die Auflösung ist immer gleich und der Faktor ist auch fix. Ich denke Inkscape kann mir da auch nicht helfen.

_________________
Gruß
Christoph
Christoph1972 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 690
Erhaltene Danke: 16


VS2015 Pro / C# & VB.Net
BeitragVerfasst: So 04.04.10 10:11 
Man was bin ich ein Penner......

Ich habe scheinbar einfach den Wald vor lauter Bäumen nicht gesehen. Keine Ahnung warum ich behauptet habe, das diese Methode nicht das macht was ich benötige.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
private Image NewImage(Bitmap emfImage, Size newSize)
{
    Bitmap newImage = new Bitmap(newSize.Width, newSize.Height);

    using (Graphics g = Graphics.FromImage(newImage))
    {
        g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
        g.DrawImage(emfImage, new Rectangle(00, newSize.Width, newSize.Height));
    }

    return newImage;
}


Ich hatte wohl ein Fehler im Ablauf. Der Ablauf sieht nun so aus: Bild laden, die Farbe der Line ändern, dann das Image skalieren und dann den Hintergrund transparent machen. So kann ich schön die Images überlagern.

Ich hoffe nun das ich bei dieser Aussage bleibe, da ich das Projekt nicht hier habe, ich kann es erst in der nächsten Woche testen. Ich bin aber zuversichtlich!

Ich sage erst mal vielen Dank für deine(Kha) und eure Hilfe!

_________________
Gruß
Christoph