AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi 2 Dimensionales Array übergeben
Thema durchsuchen
Ansicht
Themen-Optionen

2 Dimensionales Array übergeben

Ein Thema von EWeiss · begonnen am 21. Mär 2019 · letzter Beitrag vom 26. Mär 2019
Antwort Antwort
Seite 4 von 5   « Erste     234 5      
EWeiss
(Gast)

n/a Beiträge
 
#31

AW: 2 Dimensionales Array übergeben

  Alt 22. Mär 2019, 22:59
Probeversion zum reinschnuppern gibt es hier.

Zitat:
Für pures GDI+ wirst du wenig Quellen finden, aber viele .NET Quelltextbeispiele, die sich mit den Elementen aus System.Drawing beschäftigen, wären ratsam anzuschauen.
Du hast dich extra schlau gemacht? Danke!

gruss

Geändert von EWeiss (22. Mär 2019 um 23:02 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#32

AW: 2 Dimensionales Array übergeben

  Alt 25. Mär 2019, 09:58
Wir haben uns so viel Kopf gemacht das Array zu kopieren eigentlich ganz einfach.
Eine Variable definieren.

ImgData2D: TBytes;

Das Array reinkopieren.
ImgData2D := @SpectrumData2D[0, 0];

übergeben
Delphi-Quellcode:
if GDIP_CreateBitmapFromScan0(w, rc.Bottom, w * 4, PixelFormat32bppARGB,
  PByte(ImgData2D[0]), imgSpectrum) <> OK then
zum testen speichern
GDIP_SaveImageToFile(ExtractFilePath(ParamStr(0)) + '\Text.png', imgSpectrum, Ord(QualityModeHigh));

Anschauen! Fertig.

gruss
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#33

AW: 2 Dimensionales Array übergeben

  Alt 25. Mär 2019, 10:07
Mach das nicht!
FALLS das klappt, dann nur mit Glück und an jedem ersten Mittwoch des Monats!

Dein Code kopiert gar nichts. Es ist das Gleiche als würdest du direkt @SpectrumData2D[0, 0] übergeben.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#34

AW: 2 Dimensionales Array übergeben

  Alt 25. Mär 2019, 10:21
Zitat:
FALLS das klappt, dann nur mit Glück und an jedem ersten Mittwoch des Monats!
Test es doch bitte..
Ich kann Hunderte von Images speichern und alle sind korrekt.
Kannst du gerne glauben.

Und zwar nach jedem Draw..
Delphi-Quellcode:
  if FSymmetrical then
  begin
    GDIP_DrawImageRectI(grWindow, imgSpectrum, round(Sh), 0, round(-Sh), round(Sh * 2 + 1));
    GDIP_DrawImageI(grWindow, imgSpectrum, round(Sh), 0);
  end else
  GDIP_DrawImageI(grWindow, imgSpectrum, 0, 0);

// GDIP_SaveImageToFile(ExtractFilePath(ParamStr(0)) + '\Text.png', imgSpectrum, Ord(QualityModeHigh));
gruss
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#35

AW: 2 Dimensionales Array übergeben

  Alt 25. Mär 2019, 10:29
Ich brauch das nicht zu testen.
Es ist falsch, selbst wenn es funktioniert.
Dann hast du nur unendliches Glück, dass alle Unter-Arrays direkt hintereinander im Speicher liegen.
Das kannst und darfst du allerdings nicht annehmen!

Habe mal nachgebaut was du quasi machst (siehe Ahnhang).
Wie du siehst sind in meinem 1D ByteArray nur die Einträge aus arr[0], also der ersten Zeile.
Miniaturansicht angehängter Grafiken
zufall.png  
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#36

AW: 2 Dimensionales Array übergeben

  Alt 25. Mär 2019, 10:32
Ich brauch das nicht zu testen.
Es ist falsch, selbst wenn es funktioniert.
Dann hast du nur unendliches Glück, dass alle Unter-Arrays direkt hintereinander im Speicher liegen.
Das kannst und darfst du allerdings nicht annehmen!

Habe mal nachgebaut was du quasi machst (siehe Ahnhang).
Wie du siehst sind in meinem 1D ByteArray nur die Einträge aus arr[0], also der ersten Zeile.
Hmm.. nun gut ich glaube dir destotrotz siehe dir die Bilder an die sagen alles. (Musst du aber nicht)
20 Bilder im gleichen Zug auf die Platte geknallt.

Delphi-Quellcode:
  if IntI < 20 then
  begin
    GDIP_SaveImageToFile(ExtractFilePath(ParamStr(0)) + '\Text_' + IntToStr(IntI) + '.png', imgSpectrum, Ord(QualityModeHigh));
    inc(IntI);
  end;
Also Zufall ist das keiner ansonsten wären alle oder zumindest eins davon falsch.
Könnte jetzt auch Hundert machen wäre das selbe.

Aber gut ich lasse deine Funktion drin.

gruss

Geändert von EWeiss (11. Jul 2019 um 17:00 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#37

AW: 2 Dimensionales Array übergeben

  Alt 25. Mär 2019, 10:45
Mach es einfach nicht.
Es kann sein, dass es jetzt gerade funktioniert.
Aber es kann genauso gut sein, dass es auf ein mal aus heiterem Himmel nicht mehr funktioniert wenn du irgendwo ganz wo anders was im Code änderst, was das Speicherlayout des Prozesses etwas verändert. Und dann kracht es und du hast keine Ahnung was los ist.

Hab nochmal im CPU-Fenster ein Screenshot gemacht, der nochmal genau verdeutlicht was bei 2D Arrays passieren kann (und dann funktioniert deine Methode nicht mehr):
Miniaturansicht angehängter Grafiken
memlayout.png  
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."

Geändert von Neutral General (25. Mär 2019 um 10:49 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#38

AW: 2 Dimensionales Array übergeben

  Alt 25. Mär 2019, 10:50
Zitat:
Mach es einfach nicht.
Ich habe es entfernt und verwende deine Funktion wie bisher ist sicherer.
Wollte es nur mal ansprechen.

gruss
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#39

AW: 2 Dimensionales Array übergeben

  Alt 25. Mär 2019, 11:16
Meine Funktion ist auch nicht die schnellste.
Hab sie auf Verständlichkeit ausgelegt.

Das hier ist wahrscheinlich noch ein Stück schneller + sicherer:
Delphi-Quellcode:
function Array2DTo1D(AArray: TArray2D): TArray1D;
var y, rowLen: Integer;
begin
  if Length(AArray) > 0 then
  begin
    rowLen := Length(AArray[0]);
    SetLength(Result, Length(AArray) * rowLen);
    for y := 0 to High(AArray) do
      Move(AArray[y][0], Result[y * rowLen], rowLen);
  end
  else
    SetLength(Result ,0);
end;
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#40

AW: 2 Dimensionales Array übergeben

  Alt 26. Mär 2019, 05:52
Du sagst das nichts kopiert wird.. das ist richtig!
Aber das 1 Dimensionale Array wird auf die komplette länge des 2 Dimensionalen gesetzt mehr brauche ich nicht.
Ich muss keine Bytes hin und her verschieben denn da gibt es keine.
Das 2 Dimensionale Array enthält keine es wird nur auf das Bitmap hin ausgerichtet.

Fakt ist doch das hier
ImgData2D := @SpectrumData2D[0, 0];

Die komplette Länge eines 2 Dimensionalen Arrays sich anschließend in einem 1 Dimensionalen befindet.
Wäre es nicht so würde ich das Bitmap mit dem Array gar nicht füllen und abspeichern können.
Es ist nicht das gleiche als wenn ich

@SpectrumData2D[0, 0];
direkt übergeben würde.

TBytes ist definiert in SysUtils als
TBytes = array of Byte;

gruss

Geändert von EWeiss (26. Mär 2019 um 05:56 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 5   « Erste     234 5      


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 18:51 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