AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Bilddateien auf Vorrat laden für spätere Darstellung in TBitmap
Thema durchsuchen
Ansicht
Themen-Optionen

Bilddateien auf Vorrat laden für spätere Darstellung in TBitmap

Ein Thema von mcmichael · begonnen am 14. Sep 2019 · letzter Beitrag vom 16. Sep 2019
Antwort Antwort
jziersch

Registriert seit: 9. Okt 2003
Ort: München
258 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: Bilddateien auf Vorrat laden für spätere Darstellung in TBitmap

  Alt 14. Sep 2019, 18:48
Müsste es nicht
z:=1;

heissen innerhalb des Vergleichs?

Aber natürlich wäre ein Dictionary besser oder mit einer alten Delphi version eine TStringList mit objekten.
WPCubed GmbH
Komponenten für Delphi:
WPTools, wPDF, WPViewPDF
  Mit Zitat antworten Zitat
Benutzerbild von mcmichael
mcmichael

Registriert seit: 5. Jun 2008
Ort: Bremen
79 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

AW: Bilddateien auf Vorrat laden für spätere Darstellung in TBitmap

  Alt 14. Sep 2019, 19:10

Zitat:
Müsste es nicht
z:=1;

heissen innerhalb des Vergleichs?
Danke für den Tipp!!!
mein :=0 war Quatsch, :=1 wäre auch falsch, aber :=i wäre es gewesen.
Und dann läuft auch (ein bißchen) was.

Beim Einlesen von jpg Dateien (trotz "uses jpeg") kommt nämlich die Meldung "Bitmap ist ungültig"
Das TImage liest jpg immer klaglos ein. Wie gehe ich denn da vor?

TObjectDictionary<string,TBitmap> kannte ich noch nicht, scheint aber einen Blick wert - Danke!

procedure preloadImage(fname:string);
var i,z:integer;
begin
if preload then
begin
//doubletten vermeiden
z:=0;
for i := 1 to icmax do
if icname[i]=fname then
begin
z:=i;
break;
end;
if z=0 then
begin
inc(icmax);
IC[icmax]:=TBitmap.Create;
IC[icmax].LoadFromFile(fname);
icname[icmax]:=fname;
end;
end;
end;


procedure showImage(t:TImage;fname:string);
var i,z:integer;
begin
if preload then
begin
z:=0;
for i := 1 to icmax do
if icname[i]=fname then
begin
z:=i;
break;
end;
if z>0 then
t.Picture.Bitmap.Assign(IC[z]);
end
else
begin
//kein preload - Direkt anzeigen
end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von mcmichael
mcmichael

Registriert seit: 5. Jun 2008
Ort: Bremen
79 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3

AW: Bilddateien auf Vorrat laden für spätere Darstellung in TBitmap

  Alt 15. Sep 2019, 06:34
Problem gelöst, auch jpgs laufen jetzt.
Vielen Dank für die Lösung der Gehirnbremse...


Delphi-Quellcode:
procedure preloadImage(fname:string);
var i,z:integer;
begin
if preload then
  begin
  //doubletten vermeiden
  z:=0;
  for i := 1 to icmax do
    if icname[i]=fname then
      begin
      z:=i;
      break;
      end;
  if z=0 then
    begin
    inc(icmax);
    with TPicture.Create do
      try
        IC[icmax]:=TBitmap.Create;
        LoadFromFile(fname);
        IC[icmax].Assign(Graphic);
        icname[icmax]:=fname;
      finally
        Free;
      end;
    icname[icmax]:=fname;
    end;
  end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.436 Beiträge
 
Delphi 12 Athens
 
#4

AW: Bilddateien auf Vorrat laden für spätere Darstellung in TBitmap

  Alt 15. Sep 2019, 06:44
Moin...
Zitat:
Problem gelöst
...kann ich mir nicht vorstellen...du hast immer noch das with drin.
  Mit Zitat antworten Zitat
Frickler

Registriert seit: 6. Mär 2007
Ort: Osnabrück
625 Beiträge
 
Delphi XE6 Enterprise
 
#5

AW: Bilddateien auf Vorrat laden für spätere Darstellung in TBitmap

  Alt 16. Sep 2019, 09:45
Moin...
Zitat:
Problem gelöst
...kann ich mir nicht vorstellen...du hast immer noch das with drin.
Jetzt wirds off topic...

Um with adäquat ablösen zu können, braucht man m.E. zwingend inline-Variablen. with verkürzt ja nicht nur den Ausdruck, sondern begrenzt auch den Scope. Eine prozedurglobale Variable macht das eben nicht.

Statt mit "with"
Delphi-Quellcode:
with TBla.Create, TControl(Controls[i]) do begin
  property1 := 1;
  property2 := Left;
end
schreibt man mit Inline-Variablen
Delphi-Quellcode:
begin
  var x := TBla.Create; var y := TControl(Controls[i]);
  x.property1 := 1;
  x.property2 := y.Left;
end
...und x sowie y gelten nur hier, nicht 10 Zeilen davor und nicht 20 Zeilen dahinter.
  Mit Zitat antworten Zitat
Antwort Antwort


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 07:04 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz