AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Pixel aus Datei wieder geben

Ein Thema von EMS · begonnen am 28. Dez 2012 · letzter Beitrag vom 2. Jan 2013
Antwort Antwort
delnu
(Gast)

n/a Beiträge
 
#1

AW: Pixel aus Datei wieder geben

  Alt 28. Dez 2012, 18:21
Korrekt wäre :


For index1:=1 to 300 do
begin
for index2:=1 to 300 do
begin
READ(F,farbe1);
image2.canvas.pixels[index1,index2]:=farbe1;
end;
end;

Allerdings frage ich mich, wieso Du nicht blockwrite/blockread benutzt. Und ist das wirklich Delphi ?
Dann hieße es doch nicht {$R *.lfm} sondern {$R *.dfm}

Geändert von delnu (28. Dez 2012 um 18:25 Uhr)
  Mit Zitat antworten Zitat
EMS

Registriert seit: 19. Dez 2012
97 Beiträge
 
#2

AW: Pixel aus Datei wieder geben

  Alt 28. Dez 2012, 18:31
Super Danke das hat funktioniert
  Mit Zitat antworten Zitat
daywalker9

Registriert seit: 1. Jan 2010
Ort: Leer
594 Beiträge
 
Delphi XE3 Professional
 
#3

AW: Pixel aus Datei wieder geben

  Alt 28. Dez 2012, 18:50
Und ist das wirklich Delphi ?
Dann hieße es doch nicht {$R *.lfm} sondern {$R *.dfm}
Er nutzt Lazarus+FreePascal
Lars
  Mit Zitat antworten Zitat
delnu
(Gast)

n/a Beiträge
 
#4

AW: Pixel aus Datei wieder geben

  Alt 28. Dez 2012, 22:02
Zwischendurch habe ich das mal praktisch ausprobiert. Beim Einlesen muß es natürlich auch von 0 bis 299 statt von 1 bis 300 heißen, denn sonswt kommt es tatsächlich zu den abgesetzten Linien oben und links.

Ich habe mal die Umsetzung mit BlockWrite/BlockRead vorgenommen. Hier nur die entsprechenden Änderungen, allerdings nicht optimiert, sondern noch aus der Testphase :
Delphi-Quellcode:
f : file; // F:File of integer;

procedure TForm1.Button1Click(Sender: TObject);
var
  filename:string;
  filesize,len:Int64;
begin
  if opendialog1.execute then
     begin
       filename:=opendialog1.filename;
     end;
  image1.picture.loadfromfile(filename);
  image1.width:=image1.picture.width; // flexible Anpassung der Breite
  image1.height:=image1.picture.height; // flexible Anpassung der Höhe
end;

procedure TForm1.Button2Click(Sender: TObject);
var
bildhoehe,bildbreite,zeile,spalte,farbe,X,Y: integer;
   TestArray: array [0..299, 0..299] of integer;
   index1,index2,farbe1: integer;
b:byte;
begin
  application.processmessages;

  bildbreite:=image1.width;
  bildhoehe:=image1.height;

  For index1:=0 to {299} bildbreite-1 do
     begin
     for index2:=0 to {299} bildhoehe-1 do
        begin
        TestArray[index1,index2]:=image1.canvas.pixels[index1,index2];
        end;
     end;

  ASSIGNFILE(f,'NeuesBild.dat');
  REWRITE(F,1);
  blockwrite(f,image1.width,sizeof(bildbreite));
  blockwrite(f,image1.height,sizeof(bildhoehe));
  blockwrite(f,TestArray,bildhoehe*bildbreite*sizeof(integer));
  Closefile(f);
end;

procedure TForm1.Button4Click(Sender: TObject);
var
   bildhoehe,bildbreite, menge,
   index1,index2,farbe1: integer;
   TestArray: array [0..299, 0..299] of integer;
// TestArray: array of array of integer;
begin
  ASSIGNFILE(f,'NeuesBild.dat');
  RESET(f,1);
//READ(F,farbe1);
  blockread(f,bildbreite,sizeof(bildbreite));
  blockread(f,bildhoehe,sizeof(bildhoehe));
  menge:=bildbreite*bildhoehe*sizeof(integer);
//setlength(TestArray,menge);
//showmessage(inttostr(menge));
  blockread(f,TestArray,menge);
  Closefile(f);
  image2.width:=bildbreite;
  image2.height:=bildhoehe;
  For index1:=0 to {299} bildbreite-1 do
     begin
     for index2:=0 to {299} bildhoehe-1 do
        begin
        image2.canvas.pixels[index1,index2]:=TestArray[index1,index2];
        end;
     end;
// Image2.Refresh; { must refresh before changes are displayed }

end;
BlockWrite/BlockRead haben den Vorteil, daß die Daten im Stück geschrieben bzw. gelesen werden. Das geht schneller als pixelweise vorzugehen. Wenn erst noch Breite und Höhe mitgespeichert werden, ist das alles etwas flexibler. Allerdings ist mir noch nicht geglückt, das mit offenen Arrays umzusetzen, so daß leider die Bildgröße doch noch vorher feststehen muß. Sicher wäre auch möglich, mit "ScanLine" statt mit Pixeln zu arbeiten, aber das kommt immer auf den Anwendungszweck an.

Geändert von delnu (28. Dez 2012 um 22:57 Uhr) Grund: Korrektur : aus normalem Text "Delphi-Code" gemacht
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.689 Beiträge
 
Delphi 2007 Enterprise
 
#5

AW: Pixel aus Datei wieder geben

  Alt 29. Dez 2012, 00:43
Statt mit typisierten Dateien ("file of ...") zu doktorn, wäre es meiner Meinung nach weiser gleich mit Streams umzugehen zu lernen. Insbesondere weil Streams auch ausserhalb von Dateiverarbeitung an jeder Ecke vorkommen, und ganz besonders dann, wenn man mal über den Delphi-Tellerrand hinweg lugt.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  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: Pixel aus Datei wieder geben

  Alt 29. Dez 2012, 00:50
@Medium ich sehe es im Prinzip genau so, wenn man aber sieht wo es überall hakt, ist es vielleicht besser das Fass jetzt nicht aufzumachen.
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
Medium

Registriert seit: 23. Jan 2008
3.689 Beiträge
 
Delphi 2007 Enterprise
 
#7

AW: Pixel aus Datei wieder geben

  Alt 29. Dez 2012, 02:04
Da hast du völlig Recht. Ich habe mich hier nur daran erinnert, wie schwer es mir fiel mich nach ein paar Jahren Lernen mit typisierten Dateien an Streams zu gewöhnen. "File of ..." macht doch recht bequem (und unflexibel). Aber ja, das ist hier vermutlich zu hastig empfohlen gewesen. Hier langt es ja locker für Ergebnisse, und die sind es doch die zum Weitermachen motivieren (Der Rest kommt von selbst (und aus Dokus ))
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
delnu
(Gast)

n/a Beiträge
 
#8

AW: Pixel aus Datei wieder geben

  Alt 29. Dez 2012, 20:30
Nicht ohne Grund habe ich dem Threadersteller BlockWrite/BlockRead empfohlen, denn typisierte Dateitypen sind unflexibel. Streams sind wohl noch sinnvoller, aber damit tue ich mich auch trotz jahrelanger Programmier-Erfahrung mitunter etwas schwer - zumal ich die vorigen Jahre nur wenig mit Delphi gemacht habe.
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 17:00 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