Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Verlustfrei Bitmap verkleinern (https://www.delphipraxis.net/121962-verlustfrei-bitmap-verkleinern.html)

Metal_Snake2 7. Okt 2008 17:06


Verlustfrei Bitmap verkleinern
 
Hallo,

ich wollte fragen ob es eine möglichkeit gibt ein Bitmap ohne Verluste zu verkleinern.

Momentan resample(verkleinere) ich meine Bitmap mit den "Graphics32" Komponenten. Ich kann
nur mit dem "TNerestResampler" verfahren wirklich verlustfrei verkleinern, jedoch
sieht das resultat viel zu grobpixelig aus.

Mein ziel ist es ein Bitmap verlustfrei zu verkleinern und dan aus dem Bitmap heraus eine Region zu erstellen.
Hierzu erstelle ich die Region so das ich einen Farbwert übergebe welcher als Transparents dienen soll.

Mein Problem ist nun das wenn ich das Bitmap mit z.B. "TLanzosKernel" resample das dan die Farbverluste dazu
führen das die Region nicht ganz richtig ist da sich beim verkleinern die Transparents farbe welche der Hintergrund
ist verändert hat.

Ich habe von der möglichkeit des "Seam carving" oder "liquid resizing" gehört welche ein Bild verlustfrei verkleinern/vergößern
kann, jedoch habe ich nirgends eine Delphi implementierung gefunden?

Ich hoffe mir kann jemand weiterhelfen den ich finde keinen akzeptabelen ausweg.

mit freundlichen Grüßen,

Metal_Snake

Medium 7. Okt 2008 18:48

Re: Verlustfrei Bitmap verkleinern
 
Durch Verkleinerung hast du immer Verluste, egal mit welchem Verfahren. Der einzige Weg den ich sähe, wäre es wenn du dir die originale Version in ursprünglicher Größe im Speicher behälst, und darüber die Maske erzeugst, die du dann verkleinern kannst.
Ein Problem kann dabei jedoch werden, dass Regions nur 1-bittig sind, d.h. wenn du diese dann auf Bilder anwendest die du mit was besserem als Nearest-Neighbour verkleinert hast, kannst du eben wieder Ränder erhalten.

Wenn du aber ohne hin schon mit der GR32 arbeitest, könntest du es evtl. so lösen, dass du im Original bei Pixeln mit deiner Transparenzfarbe den Alphakanal auf 0 setzt, und anschließend mit beliebigem Kernel verkleinerst. Dann sollte nämlich der Alphakanal gleich passend mit skaliert werden, und du kannst diesen dann zum Zeichnen auswerten. Regions fallen hierbei dann aber komplett raus.

s.h.a.r.k 7. Okt 2008 19:49

Re: Verlustfrei Bitmap verkleinern
 
Zitat:

Zitat von Medium
Durch Verkleinerung hast du immer Verluste...

nein! schon mal an png gedacht!? ist nur ein beispiel, wobei ich zugeben muss, dass ich kein weiteres kenne ;)

Dunkel 7. Okt 2008 20:03

Re: Verlustfrei Bitmap verkleinern
 
Zitat:

Zitat von s.h.a.r.k
Zitat:

Zitat von Medium
Durch Verkleinerung hast du immer Verluste...

nein! schon mal an png gedacht!? ist nur ein beispiel, wobei ich zugeben muss, dass ich kein weiteres kenne ;)

Verkleinern (Dateigröße) != Verkleinern (Auflösung)!

s.h.a.r.k 7. Okt 2008 20:18

Re: Verlustfrei Bitmap verkleinern
 
oha :wall: sorry, mein fehler. hab etwas anders gedacht, als da steht ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:48 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz