Witam mam problem ze struktura BITMAP z biblioteki windows.h otoz nie moge znalezc funkcji ktora by ja wypelniala po podaniu tylko adresu pliku z ktorego ma ja pobrac a pamitem ze na zajeciach gdzies w msdn bylo to nawet na przykladzie pokazane a dzisiaj grzebie w masdnie juz prawie godzine i nie moge znalezc tego sposobu czy ktos moze go zna/pamieta i moglby sie podzielic? :)
Nie znam, nie pamiętam, ale polecam WIC (Windows Imaging Component) zamiast starego sposobu ładowania bitmap, jest imho prościej i obsługuje różne formaty, nie tylko BMP.
Nie wiem czy istnieje jedna funkcja która zrobi całość ale można to zrobić 2 funkcjami LoadBitmap http://msdn.microsoft.com/en-us/library/windows/desktop/dd145033%28v=vs.85%29.aspx
i GetObject http://msdn.microsoft.com/en-us/library/windows/desktop/dd144904%28v=vs.85%29.aspx
oczywiście na koniec trzeba jeszcze po sobie posprzątać a więc DeleteObject http://msdn.microsoft.com/en-us/library/windows/desktop/dd183539%28v=vs.85%29.aspx
EDIT:
Sorry pomyliłem nie LoadBitmap tylko LoadImage http://msdn.microsoft.com/en-us/library/windows/desktop/ms648045%28v=vs.85%29.aspx
a maglbys mi mniej wiecej wyjasnic jak za pomoca tych funkcji zaladowac bitmape? bo jakos nie moge sie z tymi strukturami polapac jak to zainicjalizowac :/
No tu może być problem bo nie mam kompilatora C++ a nie znam tak dobrze aby napisać bez kompilatora bo mógłbym narobić byków. Napisałem przykład w Delphi może sobie poradzisz a jak nie to może ktoś inny przetłumaczy:
program Project1;
{$APPTYPE CONSOLE}
uses
Windows;
var
hBmp: HBITMAP;
bmp: BITMAP;
begin
hBmp:= LoadImage(0, 'C:\test.bmp', IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE or LR_DEFAULTSIZE);
if (hBmp > 0) then
begin
if (GetObject(hBmp, SizeOf(bmp), @bmp) > 0) then
begin
Writeln('Width: ', bmp.bmWidth);
Writeln('Height: ', bmp.bmHeight);
Writeln('BitsPixel: ', bmp.bmBitsPixel);
Readln;
end;
DeleteObject(hBmp);
end;
end.
czyli jak dobrzeteraz wnioskuje w zmiennej hbmp jest bitmapa z pixelami i ogolnie mniej wiecej cos takiego : http://msdn.microsoft.com/en-us/library/windows/desktop/dd183371(v=vs.85).aspx ?
bo chodzi mi glownie o to czy stosujac teraz ta zmienna bmp bede mogl w prosty sposob prztlumaczyc sobie na c++ funkcje z tego tematu: http://4programmers.net/Delphi/gotowce/ScanLine_-_kontrast,_nasycenie,_negatyw,_przyciemnienie,_rozjaśnienie,_rozmycie,_sepia,_skala_szarości,_wykucie,wypłowienie,_zamiana_RGB_i_inne..
no ok ale teraz juz wiem przynajmniej jak dane bitmapy zaladowac do zmiennej wiec dalej sobie juz jakos poradze dzieki za pomoc :)
troche jeszcze poczytalem i pokmninilem i znalazlem takie cos: http://msdn.microsoft.com/en-us/library/system.drawing.bitmap.aspx
no i korzystajac z tego i podanego tam przykladu chcialem sobie w taki sposob zadefiniowac wlasnie taki objekt alewysypuje mi kupe bledow i nie rozumiem dlaczego ponizej kod calosci chodzi glownie o poczatek czyli definicje "Bitmap^ bmp" oraz o wiersz "bmp = gcnew Bitmap("C:\Documents and Settings\Admin\Pulpit\program\aston.bmp",true);" bo to na nich kompilator sie wysypuje, moglby mi ktos napisac co robie zle ?
#include <windows.h>
#include <math.h>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#include <fstream>
using namespace std;
BITMAPFILEHEADER bm_h;
BITMAPV5HEADER bm_v5;
RGBQUAD bm_rgb;
Bitmap^ bmp;
int main()
{
ifstream fh ("C:\\Documents and Settings\\Admin\\Pulpit\\program\\aston.bmp", ifstream::in);
ofstream fhout("C:\\Documents and Settings\\Admin\\Pulpit\\program\\aston_out.bmp", ios::binary);
bmp = gcnew Bitmap("C:\\Documents and Settings\\Admin\\Pulpit\\program\\aston.bmp",true);
fh.read((char *)(&bm_h),sizeof(bm_h));
fh.read((char *)(&bm_v5),sizeof(bm_v5));
fh.read((char *)(&bm_rgb),sizeof(bm_rgb));
cout<<"typ:"<<bm_h.bfType<<endl<<"rozmiar:"<<bm_h.bfSize<<endl;
cout<<"szer.:"<<bm_v5.bV5Width<<endl<<"wys.:"<<bm_v5.bV5Height<<endl;
cout<<"kolory:"<<bm_v5.bV5BitCount<<endl<<"kompresja:"<<bm_v5.bV5Compression<<endl;
cout<<"blue:"<<(string *)(bm_rgb.rgbBlue)<<endl<<"green:"<<(string *)(bm_rgb.rgbGreen)<<endl<<"red:"<<(string *)(bm_rgb.rgbRed)<<endl;
fh.seekg(bm_h.bfOffBits, ios::beg);
long **bitmap = new long *[bm_v5.bV5Width];
for (int x =0 ; x<bm_v5.bV5Width; x++){
bitmap[x] = new long [bm_v5.bV5Height];
}
for (int h=0 ; h<bm_v5.bV5Height ; h++)
{
for (int w = 0 ; w<bm_v5.bV5Width ; w++)
{
fh.read((char *)(&bitmap[w][h]), 3 );
}
}
fhout.write((char *)(&bm_h.bfType), sizeof(bm_h.bfType));
fhout.write((char *)(&bm_h.bfSize), sizeof(bm_h.bfSize));
fhout.write((char *)(&bm_h.bfReserved1), sizeof(bm_h.bfReserved1));
fhout.write((char *)(&bm_h.bfReserved2), sizeof(bm_h.bfReserved2));
fhout.write((char *)(&bm_h.bfOffBits), sizeof(bm_h.bfOffBits));
fhout.write((char *)(&bm_v5.bV5Size), sizeof(bm_v5.bV5Size));
fhout.write((char *)(&bm_v5.bV5Width), sizeof(bm_v5.bV5Width));
fhout.write((char *)(&bm_v5.bV5Height), sizeof(bm_v5.bV5Height));
fhout.write((char *)(&bm_v5.bV5Planes), sizeof(bm_v5.bV5Planes));
fhout.write((char *)(&bm_v5.bV5BitCount), sizeof(bm_v5.bV5BitCount));
fhout.write((char *)(&bm_v5.bV5Compression), sizeof(bm_v5.bV5Compression));
fhout.write((char *)(&bm_v5.bV5SizeImage), sizeof(bm_v5.bV5SizeImage));
fhout.write((char *)(&bm_v5.bV5XPelsPerMeter), sizeof(bm_v5.bV5XPelsPerMeter));
fhout.write((char *)(&bm_v5.bV5YPelsPerMeter), sizeof(bm_v5.bV5YPelsPerMeter));
fhout.write((char *)(&bm_v5.bV5ClrUsed), sizeof(bm_v5.bV5ClrUsed));
fhout.write((char *)(&bm_v5.bV5ClrImportant), sizeof(bm_v5.bV5ClrImportant));
fhout.write((char *)(&bm_v5.bV5RedMask), sizeof(bm_v5.bV5RedMask));
fhout.write((char *)(&bm_v5.bV5GreenMask), sizeof(bm_v5.bV5GreenMask));
fhout.write((char *)(&bm_v5.bV5BlueMask), sizeof(bm_v5.bV5BlueMask));
fhout.write((char *)(&bm_v5.bV5AlphaMask), sizeof(bm_v5.bV5AlphaMask));
fhout.write((char *)(&bm_v5.bV5CSType), sizeof(bm_v5.bV5CSType));
fhout.write((char *)(&bm_v5.bV5Endpoints), sizeof(bm_v5.bV5Endpoints));
fhout.write((char *)(&bm_v5.bV5GammaRed), sizeof(bm_v5.bV5GammaRed));
fhout.write((char *)(&bm_v5.bV5GammaGreen), sizeof(bm_v5.bV5GammaGreen));
fhout.write((char *)(&bm_v5.bV5GammaBlue), sizeof(bm_v5.bV5GammaBlue));
fhout.write((char *)(&bm_v5.bV5Intent), sizeof(bm_v5.bV5Intent));
fhout.write((char *)(&bm_v5.bV5ProfileData), sizeof(bm_v5.bV5ProfileData));
fhout.write((char *)(&bm_v5.bV5ProfileSize), sizeof(bm_v5.bV5ProfileSize));
fhout.write((char *)(&bm_v5.bV5Reserved), sizeof(bm_v5.bV5Reserved));
fhout.write((char *)(&bm_rgb.rgbBlue), sizeof(bm_rgb.rgbBlue));
fhout.write((char *)(&bm_rgb.rgbGreen), sizeof(bm_rgb.rgbGreen));
fhout.write((char *)(&bm_rgb.rgbRed), sizeof(bm_rgb.rgbRed));
fhout.write((char *)(&bm_rgb.rgbReserved), sizeof(bm_rgb.rgbReserved));
fhout.seekp(bm_h.bfOffBits, ios::beg);
for (int h=0 ; h<bm_v5.bV5Height ; h++)
{
for (int w = 0 ; w<bm_v5.bV5Width ; w++)
{
fhout.write((char *)(&bitmap[w][h]), 3);
}
}
for (int x=0 ; x<bm_v5.bV5Width ; x++)
{
delete [] bitmap[x];
}
delete [] bitmap;
fh.close();
fhout.close();
system("PAUSE");
return 0;
}