eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.rec.foto.cyfrowahdr a JpgRe: hdr a Jpg
  • Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!wsisiz.edu.pl!newsfeed.neostrada.pl!
    atlantis.news.neostrada.pl!news.neostrada.pl!not-for-mail
    From: "Jakub Jewuła" <b...@s...com.pl>
    Newsgroups: pl.rec.foto.cyfrowa
    Subject: Re: hdr a Jpg
    Date: Thu, 12 Mar 2009 14:44:47 +0100
    Organization: TP - http://www.tp.pl/
    Lines: 118
    Message-ID: <gpb3o7$6o1$2@atlantis.news.neostrada.pl>
    References: <f...@a...googlegroups.com>
    <gpaptq$180m$1@alfa.ceti.pl> <gpaqfn$jnr$1@inews.gazeta.pl>
    <gpb2r1$1fls$1@alfa.ceti.pl>
    NNTP-Posting-Host: tk86.internetdsl.tpnet.pl
    X-Trace: atlantis.news.neostrada.pl 1236865607 6913 80.55.114.86 (12 Mar 2009
    13:46:47 GMT)
    X-Complaints-To: u...@n...neostrada.pl
    NNTP-Posting-Date: Thu, 12 Mar 2009 13:46:47 +0000 (UTC)
    X-Priority: 3
    X-MSMail-Priority: Normal
    X-Newsreader: Microsoft Outlook Express 6.00.2900.3138
    X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3350
    X-RFC2646: Format=Flowed; Original
    Xref: news-archive.icm.edu.pl pl.rec.foto.cyfrowa:796304
    [ ukryj nagłówki ]

    ...
    >> Nieprawda, to nie jest obraz powstały przez odrzucenie nadmiarowych
    >> bitów HDRI. Te cienie są powyciągane przez tonemapping.
    >
    > No cóż - nie lubię jak zarzuca mi się kłamstwo, więc musze się bronić
    > :-). Wiesz - ja od 20 lat _tworzę_ oprogramowanie graficzne
    > (www.3n.com.pl) i wiem jakim algorytmem przetwarzam swoje obrazy.
    > Zwłaszcza, kiedy robię to za pomocą programów swojego autorstwa :-).
    >
    > Niżej wklejam kod, który przetwarza trzy pliki:
    >
    > -------------------------------------------------
    >
    > #include <windows.h>
    > inline long ScanBytes(int pixWidth, int bitsPixel) {
    > return (((long)pixWidth*bitsPixel+31)>>5 /*/32*/)<<2;;
    > }
    >
    > BYTE* LoadBitmap(char* filename){
    > BITMAPFILEHEADER bfh;
    > HANDLE h=CreateFile(filename, GENERIC_READ, 0, 0, OPEN_EXISTING,
    > FILE_ATTRIBUTE_NORMAL, 0);
    > DWORD r;
    > ReadFile(h, &bfh, sizeof(bfh), &r, 0);
    > BYTE* data=new BYTE[bfh.bfSize];
    > ReadFile(h, data, bfh.bfSize, &r, 0);
    > CloseHandle(h);
    > return data;
    > }
    > void SaveBitmap(BYTE* f, char* filename){
    > BITMAPINFOHEADER* bih=(BITMAPINFOHEADER*)f;
    > int w=bih->biWidth;
    > int h=bih->biHeight;
    > int bpl=ScanBytes(w, 24);
    > BITMAPFILEHEADER bfh;
    > bfh.bfType='BM';
    > bfh.bfSize=sizeof(BITMAPINFOHEADER)+bpl;
    > bfh.bfReserved1=0;
    > bfh.bfReserved2=0;
    > bfh.bfOffBits=sizeof(BITMAPINFOHEADER)+sizeof(BITMAP
    FILEHEADER);
    >
    > DWORD wr;
    > HANDLE handle=CreateFile(filename, GENERIC_WRITE, 0, 0, OPEN_ALWAYS,
    > FILE_ATTRIBUTE_NORMAL, 0);
    > WriteFile(handle, &bfh, sizeof(bfh), &wr, 0);
    > WriteFile(handle, f, bpl*h, &wr, 0);
    > CloseHandle(handle);
    > }
    > void ShowBitmap(BYTE* d){
    > BITMAPINFOHEADER* bih=(BITMAPINFOHEADER*)d;
    > HDC hdc=GetDC(0);
    > StretchDIBits(hdc, 0, 0, bih->biWidth, bih->biHeight,
    > 0, 0, bih->biWidth, bih->biHeight,
    > (BITMAPINFOHEADER*)(d+sizeof(BITMAPINFOHEADER)),
    > (BITMAPINFO*)bih, DIB_RGB_COLORS, SRCCOPY);
    > ReleaseDC(0, hdc);
    > }
    > BYTE* suma(BYTE* f1, BYTE* f2, BYTE* f3){
    > BYTE* d1=(BYTE*)(f1+sizeof(BITMAPINFOHEADER));
    > BYTE* d2=(BYTE*)(f2+sizeof(BITMAPINFOHEADER));
    > BYTE* d3=(BYTE*)(f3+sizeof(BITMAPINFOHEADER));
    > BITMAPINFOHEADER* bih=(BITMAPINFOHEADER*)f1;
    > int w=bih->biWidth;
    > int h=bih->biHeight;
    > int bpl=ScanBytes(w, 24);
    > BYTE* su=new BYTE[bpl*h]+sizeof(BITMAPINFOHEADER);
    > BYTE* s=su+sizeof(BITMAPINFOHEADER);
    > MoveMemory(su, f2, sizeof(BITMAPINFOHEADER)+bpl*h);
    > float l1=150;
    > float l2=250;
    > double c1=0.9; <---------- Tu jest współczynnik, o którym piszę niżej
    > double c2=1-c1;
    > for(int y=0; y<h; y++){
    > for(int x=0; x<w; x++){
    > float gray=(d2[x*3+bpl*y]+d2[x*3+bpl*y+1]+d2[x*3+bpl*y+2])
    /3.0;
    > float r1, g1, b1;
    > float r2, g2, b2;
    > {
    > double v2=(gray-l1)/l1;
    > double v1=1-v2;
    > r1=v1*d3[x*3+bpl*y+2]+v2*d2[x*3+bpl*y+2];
    > g1=v1*d3[x*3+bpl*y+1]+v2*d2[x*3+bpl*y+1];
    > b1=v1*d3[x*3+bpl*y]+v2*d2[x*3+bpl*y];
    > }
    > {
    > double v2=(gray-l2)/l2;
    > double v1=1-v2;
    > r2=v1*d1[x*3+bpl*y+2]+v2*d2[x*3+bpl*y+2];
    > g2=v1*d1[x*3+bpl*y+1]+v2*d2[x*3+bpl*y+1];
    > b2=v1*d1[x*3+bpl*y]+v2*d2[x*3+bpl*y];
    > }
    > s[x*3+bpl*y]=max(0.0, min(255.0,c1*b1+c2*b2));
    > s[x*3+bpl*y+1]=max(0.0, min(255.0,c1*g1+c2*g2));
    > s[x*3+bpl*y+2]=max(0.0, min(255.0,c1*r1+c2*r2));
    > }
    > }
    > return su;
    > }
    > int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int){
    > BYTE* f1=LoadBitmap("D:\\testy\\1.bmp");
    > BYTE* f2=LoadBitmap("D:\\testy\\2.bmp");
    > BYTE* f3=LoadBitmap("D:\\testy\\3.bmp");
    > // ShowBitmap(f1);
    > // ShowBitmap(f2);
    > // ShowBitmap(f3);
    > MessageBox(0,"","",MB_OK);
    > BYTE* s=suma(f1, f2, f3);
    > ShowBitmap(s);
    > SaveBitmap(s, "D:\\testy\\wynik.bmp");
    > return 0;
    > }
    > -------------------------------

    Mateuszu, czekamy na blyskotliwa ropiste ;))))))

    q


Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: