±ÍÇÏ´Â ¼Õ´Ô À̽ʴϴÙ
·Î±×ÀÎ
ȸ¿ø°¡ÀÔ
  
  µ¨¸¶´ç °ø½Ä ÀºÇà°èÁÂ
  ÇϳªÀºÇà 227-910235-83607
  ¿¹±ÝÁÖ ÀÌ»ó±¹(¿î¿µÁø)
ÇÁ·ÎÁ§Æ® °Ô½ÃÆÇ
ÅõÇ¥°Ô½ÃÆÇ
µ¨¸¶´ç¼Ò°³
±âÃʺÎÅÍ È°¿ë±îÁö! µ¨ÆÄÀÌ ±³À° - µ¥ºê±â¾î
°­ÁÂ, ÆÁ, Á¤º¸ °­ÁÂ, ÆÁ, Á¤º¸ ÀÔ´Ï´Ù.
±Û³»¿ë - °­ÁÂ, ÆÁ, Á¤º¸
 ¾ËÆÄä³ÎÀÇ °ªÀ» ÀÒÁö ¾Ê°í TBitmapÀ¸·Î ºÎÅÍ GDI+ TGPBitmapÀ» ¾ò´Â ÇÔ¼ö
¼Ö°³
(Çö½Çȯ)
2017-04-13 ¿ÀÈÄ 9:33:54
Ä«Å×°í¸®: ÆÁ
2605ȸ Á¶È¸



µî·ÏµÈ ÆÄÀÏÀÌ ¾ø½À´Ï´Ù.
±×·¡ÇȠ󸮽àTBitmap À¸·ÎºÎÅÍ GDI+ ¿ëÀÇ TGPBitmapÀ» ¾ò´Â °£´ÜÇÑ
¹æ¹ýÀº ¾Æ·¡¿Í °°´Ù.

  if (Bitmap.PixelFormat in [pf1Bit, pf4Bit, pf8Bit]) then
    GPBitmap := TGPBitmap.Create(Bitmap.Handle, Bmp.Palette)
  else
    GPBitmap := TGPBitmap.Create(Bitmap.Handle, 0);

ÀÌ ¹æ¹ýÀÇ ¹®Á¦´Â TBitmapÀÇ ¾ËÆÄä³Î µ¥ÀÌÅ͸¦ ÀҴ °ÍÀÌ´Ù.
¾Æ·¡ ÇÔ¼ö´Â TBitmapÀÇ ¾ËÆÄä³Î µ¥ÀÌÅ͸¦ ÀÒÁö ¾Ê°í TBitmap À¸·ÎºÎÅÍ 
GDI+ ¿ëÀÇ TGPBitmapÀ» ¾ò´Â´Ù.

// ¾ËÆÄä³ÎÀÇ °ªÀ» ÀÒÁö ¾Ê°í TBitmapÀ¸·Î ºÎÅÍ GDI+ TGPBitmapÀ» ¾ò´Â ÇÔ¼ö
function GetGPBitmap(Bmp: TBitmap): TGPBitmap;
var
  Header: PBitmapV5Header;
  DC: HDC;
  Bits: Pointer;
  hNewBitmap: HBITMAP;
  ldc : HDC;

  R: TGPRect;
  ScanedLines: integer;
  BitmapData: TBitmapData;
  srcbmp : Bitmap;
  srcdib : array of TRGBQUAD;
  srcdibbmap : TBITMAPINFO;
begin
  //Load the source bitmaps information
  if (GetObject(Bmp.Handle, sizeof(srcbmp), @srcbmp) = 0) then
  begin
    result := nil;
    exit;
  end;

  SetLength(srcdib, srcbmp.bmWidth * srcbmp.bmHeight);

  //Load source bits into srcdib
  srcdibbmap.bmiHeader.biSize := sizeof(srcdibbmap.bmiHeader);
  srcdibbmap.bmiHeader.biWidth := srcbmp.bmWidth;
  srcdibbmap.bmiHeader.biHeight := -srcbmp.bmHeight;
  srcdibbmap.bmiHeader.biPlanes := 1;
  srcdibbmap.bmiHeader.biBitCount := 32;
  srcdibbmap.bmiHeader.biCompression := BI_RGB;

  ldc := CreateCompatibleDC(0);
  ScanedLines := GetDIBits(ldc, Bmp.Handle, 0, srcbmp.bmHeight, srcdib, srcdibbmap, DIB_RGB_COLORS);
  DeleteDC(ldc);
  if ScanedLines <> Bmp.Height then
  begin
    result := nil;
    exit;
  end;

  // Create GPBitmap and copy DIB values of source Bitmap
  R := MakeRect(0, 0, Bmp.Width, Bmp.Height);
  
  // 1. BitmapÀÇ DIB value °ªÀ» (º¹»ç°úÁ¤ ¾øÀÌ) ¹Ù·Î ÃëÇϵµ·Ï ÇÒ °æ¿ì
  BitmapData.Width := Bmp.Width;
  BitmapData.Height := Bmp.Height;
  BitmapData.Stride := Bmp.Width * 4;
  BitmapData.Scan0 := @srcdib[0];
  BitmapData.Reserved := 0;
  if Bmp.AlphaFormat = afPremultiplied then
  begin
    BitmapData.PixelFormat := PixelFormat32bppPARGB;
    result := TGPBitmap.Create(Bmp.Width, Bmp.Height, PixelFormat32bppPARGB);
    result.LockBits(R, ImageLockModeWrite or ImageLockModeUserInputBuf, PixelFormat32bppPARGB, BitmapData);
  end else
  begin
    BitmapData.PixelFormat := PixelFormat32bppARGB;
    result := TGPBitmap.Create(Bmp.Width, Bmp.Height, PixelFormat32bppARGB);
    result.LockBits(R, ImageLockModeWrite or ImageLockModeUserInputBuf, PixelFormat32bppARGB, BitmapData);
  end;

  // 2. BitmapÀÇ DIB value °ªÀ» º¹»çÇÏ¿© ³Ñ°Ü ÁÙ °æ¿ì
 { if Bmp.AlphaFormat = afPremultiplied then
  begin
    result := TGPBitmap.Create(Bmp.Width, Bmp.Height, PixelFormat32bppPARGB);
    result.LockBits(R, ImageLockModeWrite, PixelFormat32bppPARGB, BitmapData);
  end else
  begin
    result := TGPBitmap.Create(Bmp.Width, Bmp.Height, PixelFormat32bppARGB);
    result.LockBits(R, ImageLockModeWrite, PixelFormat32bppARGB, BitmapData);
  end;
  CopyMemory(BitmapData.Scan0, @srcdib[0], Bmp.Width * Bmp.Height * 4); }

  result.UnlockBits(BitmapData);
  SetLength(srcdib, 0);
end;