![]() |
Bitmap Datein in Delphi anzeigen und andere sachen
Hallo erstmal! Also bin neu und hab ein paar fragen. Also ich muss eine Facharbeit (Jgst 12) über Bild Steganografie schreiben. Nun ja mein Lehrer verlangt von mir zusätzlich ein Programm mit dem man Nachrichten in Bildern verschlüsseln und entschlüsseln kann. Nur hab ich keine Ahnung wie ich eine bmp Datei in Delphi laden bzw. die einzelnen Pixel auslesen soll. Hab mir zwar die Delphi hilfe durchgelesen aber so richtig schlau geworden bin ihc daraus nicht. Da steht etwas über die Klasse TCanvas aber die kann nur create und so einige andere Methoden. Könnte mir da jemand vieleicht helfen?? Schön mal danke im voraus und Guten Rutsch euch allen!
|
Re: Bitmap Datein in Delphi anzeigen und andere sachen
HI und willkommen in der DP.
Deine Bilder lädst du am besten und einfachsten in ein TBitmap. BSP:
Delphi-Quellcode:
So und das Bild ist dann auch gleich wieder aus dem Speicher gefegt. (Was für'n Schwachsinn :-*)
procedure TForm1.Landen(DatName: TFileName);
var Bild: TBtmap; begin Bild := TBitmap.Create; Bild.LoadFromFile(DatName); // Muss als Endung unbedingt .bmp haben Bild.Free; // keine Speicherprobleme erzeugen end; Auf die einzelnen Pixel wolltest du mit TCanvas zugreifen, was auch nicht abzuraten ist.
Delphi-Quellcode:
Bernhard
procedure TForm1.GetFarbe(var r, g, b: Byte; Bild: TBitmap; X, Y: Integer);
var Farbe: TColor; begin Farbe := Bild.Canvas.Pixels[X, Y]; r := GetRValue(Farbe); b := GetBValue(Farbe); g := GetGValue(Farbe); end; Guten Rutsch |
Re: Bitmap Datein in Delphi anzeigen und andere sachen
oke das is alles so naja schön xD aber ich kenn mich da net wirklich aus programmiere erst seit einem Jahr also erstmal wenn ich ein neues Projekt erstelle muss ich doch irgendwie einen auslöser haben z.B. einen Button. So wenn ich jetzt den Button habe dann muss ich doch erst die Klasse Tbitmap erstellen um mit ihr zu arbeiten.
Also bei mir sieht das dann folgender Maßen aus:
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) bBildladen: TButton; procedure bBildladenClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; Bitmap1: Tbitmap; implementation {$R *.DFM} procedure TForm1.bBildladenClick(Sender: TObject); var lBild:TBitmap; begin lBild:= TBitmap.create; lBild.LoadFromFile(xxx) end; end. Mein Problem ist jetzt da das ich zunächst nicht weiß wie ich den Dateinamen für LoadfromFIle angeben soll. Wäre nett wenn sie es mir erklären würden und nicht nur die lösung hinschreiben:) weil ich hab vor Informatik als ein Abi fach zuwählen und wenn ich das dann nicht verstehe ist das schlecht :) [edit=Sharky][delphi]-Tag gesetzt. Bitte verwende diese in Zukunft. Mfg, Sharky[/edit] |
Re: Bitmap Datein in Delphi anzeigen und andere sachen
Zitat:
@gaui: Wenn Deine Bitmaps immer im selben Verzeichnis sind, kannst Du
Delphi-Quellcode:
verwenden.
Bitmap.LoadFromFile('C:\DeinPfad\DeinBitmap.bmp');
Soll es aus dem Verzeichnis geladen werden, wo Deine Exe drinnen ist dann:
Delphi-Quellcode:
Oder wenn es der Benutzer selber laden können soll, dann suchst Du im Forum nach
Bitmap.LoadFromFile(ExtractFileDir(Application.ExeName)'\DeinBitmap.bmp');
![]()
Delphi-Quellcode:
Bitmap.LoadFromFile(OpenDialog1.FileName);
Zitat:
|
Re: Bitmap Datein in Delphi anzeigen und andere sachen
Hallo!
In deinem Fall würde ich die Variable für das Bitmap in die Private-Sektion des Form verschieben, im OnCreate-Ereignis des Formulars erzeugen und im OnDestroy-Ereignis wieder freigeben. Damit hast du mit dem Erzeugen des Formulars bereits eine Instanz für dein Bitmap, die beim Beenden wieder entfernt wird.
Delphi-Quellcode:
Für das Laden des Bildes würde ich auch auf jeden Fall einen TOpenDialog nehmen. Diesen findest du in der Tool-Palette unter "Dialoge". Schau dir dabei auch mal die Eigenschaften im Objektinspektor an. Interessant für dich könnte u.a. "Filter" sein. Damit kannst du dir nur Dateien mit einer bestimmten Endund (z.B. *.bmp) anzeigen lassen. Der Dialog lässt sich beispielsweise in einer ButtonClick-Prozedur aufrufen:
type
TForm1 = class(TForm) bBildladen: TButton; procedure bBildladenClick(Sender: TObject); private { Private-Deklarationen } DasBitmap: TBitmap; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.DFM} //TForm1 OnCreate; begin DasBitmap := TBitmap.Create; end; //TForm1 OnDestroy; begin DasBitmap.Free; end; end; end.
Delphi-Quellcode:
Zum Anzeigen auf dem Formular bietet sich ein TImage an. Diesem kannst du das geladene Bitmap zur Anzeige zuweisen (mit Image.Picture.Bitmap.Assign).
procedure TfMain.btBildLadenClick(Sender: TObject);
begin if OpenDialog.Execute then begin //Execute ist True, wenn du den FileDialog mit dem Klicken des OK-Button beendest. DasBitmap.LoadFromFile(OpenDialog.FileName); //Hier lädst du jetzt das Bild end; end; |
Re: Bitmap Datein in Delphi anzeigen und andere sachen
oke direkt ne Frage zu diesem oncreate und on destroy sind das Methoden von TForm? und dieses TOPenDialog wo krieg ich das im Forum her
? weil ihc muss das ja als ein Tool für Delphi einfügen? danke schon mal für die Hilfe |
Re: Bitmap Datein in Delphi anzeigen und andere sachen
und wenn ich das so mach
Zitat:
|
Re: Bitmap Datein in Delphi anzeigen und andere sachen
onCreate und onDestroy sind Ereignisse von TForm
TOpenDialog findest Du unter dem Reiter Dialoge (Dialogs).
Delphi-Quellcode:
Da fehlt zumindest ein Pluszeichen.
Bitmap.LoadFromFile(ExtractFileDir(Application.ExeName)+'\DeinBitmap.bmp');
Grüße Klaus |
Re: Bitmap Datein in Delphi anzeigen und andere sachen
Delphi-Quellcode:
so das steht bei mir da
type
TForm1 = class(TForm) bBildladen: TButton; Image1: TImage; OpenDialog1: TOpenDialog; procedure bBildladenClick(Sender: TObject); procedure OpenDialog1CanClose(Sender: TObject; var CanClose: Boolean); private { Private-Deklarationen } Bitmap1: Tbitmap; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.bBildladenClick(Sender: TObject); var lBild:TBitmap; begin // lBild:= TBitmap.create; //Image1:= lBild.LoadFromFile('D:\Dokumente und Einstellungen\Admin\Desktop\Informatik1') end; procedure TForm1.OpenDialog1CanClose(Sender: TObject; var CanClose: Boolean); begin if OpenDialog1.Execute then begin Bitmap1.LoadFromFile(OpenDialog1.Bilder); end; end; Zitat:
[edit=Sharky]Delphi-Tags gesetzt. Mfg, Sharky[/edit] |
Re: Bitmap Datein in Delphi anzeigen und andere sachen
versuche mal
Delphi-Quellcode:
Grüße
Bitmap1.LoadFromFile(OpenDialog1.FileName);
Klaus |
Re: Bitmap Datein in Delphi anzeigen und andere sachen
Hast du dir mein Post eigentlich durchgelesen? Da steht alles drin, auch dass, was du mittlerweile noch gefragt hast... :cry:
Zitat:
Desweiteren solltest du im OnClick des Buttons einfach die Execute-Methode des OpenDialog aufrufen. Diese liefert einen Boolschen Wert zurück, der TRUE ist, wenn im OpenDialog eine Datei ausgewählt und "OK" geklickt wurde. Siehe auch das Beispiel im Post #5. Bitte benutze auch die Delphi-Tags, das macht den Quelltext wesentlich lesbarer. |
Re: Bitmap Datein in Delphi anzeigen und andere sachen
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Open: TOpenDialog; bBildladen: TButton; Image1: TImage; procedure bBildladenClick(Sender: TObject); private { Private-Deklarationen } DasBitmap:TBitmap; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.bBildladenClick(Sender: TObject); begin if Open.Execute then begin Image1 := DasBitmap.LoadFromFile(Open.FileName); end; end; end. so sieht das bei mir jetzt aus nur erscheint da ein inkompatibler Typ also ne Fehlermeldung
Delphi-Quellcode:
[pre:1:3cd51faa52][Fehler] Unit1.pas(33): Inkompatible Typen: 'TImage' und 'procedure, untyped pointer or untyped parameter'[/pre:1:3cd51faa52]
Könnt ihr mir da helfen? Weil Image1 soll das geladene Bild ja auf dem Formular darstellen :) |
Re: Bitmap Datein in Delphi anzeigen und andere sachen
Moin, Moin.
Du hast das wohl ein wenig durcheinandergewürfelt, mit
Delphi-Quellcode:
sollt es funktionieren.
if Open.Execute then begin
DasBitmap.LoadFromFile(Open.FileName); Image1.Picture.Bitmap.Assign(DasBitmap) end; |
Re: Bitmap Datein in Delphi anzeigen und andere sachen
Liste der Anhänge anzeigen (Anzahl: 1)
Delphi-Quellcode:
Access Vialotion >.< hmm wenn ich das öffne dann hat der keinen datentyp seht ihr in der datei
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Open: TOpenDialog; bBildladen: TButton; Image1: TImage; procedure bBildladenClick(Sender: TObject); private { Private-Deklarationen } DasBitmap:TBitmap; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.bBildladenClick(Sender: TObject); begin if Open.Execute then begin if Open.Execute then begin DasBitmap.LoadFromFile(Open.FileName); Image1.Picture.Bitmap.Assign(DasBitmap) end; end; end; end. |
Re: Bitmap Datein in Delphi anzeigen und andere sachen
Hab' schon drauf gewartet:
Delphi-Quellcode:
fehlen, oder?
//TForm1 OnCreate;
begin DasBitmap := TBitmap.Create; end; //TForm1 OnDestroy; begin DasBitmap.Free; end; |
Re: Bitmap Datein in Delphi anzeigen und andere sachen
boah mein lehrer hat uns 1000 mal gesagt das nicht zu vergessen xD danke!!!!!
|
Re: Bitmap Datein in Delphi anzeigen und andere sachen
Macht ja nichts!
Aus Fehlern lernt man oft am besten! :P |
Re: Bitmap Datein in Delphi anzeigen und andere sachen
so jetzt kommt part 2 :) also die einzelnen Pixel bestehen ja aus Gelb Rot blau werten. Wie lese ich die mit der klasse TCanvas aus?? Könnt ihr mir da n par tipps geben weil bei Tcanvas kommt da immer zusatzmodul fehlt
|
Re: Bitmap Datein in Delphi anzeigen und andere sachen
Hat das nicht rollstuhlfahrer in Post#2 schon beschrieben?
|
Re: Bitmap Datein in Delphi anzeigen und andere sachen
ich brauch das n bisschen ausführlicher weil z.b. den befehl getFarbe kennt der bei mir nicht ..
|
Re: Bitmap Datein in Delphi anzeigen und andere sachen
Delphi-Quellcode:
Das ist eine Methode deines Formulars, die du für deine Zwecke aufrufen kannst. Du übergibst dein Bitmap und die gewünschte Bildkoordinate; Rückgabewerte sind die 3 Farbanteile des angegebenen Punkts.
procedure TForm1.GetFarbe(var r, g, b: Byte; Bild: TBitmap; X, Y: Integer);
var Farbe: TColor; begin Farbe := Bild.Canvas.Pixels[X, Y]; r := GetRValue(Farbe); b := GetBValue(Farbe); g := GetGValue(Farbe); end; |
Re: Bitmap Datein in Delphi anzeigen und andere sachen
Wenn Du Dich mit den Pixeln spielen willst solltest Du lieber nach
![]() Edit: Praktisches Beispiel: ![]() |
Re: Bitmap Datein in Delphi anzeigen und andere sachen
Delphi-Quellcode:
so 2 Fragen wenn ich scanline verwende was gibt mir scanline? eig die Farb werte oder? dann würd ich die gerne in dem edit feld ef Pixel darstellen nur klappt das mal wieder nicht... könnt ihr mir da mal helfen?
unit Facharbeit;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Open: TOpenDialog; bBildladen: TButton; Image1: TImage; bPixelauslesen: TButton; efPixel: TEdit; procedure bBildladenClick(Sender: TObject); procedure bPixelauslesenClick(Sender: TObject); private { Private-Deklarationen } DasBitmap:TBitmap; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.bBildladenClick(Sender: TObject); begin //TForm1 OnCreate; begin DasBitmap := TBitmap.Create; end; if Open.Execute then begin if Open.Execute then begin DasBitmap.LoadFromFile(Open.FileName); Image1.Picture.Bitmap.Assign(DasBitmap) end; end; //TForm1 OnDestroy; begin DasBitmap.Free; end; end; procedure TForm1.bPixelauslesenClick(Sender: TObject); begin efPixel.text:=(DasBitmap.ScanLine[]); end; end. |
Re: Bitmap Datein in Delphi anzeigen und andere sachen
gaui :shock:
Bevor wir bei ScanLine () einsteigen.... Was in aller Welt hast du mit OnCreate() und OnDestroy() gemacht????? |
Re: Bitmap Datein in Delphi anzeigen und andere sachen
wie??? ich hab das so gemacht das beim click des Buttons ein Bitmap erstellt wir und es funktioniert .. oke ihr kennt euch da besser aus was is falsch oder muss ich ändern? und wieso=?
|
Re: Bitmap Datein in Delphi anzeigen und andere sachen
Naja, Du erzeugst das Bitmap und gibst es gleich weieder frei, aber grundsätzlich frage ich mich, warum man das Bitmap nicht gleich mit Image1.Picture.LoadFromFile lädt, wenn man schon ein TImage verwendet. :gruebel:
|
Re: Bitmap Datein in Delphi anzeigen und andere sachen
sagen wirs so davon wusste ich nix ich kenne nur die Methode der zuweisung :) lern das ja erst seit einem jahr.
|
Re: Bitmap Datein in Delphi anzeigen und andere sachen
aber ich kann das so mit der zuweisung machen oder? dann mach ich eben noch einen Button der das Image freigibt und dsa Programm schließt das wäre doch oke oder nich`?
|
Re: Bitmap Datein in Delphi anzeigen und andere sachen
also nochmal zu diesem scanline. Ich hab herausgefunden, dass das ein indizierter Zugriff ist aber ich weiß nicht wirklich was da rein muss
die Delphihilfe sagt
Delphi-Quellcode:
also Row is ja die Zeile das is mir klar aber bei Pointer bin ich planlos
ScanLine[Row: Integer]: Pointer;
|
Re: Bitmap Datein in Delphi anzeigen und andere sachen
Das mit der Zuweisung kannst Du machen, is halt n bißchen umständlicher, aber das TImage brauchste eigentlich nicht slebt freigeben, das macht Delphi für Dich ;)
Wenn Du meinem Link oben gefolgt wärst hättest Du eine Unit gefunden, in der SetPixel und GetPixel per ScanLine implementiert sind ;) (Es gäbe auch noch andere implementierungsmöglichkeiten) Dazu zu sagen ist, das das nur bei 24 Bit (RGB) und 32 Bit (RGBA) Bitmaps so funktioniert, mit Pixelformat bekommst Du heraus, welches Format Deine Bitmap hat. PS: Wenn Du mal kurz Zeit hast klicke auf http://www.delphipraxis.net/template.../icon_edit.gif, damt kannst Du Deine Posts edtieren und mußt nicht soviele hintereinander machen ;) |
Re: Bitmap Datein in Delphi anzeigen und andere sachen
Also:
Der Vorschlag kam ja von guidok, da soll das BitmapCreate natürlich in das Oncreate() des Formulars, das Free() natürlich in das OnDestroy() des Formulars. Natürlich geht's auch mit direkter Verwendung von Bitmap oder Image, beides ist doppelt-gemoppelt. Das ScanLine liefert für die angegebene Zeile ein ByteArray zurück; ganauer: einen Zeiger auf ein ByteArray. Die D7 Hilfe hat folgendes Beispiel dazu:
Delphi-Quellcode:
Das sollte dir eigentlich erst einmal weiterhelfen.
procedure TForm1.Button1Click(Sender: TObject);
// Dieses Beispiel zeigt die direkte Ausgabe in ein Bitmap var x,y : Integer; BitMap : TBitMap; P : PByteArray; begin BitMap := TBitMap.create; try // Ersetzen Sie in Windows MyBitmap.png durch den vollständigen Pfadnamen: // C:\Program Files\Common Files\Borland Shared\Images\Splash\256color\factory.bmp BitMap.LoadFromFile('MyBitmap.png'); for y := 0 to BitMap.Height -1 do begin P := BitMap.ScanLine[y]; for x := 0 to BitMap.Width -1 do P[x] := y; end; Canvas.Draw(0,0,BitMap); finally BitMap.Free; end; end; |
Re: Bitmap Datein in Delphi anzeigen und andere sachen
oke.. mach ich nur ihr dürft mir nicht zuviel helfen :) is zwar gut gemeint aberdie Facharbeit muss auf eigenem Wissen enstehen und wenn ihr mir zu sehr helft gibt das ärger :) also dieses scanline daraus werd ich nicht schlau der will das nicht im editfeld anzeigen könnt ihr da was sagen?
|
Re: Bitmap Datein in Delphi anzeigen und andere sachen
Na, was soll im edit stehen? Du bekommst ein Array mit ByteWerten geliefert (für jede Spalte des Bildes ein Byte) - und in einem Edit kann nur ein String angezeigt werden.
|
Re: Bitmap Datein in Delphi anzeigen und andere sachen
oke und worin kann ich mir das anzeigen lassen? oder kann ich irgendwie den wert in einen string umwandeln?
|
Re: Bitmap Datein in Delphi anzeigen und andere sachen
|
Re: Bitmap Datein in Delphi anzeigen und andere sachen
ja fürs erste will ich die in einem Edit feld anzeigen :) weil danach werde ich die in lokalen Variablen speichern und mit dem jeweiligen ascci code addieren also einfach nur fürs erste :) integer to string oke.. aber dieses Point macht mir Probleme was ist das überhaupt weil wenn ich eine lokaleVAriable mit integer ache gibts nen Fehler
|
Re: Bitmap Datein in Delphi anzeigen und andere sachen
Ein Pointer ist nur ein Zeiger, quasi ein Wegweiser auf irgendwas hin.
Delphi-Quellcode:
var i:Integer;
P:Pointer; begin i:=1; // i ist jetzt 1 p:=@i; // p zeigt jetzt auf i Integer(p^):=2; // i ist jetzt 2 end; |
Re: Bitmap Datein in Delphi anzeigen und andere sachen
Zitat:
|
Re: Bitmap Datein in Delphi anzeigen und andere sachen
Mit Draw zeichnest Du ein Bild, zB ein Bitmap, da Du aber ein TImage verwendest wird das zeichnen für Dich bereits gemacht ;)
|
Re: Bitmap Datein in Delphi anzeigen und andere sachen
Liste der Anhänge anzeigen (Anzahl: 3)
Hi,
habe Dir mal ein kleines Project erstellt, mit dem Du ein bischen mit den Farben experimentieren kannst. Quasi als Grundlagenforschung :wink: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:37 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 by Thomas Breitkreuz