Autor Beitrag
Aya
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1964
Erhaltene Danke: 15

MacOSX 10.6.7
Xcode / C++
BeitragVerfasst: Mi 30.10.02 19:44 
Hi,

kann es sein das die größe eines TBitmaps unter Win9x begrenzt ist?!

ich wollte ein TBitmap mit der größe 3508x2480 erstellen, und bekomme jedesmal die meldung "Invalid Parameter"

unter WinNT/2k funktioniert es wunderbar...

Sollte es so sein das es unter Win9x nicht geht... wie groß darf es da maximal sein, oder kann ich es irgendwie umgehen??? (evtl etwas anderes als TBitmap nutzen??)

Au'revoir,
Aya
Popov
Gast
Erhaltene Danke: 1



BeitragVerfasst: Mi 30.10.02 23:08 
Ich bekomme OutOfResorces ... Der Parameter stimmt nicht . Also hab ich zum Testen die Farbtiefe reduziert und hatte dann keine Probleme.

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
var
  Bmp: TBitmap;
begin
  Bmp := TBitmap.Create;
  try
    Bmp.PixelFormat := pf1bit; //<<<<< WICHTIG
    Bmp.Width := 3508;
    Bmp.Height := 2480;
    Canvas.Draw(0, 0, Bmp);
  finally Bmp.Free end;
end;


TrueColor von der Größe verbraucht viel Speicher.
Aya Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1964
Erhaltene Danke: 15

MacOSX 10.6.7
Xcode / C++
BeitragVerfasst: Mi 30.10.02 23:10 
ja, schon... aber nen Druck mit 1Bit Farben is nich so die wucht *ggg*

Das ganze ist ja für einen ausdruck gedacht... ich zeichne etwas auf das Bitmap und kopiere es am ende einmal auf das Printer.Canvas.

Der grund warum ich nicht gleich auf das Canvas vom Printer zeichne ist weil es immer das komplette blatt ausfüllen soll, also ich stretche das Bitmap am ende auf die größe des Printer.PageWidth/Height :)

wenn es da eine bessere methode gibt, ich bin für alles offen... :)

Au'revoir,
Aya

PS: Sofern es geht.. wäre super wenn das bis morgen 17 Uhr geht *gg* Sonst krich ich probleme :)
Popov
Gast
Erhaltene Danke: 1



BeitragVerfasst: Mi 30.10.02 23:29 
Ich glaube nicht, daß die Größe ein Problem ist. Ich würde sagen, daß NT/2k besser mit dem Speicher umgehen können und es geshalb keine Probleme gibt. Das mit der 1Bit Farbtiefe sollte nur zeigen, daß nicht die Größe das Problem ist, sondern der Speicher.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 30.10.02 23:42 
Es liegt unteranderen an den GDI-Ressourcen. Windows98 kann da nicht so viele wie Windown2000. Bei 31xxx ist bei Windows98 schluß.
Popov
Gast
Erhaltene Danke: 1



BeitragVerfasst: Mi 30.10.02 23:44 
Ich hab auch Windows 98.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 30.10.02 23:53 
Popov hat folgendes geschrieben:
Ich hab auch Windows 98.


Schön. Ändert aber nichts an der Tatsache, dass Windows98 nurt eien betsimmte Anzahl an GDI-Ressourcen abkann.
lilalaunebaer
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 01.11.04 22:45 
Moin !
Ich dachte ich schreib hier mal weiter, weil ich genau das gleiche Problem habe.

Nur möchte ich nicht sofort drucken, ich habe einen Generator, der mir beliebig große Bilder (Pixel / dpi) erstellen kann. Nur bekomme ich sogar unter XP auch die "Falscher Parameter"-Meldung, weil die GDI-Res scheinbar schon ab einer Pixelgröße von 4096x4096 nicht reichen.

Gibt es ein anderes Bildobjekt, in das ich zeichnen kann, oder gibt es irgendeine Lösung, mit der ich ne Datei auf der Festplatte anlege und dann in diese das Bild schreibe? Ich kann ja in Delphi nur in das TBitmap-Objekt zeichnen, ohne es visuell zu machen (Mein generator benutzt ein TBitmap-Objekt als Attrib und nimmt die Canvas...)

Oder kann man sonst irgendwie den Speicher ausdehnen ? Ich wills zwar am Ende als Jpeg speichern, aber für nen BMP mit 4000x4000 px ist bei 16Bit ja schon recht groß ...

Hilfe & Thx für ersteres !
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Di 02.11.04 00:18 
Ich würde das ganze in mehrere kleinere Bitmaps aufteilen. Das erhöht zwar den Speicher- und Verwaltungsaufwand, behebt aber einige Probleme mit StretchBlt und anderen API-Funktionen.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Lossy eX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1048
Erhaltene Danke: 4



BeitragVerfasst: Di 02.11.04 20:10 
Ein TBitmap versucht sich standardmäßig als DDB (Device Depended Bitmap)(geräteabhängig) im Speicher abzulegen. Das ist ein Grafikkarten optimiertes Format welches auf 2D beschleunigten Karten einen ganz satten Geschwindigkeitsschub bringen kann. Je nach Aktion sogar bis zu Faktor 100. Es ist dafür aber an anderen Stellen ein wenig langsamer.

Folgender Code funktioniert unter XP nicht.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
var
  Bmp: TBitmap;
begin
  Bmp := TBitmap.Create;
  try
    Bmp.Width := 8192;
    Bmp.Height := 8192;
  finally
    Bmp.Free;
  end;
end;



Folgender Code funktioniert aber!
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
var
  Bmp: TBitmap;
begin
  Bmp := TBitmap.Create;
  try
    // Wichtig! Es muss vor der Größenzuweisung stehen.
    Bmp.HandleType := bmDIB;

    Bmp.Width := 8192;
    Bmp.Height := 8192;
  finally
    Bmp.Free;
  end;
end;


Mit der Eigenschaft HandleType kann man expliziet auf DIB (Device Independend Bitmap)(geräteunabhängig) umstellen. Dadurch benutzt man ein reines Speicherbitmap. Ein DIB schlägt sich auch direkt in den Speicher der Anwendung nieder wogegen man ein DDB nicht an einer Speicherveränderung fest machen kann. (Taskmanager)

@Popov: Durch das setzen eines Pixelformates (außer pfDevice) wird automatisch auf DIB umgestellt. Was auch den Effekt erklären würde warum es dann ging. Es müsste eigentlich auch mit 32Bit gehen.

_________________
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.