Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Нанесение даты и времени на jpeg изображение

21K
24 июля 2008 года
TITAMIN
58 / / 24.07.2008
Используется библиотека CXIMAGE
11
24 июля 2008 года
oxotnik333
2.9K / / 03.08.2007
Вы хотели похватстаться?
332
24 июля 2008 года
Valiant
416 / / 27.09.2004
Цитата: oxotnik333
Вы хотели похватстаться?



А может это очередной товарищ, который считает что мы телепаты???

21K
24 июля 2008 года
TITAMIN
58 / / 24.07.2008
Извините пожалуйста, протормозил.
Если кто-то может помоч, у меня тут проблемка, есть библиотечка cximage, сделал проект. Теперь бы как-то надо ,брать из дискриптора дату и прорисовать на фотке... воть
288
24 июля 2008 года
nikitozz
1.2K / / 09.03.2007
Цитата: TITAMIN
Теперь бы как-то надо ,брать из дискриптора дату и прорисовать на фотке... воть



Так что вы хотите узнать, как "взять" дату или как прорисовать ее?
Опять же - какую дату?

Если дату создания/модификации файла с изображением - используйте функции GetFileTime из WinApi или FileAge из VCL. Потом просто нарисуйте полученное значение на канве.

11
24 июля 2008 года
oxotnik333
2.9K / / 03.08.2007
Может это поможет? (если у библиотеки есть что либо типа TCanvas, которое можно привести к HDC)
 
Код:
BOOL TextOut(
    HDC hdc, // handle of device context
    int nXStart, // x-coordinate of starting position  
    int nYStart, // y-coordinate of starting position  
    LPCTSTR lpString, // address of string
    int cbString  // number of characters in string
   );
21K
24 июля 2008 года
TITAMIN
58 / / 24.07.2008
ДА... хороший вопрос.
Я хочу узнать как прорисовать ее, взять я догадываюсь как.
21K
24 июля 2008 года
TITAMIN
58 / / 24.07.2008
oxotnik333
тогда, вопрос следующего характера, вот есть приложение открывает допустим jpeg, по сути не важно... теперь когда оно декодировано и выведено на экран, формочку, я не знаю как правельно сказать, можно стандартной канвой прописать текст, и как это можно реализовать?
11
24 июля 2008 года
oxotnik333
2.9K / / 03.08.2007
оно (изображение) выводится на TCanvas, у канвы есть метод TCanvas::TextOut(int X, int Y, const AnsiString Text);
остается только получить TCanvas из библиотеки, либо если в TImage (TBitmap) выводится, то брать канву от них, рисовать текст и далее сохранять (через библиотеку или нет это Ваше дело)
332
24 июля 2008 года
Valiant
416 / / 27.09.2004
Сначала приводим к битмап
кладём на канву ваше изображение
рисуем дату
сохраняем с канвы в файл
21K
24 июля 2008 года
TITAMIN
58 / / 24.07.2008
пасиба буду пробывать, вот только как из библиотеки вытащить Tcanvas ))), из памяти что-ли...
11
24 июля 2008 года
oxotnik333
2.9K / / 03.08.2007
Вы бы коду децл привели, как выводится изображение и куда...
а то так пальцем тыкать негигиенично...
21K
24 июля 2008 года
TITAMIN
58 / / 24.07.2008
ПАСИБА, только как взять из cximage? проблемка... этот самый Tcanvas
21K
24 июля 2008 года
TITAMIN
58 / / 24.07.2008
да дело в том что я не знаю какую часть кода показать.........................
21K
24 июля 2008 года
TITAMIN
58 / / 24.07.2008
#include "ximage.h"

////////////////////////////////////////////////////////////////////////////////
// CxImage
////////////////////////////////////////////////////////////////////////////////
/**
* Initialize the internal structures
*/
void CxImage::Startup(DWORD imagetype)
{
//init pointers
pDib = pSelection = pAlpha = NULL;
pLayers = NULL;
//init structures
memset(&head,0,sizeof(BITMAPINFOHEADER));
memset(&info,0,sizeof(CXIMAGEINFO));
//init default attributes
info.dwType = imagetype;
info.nQuality = 90;
info.nAlphaMax = 255;
info.nBkgndIndex = -1;
info.bEnabled = true;
SetXDPI(96);
SetYDPI(96);
}
////////////////////////////////////////////////////////////////////////////////
/**
* Empty image constructor
* \param imagetype: (optional) set the image format, see ENUM_CXIMAGE_FORMATS
*/
CxImage::CxImage(DWORD imagetype)
{
Startup(imagetype);
}
////////////////////////////////////////////////////////////////////////////////
/**
* Call this function to destroy image pixels, alpha channel, selection and sub layers.
* - Attributes are not erased, but IsValid returns false.
*
* \return true if everything is freed, false if the image is a Ghost
*/
bool CxImage::Destroy()
{
//free this only if it's valid and it's not a ghost
if (info.pGhost==NULL){
if (pLayers) {
for(long n=0; n<info.nNumLayers;n++){ delete pLayers[n]; }
free(pLayers); pLayers=0;
}
if (pSelection) {free(pSelection); pSelection=0;}
if (pAlpha) {free(pAlpha); pAlpha=0;}
if (pDib) {free(pDib); pDib=0;}
return true;
}
return false;
}
////////////////////////////////////////////////////////////////////////////////
/**
* Sized image constructor
* \param dwWidth: width
* \param dwHeight: height
* \param wBpp: bit per pixel, can be 1, 4, 8, 24
* \param imagetype: (optional) set the image format, see ENUM_CXIMAGE_FORMATS
*/
CxImage::CxImage(DWORD dwWidth, DWORD dwHeight, DWORD wBpp, DWORD imagetype)
{
Startup(imagetype);
Create(dwWidth,dwHeight,wBpp,imagetype);
}
////////////////////////////////////////////////////////////////////////////////
/**
* image constructor from existing source
* \param src: source image.
* \param copypixels: copy the pixels from the source image into the new image.
* \param copyselection: copy the selection from source
* \param copyalpha: copy the alpha channel from source
* \sa Copy
*/
CxImage::CxImage(const CxImage &src, bool copypixels, bool copyselection, bool copyalpha)
{
Startup(src.GetType());
Copy(src,copypixels,copyselection,copyalpha);
}
////////////////////////////////////////////////////////////////////////////////
/**
* Copies the image from an exsisting source
* \param src: source image.
* \param copypixels: copy the pixels from the source image into the new image.
* \param copyselection: copy the selection from source
* \param copyalpha: copy the alpha channel from source
*/
void CxImage::Copy(const CxImage &src, bool copypixels, bool copyselection, bool copyalpha)
{
//copy the attributes
memcpy(&info,&src.info,sizeof(CXIMAGEINFO));
//rebuild the image
Create(src.GetWidth(),src.GetHeight(),src.GetBpp(),src.GetType());
//copy the pixels and the palette, or at least copy the palette only.
if (copypixels && pDib && src.pDib) memcpy(pDib,src.pDib,GetSize());
else SetPalette(src.GetPalette());
long nSize = head.biWidth * head.biHeight;
//copy the selection
if (copyselection && src.pSelection){
if (pSelection) free(pSelection);
pSelection = (BYTE*)malloc(nSize);
memcpy(pSelection,src.pSelection,nSize);
}
//copy the alpha channel
if (copyalpha && src.pAlpha){
if (pAlpha) free(pAlpha);
pAlpha = (BYTE*)malloc(nSize);
memcpy(pAlpha,src.pAlpha,nSize);
}
}
////////////////////////////////////////////////////////////////////////////////
/**
* Copies the image attributes from an existing image.
* - Works only on an empty image, and the image will be still empty.
* - <b> Use it before Create() </b>
*/
void CxImage::CopyInfo(const CxImage &src)
{
if (pDib==NULL) memcpy(&info,&src.info,sizeof(CXIMAGEINFO));
}
////////////////////////////////////////////////////////////////////////////////
/**
* \sa Copy
*/
CxImage& CxImage::operator = (const CxImage& isrc)
{
if (this != &isrc) Copy(isrc);
return *this;
}
////////////////////////////////////////////////////////////////////////////////
/**
* Initializes or rebuilds the image.
* \param dwWidth: width
* \param dwHeight: height
* \param wBpp: bit per pixel, can be 1, 4, 8, 24
* \param imagetype: (optional) set the image format, see ENUM_CXIMAGE_FORMATS
* \return pointer to the internal pDib object; NULL if an error occurs.
*/
void* CxImage::Create(DWORD dwWidth, DWORD dwHeight, DWORD wBpp, DWORD imagetype)
{
// destroy the existing image (if any)
if (!Destroy())
return NULL;

// prevent further actions if width or height are not vaild <Balabasnia>
if ((dwWidth == 0) || (dwHeight == 0)){
strcpy(info.szLastError,"CxImage::Create : width and height must be greater than zero");
return NULL;
}

// Make sure bits per pixel is valid
if (wBpp <= 1) wBpp = 1;
else if (wBpp <= 4) wBpp = 4;
else if (wBpp <= 8) wBpp = 8;
else wBpp = 24;

// limit memory requirements (and also a check for bad parameters)
if (((dwWidth*dwHeight*wBpp)>>8) > CXIMAGE_MAX_MEMORY){
strcpy(info.szLastError,"CXIMAGE_MAX_MEMORY exceeded");
return NULL;
}

// set the correct bpp value
switch (wBpp){
case 1:
head.biClrUsed = 2; break;
case 4:
head.biClrUsed = 16; break;
case 8:
head.biClrUsed = 256; break;
default:
head.biClrUsed = 0;
}

//set the common image informations
info.dwEffWidth = ((((wBpp * dwWidth) + 31) / 32) * 4);
info.dwType = imagetype;

// initialize BITMAPINFOHEADER
head.biSize = sizeof(BITMAPINFOHEADER); //<ralphw>
head.biWidth = dwWidth; // fill in width from parameter
head.biHeight = dwHeight; // fill in height from parameter
head.biPlanes = 1; // must be 1
head.biBitCount = (WORD)wBpp; // from parameter
head.biCompression = BI_RGB;
head.biSizeImage = info.dwEffWidth * dwHeight;
// head.biXPelsPerMeter = 0; See SetXDPI
// head.biYPelsPerMeter = 0; See SetYDPI
head.biClrImportant = 0;

pDib = malloc(GetSize()); // alloc memory block to store our bitmap
if (!pDib){
strcpy(info.szLastError,"CxImage::Create can't allocate memory");
return NULL;
}

//clear the palette
RGBQUAD* pal=GetPalette();
if (pal) memset(pal,0,GetPaletteSize());
//Destroy the existing selection
#if CXIMAGE_SUPPORT_SELECTION
if (pSelection) SelectionDelete();
#endif //CXIMAGE_SUPPORT_SELECTION
//Destroy the existing alpha channel
#if CXIMAGE_SUPPORT_ALPHA
if (pAlpha) AlphaDelete();
#endif //CXIMAGE_SUPPORT_ALPHA

// use our bitmap info structure to fill in first part of
// our DIB with the BITMAPINFOHEADER
BITMAPINFOHEADER* lpbi;
lpbi = (BITMAPINFOHEADER*)(pDib);
*lpbi = head;

info.pImage=GetBits();

return pDib; //return handle to the DIB
}
////////////////////////////////////////////////////////////////////////////////
/**
* \return pointer to the image pixels. <b> USE CAREFULLY </b>
*/
21K
24 июля 2008 года
TITAMIN
58 / / 24.07.2008
да... а смайлы круто вписались ))))))))
21K
24 июля 2008 года
TITAMIN
58 / / 24.07.2008
да, а вот так открываю :

void __fastcall TLogoAppForm::FileOpen(TObject *Sender)
{
if (OpenDialog->Execute())
{
FFileName = OpenDialog->FileName;
int pos=FFileName.Pos(".");
if (pos){
AnsiString ext = FFileName.SubString(1+pos,3);
ext = ext.LowerCase();
int format = CXIMAGE_FORMAT_UNKNOWN;
if (ext == "bmp") format = CXIMAGE_FORMAT_BMP;
if (ext == "gif") format = CXIMAGE_FORMAT_GIF;
if (ext == "ico") format = CXIMAGE_FORMAT_ICO;
if (ext == "pcx") format = CXIMAGE_FORMAT_PCX;
if (ext == "tga") format = CXIMAGE_FORMAT_TGA;
if (ext == "jpg") format = CXIMAGE_FORMAT_JPG;
if (ext == "tif" || ext == "tiff") format = CXIMAGE_FORMAT_TIF;
if (ext == "png") format = CXIMAGE_FORMAT_PNG;
if (ext == "wbmp") format = CXIMAGE_FORMAT_WBMP;
if (ext == "wmf" || ext == "emf") format = CXIMAGE_FORMAT_WMF;
//if (ext == "j2k" || ext == "jp2") format = CXIMAGE_FORMAT_J2K;
//if (ext == "jbg") format = CXIMAGE_FORMAT_JBG;

if (ximage) delete ximage;
ximage = new CxImage();
ximage->Load(FFileName.c_str(),format);
Invalidate();
}
}
}
5
24 июля 2008 года
hardcase
4.5K / / 09.08.2005
Цитата: TITAMIN
да, а вот так открываю


Вообще-то для танкистов есть теги CODE.

Собственно по коду. VCL сама умеет различать форматы файлов и достаточно сказать TBitmap::LoadFromFile(......)

21K
24 июля 2008 года
TITAMIN
58 / / 24.07.2008
а быстродействие???
11
24 июля 2008 года
oxotnik333
2.9K / / 03.08.2007
Цитата: hardcase
VCL сама умеет различать форматы файлов и достаточно сказать TBitmap::LoadFromFile(......)


только bmp файлы, jpeg через TJPEGImage загружаются... хотя м.б. после 6-й версии уже и умеет с разными форматами работать

288
25 июля 2008 года
nikitozz
1.2K / / 09.03.2007
Цитата: TITAMIN
ПАСИБА, только как взять из cximage? проблемка... этот самый Tcanvas



Не залезая глубоко в исходники CxImage: этот класс хранит изображение в виде массива DIB битов и структуры BITMAPINFO.
Так что копайте в сторону Windows GDI функций GetDIBits, SetDIBitsToDevice, CreateDIBitmap ну и соотвественно TextOut

5
25 июля 2008 года
hardcase
4.5K / / 09.08.2005
Цитата: oxotnik333
только bmp файлы, jpeg через TJPEGImage загружаются... хотя м.б. после 6-й версии уже и умеет с разными форматами работать

Я както исходники VCLя правил. Она у меня и JPEG-и грузила в TBitmap. Хотя могу путать (давно это было, хотя технику дзен не забыл)... может не TBitmap, но рисовать там канвой можно было стопудово.

11
25 июля 2008 года
oxotnik333
2.9K / / 03.08.2007
Цитата: hardcase
Я както исходники VCLя правил. Она у меня и JPEG-и грузила в TBitmap. Хотя могу путать (давно это было, хотя технику дзен не забыл)... может не TBitmap, но рисовать там канвой можно было стопудово.


А зачем править то? есть же либа TJPEGImage а потом TBitmap::Assign(TJPEGImage)

5
25 июля 2008 года
hardcase
4.5K / / 09.08.2005
Цитата: oxotnik333
А зачем править то? есть же либа TJPEGImage а потом TBitmap::Assign(TJPEGImage)

Вот именно потому и правил чтобы она автоматом цеплялась и не нужно было мучать разум о всяких ассигнах.

21K
25 июля 2008 года
TITAMIN
58 / / 24.07.2008
long CxImage::DrawString (HDC hdc, long x, long y, const TCHAR *text, RGBQUAD color, const TCHAR *font, long lSize=0, long lWeight=400, BYTE bItalic=0, BYTE bUnderline=0, bool bSetAlpha=false) - подскажите что такое RGBQUAD color и в каком формате его указать.
21K
25 июля 2008 года
TITAMIN
58 / / 24.07.2008
А ТО Я УЖЕ ПОТЕРЯЛ ВЕРУ ПОСЛЕ ДНЯ МУЧЕНИЙ, ВЕРУ ВО ВСЕ...
21K
25 июля 2008 года
TITAMIN
58 / / 24.07.2008
Я вот немного разобрался а вот вопрос если кто знает как принудительно цвет задать?
Цитата:
RGBQUAD color;
color = ximage->GetPixelColor( 200,250 );
ximage->DrawString( GetDC(NULL),35,35,"fgdf",color, "31" ,0,400,0,0,false);

288
25 июля 2008 года
nikitozz
1.2K / / 09.03.2007
Цитата: TITAMIN
Я вот немного разобрался а вот вопрос если кто знает как принудительно цвет задать?



Из MSDN

Код:
The RGBQUAD structure describes a color consisting of relative intensities
of red, green, and blue.

typedef struct tagRGBQUAD {
    BYTE    rgbBlue;
    BYTE    rgbGreen;
    BYTE    rgbRed;
    BYTE    rgbReserved;
} RGBQUAD;
Members
  rgbBlue
     Specifies the intensity of blue in the color.
  rgbGreen
     Specifies the intensity of green in the color.
  rgbRed
     Specifies the intensity of red in the color.
  rgbReserved
     Reserved; must be zero.


Просто задайте интенсивность всех трех цветов.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог