AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TPicture mit eigener BMP-Extension

Ein Thema von Dennis07 · begonnen am 10. Aug 2012 · letzter Beitrag vom 13. Aug 2012
Antwort Antwort
Seite 1 von 3  1 23      
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
488 Beiträge
 
Delphi 11 Alexandria
 
#1

TPicture mit eigener BMP-Extension

  Alt 10. Aug 2012, 01:50
Delphi-Version: 7
Hallo,
Ich stehe mal wieder vor einem Problem...
Diesmal will ich eine Art Animation, bestehend aus vier Bilden machen.
Ich habe diese Auch bereits fertig und habe auf meinem Formular ein TImage platziert.
Mithilfe eines Timers will ich immer eines der vier Bilder auf das TImage übertragen, doch so weit komme ich nicht.
Aus Datenschutzgründen muss ich das BMP-Bild als .TEX-Datei speichern (also nur mit einer anderen Dateiendung). Wenn ich nun die Datei mit der TImage.Picture.LoadFromFile('xyz.tex'); -Funktion lade, kommt ein Fehler, dass die TEX-Dateiendung nicht unterstützt wird.
Mal abgesehen davon, dass ich es sehr dürftig entworfen finde, dass der TPicture-Handler nicht einfach mal alle ihm bekannten Dateiformate durchprobiert, hilft mir die Finktion RegisterFileFormat leider auch nicht wirklich weiter, da mir die entsprechende Unit für BMP-Dateien nicht bekannt ist (die für JPEG funktioniert hier nicht).

Hier die OnShow-Prozedur, bei der die Externen Bilder zunächst in den Zwischenspeicher geladen werden, um beim OnTimer-Ereignis abrufbereit zu sein...
Delphi-Quellcode:
  //Img_0.RegisterFileFormat('TEX','Texture file',TBmpImage); SCHEINT NICHT ZU FUNKTIONIEREN!
  Img_0 := TPicture.Create;
  Img_0.LoadFromFile(ExtractFilePath(Application.ExeName) + 'resource\texture\00' + xTEX);
  Img_1 := TPicture.Create;
  Img_1.LoadFromFile(ExtractFilePath(Application.ExeName) + 'resource\texture\01' + xTEX);
  Img_2 := TPicture.Create;
  Img_2.LoadFromFile(ExtractFilePath(Application.ExeName) + 'resource\texture\02' + xTEX);
  Img_3 := TPicture.Create;
  Img_3.LoadFromFile(ExtractFilePath(Application.ExeName) + 'resource\texture\03' + xTEX);
  Img_4 := TPicture.Create;
  Img_4.LoadFromFile(ExtractFilePath(Application.ExeName) + 'resource\texture\04' + xTEX);
Hier die Timer-Prozedur:
Delphi-Quellcode:
procedure TfmUpdater.TimerTimer(Sender: TObject);
begin
  case ImageID of
   (0 or 4): begin
     imAnimation.Picture := Img_1;
     ImageID := 1;
   end;
   1: begin
     imAnimation.Picture := Img_2;
     ImageID := 2;
   end;
   2: begin
     imAnimation.Picture := Img_3;
     ImageID := 3;
   end;
   3: begin
     imAnimation.Picture := Img_4;
     ImageID := 4;
    end;
  end;
end;
Danke für eure Hilfe;
Dennis
Dennis
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

AW: TPicture mit eigener BMP-Extension

  Alt 10. Aug 2012, 02:02
Zitat:
SCHEINT NICHT ZU FUNKTIONIEREN!
WAS scheint nicht zu funktionieren?

Fehlermeldungen sind schon was Tolles.

Wenn du weißt, daß es ein Bitmap ist, dann lade es doch auch als Bitmap und überlaß' nicht TPicture das Rätselraten.
Delphi-Quellcode:
Img_0.Bitmap.LoadFromFile(...); // TPicture erstellt das TBitmap automatisch

Img_1.Graphic := TBitmap.Create;
Img_1.Graphic.LoadFromFile(...);

// und wenn kein direkter Zugriff auf eine eigenschafft besteht
Img_1.Graphic := TJpegImage.Create;
TJpegImage(Img_1.Graphic).LoadFromFile(...);
(Img_1.Graphic as TJpegImage).LoadFromFile(...);
$2B or not $2B
  Mit Zitat antworten Zitat
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
488 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: TPicture mit eigener BMP-Extension

  Alt 10. Aug 2012, 04:50
Hallo,
Alle Varianten funktionieren nicht.
Es kommt in jedem Fall eine Zugriffsverletzung. Ob ich es mit dem Bitmap oder der Grafik als TJpegImage versuche, immer kommt diese Fehlermeldung und das Bild wird nicht angezeigt.

Es kann natürlich auch sein, dass ich deinen Code nicht richtig intepretiert habe. Du scheinst ja immer 2 Varianten für das LoadFromFile gegeben zu haben. Was genau muss ich jetzt deiner Meinung nach in den Quelltext eintragen?

Danke;
Dennis
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

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

AW: TPicture mit eigener BMP-Extension

  Alt 10. Aug 2012, 06:51
Moin...

wann wird denn dein Timer aktiviert ? Noch vor dem OnShow ? Wenn ja greifst du auf unerzeugte Objekte zu... ob TBitmap oder TPicture ist da egal...
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: TPicture mit eigener BMP-Extension

  Alt 10. Aug 2012, 07:30
Es kommt in jedem Fall eine Zugriffsverletzung. Ob ich es mit dem Bitmap oder der Grafik als TJpegImage versuche, immer kommt diese Fehlermeldung und das Bild wird nicht angezeigt.
Eine Zugriffsverletzung? An welcher Stelle bei welchem Code?

Wenn die Meldung mit der Dateierweiterung bei LoadFromFile der TBitmap kommen sollte (was ich eigentlich nicht glaube), kannst du die in TFileStream laden und dann mit LoadFromStream arbeiten.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#6

AW: TPicture mit eigener BMP-Extension

  Alt 10. Aug 2012, 08:13
Passt nicht ganz hier her, aber Du kannst natürlich auch ein eigens Grafikformat an eine Endung binden, wie die Daten dargestellt werden liegt dann bei Dir.
Angehängte Dateien
Dateityp: pas MyGraphic.pas (2,6 KB, 6x aufgerufen)
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#7

AW: TPicture mit eigener BMP-Extension

  Alt 10. Aug 2012, 08:15
Passt nicht ganz hier her, aber Du kannst natürlich auch ein eigens Grafikformat an eine Endung binden, wie die Daten dargestellt werden liegt dann bei Dir.
Ansonsten wurde die Streamlösung auf TBitmap ja bereits genannt.
Angehängte Dateien
Dateityp: pas MyGraphic.pas (2,6 KB, 4x aufgerufen)
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)

Geändert von Bummi (10. Aug 2012 um 08:19 Uhr)
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.477 Beiträge
 
Delphi 12 Athens
 
#8

AW: TPicture mit eigener BMP-Extension

  Alt 10. Aug 2012, 09:15
Unabhängig von der eigentlichen Frage:
Delphi-Quellcode:
  case ImageID of
   (0 or 4): begin
So wird 0 und 4 bitweise verknüpft und nur mit dem Ergebnis 4 verglichen.

Sollen beide Fälle berücksichtigt werden, muss das so ausschaun:
Delphi-Quellcode:
  case ImageID of
    0, 4: begin
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#9

AW: TPicture mit eigener BMP-Extension

  Alt 10. Aug 2012, 09:16
Es waren 3 einzelne Beispiele und jeweils auch nur eine Variable, hatte bei der Letzten nur vergessen weiterzuzählen.

Ja und wie genau lautet die Fehlermeldeung?
Du wirst es nicht glauben, aber Strg+C funktioniert in den Fehlerdialogen (wird dir mit einem Beep bestätigt) und auch in den Compilermeldungen.


Den Debugger kennst du?

Lade doch in deinem DTimer mal ganz einfache Bitmaps *.bmp ... knallt es da immernoch?
$2B or not $2B

Geändert von himitsu (10. Aug 2012 um 23:51 Uhr) Grund: Dimer? :lachendauf'mBodenrumroll:
  Mit Zitat antworten Zitat
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
488 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: TPicture mit eigener BMP-Extension

  Alt 10. Aug 2012, 23:11
Moin...

wann wird denn dein Timer aktiviert ? Noch vor dem OnShow ? Wenn ja greifst du auf unerzeugte Objekte zu... ob TBitmap oder TPicture ist da egal...
Echt? Das wäre mir neu... Normalerweise werden die Objekte und Variablen doch schon vor auslösen des OnCreate-Ereignisses (also noch lange vor dem OnShow-Ereignis) erstellt...
Mit TStringList etc. funktioniert das doch auch....

Und selbst wenn es so ist: Wo soll ich das erzeugen der TPictures denn sonst hinpacken, da gibt es ja nicht mehr allzu viele Alternativen...

EDIT: ...und JA, ich erzeuge sie beim OnShow-Ereignis, nicht vorher.
Dennis
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 09:02 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