Q&A

  • bitmap32이미지를 png파일로 save하려면...

안녕하세요.
알파통로를 가지는 bitmap32이미지를 png파일로 save해보신분 계시는지요.
pngimage로는 bitmap만을 로딩할수있고 bitmap32는 안되기에 질문을 올립니다.
감사합니다.

4  COMMENTS
  • Profile
    구창민 2008.10.13 03:38
    안녕하세요..

    아래 링크가 도움이 될거 같네요..

    즐거운 프로그래밍 하세요..

    http://www.efg2.com/Lab/Library/Delphi/Graphics/FileFormatsAndConversion.htm
  • Profile
    steps 2008.10.13 20:13
    창민님 감사합니다.
    음 제가 바라는건 파일 포맷을 바꾸는게 아니구요 graphics32의 tbitmap32를 png포맷으로 save시키는거였습니다.
    일단 tbitmap32를 bitmap으로 넘길수도 있는데요 그렇게하면 알파통로가 없어져서 png로 save시킬 필요가 없어집니다.
    저도 아직 방도를 찾지 못했는데요 아무래도 tpngimage를 가지고 삽질을 해야할것같습니다.
    감사합니다.
  • Profile
    steps 2008.10.13 20:45
    일단 아래 코드로 알파통로는 보장할수있습니다.

    uses ..., GDIPAPI, GDIPOBJ, GDIPUTIL;

    function TmainForm.SaveFileToPng(SaveBmp : TBitMap32; FileName : string):Boolean;
    var
    bmpdata : TBitmapData;
    encoderClsid: TGUID;
    TempGBitmap : TGPbitmap;
    bytes: Cardinal;
    stat : TStatus;
    begin
    result := false;
    SaveBmp.drawmpde := dmblend;
    TempGBitMap := TGPbitMap.Create(SaveBmp.width, SaveBmp.height, PixelFormat32bppARGB);
    TempGBitMap.LockBits(MakeRect(rect(0, 0, SaveBmp.Width-1, SaveBmp.Height-1)),
    ImageLockModeRead, PixelFormat32bppARGB, bmpdata);
    bytes := bmpdata.Stride * bmpdata.Height;
    CopyMemory(bmpdata.Scan0, SaveBmp.Bits, bytes);

    GetEncoderClsid('image/png', encoderClsid);
    stat := TempGBitMap.Save(FileName, encoderClsid, nil);
    if Stat=Ok then result := true;
    end;

    이걸 activex에서 써야 하는데 gdi+를 ocx에서 쓰면 IE가 먹통이 되던데요.
    이전에도 gdi+를 ocx에서 써보려다 못해서 싹 빼버렸는데 gdi+를 activex에서 써보신분 안계신가요?
  • Profile
    steps 2008.10.13 21:09
    구글링해보니 이미 프리서고가 공개되여있군요.
    target="_blank">http://www.geocities.com/gc_timsara/altpe/code/index.html


    앞으로 구글링내공을 더 쌓아야 할듯...