AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi TBitmap32 verlustfrei stretchen funzt nicht
Thema durchsuchen
Ansicht
Themen-Optionen

TBitmap32 verlustfrei stretchen funzt nicht

Ein Thema von Martin K · begonnen am 10. Jan 2007 · letzter Beitrag vom 11. Jan 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#1

TBitmap32 verlustfrei stretchen funzt nicht

  Alt 10. Jan 2007, 16:00
Hi,

ich will ein Bitmap verlustfrei vergrößern (also ohne dass es verpixelt wird, wie beim normalen TBitmap.Canvas.StretchDraw).
Dazu habe ich mir die Graphics32 runtergeladen und verwende nun ein TBitmap32 aus der Unit GR32.

Wenn ich diesen Code (den oberen Code) verwende, kennt er StretchFilter nicht

Ohne StretchFilter wirds bei Draw natürlich genauso verpixelt.

Was kann ich tun?
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#2

Re: TBitmap32 verlustfrei stretchen funzt nicht

  Alt 10. Jan 2007, 16:18
1. verlustfrei geht per definition NICHT. es gibt gute interpolationsfilter, die das bild je nach auflösung recht gut aussehen lassen.

2. das modell wurde bei GR32 in version 8.1 (?) komplett umgestellt. du arbeitest jetzt mit resamplern - bitte hier weiterlesen: [dp]gr32 resampl*[/dp].
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von TonyR
TonyR

Registriert seit: 17. Jun 2006
Ort: Bautzen
503 Beiträge
 
FreePascal / Lazarus
 
#3

Re: TBitmap32 verlustfrei stretchen funzt nicht

  Alt 10. Jan 2007, 16:24
Helfen kann ich dir bei dem Problem nicht, ich habe bloß eine weitere Sache gefunden, die du benutzen könntest (vielleicht funktionierts ja damit):

Auf dsdt.info steht nämlich auch etwas über bild skalierung (ganz unten) .... und da wird auf die GraphicEx-Library verwiesen!

Einen Versuch ists denke ich wert!
Es ist unmöglich, witzig zu sein ohne ein bisschen Bosheit. Die Bosheit eines guten Witzes ist der Widerhaken, der ihn haften lässt. - Georg Christoph Lichtenberg
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: TBitmap32 verlustfrei stretchen funzt nicht

  Alt 10. Jan 2007, 16:41
@DGL-luke: Also erstmal Danke für Deine Antwort!
Habe jetzt folgenden Code, allerdings wird es genauso verpixelt dargestellt wie vorher
Delphi-Quellcode:
BMP32.Width := Round(BMP.Height*Factor);
BMP32.Height := BMP.Height;
RES := TKernelResampler.Create(BMP32);
RES.Kernel := TMitchellKernel.Create; //oder TLanczosKernel, ändert nix
BMP32.Draw(Rect(0,0,BMP32.Width,BMP32.Height), Rect(0,0,BMP.Width,BMP.Height), BMP.Canvas.Handle);
BMP32 ist ein TBitmap32, BMP ein normales TBitmap.
Das Bitmap soll nur in der Breite gestreckt werden, da das Quellbitmap in der Breite gestaucht ist.

Nachtrag:
Wenn ich RES - wie man es ordentlich machen sollte - mit try..finally auch wieder freigeben will, gibts ne Zugriffsverletzung.
Warum denn das ?

@TonyR: Ich schau's mir mal an...
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#5

Re: TBitmap32 verlustfrei stretchen funzt nicht

  Alt 10. Jan 2007, 16:55
Wäre es zu viel verlangt, erst einmal in der Hilfe unter TBitmap32.Draw nachzuschlagen ?

@edit:
Zitat von Martin K:
Wenn ich RES - wie man es ordentlich machen sollte - mit try..finally auch wieder freigeben will, gibts ne Zugriffsverletzung.
Weil deine Vorgehensweise nicht ordentlich ist, schließlich ist das Bitmap für die Freigabe ab dem Zeitpunkt veranwortlich, an dem du seiner Eigenschaft die Instanz zuweißt - allerdings nicht verwechseln mit den vielen VCL-/ und anderen Properties, die die Instanz nur kopieren.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: TBitmap32 verlustfrei stretchen funzt nicht

  Alt 10. Jan 2007, 17:12
Zitat von Khabarakh:
Wäre es zu viel verlangt, erst einmal in der Hilfe unter TBitmap32.Draw nachzuschlagen ?
Die hilft mir leider auch nicht weiter
Meinst Du anstatt BMP.Canvas.Handle soll ich wieder ein TBitmap32 verwenden?
Hab ich ausprobiert, bringt keine Änderung...
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: TBitmap32 verlustfrei stretchen funzt nicht

  Alt 10. Jan 2007, 19:15
Da es mit den Graphics32 nicht so richtig funktioniert, habe ich nun mal GraphicEx ausprobiert:
Damit funzt es einwandfrei und der Code ist auch viel einfacher:
Stretch(NewWidth, NewHeight, sfLanczos3, 0, BMP); BMP ist ein normales TBitmap, es ist das Quellbitmap und auch das neue gestretchte Bitmap.

thx an TonyR für den Tipp!
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#8

Re: TBitmap32 verlustfrei stretchen funzt nicht

  Alt 10. Jan 2007, 20:20
Zitat von Martin K:
Zitat von Khabarakh:
Wäre es zu viel verlangt, erst einmal in der Hilfe unter TBitmap32.Draw nachzuschlagen ?
Die hilft mir leider auch nicht weiter
Meinst Du anstatt BMP.Canvas.Handle soll ich wieder ein TBitmap32 verwenden?
Hab ich ausprobiert, bringt keine Änderung...
Inder Hilfe steht eindeutig, dass der Resampler dem Quell- und nicht dem Zielbitmap zugewiesen werden muss .
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: TBitmap32 verlustfrei stretchen funzt nicht

  Alt 10. Jan 2007, 20:53
Ach so hast Du das gemeint...

Hatte in der Hilfe nur nach Draw geschaut, weil:
Zitat von Khabarakh:
Wäre es zu viel verlangt, erst einmal in der Hilfe unter TBitmap32.Draw nachzuschlagen ?
Gut, wäre dann so vielleicht auch gegangen, aber mit GraphicEx ist es dann doch deutlich einfacher.
Hier braucht man nur ein Bitmap (nicht zwei), das ist dann auch das normale Bitmap und kein TBitmap32, außerdem muss man nicht diese extra Objekte für den Resampler erzeugen, usw...

Trotzdem danke für Deine Hilfe!


[Nachtrag]

Zitat von Khabarakh:
Inder Hilfe steht eindeutig, dass der Resampler dem Quell- und nicht dem Zielbitmap zugewiesen werden muss .
Also entweder bin ich blind, oder Du hast ne andere Hilfe.
Wo steht das denn???
Also hier nicht!
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: TBitmap32 verlustfrei stretchen funzt nicht

  Alt 11. Jan 2007, 00:24
Zitat von Martin K:
[...] verlustfrei vergrößern [...]
Nur so halb-OT am Rande: Eine "verpixelte" Vergrößerung eines Bitmaps ist so verlustfrei wie es nur eben geht! Im Gegenteil: Man erzeugt sogar noch künstlich Redundanzen
Beim Verkleinern schaut das aber wieder etwas anders aus.
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:35 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