할당된 공간에 3차원 배열 맵핑?

dragona79의 이미지

요세 Direct Draw 프로그래밍을 하는중인데
예제 소스가 너무 없어서 T.T

일단 원본 소스입니다.

ppbMap=(BYTE**)malloc(sizeof(BYTE*)*h*4);
if(ppbMap==NULL) return 0;

ppbMap[0]=(BYTE**)pb;
for(int y=1;y<h;y++)
ppbMap[y]=ppbMap[y-1]+w

위에서 ppbMap의 선언은 BYTE** ppMap입니다.
w(width)와 h(height)를 받아서 컬러는 8bit 칼라이기 때문에
2차원 배열로 화면전체가 맵핑이 되는데 문제는
저는 32bit컬러로 하기 때문에 RGBA 4바이트가 필요해서
저것과는 다르게 연결을 해야 될꺼 같습니다.

일단 그래픽쪽 코딩이기에 속도가 상당히 중요한데 나중에 쓸때를 위하여 구조체로 rgba를 만들어 2중 포인터 맵핑을 하는게 좋을까요?
아니면 그냥 BYTE로 3중 포인터 맵핑을 하는게 좋을까요..

근데 3중 포인터로 맵핑할려니 전혀 어떻게 해야 할지 몰르겠네요.
수학엔 잼병이라 .. T.T

w*h*4 바이트의 공간을 BYTE*** pppbMap; 에다 [w][h][rgba]로 매핑할수 있는 방법좀.. 또 구조체로 하는게 추후 이 배열을 사용할떄 빠른지 3중 포인터로 쓰는게 빠른지좀 가르쳐 주세요.

질문이 어질어질 하네요.. 글솜씨가 없어서 죄송합니다.

doldori의 이미지

두 가지 방법이 있습니다.

1. 1차원 배열로 잡고 접근할 때 인덱스를 맞추는 방법

const int w, h, color;

#define ACCESS_ARRAY(arr, i, j, k) ((arr)[(i)*h*color + (j)*4 + (k)])

char* bMap = malloc(sizeof(*bMap) * w * h * color);

// use ACCESS_ARRAY(bMap, i, j, k)

free(bMap);

2. 3차원 배열을 흉내내는 방법

int i, j;
char*** bMap = malloc(sizeof(*bMap) * w);
bMap[0] = malloc(sizeof(**bMap) * w * h);
for (i = 1; i < w; ++i)
    bMap[i] = bMap[0] + i * h;
bMap[0][0] = malloc(sizeof(***bMap) * w * h * color);
for (i = 0; i < w; ++i)
    for (j = 0; j < h; ++j)
        bMap[i][j] = bMap[0][0] + (i * h * color + j * color);

// use bMap[i][j][k]

free(bMap[0][0]);
free(bMap[0]);
free(bMap);

속도는 어느 쪽이 빠른지 모르겠지만 유의미한 차이는 없을 것이라 생각합니다.

댓글 달기

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