Sobre edición de fotografía
- José Vicente Beltrán
- Posts: 279
- Joined: Mon Oct 10, 2005 8:55 am
- Location: Algeciras, España
- Contact:
Sobre edición de fotografía
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
necesito editar fotografias para ponerle texto en cualquier parte, en cualquier color o tamaño.
¿Se puede hacer?, en su caso, ¿un ejemplito?
Saludos
- José Vicente Beltrán
- Posts: 279
- Joined: Mon Oct 10, 2005 8:55 am
- Location: Algeciras, España
- Contact:
Re: Sobre edición de fotografía
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.
- Paco Garcia
- Posts: 172
- Joined: Fri Oct 07, 2005 12:00 pm
- Contact:
Hola José
Prueba esto a ver si te vale
Un saludo.
PD. Para utilizar otros formatos de imágenes ya postee un mensaje anteriormente con FreeImage.dll
Prueba esto a ver si te vale
Code: Select all
#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
PD. Para utilizar otros formatos de imágenes ya postee un mensaje anteriormente con FreeImage.dll
- José Vicente Beltrán
- Posts: 279
- Joined: Mon Oct 10, 2005 8:55 am
- Location: Algeciras, España
- Contact:
- Paco Garcia
- Posts: 172
- Joined: Fri Oct 07, 2005 12:00 pm
- Contact:
Por si necesitas:
Cambiar color de texto
Color de fondo de texto
Cambiar fuente
Un abrazo
Cambiar color de texto
Code: Select all
:
// rojo 0-255
// verde 0-255
// azul 0-255
nColor = SetTextColor( hDCMem, RGB( rojo, verde, azul ))
//.... funciones de pintar texto
SetTextColor( hDCMem, nColor )
Code: Select all
:
// rojo 0-255
// verde 0-255
// azul 0-255
nColor = SetBkColor( hDCMem, RGB( rojo, verde, azul ))
//.... funciones de pintar texto
SetBkColor( hDCMem, nColor )
Code: Select all
:
DEFINE FONT oFont NAME ... SIZE...
hOldFont = SelectObject( hDCMem, oFont:hFont)
//.... funciones de pintar texto
SelectObject( hDCMem, hOldFont)
oFont:End()
- José Vicente Beltrán
- Posts: 279
- Joined: Mon Oct 10, 2005 8:55 am
- Location: Algeciras, España
- Contact:
-
- Posts: 1033
- Joined: Fri Oct 07, 2005 3:33 pm
- Location: Cochabamba - Bolivia
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, _ desaparecen, entonces podriamos pensar en colocar en el ON PAINT algo que repinte para volver a obttener el bmp con _, 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
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, _ desaparecen, entonces podriamos pensar en colocar en el ON PAINT algo que repinte para volver a obttener el bmp con _, 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
- Paco Garcia
- Posts: 172
- Joined: Fri Oct 07, 2005 12:00 pm
- Contact:
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 _ 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...
Para salvar un rectangulo de bitmap:
seleccionamos el bitmap en un dispositivo de contexto de memoria
En hBmpMem tenemos el trozo que _. 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
Prueba a cargarlo una sola vez y "matarlo" cuando termines de utilizarlo. De esta manera _ 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...
Para salvar un rectangulo de bitmap:
seleccionamos el bitmap en un dispositivo de contexto de memoria
Code: Select all
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 )
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: 1033
- Joined: Fri Oct 07, 2005 3:33 pm
- Location: Cochabamba - Bolivia