AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Dynamisches Array Grenze?

Ein Thema von EWeiss · begonnen am 28. Mär 2012 · letzter Beitrag vom 29. Mär 2012
Antwort Antwort
EWeiss
(Gast)

n/a Beiträge
 
#1

AW: Dynamisches Array Grenze?

  Alt 29. Mär 2012, 15:24
Hau doch mal den ganzen Quelltext von der DLL raus, sonst kann doch keiner richtig debuggen.
Sonst stocheren wir hier nur so rum und das Problem ist vielleicht ganz woanderes.
Deinen Wunsch wurde entsprochen

gruss
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.487 Beiträge
 
Delphi 12 Athens
 
#2

AW: Dynamisches Array Grenze?

  Alt 29. Mär 2012, 16:14
Das Problem scheint zumindest ähnlich zu sein:
http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
Zitat:
Systemwide size limitations
Windows apparently may enforce systemwide limits on available memory for CreateCompatibleBitmap. (According to some sources, this is because device-dependent bitmaps must reside in video card RAM.) If you're getting ERROR_NOT_ENOUGH_MEMORY errors when calling CreateCompatibleBitmap, the solution is to use device-independent bitmaps (DIBs) instead.
  Mit Zitat antworten Zitat
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#3

AW: Dynamisches Array Grenze?

  Alt 29. Mär 2012, 16:21
Ähm du solltest keine Dyn. Arrays als Output einer Funktion verwenden, da u.a. z.b. noch die Laenge gespeichert wird. (Genau müsste ich da jetzt auch erstmal nachschauen)
Du kannst eher sowas nehmen:
Delphi-Quellcode:
type
   TMyPixels = array[0..4096*4096-1] of Cardinal;
   PMyPixels = ^TMyPixels;
var
  Pixels: PPixels;
CreateDIBSection(....,Pixels,....);
Pixels[0]...
Außerdem solltest du in deinem Code mal die globalen Variablen entfernen. Und zu guter letzt: Lies dir nochmal meinen 2. Post mit meinem Beispiel KOMPLETT durch, da solltest die Lösung finden.

Ubrigens hast du da noch mehr Fehler im Code. Bei:
Delphi-Quellcode:
          nSize := bm.bmWidth * bm.bmHeight;

          for IntI := 0 to nSize do
fehlt mit Sicherheit ein -1
und statt einem "array of cardinal" bietet sich wohl auch ein "array of TRGBQuad" oder eine eigene Definition an.

Geändert von brechi (29. Mär 2012 um 16:26 Uhr) Grund: Erweiterung
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: Dynamisches Array Grenze?

  Alt 29. Mär 2012, 18:08
Zitat:
Und zu guter letzt: Lies dir nochmal meinen 2. Post mit meinem Beispiel KOMPLETT durch, da solltest die Lösung finden.
Habe deinen Thread schon gelesen aber lösungen sind da keine was den Speicher angeht.
Zitat:
Delphi-Quellcode:
type
    TMyPixels = array[0..4096*4096-1] of Cardinal;
    PMyPixels = ^TMyPixels;
 var
   Pixels: PPixels;
 CreateDIBSection(....,Pixels,....);
 Pixels[0]...
Eine alternative aber kein muss Verstehe hier den zusammenhang nicht in verbindung mit dem Speicher.
CreateDibSection gibt die Pixelanzahl selbst zurück also dimensioniert den Speicher im normalfall selbst.
Wenn aber hSection nicht gleich NULL ist benötige ich ein mapping.
Das geht aber über HBitmap nicht.

Zitat:
Delphi-Quellcode:
nSize := bm.bmWidth * bm.bmHeight;
for IntI := 0 to nSize do
fehlt mit Sicherheit ein -1
Ok wo du Recht hast .. hast du recht.

bmInfo.bmiHeader.biBitCount kannst du nicht einfach so festlegen (bzw. selbst berechen) dafür gibt es vorgaben abhängig vom Bitmap
also 1,4,8,16,24 bis Win98 und 1,4,8,16,24,32 Bit ab Win2000

Siehe BitCount

Quelltext ist ja oben..
Wenn zeit hast kannst es ja berichtigen.

Kannst das bitte im Thread Dimmed Sample posten ?
Da es ja jetzt nicht mehr um das Array alleine geht.
Danke.

EDIT:
Es lag wirklich nur an nSize -1

gruss

Geändert von EWeiss (29. Mär 2012 um 22:36 Uhr)
  Mit Zitat antworten Zitat
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#5

AW: Dynamisches Array Grenze?

  Alt 29. Mär 2012, 22:45
Wie gesagt, ein dynamisches array solltest du nicht verwenden. Un mit dem ganzen post lesen war folgendes gemeint:
bmInfo.bmiHeader.biSizeImage := tempBitmap.bmiHeader.biWidth * tempBitmap.bmiHeader.biHeight * tempBitmap.bmiHeader.biBitCount div 8; ich hatte mich mit SizeImage und BitCount vertan (ist in meinem Bsp. aber richtig) -> du setzt biSizeImage nicht
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.385 Beiträge
 
Delphi 12 Athens
 
#6

AW: Dynamisches Array Grenze?

  Alt 29. Mär 2012, 23:15
Nur daß oftmals die Datengrößen der einzelnen Zeilen auf ganze Integer (4 Byte) aufgerundet werden, was man bei der Berechnung eventuell noch beachten müßte.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

AW: Dynamisches Array Grenze?

  Alt 29. Mär 2012, 23:23
Wie gesagt, ein dynamisches array solltest du nicht verwenden. Un mit dem ganzen post lesen war folgendes gemeint:
bmInfo.bmiHeader.biSizeImage := tempBitmap.bmiHeader.biWidth * tempBitmap.bmiHeader.biHeight * tempBitmap.bmiHeader.biBitCount div 8; ich hatte mich mit SizeImage und BitCount vertan (ist in meinem Bsp. aber richtig) -> du setzt biSizeImage nicht
Also mein problem zur zeit das ich noch habe ist das nach einem Klick der Speicherverbrauch jetzt Rapide nach oben geht.
Bei der Form sind es 45MB und jetzt kommt's beim Desktop 900plus

Irgendwo hapert es da noch ganz schön.
Hab viel vergessen nach meiner Krankheit das ist Fakt

Was ist besser an einem 1 Dimensionalen statischen Array?
Also was bringt es an Geschwindigkeit ich habe es ja versucht kann aber den vorteil nicht erkennen
Funktionieren tut es natürlich auch.

mit biSizeImage werde ich auch nochmal versuchen .. Danke

EDIT:
Jup das hat mir geholfen der Tip mit dem Statischen Array
wird jetzt kein Speicher mehr verschwendet 2 MB sind OK da kann man mit leben.

biSizeImage hab ich mal addiert obwohl mir im moment nicht ganz klar ist
was mir das bringt in verbindung mit CreateDibSection.
Es wird nirgendwo verwendet.

Danke für eure Hilfe.

gruss

Geändert von EWeiss (29. Mär 2012 um 23:41 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 10:30 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