AGB  ·  Datenschutz  ·  Impressum  







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

Klassen, Vererbung und CAST

Ein Thema von bernhard_LA · begonnen am 12. Nov 2024 · letzter Beitrag vom 22. Nov 2024
Antwort Antwort
Benutzerbild von himitsu
himitsu

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

AW: Klassen, Vererbung und CAST

  Alt 13. Nov 2024, 16:34
Dann hat die Variable "bmp" den falschen Typ!

Und abhängig davon, erlaubt der Compiler, dass dort etwas rein kommt, was kein TBitmap oder Nachfahre ist, womit dieser harte Cast alles noch schlimmer machen wird.


Wenn du dich nicht mit Casts auskennst, dann verwende niemals harte, sondern nur weiche Casts.
hart: TBitmap(bmp) ( @Compiler: MACH ES, ich weiß was ich tue und falls nicht ... selbst Schuld)
soft: (bmp as TBitmap) (lieber Compiler, mach es bitte und wenn falsch, dann hau mir eine runter, damit ich es lerne)
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (13. Nov 2024 um 16:39 Uhr)
  Mit Zitat antworten Zitat
jziersch

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

AW: Klassen, Vererbung und CAST

  Alt 13. Nov 2024, 17:28
Eine TBitmap gibt es auch in WinAPI.Windows: TBitmap = tagBITMAP;

verarbeiteBMP() verwendet vielleicht diesen Typ. Am Besten auch dort den namespace VCL.Graphics. angeben.
WPCubed GmbH
Komponenten für Delphi:
WPTools, wPDF, WPViewPDF
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73
Online

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
778 Beiträge
 
#3

AW: Klassen, Vererbung und CAST

  Alt 13. Nov 2024, 17:40
Eine TBitmap gibt es auch in WinAPI.Windows: TBitmap = tagBITMAP;

verarbeiteBMP() verwendet vielleicht diesen Typ. Am Besten auch dort den namespace VCL.Graphics. angeben.

Womit wir wieder bei Beitrag #3 wären
  Mit Zitat antworten Zitat
Blup

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

AW: Klassen, Vererbung und CAST

  Alt 13. Nov 2024, 18:24
Übergeben wird ein Nachkomme von "VCL.Graphics.TBitMap".
Delphi-Quellcode:
...
verarbeiteBMP( TBitmap(bmp));
Das ruft ja richtig: "Ich bin keine Nachkomme von der TBitmap-Klasse, die diese Funktion erwartet."

Siehe himitsu, so bekommt man auch die richtige Fehlermeldung und läuft nicht in eine Zugriffsverletzung:
Delphi-Quellcode:
...
verarbeiteBMP(bmp as TBitmap);

Geändert von Blup (13. Nov 2024 um 18:26 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#5

AW: Klassen, Vererbung und CAST

  Alt 14. Nov 2024, 05:59
Wie schon erwähnt wäre der Cast auf TBitmap eh unnötig, wenn alles richtig wäre.
kurze Rückmeldung :

ohne den cast auf TBitmap compiliert mein code nicht
Da sollte man doch stutzig werden und die Compiler-Meldungen lesen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von gubbe
gubbe

Registriert seit: 8. Okt 2005
Ort: Schleswig-Holstein
150 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Klassen, Vererbung und CAST

  Alt 14. Nov 2024, 08:58
Überprüfe doch einfach mal die Reihenfolge des per uses eingebundenen Units.
Wenn Du schon oben explizit "VCL.Graphics.TBitMap" angeben musst, dann steht im interface Abschnitt wahrscheinlich

Uses VCL.graphics, WinApi.Windows

Vertausche das und dann solltest Du auch überall das gleiche TBitmap haben.
  Mit Zitat antworten Zitat
bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
1.138 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Klassen, Vererbung und CAST

  Alt 20. Nov 2024, 12:06
wie müsste ich meine code erweitern damit
Zitat:
FImage.FDIB.dsBm
angelegt wird ?



Delphi-Quellcode:
procedure TBitMapExtension.LoadFromFile(const Filename: String);
var
  flag: bool;
begin

  /// .... für alle unterschiedlichen Grafiktypen

  if (Lowercase(ExtractFileExt(Filename)) = '.jpeg') then
  begin
    LoadJPEG(self, Filename);
    flag := TRUE;
  end;

end;


procedure LoadJPEG(Bmp: TBitMap; Filename: string);
var
  JPEG: TJPEGImage;

begin
  JPEG := TJPEGImage.Create;
  try
    JPEG.LoadFromFile(Filename);

    with Bmp do
    begin

      PixelFormat := pf16bit;
      // Width := jpeg.Width;
      // Height := jpeg.Height;

      Assign(JPEG);

      // PixelFormat := pf24bit;

    end;

  finally
    JPEG.Free;
  end;

end;
  Mit Zitat antworten Zitat
bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
1.138 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Klassen, Vererbung und CAST

  Alt 22. Nov 2024, 08:57
Die Parameter Übergabe mit Procedure ProcessThisBitmap ( abmp as TBitmap) liefert bei mir folgenden Fehler :

Zitat:
[dcc64 Error] Unit_Testcases.pas(646): E2015 Operator not applicable to this operand type

auch der Versuch die Höhe / Weite nochmals expliziert zu setzen liefert keine Verbesserung- Beim Zugriff auf .width oder .height bekomme ich eine Zugriffsverletzung in der Unterrutine.
Der Aufruf von .width .height innerhalb des Codeblocks der Definition der Variablen funktioniert problemlos



Delphi-Quellcode:
procedure LoadJPEG(Bmp: TBitMap; Filename: string);
var
  JPEG: TJPEGImage;

begin
  JPEG := TJPEGImage.Create;
  try
    JPEG.LoadFromFile(Filename);

    with Bmp do
    begin

      PixelFormat := pf16bit;
      // Width := jpeg.Width;
      // Height := jpeg.Height;


      BMP.SetSize(jpeg.Width,jpeg.Height);

      Assign(JPEG);

      // PixelFormat := pf24bit;

    end;

  finally
    JPEG.Free;
  end;

end;

Geändert von bernhard_LA (22. Nov 2024 um 09:00 Uhr)
  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 13:25 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