Annonces Google
Serveur IRC
Serveur : irc.portlane.se
Canal : #AmigaNG
Activité du Site

Pages vues depuis 25/07/2007 : 25 294 166

  • Nb. de membres 187
  • Nb. d'articles 1 270
  • Nb. de forums 19
  • Nb. de sujets 20
  • Nb. de critiques 24

Top 10  Statistiques

Index du forum »»  Création-Développement »» Comment capturer un écran en C ?

Comment capturer un écran en C ?#1821

5Contributeur(s)
zzd10hthellierElwoodAmiDARKK-L
3 Modérateur(s)
K-LElwoodcorto
zzd10h zzd10hicon_post
Certes il y a bien la library mais il n'y a plus les includes

par ex le format (style RECTFMT_RGBA n'est dans aucun include)
j'ai tout de même fait
count_pixel = ReadPixelArray(buffer,0,0,profondeur,&monrastport,0,0,largeur,hauteur,RECTFMT_RGBA) ;

et bien entendu j'ai une sortie toute noire avec qq trainées bizarres.


Pour l'exemple D'AmiDark, c'est un fichier qui est mis dans un buffer (via Datatype) il me semble et non pas un Bitmap qui est mis dans un buffer ?

Bref, je n'y comprends rien, je vais suivre le conseil d'Elwood ;-)
zzd10h zzd10hicon_post
J'ai un peu insisté, en utilisant

p96ReadPixelArray((struct RenderInfo *)&renderInfo,0,0,&monrastport,0,0,largeur,hauteur) ;

j'obtiens une image reconnaissable mais toujours mauvaise (que cela soit en utilisant la libDevil ou la libjpg)

libDevil en haut, libJpeg en bas


http://zzd10h.amiga-ng.org/FastView/ScreenCapture_KO.jpg

:paf
thellier thelliericon_post
>ReadPixelArray(buffer,0,0,profondeur,&monrastport,0,0,largeur,hauteur,RECTFMT_R GBA) ;

c'est pas "profondeur" mais "largeur*bits/8" cad la taille en octets d'une ligne du buffer (= combien d'octets pour aller à la ligne suivante)

Voici un exemple avec p96 trouvé sur internet (on y retrouve la même notion de taille-ligne-en-octets)

ri.Memory = buffer;
ri.BytesPerRow = bitmap_get_rowstride(bitmap);
ri.RGBFormat = RGBFB_R8G8B8;

InitRastPort(&trp);
trp.BitMap = bm;

p96ReadPixelArray((struct RenderInfo *)&ri, 0, 0, &trp, 0, 0,Width, Height);

Message édité par : thellier / 12-03-2014 14:13
zzd10h zzd10hicon_post
Merci Alain,
mais j'ai essayé ces 2 trucs... J'ai contacté Alfkill, j'espére...

En tout cas merci pour ta patience.

zzd10h zzd10hicon_post

Joie :-D

http://zzd10h.amiga-ng.org/FastView/ScreenCapture_OK.JPG

J'ai pris la fonction grabWindow() de Qt sur le repo d'Alfkill avec une fonction d'écriture libJpeg trouvée sur Internet et ça marche !!!

Alain ou AmiDark, si ça vous intérésse, je vous envoie l'archive.
Elwood Elwoodicon_post
Cool. Si tu me donnes un source simple (sans MUI et tout le toutim), je peux le mettre dans le futur SDK. ça peut aider de futurs développeurs.
--
Philippe Ferrucci
Avec une Sam460 et AmigaOS 4.1, je suis eco-responsable. Cool !
AmiDARK AmiDARKicon_post
zzd10h : Sympa, oui ça m'intéresse :)
zzd10h zzd10hicon_post
Elwood : je te l'avais déjà envoyé vendredi...

Par contre, ça marche impec pour les écrans 32bits mais c'est décalé en 16bits. Je cherche un peu et je vous envoie ça.

thellier thelliericon_post
OK super que ça marche :-)

Je suis néanmoins étonné qu'on y arrive pas avec readpixelarray & co

Alain
zzd10h zzd10hicon_post
Elwood, Thellier et AmiDark :

Voici les sources de la fonction de capture d'écran (j'ai retiré la libDevil, MUI, etc) :

http://zzd10h.amiga-ng.org/FastView/ScreenCapture.lha

Un fichier RAM:xxx.JPG est créé/remplacé à chaque fois.

Par contre, ça ne marche qu'avec les écrans 32bits.
Avec les 16bits, ça reduplique une partie à droite

http://zzd10h.amiga-ng.org/FastView/ScreenCapture_16bits.jpg

Le problème doit se trouver dans la boucle jpeg_write_scanlines() à la fin...

Si qq'un trouve le pb, merci par avance :-D
Petites Annonces

0 annonce(s) publiée(s)

Consulter

AmigaOS 4.1

Laissez-vous tenter par
AmigaOS 4.1
AmiTheme

AmiTheme