|
|
|
Разрешение графики
|
|||
|---|---|---|---|
|
#18+
У рисунка есть размер в пикселах и в сантиметрах (определяемый разрешением и влияющим на размер напечатанного рисунка). Добавил я на форму компонент Image1, задал его размеры Height=200 и Width=200 (в инспекторе обектов) написал такие строки (для эксперимента): Image1->Canvas->Pixels[3][3]=clBlack; if (SaveDialog1->Execute()) {Image1->Picture->SaveToFile(SaveDialog1->FileName);} Выполнив программу открыл полученный файл в PhotoShop'e на странице Изображение-Размер изображения были такие данные: Количество пикселей: ширина 200 пикселей высота 200 пикселей Размер документа: ширина 2,778 дюйма высота 2,778 дюйма разрешение 72 пиксели/дюйм ВОПРОС: как мне самому регулировать разрешение Канвы? Использую C++ Builder 6.0. Спасибо за прямой или косвенный (подсказка где почитать) ответ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2006, 11:19 |
|
||
|
Разрешение графики
|
|||
|---|---|---|---|
|
#18+
Скажите хотя-бы почему нет ответов. Это слишком сложно или неохота отвечать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2006, 18:43 |
|
||
|
Разрешение графики
|
|||
|---|---|---|---|
|
#18+
Никогда сам этого не делал, но попробуй посмотри функцию SetBitmapDimensionEx ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2006, 12:04 |
|
||
|
Разрешение графики
|
|||
|---|---|---|---|
|
#18+
pandrewНикогда сам этого не делал, но попробуй посмотри функцию SetBitmapDimensionEx Вот что нашёл: pandrewФункция SetBitmapDimensionEx назначает предпочтительные размеры точечному рисунку. Эти размеры могут быть использованы приложениями; однако они не используются системой. Синтаксис BOOL SetBitmapDimensionEx( HBITMAP hBitmap, // дескриптор рисунка int nWidth, // ширина рисунка в .01 мм int nHeight, // высота рисунка в .01 мм LPSIZE lpSize // исходные размеры ); Параметры hBitmap [in] Дескриптор точечного рисунка. Точечным рисунком не может быть битовый образ DIB-секции. nWidth [in] Устанавливает ширину точечного рисунка, в единицах измерения равных .01 миллиметра. nHeight [in] Устанавливает высоту точечного рисунка, в единицах измерения равных .01 миллиметра. lpSize [out] Указатель на структуру SIZE, которая принимает предыдущие размеры точечного рисунка. Этот указатель может иметь значение ПУСТО (NULL). Написал я: Image1->Canvas->Pixels[3][3]=clBlack; SetBitmapDimensionEx(Image1->Canvas->Handle,1000,1000,NULL); if (SaveDialog1->Execute()) {Image1->Picture->SaveToFile(SaveDialog1->FileName);} По идее размер сохранённого рисунка должен был быть 10 на 10 мм. Но эффекта нет. Разрешение по прежнему 72 пиксели/дюйм и размер рисунка определяется исходя из него и НЕ равен 10 на 10 мм. Где я ошибся? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2006, 00:23 |
|
||
|
Разрешение графики
|
|||
|---|---|---|---|
|
#18+
Сколько помню, разрешение BMP нигде особенно не учитывалось, и игнорировалось при любом удобном случае. Залезь в исходники VCL, может, оно вообще не используется? Если так, придёться свою сохранялку писать (для BMP это не трудно) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2006, 14:50 |
|
||
|
Разрешение графики
|
|||
|---|---|---|---|
|
#18+
ErVСколько помню, разрешение BMP нигде особенно не учитывалось, и игнорировалось при любом удобном случае. Залезь в исходники VCL, может, оно вообще не используется? Если так, придёться свою сохранялку писать (для BMP это не трудно) Исходников у меня нет, да если бы и были я бы в них ничего не понял, я так сказать ОЧЕНЬ начинающий. Но могу опровергнуть то что функция SaveToFile не учитывает разрешение вот чем: если в компонент Image загрузить bmp-картинку с разрешением отличным от 72 точки/дюйм, нарисовать на канве поверх этого рисунка что-то и потом дать команду SaveToFile то получается bmp-картинка с тем же разрешением что и загруженная ранее!!! И ещё написал вот так: Graphics::TBitmap *Bitmap=new Graphics::TBitmap(); ... Image1->Canvas->Pixels[3][3]=clBlack; Bitmap->Assign(Image1->Picture); if (!SetBitmapDimensionEx(Bitmap->Handle,1000,1000,NULL)) Beep(); if (SaveDialog1->Execute()) {Bitmap->SaveToFile(SaveDialog1->FileName);} Функция SetBitmapDimensionEx вызывается удачно (возвращает true - узнаю по звуку) и главное: если сделать так как я писал выше т. е. загрузить bmp-картинку в Image с разрешением отличным от 72 точки/дюйм, то вызов этой функции сбрасывает разрешение на стандартное (72 точки/дюйм). Вывод функция частично работает но чего то ей не хватает. Чего? Подскажите пожалуйста! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2006, 17:50 |
|
||
|
Разрешение графики
|
|||
|---|---|---|---|
|
#18+
Ну помогите же! Последний штрих остался. Help!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2006, 19:14 |
|
||
|
Разрешение графики
|
|||
|---|---|---|---|
|
#18+
Лёлик2Ну помогите же! Последний штрих остался. Help!!! Слушай! Тебе не кажеться, что разрешение формы оверрайдит разрешение, которое ты компоненту TImage устанавливаешь? Создай временный TGraphic, вызови TGraphic.Assign(TImage) и делай с ним, что хочешь... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2006, 17:14 |
|
||
|
Разрешение графики
|
|||
|---|---|---|---|
|
#18+
ErV Лёлик2Ну помогите же! Последний штрих остался. Help!!! Слушай! Тебе не кажеться, что разрешение формы оверрайдит разрешение, которое ты компоненту TImage устанавливаешь? Создай временный TGraphic, вызови TGraphic.Assign(TImage) и делай с ним, что хочешь... А строка Bitmap->Assign(Image1->Picture); разве не это?(см.выше) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2006, 19:39 |
|
||
|
Разрешение графики
|
|||
|---|---|---|---|
|
#18+
Лёлик2 ErV Лёлик2Ну помогите же! Последний штрих остался. Help!!! Слушай! Тебе не кажеться, что разрешение формы оверрайдит разрешение, которое ты компоненту TImage устанавливаешь? Создай временный TGraphic, вызови TGraphic.Assign(TImage) и делай с ним, что хочешь... А строка Bitmap->Assign(Image1->Picture); разве не это?(см.выше) Не это. Я довольно давно с VCL работал, и, судя по всему, опечатался - имел в виду TPIcture. Один из этих двух классов (TGraphic, TPicture), при "Assign'e" может работать с ЛЮбОЙ графикой - не только BMP. а для TBitmap->Assign картинка будет сконвертирована в BMP... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2006, 13:28 |
|
||
|
Разрешение графики
|
|||
|---|---|---|---|
|
#18+
ErV Не это. Я довольно давно с VCL работал, и, судя по всему, опечатался - имел в виду TPIcture. Один из этих двух классов (TGraphic, TPicture), при "Assign'e" может работать с ЛЮбОЙ графикой - не только BMP. а для TBitmap->Assign картинка будет сконвертирована в BMP... Не пойму тебя. Мне и нужно BMP. Если не трудно: какие строки какими ты передлагаешь заменить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2006, 16:10 |
|
||
|
Разрешение графики
|
|||
|---|---|---|---|
|
#18+
Лёлик2 ErV Не это. Я довольно давно с VCL работал, и, судя по всему, опечатался - имел в виду TPIcture. Один из этих двух классов (TGraphic, TPicture), при "Assign'e" может работать с ЛЮбОЙ графикой - не только BMP. а для TBitmap->Assign картинка будет сконвертирована в BMP... Не пойму тебя. Мне и нужно BMP. Если не трудно: какие строки какими ты передлагаешь заменить? Я имел в виду, что если использовать TPicture, то поддерживаться будет ЛЮБОЙ формат, производный от TGraphic, не только BMP. Возможно, что будет более эффективное представление данных (я TPicture не ковырял, поэтому не уверен), и т.д. и т.п. а в случае с TBitmap данные будут стопроцентно сконвертированы в формат BMP (который очень хорошо память кушает). ЗЫ: Короче, мне уже самому интересно стало, дома поставлю Дельфю/Builder, залезу в исходники и посмотрю, что там с сохранением разрешения... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2006, 13:57 |
|
||
|
Разрешение графики
|
|||
|---|---|---|---|
|
#18+
Лёлик2ВОПРОС: как мне самому регулировать разрешение Канвы? А при чем здесь вообще разрешение Канвы ? Какое у нее разрешение никак не влияет на то, что сохраняется в файл, по моему мнению. Также подозреваю, что разрешение канвы (я б лучше сказал холста) в VCL задается разрешением окна, в котором он (холст) рисуется. А разрешение окна задается режимом работы Win32-устройства, в котором это окно. Например, дисплея или принтера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2006, 11:03 |
|
||
|
Разрешение графики
|
|||
|---|---|---|---|
|
#18+
Короче, новости две - плохая и хорошая :). плохая - в BITMAPINFOHEADER (структура, где храниться инфа о БМП файлах) есть поле - что-то типа bmXPelsPerMeter, bmYPelsPerMeter. эти поля задают кол-во точек... на метр как я понял. Так вот, в TBitMap их изменить НЕЛЬЗЯ, но они считываются при загрузки картинки, и больше нигде не меняются. Соответственно, при создании нового БМП, эти поля инициализируются нулями и система назначает им 72 точки на дюйм(кажется, это разрешение в системе по умолчанию?). В VCL для TBitmap нет property, отвечающего за кол-во точек на дюйм. Раз нет проперти, ломится функциями типа SetBitmapDimensionsEx не стоит, так как разрешение системной битмапки (внутри системы) изменится, а вот соответсвующее поле структуры - нет. Рекомендую написать своё сохранение, благо это несложно - формат БМП задаётся системными(виндовскими) структурами - BITMAPFILEHEADER, BITMAPINFOHEADER. поковыряй в справке по Win32 следующие слова: BITMAPINFOHEADER BITMAPFILEHEADER GetDIBits Capturing Image CreateCompatibleBitmap. суть следующая - ты создаёшь временный массив под пиксели, экземпляры InfoHeader и BITMAPFILEHEADER, заполняешь их, получаешь пиксели при помощи GetDIBits (В массив), потом сохраняешь BITMAPFILEHEADER, BITMAPINFOHEADER, палитру(если есть) и пиксели. Подробный код (может быть) потом вышлю - не успел накатать вчера в 2 часа ночи, когда до исходников VCL добрался. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2006, 11:10 |
|
||
|
Разрешение графики
|
|||
|---|---|---|---|
|
#18+
ErVКороче, новости две - плохая и хорошая :). плохая - в BITMAPINFOHEADER (структура, где храниться инфа о БМП файлах) есть поле - что-то типа bmXPelsPerMeter, bmYPelsPerMeter. эти поля задают кол-во точек... на метр как я понял. Так вот, в TBitMap их изменить НЕЛЬЗЯ, но они считываются при загрузки картинки, и больше нигде не меняются. Соответственно, при создании нового БМП, эти поля инициализируются нулями и система назначает им 72 точки на дюйм(кажется, это разрешение в системе по умолчанию?). В VCL для TBitmap нет property, отвечающего за кол-во точек на дюйм. Раз нет проперти, ломится функциями типа SetBitmapDimensionsEx не стоит, так как разрешение системной битмапки (внутри системы) изменится, а вот соответсвующее поле структуры - нет. Рекомендую написать своё сохранение, благо это несложно - формат БМП задаётся системными(виндовскими) структурами - BITMAPFILEHEADER, BITMAPINFOHEADER. поковыряй в справке по Win32 следующие слова: BITMAPINFOHEADER BITMAPFILEHEADER GetDIBits Capturing Image CreateCompatibleBitmap. суть следующая - ты создаёшь временный массив под пиксели, экземпляры InfoHeader и BITMAPFILEHEADER, заполняешь их, получаешь пиксели при помощи GetDIBits (В массив), потом сохраняешь BITMAPFILEHEADER, BITMAPINFOHEADER, палитру(если есть) и пиксели. Подробный код (может быть) потом вышлю - не успел накатать вчера в 2 часа ночи, когда до исходников VCL добрался. :) Чесно говоря это не мой уровень. Тут мне написали одну функцию но она работает очень нестабильно: bool SetNewXYPelsPerMeter(const char *file_name, LONG NewXPelsPerMeter, LONG NewYPelsPerMeter) { HANDLE hBmpFile = CreateFile(file_name, GENERIC_WRITE | GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hBmpFile == INVALID_HANDLE_VALUE) return false; BITMAPINFOHEADER bih; DWORD bytes = 0; SetFilePointer(hBmpFile, (LONG)sizeof(BITMAPFILEHEADER), (PLONG)&bytes, FILE_BEGIN); ReadFile(hBmpFile, &bih, sizeof(BITMAPINFOHEADER), &bytes, NULL); if (bytes != sizeof(BITMAPINFOHEADER)) { CloseHandle(hBmpFile); return false; } bih.biXPelsPerMeter = NewXPelsPerMeter; bih.biYPelsPerMeter = NewYPelsPerMeter; bytes = 0; SetFilePointer(hBmpFile, (LONG)sizeof(BITMAPFILEHEADER), (PLONG)&bytes, FILE_BEGIN); WriteFile(hBmpFile, &bih, sizeof(BITMAPINFOHEADER), &bytes, NULL); CloseHandle(hBmpFile); return true; } Если бы ты сказал что тут не так, был бы очень признателен! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2006, 11:30 |
|
||
|
Разрешение графики
|
|||
|---|---|---|---|
|
#18+
Лёлик2 ErVКороче, новости две - плохая и хорошая :). плохая - в BITMAPINFOHEADER (структура, где храниться инфа о БМП файлах) есть поле - что-то типа bmXPelsPerMeter, bmYPelsPerMeter. эти поля задают кол-во точек... на метр как я понял. Так вот, в TBitMap их изменить НЕЛЬЗЯ, но они считываются при загрузки картинки, и больше нигде не меняются. Соответственно, при создании нового БМП, эти поля инициализируются нулями и система назначает им 72 точки на дюйм(кажется, это разрешение в системе по умолчанию?). В VCL для TBitmap нет property, отвечающего за кол-во точек на дюйм. Раз нет проперти, ломится функциями типа SetBitmapDimensionsEx не стоит, так как разрешение системной битмапки (внутри системы) изменится, а вот соответсвующее поле структуры - нет. Рекомендую написать своё сохранение, благо это несложно - формат БМП задаётся системными(виндовскими) структурами - BITMAPFILEHEADER, BITMAPINFOHEADER. поковыряй в справке по Win32 следующие слова: BITMAPINFOHEADER BITMAPFILEHEADER GetDIBits Capturing Image CreateCompatibleBitmap. суть следующая - ты создаёшь временный массив под пиксели, экземпляры InfoHeader и BITMAPFILEHEADER, заполняешь их, получаешь пиксели при помощи GetDIBits (В массив), потом сохраняешь BITMAPFILEHEADER, BITMAPINFOHEADER, палитру(если есть) и пиксели. Подробный код (может быть) потом вышлю - не успел накатать вчера в 2 часа ночи, когда до исходников VCL добрался. :) Чесно говоря это не мой уровень. Тут мне написали одну функцию но она работает очень нестабильно: bool SetNewXYPelsPerMeter(const char *file_name, LONG NewXPelsPerMeter, LONG NewYPelsPerMeter) { HANDLE hBmpFile = CreateFile(file_name, GENERIC_WRITE | GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hBmpFile == INVALID_HANDLE_VALUE) return false; BITMAPINFOHEADER bih; DWORD bytes = 0; SetFilePointer(hBmpFile, (LONG)sizeof(BITMAPFILEHEADER), (PLONG)&bytes, FILE_BEGIN); ReadFile(hBmpFile, &bih, sizeof(BITMAPINFOHEADER), &bytes, NULL); if (bytes != sizeof(BITMAPINFOHEADER)) { CloseHandle(hBmpFile); return false; } bih.biXPelsPerMeter = NewXPelsPerMeter; bih.biYPelsPerMeter = NewYPelsPerMeter; bytes = 0; SetFilePointer(hBmpFile, (LONG)sizeof(BITMAPFILEHEADER), (PLONG)&bytes, FILE_BEGIN); WriteFile(hBmpFile, &bih, sizeof(BITMAPINFOHEADER), &bytes, NULL); CloseHandle(hBmpFile); return true; } Если бы ты сказал что тут не так, был бы очень признателен! Можно и так, но здесь - изменяется разрешение уже СУЩЕСТВУЮЩЕГО файла. То есть - он должен существовать. Я тебе предлагал из существующей битмапки взять пиксели и сохранить их с нужным тебе разрешением своей процедурой. Код сегодня дома поковыряю, если напишу, тогда скину. ЗЫ: И что значит - нестабильно ? Что глючит? Расскажи - в чём проблема, так как код корректен, вроде бы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2006, 15:17 |
|
||
|
Разрешение графики
|
|||
|---|---|---|---|
|
#18+
процедура сохранения с возможностью задания разрешения (сохраняет стабильно в 24битный бмп, но это можно исправить). палитра в этом варианте тоже не поддерживается, но это тоже можно вылечить, если постараться. пока писал, нашёл пару глюков в билдере (sizeof(BITMAPFILEHEADER)==16, а сумма размеров всех полей - == 14, первое поле в сохранённом файле занимает 4 байта вместо двух). :( паскалёвский вариант работает без хаков. код под C++ Builder: //------------------------------------------ void __fastcall TForm1::Button2Click(TObject *Sender){ #pragma push #pragma option -a1 if (!SavePictureDialog1->Execute()) return; Graphics::TBitmap* bmp = new Graphics::TBitmap(); bmp->Assign(Image1->Picture); TFileStream* fbmp = new TFileStream(SavePictureDialog1->FileName, fmCreate); //BITMAPFILEHEADER hdr; struct { WORD bfType; DWORD bfSize; WORD bfReserved1; WORD bfReserved2; DWORD bfOffBits; }hdr;//по непонятным мне причинам после сохранения первое поле //в файле занимает 4(!) байта вместо двух, если использовать //BITMAPFILEHEADER, как вообще-то и следует поступать //из-за этого глюка сохранённые таким образом бмпшки не читаются, //пришлось переобъявить структуру... :( ZeroMemory(&hdr, sizeof(hdr)); hdr.bfType = 0x4D42; hdr.bfSize = bmp->Width*bmp->Height*3; hdr.bfOffBits = sizeof(BITMAPINFOHEADER)+sizeof(hdr); fbmp->Write(&hdr, sizeof(hdr)); BITMAPINFO bmpinfo; ZeroMemory(&bmpinfo, sizeof(bmpinfo)); BITMAPINFOHEADER& info = bmpinfo.bmiHeader; info.biSize = sizeof(BITMAPINFOHEADER); info.biWidth = bmp->Width; info.biHeight = bmp->Height; info.biPlanes = 1; info.biBitCount = 24; info.biCompression = BI_RGB; info.biSizeImage = info.biWidth*info.biHeight*info.biBitCount/8; //здесь можешь задать свои размеры/количество точек... на метр(?) info.biXPelsPerMeter = 1000; info.biYPelsPerMeter = 1000; info.biClrImportant = 0; info.biClrUsed = 0; fbmp->Write(&info, sizeof(BITMAPINFOHEADER)); byte* pixels = new byte[info.biSizeImage]; GetDIBits(bmp->Canvas->Handle, bmp->Handle, 0, bmp->Height, pixels, &bmpinfo, DIB_RGB_COLORS); fbmp->Write(pixels, info.biSizeImage); delete[] pixels; delete fbmp; delete bmp; #pragma pop } //------------------------------------------ на паскале //------------------------------------------ procedure TForm1.Button2Click(Sender: TObject); var bmpfile: TFileStream; pixels: array of byte; bmphdr: TBITMAPFILEHEADER; bmpinfo: TBITMAPINFO; bmp: TBitmap; begin if not SavePictureDialog1.Execute then exit; bmp := TBitmap.Create; bmp.Assign(Image1.Picture); FillChar(bmphdr, 0, sizeof(bmphdr)); FillChar(bmpinfo, 0, sizeof(bmpinfo)); bmphdr.bfType := $4D42; bmphdr.bfSize := bmp.Width*bmp.Height*3; bmphdr.bfOffBits := sizeof(bmphdr)+sizeof(bmpinfo.bmiHeader); bmpfile := TFileStream.Create(SavePictureDialog1.FileName, fmCreate); bmpfile.Write(bmphdr, sizeof(bmphdr)); bmpinfo.bmiHeader.biSize := sizeof(TBITMAPINFOHEADER); bmpinfo.bmiHeader.biWidth := bmp.Width; bmpinfo.bmiHeader.biHeight := bmp.Height; bmpinfo.bmiHeader.biPlanes := 1; bmpinfo.bmiHeader.biBitCount := 24; bmpinfo.bmiHeader.biCompression := BI_RGB; bmpinfo.bmiHeader.biSizeImage := bmpinfo.bmiHeader.biWidth*bmpinfo.bmiHeader.biHeight*bmpinfo.bmiHeader.biBitCount div 8; bmpinfo.bmiHeader.biXPelsPerMeter := 1000;//пишешь свои размеры bmpinfo.bmiHeader.biYPelsPerMeter := 1000;//пишешь свои размеры bmpinfo.bmiHeader.biClrUsed := 0; bmpinfo.bmiHeader.biClrImportant := 0; SetLength(pixels, bmpinfo.bmiHeader.biSizeImage); GetDIBIts(bmp.Canvas.Handle, bmp.Handle, 0, bmp.Height, @pixels[0], bmpinfo, DIB_RGB_COLORS); bmpfile.Write(bmpinfo.bmiHeader, sizeof(bmpinfo.bmiHeader)); bmpfile.Write(pixels[0], bmpinfo.bmiHeader.biSizeImage); pixels := nil; bmpfile.Free; bmp.Free; end; //------------------------------------------ кстати, предложенный тобой код мог "работать нестабильно" из-за той-же самой глюки, когда 1е поле структуры BITMAPFILEHEADER занимает в файле 4 байта вместо двух, хотя оно и WORD.(я так понимаю, это DataAlignment при компиляции package был равен 4. :(.) Чтобы обойти этот глюк, можно в исходном коде, который ты писал, заменить sizeof(BITMAPFILEHEADER) на 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2006, 16:55 |
|
||
|
Разрешение графики
|
|||
|---|---|---|---|
|
#18+
СПАСИБО ОГРОМНОЕ!!! Работает! Я уже было потерял надежду. В очередной раз убедился что в мире не без добрых людей. Ещё раз спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2006, 00:56 |
|
||
|
Разрешение графики
|
|||
|---|---|---|---|
|
#18+
Лёлик2 СПАСИБО ОГРОМНОЕ!!! Работает! Я уже было потерял надежду. В очередной раз убедился что в мире не без добрых людей. Ещё раз спасибо. Пожалуйста. :) рад был помочь :). ЗЫ. Поддержку палитры не забудь добавить, если потребуется, а то всё сохраняется в 24бит RGB. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2006, 14:24 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=33700119&tid=2031186]: |
0ms |
get settings: |
6ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
163ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
33ms |
get tp. blocked users: |
1ms |
| others: | 231ms |
| total: | 454ms |

| 0 / 0 |
