Q&A

  • 1비트 BMP그림 파일의 픽셀정보를 어떻게 불러오나요?
안녕하세요~
1비트로 구성된 bmp 파일을 1 픽셀씩 읽어면
그값이 0 이나 1로 표시 되지 않나요?

제가 잘못 읽어서 그런지 0,34 ,244, 255 ...
등으로 읽어집니다.

제가 궁극적으로 하고자 하는 것은 1픽셀씩 읽어와
8픽셀이 모이면 이를 1byte  합칠려고 하는 것입니다.

아래와 같이 읽었는데 잘못 읽은 부분이 있으면 지적 부탁 드립니다.

======== 아 래 ================

var
Image : Pointer;
PixelData : pByte;

Bmp:= TBitmap.Create;
bmp.LoadFromFile('test.bmp');
bmp.pixelformat:=pf1bit;
for j:=0 to bmp.height -1 do begin
   PixelData:=bmp.ScanLine[j];
   for i:=0 to bmp.width-1 do begin
      Image[i,j]:=PixelData^;
      inc(PixelData);
   end;
end;
==============================

참 그리고 두번째 질문이 있습니다.
1 픽셀씩 읽은 픽셀 data를 8 픽셀를 묶어 1byte로 표시 할려면 비트
연산을 해야 하나요?
어떻게 구현 하는지도 답변 부탁 드릴께요

그러 수고 하세요.  ^.~
4  COMMENTS
  • Profile
    최용일 2005.07.08 02:19
    안녕하세요. 최용일입니다.

    1비트 비트맵이라면 한 픽셀씩 읽음 당연히 0아니면 1로만 표시됩니다.

    하지만 1비트 비트맵이라고 해서 한픽셀당 한바이트를 차지하는게 아니라 8픽셀당 한바이트를 차지합니다.

    Image[i,j]:=PixelData^;

    위부분은 한 픽셀을 읽은게 아니라 8픽셀을 읽은겁니다.

    1픽셀씩 읽어와서 8픽셀을 한 바이트로 만들어줄 필요는 없을거 같은데요...

    1 바이트당 8픽셀로 되어 있는것을 1픽셀씩 읽어와서 8픽셀을 다시 1바이트로 만든다는게..
    좀 무의미한 일이 아닐런지...

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

  • Profile
    아러브델파이 2005.07.08 06:34
    안녕하세요. 답변 감사 드립니다 .
    궁금한게 있어서 다시 질문드립니다.

    - Image[i,j]:=PixelData^;
    이부부이 8픽셀을 읽어온다면.
    두번째 for 문이 다음과 같이 바뀌어야 되는것이
    맞는지요? (for 문의 to 이하 부분에 맞는지가 의문입니다)

    for i:=0 to (bmp.width div 8)-1 do begin
    end;

    그리고
    PixelData^;의 리턴값의 의미가 궁금합니다.
    byte 값인지 ? , RGB의 G값인지?

    감사합니다. 수고하세요.^^;

      


  • Profile
    최용일 2005.07.08 11:06
    안녕하세요. 최용일입니다.

    for문은 바뀌어야 되는게 맞지만.... 적으신 for문은 8의 배수로 나누어 떨어지지 않은부분은 짤리게 됩니다.

    for i:=0 to ((bmp.width + 7) div 8) - 1 do

    PixelData가 Byte의 포인터형(PByte)이니까... PixelData^는 바이트형입니다. 8픽셀의 흑백 정보가 있는

    1비트짜리 흑백비트맵이니까 RGB하곤 상관이 없네요... BW라고 해야되나.....

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

  • Profile
    • 허버벅
    • 2005.07.11 18:51
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 정찬희
      2005.07.13 01:10
      Char * 은 PChar로 WORD는 똑같습니다...
    • 이길용
    • 2005.07.10 22:27
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2005.07.13 22:34
      안녕하세요. 최용일입니다. 제가 이쪽을 한지 오래되서 틀릴지도 모르겠는데... ShellFolder.GetUIOb...
    • 이길용
      2005.07.15 11:48
      먼저 답변 주셔서 감사하구요. 그런데 한폴더 내에 있는 파일들은 물론 그렇게 하면 메뉴가 나오는 건 알...
    • kivalan
    • 2005.07.09 19:30
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 최순경
    • 2005.07.09 10:52
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 권태훈
      2005.07.09 19:29
      float 연산에서 값이 정확하게 들어갈것이라고 생각했다간 큰코다침... 48.0 들어갈 자리에 47.99999696...
    • Galaxy
    • 2005.07.09 01:05
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 모영철
      2005.07.09 03:48
      먼저  if (Panel5.Controls[i] is TEdit) then 이문장이 True인데. (Panel5.Controls[i] as ...
    • Galaxy
      2005.07.12 20:35
      안녕하세요 수고 많습니다. DevLabelp[Ei4] .Top:=(Panel5.Controls[i] as TEdit).Top;   ...
    • 정대상
    • 2005.07.09 00:10
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 민스맘
      2005.07.09 02:40
      자료실에 찾아보시면 LoadFromFile, SaveToFile이 지원되는 그리드가 있을겁니다. AdvStringGrid 머 그...
    • 장봉태
    • 2005.07.08 23:29
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 민스맘
      2005.07.09 02:41
      Try    db.Connected := True; Except    Application.Terminate; end; ...
    • 장봉태
      2005.07.09 22:15
      그렇게하면 바로 Except 처리가 되면 좋은데 ODBC설정을 바꾸지 않으면 위의 메세지 CWBSY0002 가 나와...
    • 최동열
    • 2005.07.08 19:39
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2005.07.09 00:45
      안녕하세요. 최용일입니다. 어떤 폰트를 말씀하시는 건지... IDE의 Editor에서 사용하는 폰트는 Tool...
    • 이송미
    • 2005.07.08 07:14
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 황준동
      2005.07.15 23:32
      ^^; 물어보신건 아무 델파이 책에나 다 나오는 부분인데요... ^^; 글구 Insert, Update, Delete 등...
    • 배정은
    • 2005.07.08 05:20
    • 1 COMMENTS
    • /
    • 0 LIKES
    • nilriri™
      2005.07.08 07:13
      테스트는 해보셨나요? SELECT * FROM table1 WHERE field4 like '*html*'; 액세스에서 직접 테스트...
    • 조혜진
    • 2005.07.08 03:46
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 민스맘
      2005.07.09 02:43
      그게 일반 쿼리로는 안되구 다른 컴포넌트를 사용해야 하는 걸로 알고 있어요 StoredProc 이거던...
    • 조혜진
      2005.07.11 18:34
      음.... MS SQL 의 경우 QUERY 콤포넌트에서 SP_TEST 를 아래의 코딩처럼 CALL 해서 사용할 수 있습니다. ...
    • 최용일
      2005.07.08 02:19
      안녕하세요. 최용일입니다. 1비트 비트맵이라면 한 픽셀씩 읽음 당연히 0아니면 1로만 표시됩니다. ...
    • 아러브델파이
      2005.07.08 06:34
      안녕하세요. 답변 감사 드립니다 . 궁금한게 있어서 다시 질문드립니다. - Image[i,j]:=PixelData^; ...
    • 최용일
      2005.07.08 11:06
      안녕하세요. 최용일입니다. for문은 바뀌어야 되는게 맞지만.... 적으신 for문은 8의 배수로 나누어 떨...
    • 아러브델파이
      2005.07.08 18:02
    • 최용일
      2005.07.07 22:17
      안녕하세요. 최용일입니다. 리치에디트에서 LoadFromFile로 파일열때 fmOpenRead or fmShareDenyWrite로...
    • 온스
      2005.07.07 22:34
      감사합니다.
    • 모영철
      2005.07.07 20:29
      FieldByName이 문제 아닐까요.. Output 파라미터도 파라미터니깐 parambyname으로 하시면 되지 않을까.....
    • 조혜진
      2005.07.07 20:57
      음.... ALTER PROCEDURE SP_TEST (     PC_SEQ_NO CHAR(6)) RETURNS (  &...
    • 물총새
    • 2005.07.07 03:45
    • 3 COMMENTS
    • /
    • 0 LIKES
    • nilriri™
      2005.07.07 08:14
      현재 시스템이 키보드 입력이나 마우스 조작이 없으면 특정프로그램을 대기상태로 전환하거나 종료시키기위...
    • 물총새
      2005.07.07 20:07
      ================================================================== 우선 답변 고맙습니다. 말씀하...
    • nilriri™
      2005.07.08 07:01
      소스 내용을 보시면.. 마우스 이벤트를 훅킹하는 함수부분이 있습니다.. 여기에서 GRest; 이라는...
    • 메니아
    • 2005.07.06 23:09
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 조혜진
    • 2005.07.06 17:50
    • 5 COMMENTS
    • /
    • 0 LIKES
    • 황준동
      2005.07.15 23:39
      스토어드 프로시져를 사용하는 이유는요. 별거 없습니다. 연산을 위해 많은 데이터를 클라이언트로 ...
    • 권태훈
      2005.07.07 01:12
      간단하게 생각하시면 됩니다. 두가지 기준으로 스토어드 프로시져를 사용합니다. 1.같은 sql 문장이 ...
    • 모영철
      2005.07.06 17:57
      그렇죠. 서버가 좀 무거워 지겠죠.. 하지만 미리 컴파일을 해놨기때문에 속도는 훨씬 빠릅니다. 스토...
    • 조혜진
      2005.07.06 18:22
      sql상의 컴파일된 프로시저와 stored proc 콤포넌트에 올려서 사용하는 경우의 차이점이 어케 되는지요 ? ...
    • 다트25
      2005.07.06 19:04
      sql에서 storedprocedure 는 compile 이라기보다 parcing 이 아닌가요? 죄송합니다. 질문인지 답변인지 ...
    • 물총새
    • 2005.07.06 03:27
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 하얀까마귀
      2005.07.06 03:53
      안녕하세요 하얀까마귀 입니다. 정확히 뭐가 문제가 되는지 잘 모르겟군요.. 아래와 같이 검색해서 ...
    • 물총새
      2005.07.07 20:14
           For K := MDIChildCount - 1 DownTo 0 Do Begin      ...