Exacte. Graphic32 est pas mal du tout aussi comme bibliothèque malheureusement elle n'est pas totalement compatible avec Lazarus
Utilisé les bibliothèques reconnues j'y ai pensé mais je ne veux pas trop dépendances externe j'ai déja Freetype2, OpenAL, VorbisOgg, mpg123 c'est déja pas mal
Tiens un truc qui va te faire rigolé Jipete Juste un truc avec ton FondRVB.Bmp qui s'affiche mal Avec mon test à l'arrache :
Résultat = Affichage Natif 0 , Affichage de la copie du Bitmap 1
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101 Unit Unit1; {$mode objfpc}{$H+} Interface Uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls, StdCtrls, ExtDlgs; Type { TForm1 } TForm1 = Class(TForm) Button1: TButton; Button2: TButton; Image1: TImage; Image2: TImage; OPD: TOpenPictureDialog; Procedure Button1Click(Sender: TObject); Procedure Button2Click(Sender: TObject); Procedure FormDestroy(Sender: TObject); private public SrcBmp, DstBmp : TBitmap; End; Var Form1: TForm1; Implementation {$R *.lfm} { TForm1 } Procedure TForm1.FormDestroy(Sender: TObject); Begin FreeAndNil(SrcBmp); //FreeAndNil(DstBmp); end; Procedure TForm1.Button1Click(Sender: TObject); Begin if OPD.Execute then begin if not(Assigned(SrcBmp)) then SrcBmp := TBitmap.Create; SrcBmp.LoadFromFile(OPD.FileName); ShowMessage(SrcBmp.RawImage.Description.AsString); Image1.Picture.Bitmap.Assign(SrcBmp); End; end; Procedure TForm1.Button2Click(Sender: TObject); Var i, x,y : Integer; SrcPtr, DstPtr : PByte; Begin DstBmp := TBitmap.Create; //DstBmp.PixelFormat := pf24bit; DstBmp.Width := SrcBmp.Width; DstBmp.Height := SrcBmp.Height; //if dstBmp.PixelFormat = pf24Bit then ShowMessage('pf24bit'); //if dstBmp.PixelFormat = pf32bit then ShowMessage('pf32bit'); ShowMessage(DstBmp.RawImage.Description.AsString); //DstBmp.RawImage.Description.init_BPP24_R8G8B8_BIO_TTB(SrcBmp.Width,SrcBmp.Height); //Init_BPP24_B8G8R8_BIO_TTB(SrcBmp.Width,SrcBmp.Height); //ShowMessage(DstBmp.RawImage.Description.AsString); For y := 0 to SrcBmp.Height-1 do begin SrcPtr := SrcBmp.RawImage.GetLineStart(y); DstPtr := DstBmp.RawImage.GetLineStart(y); For x:=0 to SrcBmp.Width-1 do begin For i:=0 to 2 do Begin DstPtr^ := SrcPtr^; Inc(SrcPtr); Inc(DstPtr); End; if (DstBmp.RawImage.Description.BitsPerPixel = 32) then begin if (SrcBmp.RawImage.Description.BitsPerPixel = 32) then begin DstPtr^ := SrcPtr^; inc(SrcPtr); end; Inc(DstPtr); end; End; End; Image2.Picture.Bitmap.Assign(DstBmp); FreeAndNil(DstBmp); end; End.
Partager