Laden...

scharfe Bilder?

Erstellt von Ankou vor 16 Jahren Letzter Beitrag vor 14 Jahren 12.205 Views
A
Ankou Themenstarter:in
119 Beiträge seit 2006
vor 16 Jahren
scharfe Bilder?

Hi Leute
Ich hab nun noch etwas rumexperimentiert und dabei ist mir aufgefallen, dass Bilder ähnlich verschwommen angezeigt werden wie Texte.
Bei Texten kann man es ja ignorieren, weil es auf den meisten Monitoren gut aus sieht, aber was wenn das Bild unbedingt so aussehen muss wie Original?
Ist es auch möglich ein Bild in Originalgröße mit originalen Pixeln anzeigen zu lassen?
edit: ich habe das Bild als BitmapImage in einem ImageDrawing in einem DrawingImage anzeigen lassen

U
1.688 Beiträge seit 2007
vor 16 Jahren

Keine Lösung, aber ein ähnliches Problem. Vielleicht hat ja jemand eine Idee oder einen Link.
Ich habe festgestellt, dass das "MediaElement" in Videos immer einen gewissen Grauschleier hat - weiße Flächen sind also niemals weiß, sondern eben grau. Und das auf mehreren verschiedenen Rechnern (also keine lokale Anomalie). Gar nicht schön.

A
Ankou Themenstarter:in
119 Beiträge seit 2006
vor 16 Jahren

nehmts mir nicht übel, dass ich mal pushe.
Aber das Thema müsste doch jeden betreffen?
Ich meine, selbst wenn es bei euch gut aussieht, ist es Hardwareabhängig bei anderen ungleich schlechter.
Das kann doch nicht sein, dass es nicht möglich ist ein Bild korrekt anzeigen zu lassen?
Es ist mir übrigens schon klar, warum die Bilder unscharf sind - und, dass das nicht der Fall ist, wenn man die Bilder absolut positionieren lässt(also ganze Pixelwerte hat), aber das ist ja unmöglich aufrecht zu erhalten

A
49 Beiträge seit 2007
vor 16 Jahren

Keine Ahnung, ob´s was bringt, aber hast du mal versucht, "SnapsToDevicePixels" auf true zu setzen?

A
Ankou Themenstarter:in
119 Beiträge seit 2006
vor 16 Jahren

ja, hab ich, hilft hier auch nicht

A
49 Beiträge seit 2007
vor 16 Jahren

Hehe, bin, wirklich zufällig, in unserem Projekt genau an das gleiche Problem gestoßen... Ja, dieses SnapDings nützt wirklich nichts und ich sehe auch gar keinen Unterschied bzw. weiß gar nicht, ob das funktioniert oder ob das zu irgendetwas nützlich ist.

Aber das mit der unscharfen Schrift nervt mich schon länger. Sieht furchtbar aus, ist aber im WPF-Konzept wohl nicht anders umzusetzen.

A
Ankou Themenstarter:in
119 Beiträge seit 2006
vor 16 Jahren

naja, Schrift ist hässlich, aber mehr auch nicht, da ich aber die Bilder bearbeiten lassen möchte, muss da schon jeder Pixel stimmen...
Ich finde das ganze Vektorbasierende Prinzip von WPF unschön. Es ist mir egal wie das nach einer vergrößerung aussieht, wichtig ist mir zunächst mal, dass das angezeigt wird, was ich will das angezeigt wird ...

A
49 Beiträge seit 2007
vor 16 Jahren

OK, ich sehe gerade, dass mein Bild verzerrt war, er macht sich also nichts aus "Stretch="None""

Habe also mal die originalen Width und Height angegeben, jetzt sieht es einigermaßen ok aus.

A
Ankou Themenstarter:in
119 Beiträge seit 2006
vor 16 Jahren

joa, aber auch nur einigermaßen ^^
Das liegt daran, dass durch das Vektorsystem die Bilder auch zwischen den Pixeln liegen und das dann anti-aliased aussieht(kennst du das Problem mit a-a irgendwoher? g).
Ich brauchs aber exakt :X Dazu müssen die Bilder auf ganzen Pixelzahlen positioniert sein, und das geht nur im Canvas und auch nur, wenn man das Fenster nicht vergrößert, und das ist untragbar.
Kann man die auch noch anders absolut positionieren und absolut positioniert lassen?

6.862 Beiträge seit 2003
vor 16 Jahren

Du kannst egal wo in WPF, nicht von dir aus pixelgenau positionieren. Auch die Angaben im Canvas sind device independent Units. Um aber genau das zu erreichen dass die WPF Pixel auf den physikalischen liegen, gibts das SnapsToDevicePixels.

Baka wa shinanakya naoranai.

Mein XING Profil.

A
Ankou Themenstarter:in
119 Beiträge seit 2006
vor 16 Jahren

Nur, dass das da nicht funktioniert, warum auch immer, vielleicht Bug?

6.862 Beiträge seit 2003
vor 16 Jahren

Glaub ich net unbedingt. Ich hatte mir auch schon nen einfachen Bildbetrachter geschrieben, der vollkommen in Ordnung war und die Bilder waren immer so wie ich sie aus anderen Programmen gewohnt war. Nur mit der Schrift stimm ich schon, die ist nicht immer optimal.

Baka wa shinanakya naoranai.

Mein XING Profil.

A
Ankou Themenstarter:in
119 Beiträge seit 2006
vor 16 Jahren

Dass sie bei dir vollkommen in Ordnung waren ist vermutlich genau so hardwareabhängig, wie die Schriftanzeige(die ist bei mir die Schlimmste, die ich je gesehen hab, hab auch schon bei ICQ jede Menge Leute belästigt, weil ich einen Durchschnittswert haben wollte)

falls publik kannst du ja mal deinen Bildbetrachter posten und ich guck mal ob das bei mir scharf oder so verschwommen wie bei mir ist?

6.862 Beiträge seit 2003
vor 16 Jahren

[Artikel] Einführung in die WPF(Windows Presentation Foundation) - aktuell Teil 3: Beispielanwendung

Der Download funktioniert nicht mehr aber du brauchst nur den XAML Code am Anfang des Artikels und die beiden Funktionen die eher am Ende stehen und das wars. Habs grad nochmal am laufen und kann absolut keine Schwierigkeiten feststellen. Vielleicht kannst du ja auch mal ne kleine Beispielanwendung schreiben die net gut aussieht und mal posten.

Baka wa shinanakya naoranai.

Mein XING Profil.

A
Ankou Themenstarter:in
119 Beiträge seit 2006
vor 16 Jahren

OK, mach ich, aber da du die Bilder sowieso vergrößerst und verkleinerst werden die Pixel sowieso verändert und der Unterschied ist minimal.
Es ist ja nur kritisch, weil ich alles original brauche...
Es ist auch scharf, solange es auf einer integralen Pixelposition steht, was mit SnapToDevicePixel irgendwie nicht funktioniert nur das ändert sich ja, wenn die Fenstergröße verändert wird.
Aber genug der Worte, ich lasse mal Bilder und Code sprechen, zunächst 2 Bilder, oben scharf unten drunter unscharf(ich habe mal das Bild des WPF Texttestes genommen, weil das gerade auf meinem Desktop war)


Für Bearbeitung des Bildes, seis auch nur zusammenschneiden, natürlich nicht akzeptabel...
Es fällt auch auf, dass der normale Text nach dem er als Bild angezeigt wurde genau so aussieht, wie der Text der zu Beginn als WPF Text angezeigt wurde.

OK, der Code dazu ist simpel und war auch einfach mal schnell gemacht um es zu testen:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace WpfLernApp
    {
    /// <summary>
    /// Interaction logic for Window1.xaml
    /// </summary>
    public partial class Window1 : Window
        {
        public Window1()
            {
            InitializeComponent();
            BitmapImage bi = new BitmapImage(new Uri(System.Windows.Forms.Application.StartupPath + @"\Texte.PNG"));
            drawing.Drawing = new ImageDrawing(bi, new Rect(0, 0, 296, 290));
            }
        }
    }

<Window x:Class="WpfLernApp.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:this="clr-namespace:WpfLernApp"
    Title="Window1" Height="500" Width="500">
	<Grid MinWidth="296" MinHeight="290" MaxWidth="296" MaxHeight="290">
		<Image SnapsToDevicePixels="True">
			<Image.Source>
				<DrawingImage x:Name="drawing"/>
			</Image.Source>
		</Image>
	</Grid>
</Window>

das Grid ist bereits auf die größen des Bildes abgestimmt, das Bild verschiebt sich nur, die Größe bleibt gleich.
Und im Anhang das ganze Projekt, was sich aber außer der Standardimplementation von Application nicht vom Code unterscheidet

6.862 Beiträge seit 2003
vor 16 Jahren

Ja, aber selbst durch des skalieren verändert sich nichts an der "Schärfe" des Bildes, hab deine Code auch probiert mit deinem Textbild, und auch nen Bild von mir was ich nicht skaliert habe und trotzdem ist alles ganz normal scharf.

Was ich aber net verstehe ist, warum du über nen DrawingImage und ImageDrawing gehst, ist doch völlig unnötig. Des nimmt man wenn mal lowlevel zeichnet, aber idR. nicht um einfach Bilder anzuzeigen. Wenns dir darum geht die Größe des Bildes anzupassen kannst einfach folgenden Code verwenden.


BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.DecodePixelWidth = 500;
bi.DecodePixelHeight = 500;
bi.UriSource = new Uri(System.Windows.Forms.Application.StartupPath  + @"\912.gif");
bi.EndInit();
img.Source = bi;

wobei img bei mir jetzt das Image Control ist. Wenn du es nicht skalieren willst musst du die DecodePixelXXX net angeben, die sind aber vorteilhaft wenn man viele Bilder lädt, zum Beispiel als relativ kleine Thumbnails. Da kann man dann nämlich z.B. die Thumbnailgröße angeben, und die Bilder werden wirklich in dieser kleinen Größe geladen und nicht in ihrer Ursprungsgröße was natürlich en Menge Platz im RAM spart bei vielen Bildern.

Was ich auch rumprobiere, bei mir wird nie was unscharf.

Baka wa shinanakya naoranai.

Mein XING Profil.

A
Ankou Themenstarter:in
119 Beiträge seit 2006
vor 16 Jahren

Was ich auch rumprobiere, bei mir wird nie was unscharf.

Ist aber nicht bei mir so, vermutlich wie die Schrift Hardwareabhängig:
http://blogs.msdn.com/seema/archive/2006/11/07/why-do-my-bitmaps-look-blurry-by-anthony-hodsdon-miles-cohen.aspx

Was ich aber net verstehe ist, warum du über nen DrawingImage und ImageDrawing gehst, ist doch völlig unnötig. Des nimmt man wenn mal lowlevel zeichnet, aber idR. nicht um einfach Bilder anzuzeigen.

Ich habe das ja genommen, weil ich die Bilder bearbeiten wollte, deswegen will ich ja auch die Schärfe haben.

U
1.688 Beiträge seit 2007
vor 16 Jahren

Ist aber nicht bei mir so, vermutlich wie die Schrift Hardwareabhängig:

Was hast Du denn für Hardware? Hast Du es auf anderer Hardware schon probiert? Bringt ein Update des Treibers etwas? Hast Du schon verschiedene Treibereinstellungen probiert?

6.862 Beiträge seit 2003
vor 16 Jahren

Mal noch ne andere Frage. Wie ist denn deine native Auflösung deines Bildschirms und die DPI Zahl, und welche hast du in Windows eingestellt?

Baka wa shinanakya naoranai.

Mein XING Profil.

A
Ankou Themenstarter:in
119 Beiträge seit 2006
vor 16 Jahren

1280 * 800 sowohl nativ als auch eingestellt
und ich hab 96 DPI eingestellt.

T
574 Beiträge seit 2008
vor 14 Jahren

Ich hol den Thread ungern rauf, aber ich steh da vor einem ziemlich großem Problem.
Ich habe ein Control gebaut, in dem ein Grid und die drei Standard-Buttons sind, dieses Control verwende ich in einem TabItem.Content ein paar mal.

Nun variiert die Schärfe der Buttons.
(Siehe Bild)

Das ist mein Code für das Image des Buttons:

<Image Source="../Images/icoAdd.gif" Width="16" Height="16"></Image>

Das Bild liegt als 16x16 gif auf der Festplatte, kann ich da irgendwie verhindern, dass das so unscharf gerendert wird?

U
1.578 Beiträge seit 2009
vor 14 Jahren

ohne jetzt alles gelesen zu haben
bei dem code ton talla sieht man es sehr gut
"DecodePixelWidth"
"DecodePixelHeight"
das schon gesetzt ?

T
574 Beiträge seit 2008
vor 14 Jahren

das Image hat keine solchen Properties ... und ich hab echt keine Lust jedes Image mit dem gezeigten Code manuell zu setzen.

U
1.578 Beiträge seit 2009
vor 14 Jahren

das problem ist - du kannst den string zu dem bild nur im Source in der xaml setzen da es ein entsprechenden type converter gibt, dieser converter uebernimmt diese arbeit

was auch eine moeglichkeit waere ein eigenen typeconverter zu basteln der ein string zu einem bitmapimage convertiert

gibst du den buttons feste groessen oder hast du nur ein padding eingestellt?

T
574 Beiträge seit 2008
vor 14 Jahren

gibst du den buttons feste groessen oder hast du nur ein padding eingestellt?

nur Margin = "0 0 5 0" damit die Buttons nicht aneinander kleben, sonst nur Standardwerte.

U
1.578 Beiträge seit 2009
vor 14 Jahren

stell mal testweise bei dem image SnapToDevicePixelt auf True - wirds dann besser?
(kannst ja zwei identische buttons nebeneinander stellen und eines true das andere false

obs was bringt Stretch auf None zu stellen weiss ich nicht - waere auch mal aus zu probieren

(irgendwie sehen die images in deinem designer auch etwas hoeher aus, evtl werden die gestaucht? - da koennte das Stretch = None dann wirklich abhelfen)

T
574 Beiträge seit 2008
vor 14 Jahren

Nein bringt alles nix, du kannst die buttons auch nebeneinander stellen. Die Buttons sind zur Laufzeit gleich hoch, gleich breit wie im Designer. Nur das Image ist unscharf.

U
1.578 Beiträge seit 2009
vor 14 Jahren

das ist ja das komische
wenn man deine bilder so an schaut sind zwar die buttons gleich hoch - aber die images sehen unterschiedlich hoch aus - als wenn das image zur laufzeit kleiner gemacht werden muss

was passiert wenn du ein 40x40 grossen button machst, das image auf SnapToDevicePixel true , horizontal center , vertical center und strech = none ?

werds heute vieleich bei mir auch mal probieren wies ausschaut

// dazuedit
evtl spiels auch ne rolle wo der button ist - ob er in nem anderen panel sitzt oder direkt im window - kannst du auch mal testen