Autor Beitrag
Stauch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 140

Win 2000, Win XP
D4
BeitragVerfasst: Di 29.06.04 11:52 
Folgendes kleines lustiges (?) Problem: Ich lade ein Bild in eine TImage Komponente und möchte dann die Anzahl der Pixel ermitteln. Im Prinzip kein Thema:
ausblenden Delphi-Quelltext
1:
2:
    width:=Image1.picture.Width;
    height:=Image1.picture.Height;


Aber die so ermittelten Werte stimmen nicht mit denen überein, die mir andere Programme (Phase 5 oder Photoshop) anzeigen. Woran könnte das liegen?

C.

_________________
Geht das? Und wenn ja, warum nicht?
MartinPb
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 698



BeitragVerfasst: Di 29.06.04 12:28 
Wenn du die Größe der Bitmap haben willst:

ausblenden Delphi-Quelltext
1:
2:
width:=Image1.picture.Bitmap.Width;  
height:=Image1.picture.Bitmap.Height;


Wenn du die Größe der Image-Komponete haben willst:

ausblenden Delphi-Quelltext
1:
2:
width:=Image1.Width;  
height:=Image1.Height;

_________________
Gruß
Martin
Stauch Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 140

Win 2000, Win XP
D4
BeitragVerfasst: Mi 30.06.04 12:51 
bei mir liefert
ausblenden Delphi-Quelltext
1:
width:=Image1.picture.Bitmap.Width;					

mit konstanter Bosheit 0. :?

_________________
Geht das? Und wenn ja, warum nicht?
Muetze1
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 346



BeitragVerfasst: Mi 30.06.04 14:12 
Moin!

Dann hast du wahrscheinlich kein Bitmap geladen sondern z.B. ein MetaFile, Icon, JPEG oder anderes Format/Typ.

MfG
Muetze1
Stauch Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 140

Win 2000, Win XP
D4
BeitragVerfasst: Do 01.07.04 09:42 
@muetze1: Egal ob gif, jpg oder bmp das Ergebnis ist immer Null :? :?:

_________________
Geht das? Und wenn ja, warum nicht?
Muetze1
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 346



BeitragVerfasst: Do 01.07.04 22:49 
Moin!

Bei mir nicht. Grundlegendes: Image1.Picture ist das allgemeine Objekt. Für die einzelnen Typen von Grafiken gibt es dann Unterobjekte, wie z.B. JPEG, Bitmap, Icon, Metafile und die haben dann auch wieder ihre Width und Height Angaben die dann direkt den Wert der geladenen Daten entsprechen. Also wenn es bei dir egal ob du nun Image1.Picture.Metafile.Width bei einem Metafile oder Image1.Picture.Icon.Width bei einem Icon immer 0 liefert, dann sprichst du wahrscheinlich das falsche Image an oder zu einem Zeitpunkt wo dieses keine Bilddaten enthält. Schau dir also nochmal deinen Code an...

MfG
Muetze1
Stauch Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 140

Win 2000, Win XP
D4
BeitragVerfasst: Fr 02.07.04 10:00 
ne,ne, das Bild ist schon da. Ich habe ein bißchen experimentiert, da klappte es auch.
Aber in meinem "Problem"-Programm lade ich die Grafik mit dem folgenden Code(damit auch gifs erkannt werden - den habe ich von espen)
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
...
var
  fs : TFileStream;
  olegraphic : TOleGraphic;
begin
  olegraphic := TOleGraphic.create;
  try
    fs := TFileStream.Create(FileName, fmOpenRead or fmSharedenyNone);
    olegraphic.LoadFromStream(fs);
    ImageBox.Picture.Assign(olegraphic);
 ...


und da liefert imagebox.picture.width einen leicht abweichenden Wert (von der tatsächlichen Breite) ...bitmap.width immer noch 0. (Und ich habe tatsächlich ein Bitmap geladen und der Zugriff auf die Eigenschaften erfolgt erst nach dem Laden. Großes Pfadfinderehrenwort :D

_________________
Geht das? Und wenn ja, warum nicht?
MartinPb
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 698



BeitragVerfasst: Fr 02.07.04 11:19 
Du verwendest TOleGraphic. Diese Information hättest du eigentlich schon am Anfang liefern sollen. Ole Objekte sind eigentlich nur bei Arbeiten mit ActiveX zu verwenden. Aber sei's drum.

Wenn du Bitmap.Width gleich 0 hast, dann kannst du keine Bitmap drinn haben. Aber ich hab etwas in der Delphi-Hilfe gefunden:

Hilfe hat folgendes geschrieben:
Da TOLEGraphic OLE-Schnittstellen kapselt, kann die Klasse keine Informationen aus einer Datei lesen oder in einer Datei speichern.


Wie gesagt arbeitest du mit einem Ole Objekt und die haben ihre Eigenarten.

_________________
Gruß
Martin
Stauch Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 140

Win 2000, Win XP
D4
BeitragVerfasst: Mo 05.07.04 11:06 
Zitat:
Du verwendest TOleGraphic. Diese Information hättest du eigentlich schon am Anfang liefern sollen.

Sorry. Ich hielt das nicht für wesentlich.

Aber damit stecke ich jetzt in einme ziemlichen Dilemma: Die Nutzung von TOleGraphic ermöglicht mir den Zugrif auf das .gif-Format, den ich auf andere Weise nicht hinbekommen habe - andererseits kriege ich jetzt wesentliche Informationen (Größe und Auflösung) nicht mehr ordentlich aus dem Datei-Header ausgelesen. :cry:

Wenn jemand einen Tip hat, wie ich rauskomme, ... das wäre stark.

_________________
Geht das? Und wenn ja, warum nicht?