FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Sobre edición de fotografía
Posts: 282
Joined: Mon Oct 10, 2005 08:55 AM
Sobre edición de fotografía
Posted: Wed Feb 15, 2006 10:01 AM

Hola a todos,
necesito editar fotografias para ponerle texto en cualquier parte, en cualquier color o tamaño.

¿Se puede hacer?, en su caso, ¿un ejemplito?

Saludos :shock:

Posts: 234
Joined: Tue Oct 25, 2005 12:39 AM
Re: Sobre edición de fotografía
Posted: Thu Feb 16, 2006 04:44 AM

Por si te sirve, yo uso este para poner las marca de agua

http://www.picture-shark.com/

Posts: 282
Joined: Mon Oct 10, 2005 08:55 AM
Re: Sobre edición de fotografía
Posted: Thu Feb 16, 2006 09:16 AM

Gracias por tu respuesta, pero lo que necesito es poder incluir un texto a una fotografía desde una aplicación FW, para integrarla dentro de otro sistema mas amplio que ya está funcionando.

Posts: 172
Joined: Fri Oct 07, 2005 12:00 PM
Sobre edición de fotografía
Posted: Fri Feb 17, 2006 08:51 AM
Hola José

Prueba esto a ver si te vale

#include "FiveWin.ch"


function Main()
local oWnd, oMenu

   MENU oMenu
      MENUITEM "Carga bmp" ACTION Carga( oWnd )
   ENDMENU

   DEFINE WINDOW oWnd MENU oMenu
   ACTIVATE WINDOW oWnd


return nil

function carga( oWnd )

   local cBmpFile := cGetFile( "*.bmp", "Please select a BMP file" )
   local hDC, hDCMem, hOldBmp, hBmp
   local hDib

   if !file( cBmpFile )
      ? "No encuentro " + cBmpFile
      return nil
   endif

   hDC := oWnd:GetDC()
   hBmp := ReadBitmap( hDC, cBmpFile )

   hDCMem := CreateCompatibleDC( hDC )
   hOldBmp := SelectObject( hDCMem, hBmp )

   TextOut( hDCMem, 10, 10, "Texto de prueba" )

   SelectObject( hDCMem, hOldBmp )
   DeleteObject( hDCMem )
   oWnd:ReleaseDC()

   hDib := DibFromBitmap( hBmp )
   DibWrite( "test.bmp", hDib )
   GloBalFree( hDib )
   DeleteObject( hBmp )

return nil


#pragma BEGINDUMP

#include <windows.h>
#include <winuser.h>
#include "hbapi.h"


HB_FUNC( CREATECOMPATIBLEBITMAP )
{
	 hb_retnl( (LONG) CreateCompatibleBitmap( ( HDC ) hb_parnl( 1 ), hb_parni( 2 ), hb_parni( 3 ) ));

}

HB_FUNC( CREATECOMPATIBLEDC )
{
	 hb_retnl( (LONG) CreateCompatibleDC( ( HDC ) hb_parnl( 1 )));

}
#pragma ENDDUMP


Un saludo.

PD. Para utilizar otros formatos de imágenes ya postee un mensaje anteriormente con FreeImage.dll
Posts: 282
Joined: Mon Oct 10, 2005 08:55 AM
Sobre edición de fotografía
Posted: Fri Feb 17, 2006 04:02 PM

Muchas gracias, Paco

me has dado algo para empezar ¡que no es poco!

saludos :shock:

Posts: 172
Joined: Fri Oct 07, 2005 12:00 PM
Sobre edición de fotografía
Posted: Fri Feb 17, 2006 06:44 PM
Por si necesitas:

Cambiar color de texto
:
// rojo    0-255
// verde 0-255
// azul    0-255

nColor = SetTextColor( hDCMem, RGB( rojo, verde, azul ))

//.... funciones de pintar texto

SetTextColor( hDCMem, nColor )


Color de fondo de texto

:
// rojo    0-255
// verde 0-255
// azul    0-255

nColor = SetBkColor( hDCMem, RGB( rojo, verde, azul ))

//.... funciones de pintar texto

SetBkColor( hDCMem, nColor )


Cambiar fuente

:
DEFINE FONT oFont NAME ... SIZE...

hOldFont = SelectObject( hDCMem, oFont:hFont)

//.... funciones de pintar texto

SelectObject( hDCMem, hOldFont)
oFont:End()


Un abrazo
Posts: 282
Joined: Mon Oct 10, 2005 08:55 AM
Sobre edición de fotografía
Posted: Fri Feb 17, 2006 06:58 PM

¿Como haces para leer el pensamiento?
En este momento estaba dandole vueltas precisamente a eso.

Gracias de nuevo!!!!!!!!! :shock:

Posts: 1088
Joined: Fri Oct 07, 2005 03:33 PM
Sobre edición de fotografía
Posted: Fri Feb 17, 2006 07:55 PM

Paco,

hay alguna manera de hacer este cambio sobre el bmp, pero que este bmp este en un dialogo y en lugar de guardarlo en un archivo volverlo a poner al mismo bmp, es decir rediibujar el bmp con el cambio.

Un ejemplo, si tienes un bmp en un dialogo le haces un cuantos floofill (es decir lo cambias) y luego mueves el dialogo o pones una ventana sobre ell, los cambios desaparecen, entonces podriamos pensar en colocar en el ON PAINT algo que repinte para volver a obttener el bmp con los cambios, pero esto dan resultados inesperados, por lo que hice fue hacer el cambio, guardalrlo a disco, recargar el bmp del archivo y lla tengo todo ok, pero no pude hacerlo sin utilizar un archivo temporal, claro no es mucho drama ello, pero tengo la curiosidad de como se podria hacer sin archivo temporal.

un saludo

Marcelo

Posts: 172
Joined: Fri Oct 07, 2005 12:00 PM
Sobre edición de fotografía
Posted: Sat Feb 18, 2006 01:54 AM
Hola, realmente cuando pintas en el hBmp estas pintando sobre el bitmap. Supongo que te esta sucediendo esto porque cada vez que pintas vuelves a cargar el bitmap desde disco.
Prueba a cargarlo una sola vez y "matarlo" cuando termines de utilizarlo. De esta manera los cambios permaneceran.

En cuanto al UNDO, (Por si las flais) se me ocurre que se puede ir salvando rectangulos de bitmap y guardandolos en un array anotando tambien las coordenadas de donde lo copiasteis.

Vamos, lo del UNDO es porque yo lo pediria, ya puestos... :D

Para salvar un rectangulo de bitmap:

seleccionamos el bitmap en un dispositivo de contexto de memoria

hDCMem := CreateCompatibleDC( hDC )
hOldBmp := SelectObject( hDCMem, hBmp )

//creamos un bitmap en memoria del tamaño del rectángulo que queremos

hBmpMem := CreateCompatibleBitmap( hDC, aRect[4]-aRect[2], aRect[3]-aRect[1] )

//copiamos del bitmap inicial al destino el rectangulo que deseamos:


hDCMem2 := CreateCompatibleDC( hDC )
hOldBmp2 := SelectObject( hDCMem2, hBmpMem )

BitBlt( hDCMem2, 0, 0, aRect[4]-aRect[2], aRect[3]-aRect[1], hDCMem, 
aRect[2], aRect[1], SRCCOPY ) //13369376

SelectObject( hDCMem2, hOldBmp2 )
SelectObject( hDCMem, hOldBmp )

DeleteDC( hDCMem2 )
DeleteDC( hDCMem )

En hBmpMem tenemos el trozo que hemos capturado. Lo metemos en un array y listo.

Hay que acordarse al final de todo este invento, cuando matemos el bitmap original y ya no nos sirva el array de bitmaps, de hacer un DeleteObject( aUndos[n] )
DeleteObject( aUndos[n+1] )
etc...

Bueno creo que mas o menos esta es la idea. Acordaros de liberar siempre lo que pilleis antes.

Un saludo

Paco Garcia
Posts: 1088
Joined: Fri Oct 07, 2005 03:33 PM
Sobre edición de fotografía
Posted: Mon Feb 20, 2006 06:58 PM

Paco,

gracias, lo probare

saludos

Marcelo

Continue the discussion