/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
Få bitmap over i en tekststreng.
Fra : Torben Friis


Dato : 05-01-04 16:59

Hej

Jeg skal have et bitmap over i en tekststreng, så jeg har lavet nedenstående
funktion.
Men det tager vildt langtid.. ca. 30 sekunder på et 650kb jpg billede.. Er
der en hurtigere måde?
Håber I kan hjælpe.

var
image:string;
color:tcolor;

bitmap sættes et billede.

setlength(image,bitmap.Height*bitmap.Width*3); // ganges med 3 da color
fylder 3 bytes
for i:=0 to bitmap.Height-1 do
for j:=0 to bitmap.Width-1 do
begin
color:=bitmap.Canvas.Pixels[j,i];
move(color,image[(i*bitmap.Width+j)*3+1],3);
end;



/torben



 
 
Tom-Vidar Nilsen (05-01-2004)
Kommentar
Fra : Tom-Vidar Nilsen


Dato : 05-01-04 17:11

> Jeg skal have et bitmap over i en tekststreng, så jeg har lavet
nedenstående
> funktion.

Kan ikke forestille meg hvorfor du vil det ,

> Men det tager vildt langtid.. ca. 30 sekunder på et 650kb jpg billede.. Er
> der en hurtigere måde?

Prøv med Scanline, da får du tilgang til bitmapen som en array.
Det forutsetter at du vet formatet på bitmapen. Om den er 24 bit, så ligger
det en byte for hver farge.

Prøv med Google, MASSE eksempler.



Torben Friis (06-01-2004)
Kommentar
Fra : Torben Friis


Dato : 06-01-04 17:03

> Kan ikke forestille meg hvorfor du vil det ,

Skal bruges til at integerere billeder i et pdf-dokument.

> Prøv med Scanline, da får du tilgang til bitmapen som en array.

Yeps.. Det hjælp. Fra ca. 35 sekunder til 3 sekunder..

Her er koden, hvis andre skal bruge noget ligende.


var
image:string;
i,j:integer;
P : PByteArray;


image:='';
setlength(image,bitmap.Height*bitmap.Width*3);

for i:=0 to bitmap.Height-1 do
begin
P:=bitmap.ScanLine[i];
for j:=0 to bitmap.Width-1 do
begin
move(P[j*3+2],image[(i*bitmap.Width+j)*3+1],1);
move(P[j*3+1],image[(i*bitmap.Width+j)*3+2],1);
move(P[j*3],image[(i*bitmap.Width+j)*3+3],1);
end;
end;




Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste