C언어 bmp파일 입출력에 관해 질문 드립니다.

bjs026의 이미지

bmp 파일을 binary로 읽어서 2차원배열에 넣은뒤 다시 2차원배열에 있는 bit를 bmp파일로 쓰는 프로그램입니다.

일단 동적할당 부분까지는 확인했는데

fwrite부분에서 계속 오류가 나네요 ㅜㅜ..

어떠한 오류인지 영 알수가 없어서 올립니다 ㅜㅜ

해결방법 아시는분 계시나요 ~?

#include <stdio.h>
#include <windows.h>
BITMAPFILEHEADER hf;
BITMAPINFO hin;
#define IMSI ((hf.bfSize)-sizeof(BITMAPFILEHEADER)-sizeof(BITMAPINFOHEADER))
//bf.SIze 비트맵파일의 사이즈를 불러옴
//실제 데이터 rgb가 남고 이 갯수를 이미지사이즈로 지정.
FILE *fp;
FILE *ft;
 
void main()
{
	// 배열로 선언할수있는 한계가 지정되있다 . 
	//보통 비트맵에서는 몇천만개넘어감으로 배열을 사용할 수 없다. 
	//큰 파일의 경우 포인터를 사용하여 변수지정. 
	//malloc 메모리를 잡아서 변수처럼 사용한다. 
	// data= (char*)malloc(sizeof(char)*IMSI)  -> IMSI가 얼마나 메모리 지정할지 정한다.
	char **data; //data의 변수에 하나하나씩 데이터를 집어넣는다.
	int i,k,temp;
 
	fopen_s(&ft, "white.bmp", "rb"); //fopen 파일을 연다. rb 바이너리를 읽음
	fopen_s(&fp, "result.bmp", "wb"); //쓰는 파일.
	fread(&hf, 1, sizeof(BITMAPFILEHEADER), ft); //fread 파일을 읽음. 
	//1. 어느변수에 저장하겠는가. 2 . 몇개단위로 읽을 것인가. 3 얼만큼? 헤더사이즈만큼. 4. 어디서? ft에서
	//커서 그대로이므로 그뒤에 읽음. 인포헤더
	fread(&hin, 1, sizeof(BITMAPINFOHEADER), ft);
 
	temp = (IMSI / 160) + 1;
	printf("%u - %u", IMSI, temp);
 
	data = (char**)malloc(sizeof(char*)*temp);  // 160bit/1frame 넣을 2차원 배열 동적할당
	for (i = 0; i<temp; i++)
	{
		data[i] = (char*)malloc(sizeof(char)* 160);
	}
 
	fread(data, 1, IMSI, ft); //*안썻을경우 전체배열을 이야기한다.
	//for(i=0;i<IMSI;i++)
	fwrite(&hf, 1, sizeof(BITMAPFILEHEADER), fp);//다른파일에 쓴다. 1 어떤것을 (hf를 쓴다) 2.단위 , 4 어느곳
	fwrite(&hin, 1, sizeof(BITMAPINFOHEADER), fp);
 
	for (i = 0; i < temp ; i++)
		for(k = 0; k<160 ; k++)
			fwrite(&data[i][k], 1, sizeof(char), fp);
 
	fclose(fp);
	fclose(ft);
}

익명 사용자의 이미지

오류가 어떻게 나는지, 어디서 나는지 일단 언급을 안하셔서 정확히 모르겠습니다.
직접 소스 디버깅 해보시면 쉽게 찾으실 것이라고 생각하지만.

일단 전역으로는 BITMAPINFO 구조체를 선언하셨는데 정작 fwrite 에서는
BITMAPINFOHEADER 의 크기만큼 쓰는 것은 말이 안되므로 이 부분을
수정해보시기 바랍니다.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.