1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
| procedure TForm1.Button1Click(Sender: TObject);
var
// b: TBitmap;
w,h: integer;
begin
// w := 16000; h := 16000; // fichier de 0 byte créé + proc à bloc...
// w := 16640; h := 10; // image noire
// w := 16392; h := 10; // image noire
// w := 16384; h := 8; // image correcte
// w := 16384; h := 12; // image noire
// w := 16384; h := 16; // image noire
// w := 16384; h := 32; // image noire
// w := 16384; h := 64; // image noire
// w := 16384; h := 100; // image noire
// w := 16384; h := 10; // image correcte et noire après tous les essais
// w := 16376; h := 10; // image correcte
// w := 16320; h := 10; // image correcte
// w := 16000; h := 10; // image correcte
// w := 18000; h := 10; // image affichée noire (ok avec viewer et ImageMagick, mais ImageJ meurt silencieusement), alors que le fichier (128000054 octets) est bon
// w := 20000; h := 10; // image correcte mais ne l'est plus 20 minutes plus tard...
// w := 20008; h := 10; // image affichée noire (ok avec viewer et ImageMagick, mais ImageJ meurt silencieusement), alors que le fichier (128000054 octets) est bon
// w := 20040; h := 10; // image affichée noire (ok avec viewer et ImageMagick, mais ImageJ meurt silencieusement), alors que le fichier (128000054 octets) est bon
// w := 20080; h := 10; // image affichée noire (ok avec viewer et ImageMagick, mais ImageJ meurt silencieusement), alors que le fichier (128000054 octets) est bon
// w := 20160; h := 10; // image affichée noire (ok avec viewer et ImageMagick, mais ImageJ meurt silencieusement), alors que le fichier (128000054 octets) est bon
// w := 20240; h := 10; // image affichée noire (ok avec viewer et ImageMagick, mais ImageJ meurt silencieusement), alors que le fichier (128000054 octets) est bon
// w := 20320; h := 10; // image affichée noire (ok avec viewer et ImageMagick, mais ImageJ meurt silencieusement), alors que le fichier (128000054 octets) est bon
// w := 20400; h := 10; // image affichée noire (ok avec viewer et ImageMagick, mais ImageJ meurt silencieusement), alors que le fichier (128000054 octets) est bon
// w := 20460; h := 10; // image affichée noire (ok avec viewer et ImageMagick, mais ImageJ meurt silencieusement), alors que le fichier (128000054 octets) est bon
// w := 20520; h := 10; // image affichée noire (ok avec viewer et ImageMagick, mais ImageJ meurt silencieusement), alors que le fichier (128000054 octets) est bon
// w := 24000; h := 10; // image affichée noire (ok avec viewer et ImageMagick, mais ImageJ meurt silencieusement), alors que le fichier (128000054 octets) est bon
// w := 28000; h := 10; // image affichée noire (ok avec viewer et ImageMagick, mais ImageJ meurt silencieusement), alors que le fichier (128000054 octets) est bon
// w := 30000; h := 10; // image affichée noire (ok avec viewer et ImageMagick, mais ImageJ meurt silencieusement), alors que le fichier (128000054 octets) est bon
// w := 30000; h := 100; // image affichée noire (ok avec viewer et ImageMagick, mais ImageJ meurt silencieusement), alors que le fichier (128000054 octets) est bon
// w := 32000; h := 1000; // image affichée noire (ok avec viewer et ImageMagick, mais ImageJ meurt silencieusement), alors que le fichier (128000054 octets) est bon
// w := 1000; h := 32000; // parfaitement correct
// w := 32000; h := 16000; // fichier de 0 byte créé et c'est tout.
// w := 32000; h := 10000; // fichier de 0 byte créé + proc à bloc + message "out of mem" au bout d'un moment.
//w := 12000; h := 8000; // long à venir mais ça a fonctionné (fic = 384 Mo)
//w := 12300; h := 8200; // long à venir mais ça a fonctionné (fic = 302 Mo, passé en pf24 ! Pourquoi ? 12300 / 8 = 1537,5)
//w := 12320; h := 8200; // long à venir mais ça a fonctionné (fic = 404 Mo, resté en pf32, 12320 / 8 = 1540)
//w := 12296; h := 8200; // long à venir mais ça a fonctionné (fic = 404 Mo, resté en pf32, 12296 / 8 = 1357)
//w := 16000; h := 6000; // long à venir mais ça a fonctionné (fic = 384 Mo)
w := 384; h := 68; // image correcte
b := TBitmap.Create;
// b.PixelFormat := pf32bit; // ne fonctionne pas sur le canvas de la form, faut passer en pf24
b.PixelFormat := pf24bit;
// b.Width:=32768; b.Height:=16384;
// Ludelpho7 post 19 : j'ai lancé un gros 31000x16384 qui a pris du temps, mais qui marche,
//b.Width:=31000; b.Height:=16384; // plante comm' d'hab
//b.Width:=32000; b.Height:=16000; // BM post 26 out of memory
// BM Lazarus 1.6.4 64bits sous windows 10 : max = 32767x16383
// moi ça plante, mais 12287x8191 ça génère un fichier pf32bit de 402 Mo.
b.Width:=w; b.Height:=h;
b.Canvas.Pen.Color:=clLime; // ligne à rajouter
b.Canvas.Brush.Color:=clLime;
b.Canvas.Rectangle(0, 0, w, h);
b.Canvas.Changed; //--> BM Pour que l'enregistrement soit ok
b.SaveToFile('/root/Desktop/test.bmp'); // plante ici
// b.Free; // on relache la mémoire avant le chargement de l'image
Application.ProcessMessages;// jpt, pour que l'affichage redessine le bouton
// Image1.Picture.LoadFromFile('/root/Desktop/test.bmp');
{ tests mm_71 :
16000 * 16000 OK
32000 * 1000 OK
1000 * 32000 Beaucoup plus long à traiter que 32000 * 1000 mais OK
32000 * 16000 Noir ( Pixel vu par GHex: 8A 28 A0 02 )
32000 * 10000 Bordel général ( Image jointe ) et sauvegarde noire.
}
FormPaint(nil);
end; |