GDI+에서 투명처리 및 특정 색을 원하는 색으로 변환


위에가 원본 bitmap 밑이 투명처리와 색 변환을 적용한 CachedBitmap.
자주색은 투명처리, 파란색은 노란색으로 변환.

투명처리 및 색 변화 모두 ImageAttributes 라는 객체에 값을 설정해서 Graphics객체의 DrawImage 등을 호출할때 인자로 넣어주면 된다.


GeSHi © 2004, Nigel McNie



  1. CachedBitmap* MarkTemplate::CreateCachedBitmap( Graphics* g, Color innerColor )


  2.  {


  3.         Bitmap tmpBit( markTp_.GetWidth(), markTp_.GetHeight(), PixelFormat32bppARGB );


  4.         Graphics* pMemGraphics = Graphics::FromImage(&tmpBit);


  5.        


  6.         ColorMap tplToinner;


  7.         tplToinner.oldColor = tplColor_;


  8.         tplToinner.newColor = innerColor;


  9.        


  10.         ImageAttributes imgAttr;


  11.         imgAttr.SetRemapTable(1, &tplToinner,ColorAdjustTypeBitmap);


  12.         imgAttr.SetColorKey(transColor_, transColor_,ColorAdjustTypeBitmap );


  13.        


  14.         pMemGraphics->DrawImage(&markTp_, Rect(0,0,tmpBit.GetWidth(),tmpBit.GetHeight()),


  15.                      0.0,0.0,markTp_.GetWidth(), markTp_.GetHeight(), UnitPixel, &imgAttr, NULL, NULL);


  16.         delete pMemGraphics;


  17.        


  18.         CachedBitmap* ccBit = new CachedBitmap(&tmpBit, g);


  19.         return ccBit;


  20. }

Parsed in 0.057 seconds

코드는 대략 이런 느낌.
주의할 점은 Bitmap->CachedBitmap으로 바꾸면서 위의 내용을 적용할수가 없기때문에 Bitmap -> 변환된 Bitmap -> CachedBitmap 으로 간다. Bitmap의 변환에는 Graphics객체를 따로 생성해서 그려주는 수밖에 없는듯하다.

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다