Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probleme avec des using

Sujet résolu
    5 août 2019 à 13:05:22

    Bonjour je develope depuis peut une aplication en c qui permet de faire des capture d'ecran a distance sur mon serveur windows 10

    j'utilise vnc mais j'avait envie de crée ça par mois même pour l'instant je suis a ce stade j'ai reussi a capturée l'écran et je le sauvegarde dans un fichier ce qui est peut optimisée puis je le réouvre pour le compresser en jpeg j'ai trouver un script qui fait ça dans la doc windows mais il est en C#

    J'aimerait que l'on m'aide a convertir les 

    using System;
    using System.Drawing;
    using System.Drawing.Imaging;

    Car je ne comprent toujours pas comment les transformer en c comme j'avais fait avec les new en c++ pour la capture

    j'ai survolée le cour C# mais rien

    je ne sait pas si c'est possible car le C# semble plutot éloigner du c 

    Merci a tous

    le code  ici

    je poste le code si le lien ne marche plus

    using System;
    using System.Drawing;
    using System.Drawing.Imaging;
    class Example_SetJPEGQuality
    {
        public static void Main()
        {
            Bitmap myBitmap;
            ImageCodecInfo myImageCodecInfo;
            Encoder myEncoder;
            EncoderParameter myEncoderParameter;
            EncoderParameters myEncoderParameters;
                         
            // Create a Bitmap object based on a BMP file.
            myBitmap = new Bitmap("Shapes.bmp");
                         
            // Get an ImageCodecInfo object that represents the JPEG codec.
            myImageCodecInfo = GetEncoderInfo("image/jpeg");
                         
            // Create an Encoder object based on the GUID
                         
            // for the Quality parameter category.
            myEncoder = Encoder.Quality;
                         
            // Create an EncoderParameters object.
                         
            // An EncoderParameters object has an array of EncoderParameter
                         
            // objects. In this case, there is only one
                         
            // EncoderParameter object in the array.
            myEncoderParameters = new EncoderParameters(1);
                         
            // Save the bitmap as a JPEG file with quality level 25.
            myEncoderParameter = new EncoderParameter(myEncoder, 25L);
            myEncoderParameters.Param[0] = myEncoderParameter;
            myBitmap.Save("Shapes025.jpg", myImageCodecInfo, myEncoderParameters);
                         
            // Save the bitmap as a JPEG file with quality level 50.
            myEncoderParameter = new EncoderParameter(myEncoder, 50L);
            myEncoderParameters.Param[0] = myEncoderParameter;
            myBitmap.Save("Shapes050.jpg", myImageCodecInfo, myEncoderParameters);
                         
            // Save the bitmap as a JPEG file with quality level 75.
            myEncoderParameter = new EncoderParameter(myEncoder, 75L);
            myEncoderParameters.Param[0] = myEncoderParameter;
            myBitmap.Save("Shapes075.jpg", myImageCodecInfo, myEncoderParameters);
        }
        private static ImageCodecInfo GetEncoderInfo(String mimeType)
        {
            int j;
            ImageCodecInfo[] encoders;
            encoders = ImageCodecInfo.GetImageEncoders();
            for(j = 0; j < encoders.Length; ++j)
            {
                if(encoders[j].MimeType == mimeType)
                    return encoders[j];
            }
            return null;
        }
    }

    je l'ai compiler avec csc je croit qu'il faut installer visual studio pour la commande mais pas sur

    la commande pour compiler le C# (remplacer file par le nom du fichier)

    C:\windows\Microsoft.NET\Framework\v3.5( "\bin" selon certaines versions)\csc.exe "File".cs

    Je suis sous windows 10 j'utilise codeblock

    Faite le mois savoir si vous êtes intereser par le code

    -
    Edité par AyeinLas 5 août 2019 à 13:07:16

    • Partager sur Facebook
    • Partager sur Twitter
      6 août 2019 à 7:19:39

      Effectivement, c# est très éloigné de C.

      -
      Edité par michelbillaud 6 août 2019 à 7:21:01

      • Partager sur Facebook
      • Partager sur Twitter
        6 août 2019 à 11:26:31

        Faut il que j'aprenne le C# pour comprendre le code ou serait plus judicieux de chercher un autre code ?

        Et sait tu a peut près a quoi correspond le using en c a des include ?

        Y a t'il un rapport avec ça ?

        -
        Edité par AyeinLas 6 août 2019 à 11:37:46

        • Partager sur Facebook
        • Partager sur Twitter
          6 août 2019 à 14:59:42

          Si tu tiens à programmer en c, ce qui serait judicieux, c'est d'avoir une bibliothèque avec des fonctions appelables en c
          • Partager sur Facebook
          • Partager sur Twitter
            6 août 2019 à 15:07:24

            J'ai tenté de traduire ton code C# en C

            // OS: windows 10
            // IDE/CC: Code::Blocks/mingw
            
            #include <windows.h>
            #include <gdiplus.h> //-lgdiplus
            
            int main(void)
            {
              HBITMAP hbitmap = LoadImageW(0, L"Shapes.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
            
              if(hbitmap)
              {
                ULONG_PTR gdiplusToken;
                GdiplusStartupInput gdiplusStartupInput = {1,0,0,0};
                GpStatus status = GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, 0);
            
                if(status == Ok)
                {
                  GpBitmap *bitmap;
                  status = GdipCreateBitmapFromHBITMAP(hbitmap, 0, &bitmap);
            
                  if(status == Ok)
                  {
                    EncoderParameters encoderParams;
            
                    encoderParams.Count = 1;
                    encoderParams.Parameter[0].NumberOfValues = 1;
                    encoderParams.Parameter[0].Guid = EncoderQuality;
                    encoderParams.Parameter[0].Type = EncoderParameterValueTypeLong;
                    CLSID jpg = {0x557cf401,0x1a04,0x11d3,{0x9a,0x73,0,0,0xf8,0x1e,0xf3,0x2e}};
            
                    long quality = 25L;
                    encoderParams.Parameter[0].Value = &quality;
                    GdipSaveImageToFile(bitmap, L"Shapes025.jpg", &jpg, &encoderParams);
                    quality = 50L;
                    encoderParams.Parameter[0].Value = &quality;
                    GdipSaveImageToFile(bitmap, L"Shapes050.jpg", &jpg, &encoderParams);
                    quality = 75L;
                    encoderParams.Parameter[0].Value = &quality;
                    GdipSaveImageToFile(bitmap, L"Shapes075.jpg", &jpg, &encoderParams);
            
                    GdipDisposeImage(bitmap);
                  }
                  GdiplusShutdown(gdiplusToken);
                }
                DeleteObject(hbitmap);
              }
              return 0;
            }

            Ça fonctionne. (Windows only of course)

            • Partager sur Facebook
            • Partager sur Twitter
              6 août 2019 à 15:37:36

              Après quelque bidouille un code fonctionelle qui remplit mes attentes :p

              il fait un screen et le sauvegarde dans un fichier jpg et ont peux ajuster la qualité

              merci infiniment

              #include <stdio.h>
              #include <stdlib.h>
              #include <windows.h>
              #include <gdiplus.h>
              int main ()
              {
                  capt();
                  return 0;
              }
              int capt ()
              {
                  /* Création de la capture d'écran au Format Bitmap */
              
                  /* Variables */
                  LPCTSTR sPath="screen.bmp";
                  BITMAPFILEHEADER m_BitmapFileHeader;
                  PBITMAPINFOHEADER m_pBitmapInfoHeader = '\0';
                  PBITMAPINFO m_pBitmapInfo = '\0';
                  LPBYTE m_pBitmapData = '\0';
              
                  HDC m_hDcBitmap = '\0';
                  HBITMAP hBitmap = '\0';
                  HDC hDcWindow;
                  HWND hWndWindow;
                  int ScreenX=0;
                  int ScreenY=0;
                  int cap=0;
                  char lentree=0;
                  // Création de la structure BITMAPINFO
                  BITMAP Bitmap;
                  WORD Couleur;
                  HANDLE hFichier;
                  DWORD dwTmp;
                  // Récupération du HWND et du HDC du bureau
                  hWndWindow = GetDesktopWindow();
                  hDcWindow= GetWindowDC(hWndWindow);
              
                  // Récupération des dimensions du bureau
                  ScreenX = 1.25*GetDeviceCaps(hDcWindow, HORZRES);
                  ScreenY = 1.25*GetDeviceCaps(hDcWindow, VERTRES);
              
                  // Création d'un contexte mémoire
                  m_hDcBitmap = CreateCompatibleDC(hDcWindow);
                  if (! m_hDcBitmap)
                      return FALSE;
              
                  // Création d'un Bitmap en mémoire ayant les dimensions du bureau
                  hBitmap = CreateCompatibleBitmap(hDcWindow, ScreenX, ScreenY);
                  if (! hBitmap)
                      return FALSE;
              
                  // Sélection du Bitmap dans le contexte mémoire
                  if(! SelectObject(m_hDcBitmap, hBitmap))
                      return FALSE;
              
                  // Copie du contexte écran vers le contexte mémoire
                  if(! BitBlt(m_hDcBitmap, 0, 0, ScreenX, ScreenY, hDcWindow, 0, 0, SRCCOPY))
                      return 0;
              
                  // Récupération de la structure BITMAP
                  if (! GetObject(hBitmap, sizeof(BITMAP), (LPSTR) &Bitmap))
                      return FALSE;
              
                if(hBitmap)
                 {
                ULONG_PTR gdiplusToken;
                 GdiplusStartupInput gdiplusStartupInput = {1,0,0,0};
                 GpStatus status = GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,0);
                  if(status == Ok)
                  {
                  GpBitmap *bitmap;
                  status = GdipCreateBitmapFromHBITMAP(hBitmap, 0, &bitmap);
              
                  if(status == Ok)
                  {
                  EncoderParameters encoderParams;
              
                      encoderParams.Count = 1;
                      encoderParams.Parameter[0].NumberOfValues = 1;
                      encoderParams.Parameter[0].Guid = EncoderQuality;
                      encoderParams.Parameter[0].Type = EncoderParameterValueTypeLong;
                      CLSID jpg = {0x557cf401,0x1a04,0x11d3,{0x9a,0x73,0,0,0xf8,0x1e,0xf3,0x2e}};
              
                      long quality = 25L;
                      encoderParams.Parameter[0].Value = &quality;
                      GdipSaveImageToFile(bitmap, L"Shapes025.jpg", &jpg, &encoderParams);
                      quality = 50L;
                      encoderParams.Parameter[0].Value = &quality;
                      GdipSaveImageToFile(bitmap, L"Shapes050.jpg", &jpg, &encoderParams);
                      quality = 75L;
                      encoderParams.Parameter[0].Value = &quality;
                      GdipSaveImageToFile(bitmap, L"Shapes075.jpg", &jpg, &encoderParams);
              
                      GdipDisposeImage(bitmap);
                  }
                      GdiplusShutdown(gdiplusToken);
                  }
              
                  // Suppression des chaînes
                  free(m_pBitmapInfo);
                  free(m_pBitmapData);
              
                  // Libération de la mémoire
                  DeleteDC(m_hDcBitmap);
                  DeleteObject(hBitmap);
                 }
                  return 0;
              }
              





              -
              Edité par AyeinLas 6 août 2019 à 19:43:17

              • Partager sur Facebook
              • Partager sur Twitter

              Probleme avec des using

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown