Q&A

  • bmp파일 읽어들이고 저장하기..
bitmap 파일을 읽어 들여서 저장하는 방법에 대해 알고 싶습니다..

헤더와 팔레트,데이터를 읽어 들여 이 정보를 통해 화면에 뿌려주는 방식을 알고 싶습니다.

기존에 프로그래밍 해 보신 분이나..

좋은 의견있으신 분들 꼭 도와 주세요..

어떻게 시작해야 할지를 몰라서요..

그리고..

bitmap 구조에 대해 잘 아시는 분 자료 좀 보내 주십시요..

메일만 기다리고 있겠습니다..







1  COMMENTS
  • Profile
    jinifan 1999.09.13 11:54
    안녕 하세요? 지니팬입니다.



    여기 BMP구조와 예제 하나 써넣을께요...

    BMP 구조는 강의실에서 이정욱님의 강좌가 있는데 링크가 않되네요(...?...)



    그럼 즐거운 코딩 되세요...



    지니 팬이었습니다...



    반전처리 예제...

    unit Unit1;

    interface

    uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    StdCtrls, ExtCtrls;

    type

    TForm1 = class(TForm)

    Image1: TImage;

    Button1: TButton;

    procedure Button1Click(Sender: TObject);

    end;

    var

    Form1: TForm1;

    implementation

    {$R *.DFM}



    procedure jinifanInvert(User: TImage);

    var

    X, Y, K, U :Integer;

    ChangeTemp, OriginTemp: PByte;

    Color:array [0..2] of Byte;

    IInfoSizeTemp, IImageSizeTemp: Dword;

    BiTemp: PBitmapInfo;

    begin

    User.Picture.Bitmap.PixelFormat:= pf24bit;

    //비트맵값 얻기...

    GetDibSizes(User.Picture.Bitmap.Handle, IInfoSizeTemp, IImageSizeTemp);

    GetMem(BiTemp, IInfoSizeTemp);

    GetMem(OriginTemp, IImageSizeTemp);

    GetMem(ChangeTemp, IImageSizeTemp);

    GetDIB(User.Picture.Bitmap.Handle, User.Picture.Bitmap.Palette, BiTemp^, OriginTemp^);

    //이미지 데이터 변환부분...

    //이부분을 응용하시면 아주 빠른 이미지 프로세싱 결과값을 얻으실 수 있습니다....

    for Y:= 0 to BiTemp^.BmiHeader.BiHeight-1 do begin

    for X:= 0 to BiTemp^.BmiHeader.BiWidth-1 do begin

    for K:=0 to 2 do begin

    Color[K]:= OriginTemp^;

    Inc(OriginTemp);

    end;

    for U:=0 to 2 do begin

    ChangeTemp^:= 255 - Color[U];

    Inc(ChangeTemp);

    end;

    end;

    end;



    Dec(OriginTemp, BiTemp^.BmiHeader.BiHeight * BiTemp^.BmiHeader.BiWidth * 3);

    Dec(ChangeTemp, BiTemp^.BmiHeader.BiHeight * BiTemp^.BmiHeader.BiWidth * 3);

    //비트맵값 넣기...

    SetDIBits(User.Canvas.Handle, User.Picture.Bitmap.Handle, 0,

    BiTemp^.BmiHeader.BiHeight, ChangeTemp, BiTemp^, DIB_RGB_COLORS);

    FreeMem(OriginTemp);

    FreeMem(ChangeTemp);

    User.Refresh;

    end;



    procedure TForm1.Button1Click(Sender: TObject);

    begin

    //만약에 이미지에 BMP 화일을 로드한상태라면...

    jinifanInvert(Image1);

    end;



    end.



    비트맵 구조



    1.비트맵 파일 헤더 (Bitmap File Header)

    2.비트맵 인포헤더 (Bitmap Info Header)

    3.팔레트 (Pallette)

    4.이미지 데이터



    파일 헤더 선언부

    typedef struct tagBITMAPFILEHEADER {

    WORD bfType; //BM 이라고 써있으면 bmp

    DWORD bfSize; //이미지 크기

    WORD bfReserved1;

    WORD bfReserved2;

    DWORD bfOffBits; //이미지 데이터가 있는 곳의 포인터

    } BITMAPFILEHEADER

    인포헤더 선업부

    typedef struct tagBITMAPINFOHEADER{

    DWORD biSize; //현 구조체의 크기

    LONG biWidth; //이미지의 가로 크기

    LONG biHeight; //이미지의 세로 크기

    WORD biPlanes; //플레인수

    WORD biBitCount //비트 수

    DWORD biCompression; //압축 유무

    DWORD biSizeImage; //이미지 크기

    LONG biXPelsPerMeter; //미터당 가로 픽셀

    LONG biYPelsPerMeter; //미터당 세로 픽셀

    DWORD biClrUsed; //컬러 사용 유무

    DWORD biClrImportant; //중요하게 사용하는 색

    } BITMAPINFOHEADER;

    • ysol
    • 1999.09.13 09:28
    • 1 COMMENTS
    • /
    • 1 LIKES
    • jinifan
      1999.09.13 11:54
      안녕 하세요? 지니팬입니다. 여기 BMP구조와 예제 하나 써넣을께요... BMP 구조는 강의실에서 이정욱님...
    • 이재식
      1999.09.13 19:38
      잘 보았습니다. 대충 무슨이야기인지는 알겠는데, 여전히 의구심만 나는 글이네요. 저에게 한번 소스를 ...
    • 김영애
    • 1999.09.13 05:58
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 권경부
      1999.09.13 09:39
      김영애 wrote: > 안녕하세요!! > 지금 어떤 프로그램(?)을 하고 있는데요... > > 전화번호 필드를 mas...
    • 박홍석
      1999.09.13 08:17
      김영애 wrote: > 안녕하세요!! > 지금 어떤 프로그램(?)을 하고 있는데요... > > 전화번호 필드를 mas...
    • 김지엽
    • 1999.09.13 05:23
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 돌팔이
      1999.09.15 05:39
      김지엽 wrote: > 늘 질문만 올려서 죄송하기 그지 없는 델파이 초보입니다. > (저도 왠만큼 배우고 나면...
    • 임성룡
    • 1999.09.12 08:16
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 문승진
      1999.09.13 23:34
      임성룡 wrote: > 1. dbgrid에서 post를 하고 다운이 되어도 세이브가 되는게 > dbisavechanges(table1...
    • 신인재
      1999.09.13 00:57
      임성룡 wrote: > 1. dbgrid에서 post를 하고 다운이 되어도 세이브가 되는게 > dbisavechanges(table1...
    • Lyle
    • 1999.09.12 05:53
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 안치봉
      1999.09.12 10:03
      도움이 될지는 모르겠으나... 일단은 이렇게 하면 되지 않을까 합니다. (99.9% 이론상으로.... -.-;;) ...
    • Lyle
      1999.09.12 10:49
      안치봉 께서 말씀하시기를... > 도움이 될지는 모르겠으나... 일단은 이렇게 하면 되지 않을까 합니다. >...
    • 안치봉
      1999.09.12 18:23
      궁극적으로 무엇을 구현할려고 하시려는지 잘은 모르겠으나....-.-;; 간단히 숫자의 위치를 바꾼다고 숫...
    • 지영근
      1999.09.12 05:50
      HUNIGA 께서 말씀하시기를... > 데이타베이스에 저장된 날짜필드와 MASKEDIT에 입력한 값을 비교하여 > ...
    • 경동욱
    • 1999.09.12 04:00
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김영대
      1999.09.13 17:24
      경동욱 wrote: > 안녕하세요 > FTP server 프로그램을 만들려고 하는데 > server 와 client 간의 접속...
    • 강성만
    • 1999.09.12 02:18
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 문성준
      1999.09.13 22:19
      강성만 wrote: > 안녕하세요 > MS-SQL7.0과 델파이4.0을 사용 중입니다. > 인스톨 쉴드를 만들어서 프로...
    • 이정욱
      1999.09.13 12:22
      혹시 Alias 설정을 하지 않으신것 아닌지 모르겠네요. 드라이버들은 설치 되었어도 알리아스가 없어서 DB...
    • 노상균
    • 1999.09.12 02:15
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이재식
      1999.09.12 06:04
      로직이 잘못됐습니다. 귀하께서 입력과 수정을 동시에 생각하는 루틴입니까?, 아니면 입력만을 생각한 루...
    • 이우영
    • 1999.09.12 00:23
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김영대
      1999.09.13 17:28
      안녕하세요 이우영님... 제가 저번주 내내 휴가여서 이제야 글을 보았습니다 제 홈페이지의 "NT 프로세...
    • 홍효선
    • 1999.09.11 20:54
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 안치봉
      1999.09.12 10:10
      너무질문이 막현합니다. 좀더 자세히 써주시면 좀더 명쾌한 답변이 있을것 같지 않습니까?. -.-;;(적어도 ...
    • 이재식
      1999.09.11 21:41
      그건 당연합니다. 이유는 char타입의 특성때문에 그래요. 즉, char(8)인데 막상 데이터는 aaa이면 델파...
    • jerry
    • 1999.09.11 20:40
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 지영근
      1999.09.11 21:09
      jerry 께서 말씀하시기를... > 레코드를 삽입할때 마다 그 뒤에 있는 레코드의 일련번호들이 하나씩 증가 ...
    • 홍순용
      1999.09.13 21:45
      김지혜 wrote: > 델파이 초보입니다. 레코드는 하나씩 없어지긴하는데 모든 레코드를 한꺼번에 없애는 방...
    • 지영근
      1999.09.11 20:55
      김지혜 께서 말씀하시기를... > 델파이 초보입니다. 레코드는 하나씩 없어지긴하는데 모든 레코드를 한꺼...
    • 김영대
      1999.09.13 17:30
      최은석 wrote: > 디비그리드에 메모필드를 가진 테이블을 연결했는데 > 그리드에 있는 메모필드의 내용을...