Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi ActiveX.Image -> Buffer --> TBitmap (https://www.delphipraxis.net/122103-activex-image-buffer-tbitmap.html)

cylor 10. Okt 2008 08:15

Re: ActiveX.Image -> Buffer --> TBitmap
 
Guten Morgen! Nach einer kleinen Korrektur funktioniert es... fast. Vielen Dank!

Delphi-Quellcode:
var
  bmp: TBitmap;
  pBuffer: Pointer;

const
  ueye_ImgWidth  = 1024;
  ueye_ImgHeight = 768;
  ueye_BufferSize = ueye_ImgWidth * ueye_ImgHeight * 1;

procedure TF_Cam.Timer1Timer(Sender: TObject);
begin
   GetMem(pBuffer, ueye_BufferSize);
   try
      uEyeCam1.CopyImage(Cardinal(pBuffer), ueye_BufferSize);
      bmp := TBitmap.Create;
      try
         bmp.Width := ueye_ImgWidth;
         bmp.Height := ueye_ImgHeight;
         bmp.PixelFormat := pf8Bit;

         Move(pBuffer^, bmp.Scanline[bmp.Height-1]^, ueye_BufferSize);

         BitBlt(F_Cam.Canvas.Handle, 0, 0, ueye_ImgWidth, ueye_ImgHeight, bmp.Canvas.Handle, 0, 0, SRCCOPY);
      finally
         bmp.Free;
      end;
   finally
      FreeMem(pBuffer);
   end;
end;
Nur leider stimmt die Palette nicht. Aus dem Grayscale wird ein lustige Ansammlung von Farben. ^^

Klaus01 10. Okt 2008 08:22

Re: ActiveX.Image -> Buffer --> TBitmap
 
Guten Morgen,

schau mal hier: BitMapToGraqyScale

Grüße
Klaus

cylor 10. Okt 2008 08:53

Re: ActiveX.Image -> Buffer --> TBitmap
 
Liste der Anhänge anzeigen (Anzahl: 1)
Da beim JPEG Informationen verloren gehen hab ich das jetzt so gelöst:

Delphi-Quellcode:
type
  TLogPal = record
    lpal : TLogPalette;
    colorSpace : Array[0..255] of TPaletteEntry;
  end;

var
  bmp: TBitmap;
  pBuffer: Pointer;
  pal : TLogPal;
  iCount : integer;

const
  ueye_ImgWidth  = 1024;
  ueye_ImgHeight = 768;
  ueye_BufferSize = ueye_ImgWidth * ueye_ImgHeight * 1;

procedure TF_Cam.Timer1Timer(Sender: TObject);
begin
   // Create a 256 gray-scale palette
   pal.lpal.palVersion:=$300;
   pal.lpal.palNumEntries := 256;
   for iCount := 0 to 255 do
      with pal.lpal.palPalEntry[iCount] do
      begin
         peRed := iCount;
         peGreen := iCount;
         peBlue := iCount;
      end;

   GetMem(pBuffer, ueye_BufferSize);
   try
      uEyeCam1.CopyImage(Cardinal(pBuffer), ueye_BufferSize);
      bmp := TBitmap.Create;
      try
         bmp.Width := ueye_ImgWidth;
         bmp.Height := ueye_ImgHeight;
         bmp.PixelFormat := pf8Bit;

         Move(pBuffer^, bmp.Scanline[bmp.Height-1]^, ueye_BufferSize);
         bmp.Palette := CreatePalette(pal.lpal);
         BitBlt(F_Cam.Canvas.Handle, 0, 0, ueye_ImgWidth, ueye_ImgHeight, bmp.Canvas.Handle, 0, 0, SRCCOPY);
      finally
         bmp.Free;
      end;
   finally
      FreeMem(pBuffer);
   end;
end;
Allerdings kommt dabei folgendes raus.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:30 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz