Q&A

  • BMP파일을 16칼라또는256칼라로 변환되면서 저장시킬순없나여?
BMP파일을 16칼라또는256칼라로 변환되면서 저장시킬순없나여?

아니면 16칼라나 256칼라로 바로 프린터로 출력하거나요.....

부탁좀 드릴께요.........

어제도 질문 올렸는데......프린터에 관해서.....ㅜ.ㅡ

그러나 리플은.......항개도.....

제가 너무 어려운것만 질문하나여?ㅜ.ㅡ

1  COMMENTS
  • Profile
    최용일 2002.05.16 00:36
    안녕하세요. 최용일입니다.

    PixelFormat만 바꾸어주시면 여러가지 칼러로 변환됩니다. 물론 만족할 만한 결과를 얻을려면 여러가지 처리를 해주어야 겠지만요...

        Bitmap := TBitmap.Create;
        Bitmap.LoadFromFile('Ctest.bmp');
        Bitmap.PixelFormat := pf4bit; // 16칼라로...
        Bitmap.SaveToFile('C:test16.bmp');
        Bitmap.Free;

    아래와 같이 프린트 해보세요...

    var
        Bitmap: TBitmap;
        Info: PBitmapInfo;
        InfoSize: DWORD;
        Image: Pointer;
        ImageSize: DWORD;
        Bits: HBITMAP;
        DIBWidth, DIBHeight: Longint;
        PrintWidth, PrintHeight: Longint;
    begin
        Printer.BeginDoc;
        try
            Bitmap := TBitmap.Create;
            Bitmap.LoadFromFile('D:ProjectsWebCall(New)Testtest.bmp');
            Bitmap.PixelFormat := pf4bit;
            try
                with Printer do
                begin
                    Bits := Bitmap.Handle;
                    GetDIBSizes(Bits, InfoSize, ImageSize);
                    Info := AllocMem(InfoSize);
                    try
                        Image := AllocMem(ImageSize);
                        try
                            GetDIB(Bits, 0, Info^, Image^);
                            DIBWidth := Info^.bmiHeader.biWidth;
                            DIBHeight := Info^.bmiHeader.biHeight;
                            PrintWidth := MulDiv(DIBWidth, GetDeviceCaps(Handle, LOGPIXELSX), PixelsPerInch);
                            PrintHeight := MulDiv(DIBHeight, GetDeviceCaps(Handle, LOGPIXELSY), PixelsPerInch);
                            StretchDIBits(Canvas.Handle, 0, 0, PrintWidth, PrintHeight, 0, 0,
                            DIBWidth, DIBHeight, Image, Info^, DIB_RGB_COLORS, SRCCOPY);
                        finally
                            FreeMem(Image, ImageSize);
                        end;
                    finally
                        FreeMem(Info, InfoSize);
                  end;
                end;
            finally
                Bitmap.Free;
            end;
        finally
            Printer.EndDoc;
        end;

    end;

    ^^ 항상 즐코하세요...