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 30. Mär 2012
Antwort Antwort
Seite 1 von 3  1 23      
EWeiss
(Gast)

n/a Beiträge
 
#1

Dynamisches Array Grenze?

  Alt 28. Mär 2012, 19:43
Beim einlesen vom Desktop hat mein Array eine grenze von 1920x1200 = 2304000

Gibt es eine Obergrenze in Delphi für dynamische Arrays also 65535 ?
Denke nicht oder?

Auf jedenfall tritt jetzt ein Fehler auf
Zitat:
Erste Gelegenheit für Exception bei $76D5B9BC. Exception-Klasse EAccessViolation mit Meldung 'Zugriffsverletzung bei Adresse 003618F6 in Modul 'Dimmed.dll'. Lesen von Adresse 041DA000'. Prozess DimmedTest.exe (4044)
Leider mal wieder nicht zu identifizieren was da abgeht.
Kann ja nicht über 2 Millionen Pixel debuggen.

EDIT:
131071 macht er zu größer scheint das Array nicht zu dimensionieren zu sein.
CreateDIBSection will nicht mehr rausspucken. Das ist mein Problem denke ich nicht das Array.

Was für ein Sch...s


gruss

Geändert von EWeiss (28. Mär 2012 um 19:59 Uhr)
  Mit Zitat antworten Zitat
FlatIron

Registriert seit: 22. Mär 2012
13 Beiträge
 
Delphi 7 Enterprise
 
#2

AW: Dynamisches Array Grenze?

  Alt 28. Mär 2012, 19:55
http://stackoverflow.com/questions/9...rray-in-delphi

Solltest eigentlich genug Platz haben. Oder habe ich da was falsch verstanden? Mehr kann ich leider nicht dazu sagen

EDIT: Ich hätte besser noch weiter gelesen. Hier steht noch was zur Praxis:
http://stackoverflow.com/a/985108

Das hätte das Problem erklären können, hätte es am Array gelegen
Das bügeln wir schon aus

Geändert von FlatIron (28. Mär 2012 um 20:32 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Dynamisches Array Grenze?

  Alt 28. Mär 2012, 20:28
Delphi-Quellcode:
MaxLength := (High(Integer) - 2 * SizeOf(Integer)) div SizeOf(MyArray[0]);

// für 32-Bit-Delphi
type
  TMyArray = array of XXX;

MaxLength := ($7FFFFFFF - 8) div SizeOf(XXX);
MaxLength := Trunc(2147483639 / SizeOf(XXX));
Das währe die technische Seite. (Referenzzählung+Länge+Daten)
> stackoverflow erzählt halt manchmal auch nur Mist.

Real ist nur soviel möglich, wie der größte zusammenhängende freie Speicherblock an Platz bietet.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (28. Mär 2012 um 20:35 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: Dynamisches Array Grenze?

  Alt 28. Mär 2012, 20:28
http://stackoverflow.com/questions/9...rray-in-delphi

Solltest eigentlich genug Platz haben. Oder habe ich da was falsch verstanden? Mehr kann ich leider nicht dazu sagen
JO liegt nicht am Array das problem ist CreateDIBSection gibt mir nicht mehr wie 131071 Pixel.
Wieder mal ein Delphi problem in C++ gibts das nicht.

grrr..

Pixels sind nicht vollständig.

gruss

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

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

AW: Dynamisches Array Grenze?

  Alt 28. Mär 2012, 21:48
http://stackoverflow.com/questions/9...rray-in-delphi

Solltest eigentlich genug Platz haben. Oder habe ich da was falsch verstanden? Mehr kann ich leider nicht dazu sagen
JO liegt nicht am Array das problem ist CreateDIBSection gibt mir nicht mehr wie 131071 Pixel.
Wieder mal ein Delphi problem in C++ gibts das nicht.

grrr..

gruss
Das ist mit Sicherheit kein Delphi Problem weils ne WinAPI ist die genauso unter Delphi wie auch unter C++ funktioniert. Das Problem wird da eher vorm Bildschirm sitzen
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: Dynamisches Array Grenze?

  Alt 28. Mär 2012, 22:09
Das Problem wird da eher vorm Bildschirm sitzen
Ach ja?
Dann sag mir doch mal bitte welchen Einfluss ich auf CreateDIBSection nehmen kann
wenn ich nur 131071 Pixel zurück geiefert bekomme?

Bekomme ich mehr gebe ich dir recht .. andernfalls na ja du weist schon

Code? OK!

Delphi-Quellcode:
begin

  hRetBmp := 0;

   if hBmp <> 0 then
   begin
      hBufferDC := CreateCompatibleDC(0);
      if hBufferDC <> 0 then
      begin
      hTmpBitmap := 0;
         if hBmpDC <> 0 then
            if (hBmp = GetCurrentObject(hBmpDC, OBJ_BITMAP)) then
            begin
               hTmpBitmap := CreateBitmap(1, 1, 1, 1, nil);
               SelectObject(hBmpDC, hTmpBitmap);
            end;

         hPrevBufObject := SelectObject(hBufferDC, hBmp);

         hDirectDC := CreateCompatibleDC(0);
         if hDirectDC <> 0 then
         begin
            GetObject(hBmp, sizeof(bm), @bm);

           ZeroMemory(@bmInfo, sizeof(BITMAPINFO));
            bmInfo.bmiHeader.biSize       := sizeof(bmInfo.bmiHeader);
            bmInfo.bmiHeader.biWidth    := bm.bmWidth;
            bmInfo.bmiHeader.biHeight    := bm.bmHeight;
            bmInfo.bmiHeader.biPlanes    := 1;
            bmInfo.bmiHeader.biBitCount   := 32;

            hDirectBitmap := CreateDIBSection(hDirectDC, bmInfo, DIB_RGB_COLORS, Pointer(Pixels), 0, 0);
            if hDirectBitmap <> 0 then

gruss

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

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

AW: Dynamisches Array Grenze?

  Alt 28. Mär 2012, 22:37
Delphi-Quellcode:
var
  tempBitmap: BITMAPINFO;
  pvBits: Pointer;
  mDC: THandle;
  mainBitmap: Thandle;
  x, y: integer;
  q: ^TRGBTriple;
  idx: integer;
begin
  ZeroMemory(@tempBitmap, sizeof(BITMAPINFO));
  tempBitmap.bmiHeader.biSize := SizeOf(BITMAPINFOHEADER);
  tempBitmap.bmiHeader.biBitCount := 24;
  tempBitmap.bmiHeader.biWidth := 1920;
  tempBitmap.bmiHeader.biHeight := 1080;
  tempBitmap.bmiHeader.biPlanes := 1;
  tempBitmap.bmiHeader.biCompression := BI_RGB;
  tempBitmap.bmiHeader.biSizeImage := tempBitmap.bmiHeader.biWidth * tempBitmap.bmiHeader.biHeight * 3;
  mDC := CreateCompatibleDC(0);
  mainBitmap := CreateDIBSection(mDC, tempBitmap, DIB_RGB_COLORS, pvBits, 0, 0);
  SelectObject(mDC, mainBitmap);
  FillChar(pvBits^, tempBitmap.bmiHeader.biWidth * tempBitmap.bmiHeader.biHeight * 3, 255);
  for y := 0 to tempBitmap.bmiHeader.biHeight - 1 do begin
    for x := 0 to tempBitmap.bmiHeader.biWidth - 1 do begin
      idx := y * tempBitmap.bmiHeader.biWidth + x;
      q := Pointer(Integer(pvBits) + idx * 3);
      q.rgbtBlue := Round(x * 255 / tempBitmap.bmiHeader.biWidth);
      q.rgbtRed := Round(y * 255 / tempBitmap.bmiHeader.biHeight);
      q.rgbtGreen := 55;
    end;
  end;
  BitBlt(canvas.Handle, 0, 0, tempBitmap.bmiHeader.biWidth, tempBitmap.bmiHeader.biHeight, mDC, 0, 0, SRCCOPY);
hab mir den aufräum Code jetzt mal gespart

-> du setzt bei dir die Bildgroesse nicht: bmInfo.bmiHeader.biBitCount := tempBitmap.bmiHeader.biWidth * tempBitmap.bmiHeader.biHeight * tempBitmap.bmiHeader.biBitCount div 8
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#8

AW: Dynamisches Array Grenze?

  Alt 28. Mär 2012, 22:48
Nu was ist bei dir anders als bei mir?
Im Pointer(Pixels) ist das array welches von CreateDIBSection zurück geliefert wird.
Das ist ja das schöne daran das ich mir so das suchen der pixels mit GetPixel sparen kann.
Was soll ich nun machen das mir die richtige Anzahl abhängig vom Bild (Bilddimension) zurückgegeben wird?


gruss
  Mit Zitat antworten Zitat
Benutzerbild von isilive
isilive

Registriert seit: 15. Okt 2008
Ort: Österreich
192 Beiträge
 
Delphi 2009 Professional
 
#9

AW: Dynamisches Array Grenze?

  Alt 28. Mär 2012, 22:58
Hab gestern dynamische Arrays gebraucht. Da war Schluss bei 33 Mio. Elementen und einem theoretischen Ramverbrauch von Arraycount x Elementsize(40 Bytes) = 1,3GB. Grösser ging dann nicht mehr. Win7 32bit, kein 3GB Switch aktiviert.
Stefan
Jedoch kann die referenzbasierte Implementierung des Standard-Objektmodells in Kombination mit den komplexen syntaktischen Dereferenzierungsregeln bei einer objektorientierten API wie ein Stolperstein wirken.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#10

AW: Dynamisches Array Grenze?

  Alt 28. Mär 2012, 23:01
Hab gestern dynamische Arrays gebraucht. Da war Schluss bei 33 Mio. Elementen und einem theoretischen Ramverbrauch von Arraycount x Elementsize(40 Bytes) = 1,3GB. Grösser ging dann nicht mehr. Win7 32bit, kein 3GB Switch aktiviert.
Das ist auch nicht mein problem.. Danke schön
Habe ja schon festgestellt woran es liegt CreateDIBSection gibt mir nicht die korrekte anzahl an pixel

gruss
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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