AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi DPI - Eintrag im BMP-File-Header angeben.
Thema durchsuchen
Ansicht
Themen-Optionen

DPI - Eintrag im BMP-File-Header angeben.

Ein Thema von bitboy0 · begonnen am 22. Jun 2006 · letzter Beitrag vom 23. Jun 2006
Antwort Antwort
Seite 1 von 2  1 2      
bitboy0

Registriert seit: 22. Jun 2006
Ort: Ladenburg
11 Beiträge
 
Turbo Delphi für Win32
 
#1

DPI - Eintrag im BMP-File-Header angeben.

  Alt 22. Jun 2006, 11:23
Ich habe ein kleines Werkzeug erstellt um Bilder in einer bestimmten Art und Weise vorzubreiten. Das geht auch alles ganz gut, aber beim Import in ein Bildverarbeitungsprogramm wird das Bild erst mal extrem zu groß angezeigt weil im Standard-File-Header als Größenangabe 72DPI steht.

Damit das Bild in der richtigen Art und Weise geöffnet wird muss ich nur mit einem Hex-Editor den Eintrag im File-Header auf 1200 dpi setzen... also das sind 4 Byte die zu ändern sind.

Da Delphi wohl keine Möglichkeit vorsieht einem BMP einen anderen DPI-Wert als 72 mitzugeben suche ich jetzt eine simple Methode um nach dem Speichern des Bildes einfach den Wert dieser 4 Byte nachträglich durch den gewünschten Wert zu ersetzen.

Weil ich hier schon ein paar Themen durchsucht habe... ich brauche den Wert obwohl die meisten Programme den nicht auswerten und obwohl das mit der Qualität auch nichts zu tun hat. Die Pixelanzahl im Bild ändert sich durch den DPI-Wert im Header nicht, aber beim Import der Bilder nach Corel-Draw muss ich ohne den richtigen Wert erst mal noch jedes Bild von Hand verkleinern... das ist lästig!

Gruß Sven
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#2

Re: DPI - Eintrag im BMP-File-Header angeben.

  Alt 22. Jun 2006, 12:11
Hallo,

erstmal: Herzlich Willkommen!

Lade doch das Bild einfach in einen Stream und ändere die Werte. Das Offset weißst Du ja wohl schon.

Gruß
xaromz
  Mit Zitat antworten Zitat
bitboy0

Registriert seit: 22. Jun 2006
Ort: Ladenburg
11 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: DPI - Eintrag im BMP-File-Header angeben.

  Alt 22. Jun 2006, 12:48
Ja, offset ist einmal 38 und dann 42 (dezimal)
Die Angabe ist jeweils ein 4-Byte-Wert für die Horizontale und Vertikale Auflösung und damit es nicht zu einfach ist hat man hier den Wert in Pixel pro METER einzugeben... also bei 254dpi sind dann hier 10000 (00 00 27 10) einzutragen.. aber auch noch in umgekehrter Reihenfolge ... also (10 27 00 00) ...

Das alles weis ich ... nur hab ich noch keine Ahnung wie man einen Stream öffnet um an einer bekannten Stelle diese Bytes zu ändern. Da ich grade in Istanbul hocke und meine Delphi-Bücher in Mannheim im Büro stehen wäre ich SEHR dankbar wenn mir jemand die paar benötigten Zeilen für

Stream öffnen (Dateiname ist bekannt)
Position im Stream angeben
Byte schreiben
Stream schliessen

hier fertig posten könnte... Das steht sicher als Beispiel irgendwo in einem meiner Bücher ...

gruß
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#4

Re: DPI - Eintrag im BMP-File-Header angeben.

  Alt 22. Jun 2006, 13:20
Eigentlich recht einfach:
Delphi-Quellcode:
var
  FS: TFileStream;
begin
  ..

  FS := TFileStream.Create(DateiName, fmOpenWrite);
  try
    FS.Position := 28;
    FS.Write($10, 1);
    FS.Write($27, 1);
    FS.Write($00, 1);
    FS.Write($00, 1);
    FS.Write($10, 1);
    FS.Write($27, 1);
    FS.Write($00, 1);
    FS.Write($00, 1);
  finally
    FS.Free;
  end;
......

P.S.: Ist aus dem Kopf, anstatt Write evtl. WriteBuffer oder so
P.P.S.: Dec->Hex
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#5

Re: DPI - Eintrag im BMP-File-Header angeben.

  Alt 22. Jun 2006, 13:28
Hallo,

zu sakuras Beitrag: Du hast natürlich die Hex-Werte geschrieben, aber sakura schreibt Dezimalwerte. Aufpassen also.
Kann es eigentlich sein, dass die Byte-Reihenfolge stimmt, wenn man einfach einen Integer schreibt (ich kann mir die Byte-Reihenfolge immer nicht merken):
FS.Write(10000, 4); Probier das mal aus.

Gruß
xaromz
  Mit Zitat antworten Zitat
bitboy0

Registriert seit: 22. Jun 2006
Ort: Ladenburg
11 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: DPI - Eintrag im BMP-File-Header angeben.

  Alt 22. Jun 2006, 14:40
Danke!

Ich werde das heute noch testen und euch sagen ob's hingehauen hat!

gruß
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#7

Re: DPI - Eintrag im BMP-File-Header angeben.

  Alt 22. Jun 2006, 14:59
Ich habe es noch ein wenig korrigiert und dabei xaromz' Vorschlag aufgegriffen:
Delphi-Quellcode:
var
  Value : Cardinal;
begin
  Value := 10000;
  with TFileStream.Create(Dateiname, fmOpenWrite) do
    try
      Position := 38; // 38, nicht 28 ;-)
      Write(Value, 4); // Write benötigt eine Variable
      Write(Value, 4);
    finally
      Free;
    end;
end;
Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#8

Re: DPI - Eintrag im BMP-File-Header angeben.

  Alt 22. Jun 2006, 15:13
Zitat von xaromz:
zu sakuras Beitrag: Du hast natürlich die Hex-Werte geschrieben, aber sakura schreibt Dezimalwerte.
Korrigiert. Wie peinlich!!!

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
bitboy0

Registriert seit: 22. Jun 2006
Ort: Ladenburg
11 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: DPI - Eintrag im BMP-File-Header angeben.

  Alt 22. Jun 2006, 15:47
Super einfach das ganze! Danke!

Ich habs so rüberkopiert und es hat SOFORT perfekt funktioniert!

Ausserdem finde ich das Klima hier sehr freundlich!!

gruß (Aus Istanbul)
  Mit Zitat antworten Zitat
bitboy0

Registriert seit: 22. Jun 2006
Ort: Ladenburg
11 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: DPI - Eintrag im BMP-File-Header angeben.

  Alt 23. Jun 2006, 09:16
Kurzer Nachtrag...

Der Typ für "VALUE" ist dann INTEGER ... mit Caption oder Double schreibt er unbrauchbare Werte in das File... da stören wohl die Nachkommestellen.

gruß
  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 15:52 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