Précédent   Forum des professionnels en informatique > Autres langages > Pascal > Lazarus
Lazarus Forum d'entraide sur Lazarus, l'EDI RAD multiplateforme basé sur Free Pascal
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/01/2012, 17h03   #1
Membre Expert
 
Avatar de Jon Shannow
 
Homme
Responsable de service informatique
Inscription : avril 2011
Messages : 786
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : avril 2011
Messages : 786
Points : 1 030
Points : 1 030
Par défaut TBitMap et Scanline

Bonjour,

Je transcris en Lazarus un composant Delphi que j'utilise sans problème et que je n'ai pas écrit, je l'avoue !

Dans le code du composant Delphi, il y a ces lignes...
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
for y:=0 to d.Height-1 do
  begin
  l:=c.ScanLine[y];
  t:=d.ScanLine[y];
  for x:=0 to d.Width-1 do
    if not ((l^[x*3+2]=255) and (l^[x*3+1]=0) and (l^[x*3]=0) and
           (t^[x*3+2]=0) and (t^[x*3+1]=0) and (t^[x*3]=255)) then
      begin
      if Result=0 then
        Result:=CreateRectRgn(x,y,x+1,y+1)
      else
        begin
        r:=CreateRectRgn(x,y,x+1,y+1);
        CombineRgn(Result,Result,r,RGN_OR);
        DeleteObject(r);
        end;
      end;
  end;
c et d sont des TBitMap
l et t sont des PBtyteArray;

Hélas, je viens de découvrir que ScanLine n'existe pas dans Lazarus !

Comme je suis une bille de première en graphisme, j'ai beau chercher, je ne vois pas comment traduire ces quelques lignes !

Est-ce que quelqu'un peut m'aider ?

Merci d'avance

JS
Jon Shannow est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 17h41   #2
Expert Confirmé Sénior
 
Avatar de Paul TOTH
 
Homme Paul TOTH
Freelance
Inscription : novembre 2002
Messages : 3 411
Détails du profil
Informations personnelles :
Nom : Homme Paul TOTH
Âge : 42
Localisation : Réunion

Informations professionnelles :
Activité : Freelance
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2002
Messages : 3 411
Points : 6 705
Points : 6 705
TBitmap.RawImage.Data^
__________________
Developpez.com: Mes articles
Entreprise: Execute SARL
Produits : UPnP, RemoteOffice sous Delphi
Embarcadero : Ile de la Réunion, Dephi, C++Builder, RADPHP...TVA à 8,5%
Paul TOTH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 18h14   #3
Membre Expert
 
Avatar de Jon Shannow
 
Homme
Responsable de service informatique
Inscription : avril 2011
Messages : 786
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : avril 2011
Messages : 786
Points : 1 030
Points : 1 030
Dois-je en conclure que RawData remplace ScanLine ? Et que je peux remplacer
par

Code :
l := d.RawImage.Data^[y]
?
Jon Shannow est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2012, 12h27   #4
Expert Confirmé Sénior
 
Avatar de Paul TOTH
 
Homme Paul TOTH
Freelance
Inscription : novembre 2002
Messages : 3 411
Détails du profil
Informations personnelles :
Nom : Homme Paul TOTH
Âge : 42
Localisation : Réunion

Informations professionnelles :
Activité : Freelance
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2002
Messages : 3 411
Points : 6 705
Points : 6 705
pas exactement, j'avais vu ça il y a longtemps

RawImage.Data est un pointeur vers le tableaux de tous les pixels.

sans avoir testé je pense qu'il faut faire ceci
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
var
  LineWidth: Intege;
  ScanLine: PByte;
begin
  LineWidth := Bitmap.Description.BytesPerLine;
  ScanLine := Bitmap.RawImage.Data; // première ligne
  for i := 0 to Bitmap.Height - 1 do
  begin
    ...traitement du scanline...
    Inc(ScanLine, LineWidth); // ligne suivante
  end;
end;
mais il est possible que l'ordre des lignes soit inversé, je ne sais pas dans quel sens le RawBitmap est stocké, ni si cet ordre est dépendant de l'OS (les Bitmap Windows ont la tête en bas)
__________________
Developpez.com: Mes articles
Entreprise: Execute SARL
Produits : UPnP, RemoteOffice sous Delphi
Embarcadero : Ile de la Réunion, Dephi, C++Builder, RADPHP...TVA à 8,5%
Paul TOTH est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 11/01/2012, 16h21   #5
Membre Expert
 
Avatar de Jon Shannow
 
Homme
Responsable de service informatique
Inscription : avril 2011
Messages : 786
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : avril 2011
Messages : 786
Points : 1 030
Points : 1 030
Merci, je m'en suis sorti !
Jon Shannow est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h27.


 
 
 
 
Partenaires

Hébergement Web