[완료]bmp파일 만들려고 하는데 구조체에서 막혀서 질문 드립니다.

mani의 이미지

안녕하세요?

raw data로 bmp 파일을 만들려고 하는데 아래 구조체가 short 2byte x 3개 long 4byte x 2개 해서

14byte가 나와야 되는데.. 디버깅해서 sizeof(BITMAPFILEHEADER) = 16 이라고 나옵니다.

이유를 모르겠습니다 ㅠㅠ

typedef struct tagBITMAPFILEHEADER{

unsigned short bfType;
unsigned long bfSize;
unsigned short bfReserved1;
unsigned short bfReserved2;
unsigned long bfOffBits;

}BITMAPFILEHEADER

ktd2004의 이미지

혹시 다음 문제 아닐까요?

#pragma pack(1)
mani의 이미지

이런것도 알게되어서 좋네요

jekyo의 이미지

예전에 Visual C++ 로 bmp 파일을 읽을 일이 생겨서 저도 구조체를 비슷하게 만들었었는데..

자꾸 에러가 생겨서 메모리 사용을 보니까 mani님과 비슷한 현상이 생기더군요

결국 옆에 있던 동료에게 물어서 원인을 알았는데요..

컴파일러가 읽고 쓰기에 최적화를 위해서 4Byte 단위로 구조체를 만들어 준다네요

구조체 크기가 14Byte면 16Byte로.. 18Byte면 20Byte로 컴파일러가 바꿔줍니다.

한 번 구조체를 18Byte 정도로 바꿔서 실험해보세요.. 정말 20Byte가 되는지..

그런데 어떻게 해결했는지는 기억이 안납니다.. 몇 년 전의 일이라서..

Visual C++를 쓰신다면 MSN을 뒤져보세요.. 동료분도 거기서 찾아내시더군요.

mani의 이미지

GCC를 통해서 컴파일 했는데 아마 같은 현상 같은데 한번 찾아 보고 답글 남겨 놓겠습니다~ 감사합니다

unsouled의 이미지

윗분들이 말씀하신대로 컴파일러가 Byte Alignment를 해서 생기는 문제입니다.

KTD 님 말씀대로 Byte Alignment 단위를 1로 맞추면 해결을 하실 수 있습니다.

Byte Alignment 에 대한 자세한 내용은 구글에서 검색하시면 많은 내용을 볼 수 있습니다.

mani의 이미지

네 찾아보니까 해결점이 나오네요 감사합니다

mani의 이미지

http://ariswear.com/new_blog/312 이 분이 여러가지 해결 방법을 잘 설명 해놓으셨네요.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.