-
Data: 2009-03-12 13:44:47
Temat: Re: hdr a Jpg
Od: "Jakub Jewuła" <b...@s...com.pl> szukaj wiadomości tego autora
[ pokaż wszystkie 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
Następne wpisy z tego wątku
- 12.03.09 13:46 Janko Muzykant
- 12.03.09 13:49 Janko Muzykant
- 12.03.09 13:58 Mateusz Ludwin
- 12.03.09 14:04 Mateusz Ludwin
- 12.03.09 14:06 Paweł W.
- 12.03.09 14:15 j...@a...at
- 12.03.09 14:16 Paweł W.
- 12.03.09 13:38 Gotfryd Smolik news
- 12.03.09 14:38 Janko Muzykant
- 12.03.09 14:40 Mateusz Ludwin
- 12.03.09 14:41 Stefan Nawrocki
- 12.03.09 14:43 Janko Muzykant
- 12.03.09 14:44 Janko Muzykant
- 12.03.09 14:48 Jakub Jewuła
- 12.03.09 14:43 Stefan Nawrocki
Najnowsze wątki z tej grupy
- Nikon D5500 i wyzwalanie migawki
- Canon 550D
- EOS 600D i balans bieli w filmach
- EOS 90D i sentymenty
- Skanowanie: Canon MG2550S vs HP OfficeJet 6950
- czas exif a czas modyfikacji pliku
- karta SD po formacie odzyskiwanie zdjęć i filmów
- Chess
- Vitruvian Man - parts 7-11a
- Eltec nie zyje?
- Steve McCurry
- Light - lajkowe klasyki od Chinczykow
- Forum o Sony serii A (alfa)?
- obrobka RAW na konputerze
- Sklejanie bracketowanych JPGów
Najnowsze wątki
- 2024-10-07 Aparat, zewnętrzny mikrofon, brum
- 2024-10-07 MĂźnchen => Data Scientist <=
- 2024-10-07 Gdańsk => Full Stack web developer (obszar .Net Core, Angular6+) <=
- 2024-10-07 Kraków => Programista Full Stack .Net <=
- 2024-10-07 Re: Taniocha!!!
- 2024-10-07 Warszawa => Technical Leader (Java Background) <=
- 2024-10-07 Zielona Góra => Power Electronics R&D Engineer <=
- 2024-10-07 Warszawa => Junior New Business Development Manager <=
- 2024-10-07 Warszawa => Key Account Manager <=
- 2024-10-07 Wrocław => Konsultant wdrożeniowy ERP (Symfonia) <=
- 2024-10-07 policja szuka
- 2024-10-07 Nowy akt zasadniczy
- 2024-10-07 KIA nas dyma
- 2024-10-07 Warszawa => QA Inżynier <=
- 2024-10-07 Warszawa => Sales Development Representative (z j. niemieckim) <=