Frage

Also hier sind die Details (I C # BTW bin mit):

Ich erhalte eine 32bpp Bild (JPEG komprimiert) von einem Server. An einem gewissen Punkt würde Ich mag die Palette Eigenschaft eines Bitmap verwenden, um über gesättigtes Pixel (Helligkeit> 240) rot zu färben. Um dies zu tun, muss ich das Bild in indexierter Form zu erhalten.

Ich habe versucht, das Bild auf eine GIF konvertieren, aber ich bekomme Qualitätsverlust. Ich habe versucht, eine neue Bitmap in einem Index-Format mit diesen Methoden zu erstellen:

// causes a "Parameter not valid" error
Bitmap indexed = new Bitmap(orig.Width, orig.Height, PixelFormat.Indexed)

// no error, but the resulting image is black due to information loss I assume
Bitmap indexed = new Bitmap(orig.Width, orig.Height, PixelFormat.Format8bppIndexed)

Ich bin jetzt mit einem Verlust. Die Daten in diesem Bild wird ständig durch den Anwender nicht verändert, so will ich nicht manuell Pixel festlegen, die eine Helligkeit> 240 haben, wenn ich es vermeiden kann. Wenn ich die Palette einmal einstellen kann, wenn das Bild erzeugt wird, wird meine Arbeit getan. Wenn ich darüber in die falsche Richtung werde beginnen mit lass es mich wissen.

EDIT: Danke Jungs, hier ist etwas ausführlicher auf das, was ich zu erreichen bin versucht,

.

Wir sind das Scannen eines Gewebeobjektträger mit hoher Auflösung (Pathologie Anwendung). Ich schreibe die Schnittstelle zum eigentlichen Scanner. Wir verwenden eine Zeilenkamera. Um die Zeilenfrequenz der Kamera zu testen, scannt der Benutzer einen sehr kleinen Teil und schaut auf dem Bild.

Das Bild wird neben einer Spurleiste angezeigt. Wenn der Benutzer den Panhardstab bewegt (Einstellung Zeilenrate), ändere ich die Gesamtintensität des Bildes in einem Versuch, zu modellieren, wie es in der neuen Zeilenrate aussehen würde. Ich tue dies derzeit ein Imageattributes und Colormatrix-Objekt.

Wenn der Benutzer den Panhardstab passt, stelle ich die Matrix. Dies gibt mir nicht pro Pixel-Informationen, aber die Leistung ist sehr schön. I könnte Verwendung LockBits und einige unsicheren Code hier, aber ich würde lieber nicht, wenn möglich neu zu schreiben. Wenn das neue Bild erstellt wird, möchte ich für alle Pixel wie mit einem Helligkeitswert von> 240 rot gefärbt werden. Ich dachte, dass für den Bitmap vorne eine Palette zu definieren wäre eine saubere Art und Weise, dies zu tun.

War es hilfreich?

Lösung 3

Danke für die Hilfe jeder. Es scheint, dass dies die Imageattributes Klasse gelöst werden kann, verwenden und einfach eine Farbe Remap-Tabelle zu setzen.

ColorMap[] maps = new ColorMap[someNum]
//  add mappings
imageAttrs.SetRemapTable(maps);

Danke für die Hilfe wieder, zumindest habe ich etwas gelernt.

Andere Tipps

von 32bpp gehen indizierte 8bpp wird fast immer in Qualitätsverlust zur Folge hat, es sei denn, das Originalbild hat weniger als 256 Farben insgesamt.

Können Sie ein anderes Bild erstellen, die eine Überlagerung mit dem betroffenen Pixel rot ist, dann zeigen diese beiden?

Da Sie für Helligkeit gehen> 240, können Sie die Overlay zuerst konvertieren in Graustufen, dann indiziert das überhell Pixel zu erhalten.

Sie können angeben, was Sie mit ihm tun, wenn Sie die Täter markiert haben, so dass ich weiß nicht, ob das funktionieren wird.

Klingt wie etwas, das man leicht mit einem Pixel-Shader tun könnte. Selbst sehr frühe Shader-Modelle etwas so einfach wie diese unterstützen würden.

Die Frage ist jedoch:

Können Sie Shader-Unterstützung in Ihrer Anwendung, ohne zu viel hastle enthalten?

Haben Sie Shader-Programmierung wissen?

EDIT:

Sie haben wahrscheinlich nicht einen 3D-Kontext, in dem man Sachen wie diese tun kann, = /

Ich war meistens nur Lüften meine Gedanken.

das Bild Pixel für Pixel Manipulieren sollte in Echtzeit mit einer einzigen CPU sollte es nicht machbar sein?

Wenn nicht, schauen Sie in GPGPU Programmierung und Open CL.

Erneut bearbeiten:

Wenn Sie einige weitere Details über gab, was die App eigentlich nicht wir vielleicht ein bisschen mehr helfen? Zum Beispiel, wenn Sie eine Web-App keine meiner Tipps machen würde Sinn machen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top