|
|
|
Чтение изображения из файла
|
|||
|---|---|---|---|
|
#18+
Как открыть файл изображения с помощью функции fopen, скопировать его в массив и иметь указатель на начало массива ? Вопрос, возможно, примитивный. Есть файловый манипулятор, но он указывает на файл. Возможно ли так: FILE *f=fopen("filepath","rw"); &handle=*f; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2006, 00:52 |
|
||
|
Чтение изображения из файла
|
|||
|---|---|---|---|
|
#18+
Чтобы переместить указатель текущей позиции файла в любое место, можно воспользоваться универсальным методом Seek. Он позволяет переместить указатель на определенное число байт относительно начала, конца или текущей позиции указателя. Чтобы переместить указатель в начало или конец файла, наиболее удобно использовать специальные методы. Метод SeekToBegin перемещает указатель в начало файла, а метод SeekToEnd - в его конец. Это как ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2006, 01:28 |
|
||
|
Чтение изображения из файла
|
|||
|---|---|---|---|
|
#18+
Вообще-то мне нужно открыть файл и скачать его в массив целых чисел, а там дальше все и ежику понятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2006, 01:29 |
|
||
|
Чтение изображения из файла
|
|||
|---|---|---|---|
|
#18+
CFile f; stroka10="d:\\vcpp\\matrix\\Data\\"; //MessageBox(stroka10); stroka10=stroka10+stroka11; //stroka=stroka+".matr"; //MessageBox(stroka10); if(f.Open(stroka10,CFile::modeRead)==FALSE) return; CArchive ar(&f,CArchive::load); nomer++; ar>>s1; n[nomer]=atoi(s1); ar>>s1; m[nomer]=atoi(s1); strcat(as, stroka11); int ii=0; while (bs!='.') { bs=as[ii]; if (bs!='.') ss+=bs; ii++; }; nn=ss; name[nomer]=ss; //MessageBox(name[nomer]); adres[nomer]=new float[n[nomer]*m[nomer]]; ptr=adres[nomer]; for(i=0; i<n[nomer]*m[nomer]; i++) { ar>>s ; *ptr++=atof(s); } itoa(n[nomer],s2,10); itoa(m[nomer],s3,10); m_list5.AddString(name[nomer]+'('+s2+','+s3 +')'); m_list1.AddString(name[nomer]); m_list3.AddString(name[nomer]); *pResult = 0; Вот такой вариант у меня был для чтения из файла матрицы. Как переделать для чтения изображения ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2006, 01:40 |
|
||
|
Чтение изображения из файла
|
|||
|---|---|---|---|
|
#18+
neskif Вот такой вариант у меня был для чтения из файла матрицы. Как переделать для чтения изображения ? Прочитал Холзнера и понял, что надо побаловаться функцией Seek, которая устанавливает позицию указателя в файле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2006, 10:11 |
|
||
|
Чтение изображения из файла
|
|||
|---|---|---|---|
|
#18+
CFile File("C:\\text\\file.txt",CFile::modeRead); File.Seek(0,CFile::begin); int col=File.GetLength(); int n=File.Read(BufferText,col); m_Edit1.SetWindowText(BufferText); File.Close(); Если у меня целые данные, то не обращать внимания, а просто потом результат преобразовать из текстового в целый тип ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2006, 22:54 |
|
||
|
Чтение изображения из файла
|
|||
|---|---|---|---|
|
#18+
че вы усложняете все.. Вариант 1 Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Вариант 2 Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2006, 23:29 |
|
||
|
Чтение изображения из файла
|
|||
|---|---|---|---|
|
#18+
void CImageDlg::OnButton1() { char OutString [4][1]; CFile OutFile("d:\\a.dat",CFile::modeCreate| CFile::modeWrite); for(int i=0; i<4; i++) OutFile.Write(OutString ,1); CFile f; char InString[1]; if(f.Open("d:\\a.dat",CFile::modeRead)==FALSE) return; for( i=0; i<4; i++) { f.Seek(i*1,CFile::begin); int NumberCharacters=f.Read(InString,1); m_edit1=CString(InString); } UpdateData(false); f.Close; } Здесь пока нет преобразования текста в целые, но это не принципиально. Кроме этого я ничего в файл пока не записал, а также в OutString. Осталось уже немного. Что скажете ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2006, 11:25 |
|
||
|
Чтение изображения из файла
|
|||
|---|---|---|---|
|
#18+
void CImageDlg::OnButton1() { char InString[9],as[9]={0}; int a; CFile f; if(f.Open("d:\\a.txt",CFile::modeRead)==FALSE) return; f.Read(InString,9); strcat(as, InString); a=f.GetLength(); //MessageBox(as); //m_edit1=as[1]; m_edit1=a; UpdateData(false); } Остановился пока на этом варианте. Далее буду разбираться с форматом читаемого изображения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2006, 17:44 |
|
||
|
Чтение изображения из файла
|
|||
|---|---|---|---|
|
#18+
Да уж... neskif (sarmat =) ) разбирайся =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2006, 02:00 |
|
||
|
Чтение изображения из файла
|
|||
|---|---|---|---|
|
#18+
_shumerДа уж... neskif (sarmat =) ) разбирайся =) Ну и чего ты по форумам скачешь ? Почитай в йоге раздел "Здоровье" и научись быть спокойным. Ищешь себе проблемы по мелочам. Так всю жизнь на мелочевку и растратишь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2006, 09:13 |
|
||
|
Чтение изображения из файла
|
|||
|---|---|---|---|
|
#18+
С чтением разобрался. Теперь меня интересует программирование видеоадаптера SVGA в Visual C++ с ассемблерными вставками. Пожалуйста хотя бы немного сориентируйте. Полагаю, что в Kernel есть какие-то функции для этого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2006, 23:56 |
|
||
|
Чтение изображения из файла
|
|||
|---|---|---|---|
|
#18+
neskif, я с тебя тащщщщщщусь! Ну какой может быть SVGA и kernel??? Это же соврешенно разные уровни. Если хочешь программировать SVGA - забудь о кернеле, если хочешь использовать функции кернела - забудь про SVGA. Если тебе нужен прямой доступ к видеоадптеру, то во первых, ищи описание своего адаптера. Там будет список портов и адресов записывая в которые ты и сможешь управлять видео. Но учти что для каждого видеоадаптера эти порты и адреса будут разными. И во вторых, тебя ОС не пустить этой фигней заниматься. Если конечно ты не оформишь свою программку в виде драйвера :) А если ты хочешь всего-лишь вывести картинку в окошке или на весь экран - возьми лучше какую-нибудь графическую библиотеку. DirectX, GDI или хотя бы SDL и используй функции из этой библиотеки. Но забудь про ассемблер и SVGA. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2006, 01:47 |
|
||
|
Чтение изображения из файла
|
|||
|---|---|---|---|
|
#18+
neskif neskif Вот такой вариант у меня был для чтения из файла матрицы. Как переделать для чтения изображения ? Прочитал Холзнера и понял, что надо побаловаться функцией Seek, которая устанавливает позицию указателя в файле. Формат BMP (речь видимо о нем) линейный и не требует Seek(). Сначала считываешь однодним вызовом ReadFile() BITMAPFILEHEADER путем передачи туда указателя на экземпляр данной скруктуры и ее длины (sizeof(BITMAPFILEHEADER)). О выравниваниии тут можно не беспокоиться - структуры win32 выровнены изначально. Затем - BITMAPINFOHEADER так же. Проанализировав BITMAPINFOHEADER можно выяснить, какой размер памяти выделить под палитру и надо ли еее выделять вообще. Под TrueColor - не надо. Если надо - считываешь массив RGBQUAD[] размера известного из BITMAPINFOHEADER. Затем выделяешь большой массив памяти под само изображение и считываешь туда его путем единственного вызова ReadFile(). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2006, 11:59 |
|
||
|
Чтение изображения из файла
|
|||
|---|---|---|---|
|
#18+
Absurd A> Затем выделяешь большой массив памяти под само изображение и A> считываешь туда его путем единственного вызова ReadFile(). А почему бы не сделать все это же самое с помощью CreateFileMapping + MapViewOfFile ? Тогда вобще ничего читать не надо --------------------- Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2006, 14:17 |
|
||
|
Чтение изображения из файла
|
|||
|---|---|---|---|
|
#18+
Карабас Барабас Absurd A> Затем выделяешь большой массив памяти под само изображение и A> считываешь туда его путем единственного вызова ReadFile(). А почему бы не сделать все это же самое с помощью CreateFileMapping + MapViewOfFile ? Тогда вобще ничего читать не надо А что это даст? Простой битмап 600x800 пикселей можно прямо прочитать и в массив расположенный в куче. С техниками обработки слайдов, отсканированных с разрешением в 26000 DPI для полиграфических нужд нужно поэкспериментировать. А работал с такими файлами по кусочкам и не жаловался. Файлмэппинг может быть тоже хорош, не пробовал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2006, 15:50 |
|
||
|
Чтение изображения из файла
|
|||
|---|---|---|---|
|
#18+
to Absurd ты говорил о формате бмп( Броневая Машина Пехоты :)) , а можна по-подробнее в смысле как из него получить данные в виде (x,y) - (rgb) тока winAPI не надо, плз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2006, 02:49 |
|
||
|
Чтение изображения из файла
|
|||
|---|---|---|---|
|
#18+
latexto Absurd ты говорил о формате бмп( Броневая Машина Пехоты :)) , а можна по-подробнее в смысле как из него получить данные в виде (x,y) - (rgb) тока winAPI не надо, плз. Создаешь двухмерный массив типа BYTE[width][height] и прямо туда читаешь, прочитав предварительно заголовки (BITMAPFILEHEADER, BITMAPINFOHEADER и RGBQUAD[] для палитровых режимов). Надо помить 1) Размер одной горизонтальной строки в байтах всегда должен быть кратен 4 и добивается пустыми байтами в случае необходимости. Пример - битмап 11x10, 24 bits per pixel (8 bit red, 8 bit green, 8 bit blue). Размер строки - 3 байта на пиксел * 11 = 33. 33 на 4 не делится, и ближайшее число которое делится это 36. Следовательно, массив должен быть BYTE[36][10]. 2) В TrueColor цвета зачем-то идут в обратном формате - первый байт - blue, второй - green, третий - red. 3) Сканлинии зачем-то идут снизу вверх - если массив объявлен как BYTE arr[36][10], то синяя составляющая левого верхнего пиксела будет arr[0][9], зеленая - arr[1][9] и красная - arr[2][9]. Наверно, ось Y в Декартовой системе координат MS захотел направить по-академичному вверх. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2006, 14:40 |
|
||
|
Чтение изображения из файла
|
|||
|---|---|---|---|
|
#18+
to Сергей Ильич : пасиба Действительно догадатся самому до этого было нереально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2006, 15:09 |
|
||
|
Чтение изображения из файла
|
|||
|---|---|---|---|
|
#18+
latexto Absurd ты говорил о формате бмп( Броневая Машина Пехоты :)) Для тех кто на (под) броней: Не "Броневая" а "Боевая"- учи матчасть, а то может представиться счастье опробовать данную технику на деле на ближайшие 2 года ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2006, 10:13 |
|
||
|
Чтение изображения из файла
|
|||
|---|---|---|---|
|
#18+
void CImageDlg::OnButton1() { char InString[9],as[9]={0}; int a; CFile f; if(f.Open("d:\\1.bmp",CFile::modeRead)==FALSE) return; f .Read(InString,9); int x_bmp,y_bmp; CBitmap bmp; bmp.LoadBitmap(InString); CPaintDC dc(this); CDC memdc; memdc.CreateCompatibleDC(&dc); memdc.SelectObject(&bmp); BITMAP bm; x_bmp=bm.bmWidth; y_bmp=bm.bmHeight; dc.BitBlt(0,0,x_bmp,y_bmp,&memdc,0,0,SRCCOPY); } Что-то не срастается там, где выделил. Ошибок не дает, но ничего и не показывает. Картинка копируется в InString. Не важно, что читаю байты сначала (там идет формат), все равно бы показывал какой-нибудь шум. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2006, 23:38 |
|
||
|
Чтение изображения из файла
|
|||
|---|---|---|---|
|
#18+
void CImage2Dlg::OnButton1() { int x_bmp,y_bmp; CBitmap bmp; bmp.LoadBitmap("IDB_BMP1"); CPaintDC dc(this); CDC memdc; memdc.CreateCompatibleDC(&dc); memdc.SelectObject(&bmp); BITMAP bm; x_bmp=bm.bmWidth; y_bmp=bm.bmHeight; dc.BitBlt(0,0,x_bmp,y_bmp,&memdc,0,0,SRCCOPY); } Так все отлично получается, но картинка при этом должна быть импортирована в ресурсы. А без этого никак нельзя ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2006, 20:31 |
|
||
|
Чтение изображения из файла
|
|||
|---|---|---|---|
|
#18+
neskifvoid CImage2Dlg::OnButton1() { int x_bmp,y_bmp; CBitmap bmp; bmp.LoadBitmap("IDB_BMP1"); CPaintDC dc(this); CDC memdc; memdc.CreateCompatibleDC(&dc); memdc.SelectObject(&bmp); BITMAP bm; x_bmp=bm.bmWidth; y_bmp=bm.bmHeight; dc.BitBlt(0,0,x_bmp,y_bmp,&memdc,0,0,SRCCOPY); } Так все отлично получается, но картинка при этом должна быть импортирована в ресурсы. А без этого никак нельзя ? Канешна мона: ::LoadImage(<см. MSDN>) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2006, 07:25 |
|
||
|
Чтение изображения из файла
|
|||
|---|---|---|---|
|
#18+
Борманнн Канешна мона: ::LoadImage(<см. MSDN>) Ну весьма доходчиво - краткость сестра таланта. Смотрел уже, но из файла, не импортированного в ресурсы пока не получается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2006, 18:08 |
|
||
|
Чтение изображения из файла
|
|||
|---|---|---|---|
|
#18+
Ну, видимо, не внимательно читал: HANDLE LoadImage( HINSTANCE hinst, LPCTSTR lpszName, UINT uType, int cxDesired, int cyDesired, UINT fuLoad ); Parameters .... fuLoad [in] This parameter can be one or more of the following values. ... LR_LOADFROMFILE Loads the image from the file specified by the lpszName parameter. If this flag is not specified, lpszName is the name of the resource. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2006, 10:41 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=33666732&tid=2031452]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
192ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
74ms |
get tp. blocked users: |
1ms |
| others: | 221ms |
| total: | 531ms |

| 0 / 0 |
