Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Clipboard Добавлено: 29.07.06 21:02  

Автор вопроса:  Vit | Web-сайт: www.home-soft.jino-net.ru
Вот код, который должен брать из буфера рисунок BMP.
Я знаю есть простой путь - средствами VB, но мне бы хотелось знать как это сделать при помощи API, для возможности использования кода в других языках.

    picScreen.Width = nWidth
    picScreen.Height = nHeight
'--------------------------------------------------
'Эта строка заменить все нижеследующие, заключённые в закоментарированные строки
'    picScreen.Picture = Clipboard.GetData(2)
'--------------------------------------------------
    OpenClipboard Me.hWnd
    If IsClipboardFormatAvailable(CF_BITMAP) <> 0 Then
        Dim hBitmap As Long
        hBitmap = GetClipboardData(CF_BITMAP)
'I вариант
'        BitBlt picScreen.hDC, 0, 0, nWidth / Screen.TwipsPerPixelX, nHeight / Screen.TwipsPerPixelY, hBitmap, 0, 0, vbSrcCopy
'        picScreen.Picture = picScreen.Image

'II вариант
        SelectObject hDC_Bit, hBitmap
        BitBlt picScreen.hDC, 0, 0, nWidth / Screen.TwipsPerPixelX, nHeight / Screen.TwipsPerPixelY, hDC_Bit, 0, 0, vbSrcCopy
        picScreen.Picture = picScreen.Image
    End If
    CloseClipboard
'--------------------------------------------------
    SavePicture picScreen.Picture, save_path & txtFile.Text & Format$(PicCount, "000000") & ".bmp"

Почему я не могу перенести изображение в PicturebBox?

Ответить

  Ответы Всего ответов: 11  

Номер ответа: 1
Автор ответа:
 avdey



ICQ: 219571279 

Вопросов: 34
Ответов: 486
 Профиль | | #1 Добавлено: 31.07.06 08:54
Set picScreen.Picture = LoadPicture("путь";)
?????

Ответить

Номер ответа: 2
Автор ответа:
 Vit



Вопросов: 68
Ответов: 62
 Web-сайт: www.home-soft.jino-net.ru
 Профиль | | #2
Добавлено: 31.07.06 12:47
Как загрузить рисунок в PictureBox из существующего файла я знаю. А, если файл не существует, т.е. находится в памяти (буфер обмена).
Можно VB средствами, но мне нужно через API.
Получаю Handle, но не могу созранить рисунок в файл.
Средствами VB это уже не пойдёт.
Здесь нужно сперва скинуть его в PictureBox, а потом уже сохранять.
Так вот, проблема в скидывании в PictureBox.

Ответить

Номер ответа: 3
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #3
Добавлено: 31.07.06 17:56
VBшный PictureBox использует свои COM-интерфейсы для работы с изображениями (IPicture и т.п.), поэтому оно вряд ли пригодится тебе для работы в других языках.

Ответить

Номер ответа: 4
Автор ответа:
 Sacred Phoenix



ICQ: 304238252 

Вопросов: 52
Ответов: 927
 Профиль | | #4 Добавлено: 31.07.06 18:10
2 avdey: советую те немного вникать в суть вопроса... Да и вопрос называется "Clipboard". Тебе это ни о чём не говорит?

Ответить

Номер ответа: 5
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #5
Добавлено: 31.07.06 18:42
Вроде всё правильно. Попроверяй хэндлы битмапа и контекста устройства. Например, в коде указан hDC_Bit, но как он создаётся я не вижу.

Ответить

Номер ответа: 6
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #6 Добавлено: 01.08.06 11:20
Мля, в инете такого г полно. Набери в гугле GetClipboardData CF_BITMAP и скопируй код. Всем искать лень.

Ответить

Номер ответа: 7
Автор ответа:
 Vit



Вопросов: 68
Ответов: 62
 Web-сайт: www.home-soft.jino-net.ru
 Профиль | | #7
Добавлено: 01.08.06 21:56
LamerOnLine
 Этот код, но не неашёл ничего особенного. Перепробовал все найденные варианты. Результат не изменился.

CyRax
 Я создаю переменную hDC_Bmp, а потом связываю его с Bitmap Handle'ом (hDC_Bmp).
SelectObject hDC_Bit, hBitmap
.
Да и там ошибки нет. Ошибка в строке вызова BitBlt, т.е., возможно, что я какие-либо параметры (Handle) не так передаю.
P.S. Только что заметил, что в SelectObject использую один Handle, а в BitBlt - другой. Но это тоже не критичная ошибка. Просто я несколько раз переделавал код и в итоге забыл исправить. Даже при использовании одного и того же Handle'ла ничего не происходит.

Sharp
 Да забудь ты о PictureBox, во всех "визуальных" языках (кроме Visual Assembler, если не появилось) есть свои варианты элемента, позволяющего работать с графическими элементами.
Просто в VB можно быстро написать програмку и "отшлифовать", которую вдальнейшем можно будет перевести на другие языки (при необходимости).

Ответить

Номер ответа: 8
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #8 Добавлено: 02.08.06 11:39
ээээээээ... надо понимать намеки феникса :)

picScreen.Picture = Clipboard.GetData(vbCFBitmap)


Или тебе ОБЯЗАТЕЛЬНО на API?

Ответить

Номер ответа: 9
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #9 Добавлено: 02.08.06 12:12

Option Explicit
Private Declare Function OleCreatePictureIndirect Lib "olepro32.dll" (PicDesc As PICTDESC, RefIID As GUID, _
ByVal fPictureOwnsHandle As Long, IPic As IPicture) As Long
Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function CloseClipboard Lib "user32" () As Long
Private Declare Function GetClipboardData Lib "user32" (ByVal wFormat As Long) As Long
Private Declare Function IsClipboardFormatAvailable Lib "user32" (ByVal wFormat As Long) As Long

Private Type PICTDESC
    cbSizeOfStruct As Long
    picType As Long
    hBitmap As Long
    hpal As Long
End Type

Private Type GUID
  ;Data1 As Long
  ;Data2 As Integer
  ;Data3 As Integer
  ;Data4(7) As Byte
End Type

Private Const PICTYPE_BITMAP = 1
Private Const CF_BITMAP = 2

Private Sub Command1_Click()
OpenClipboard Me.hwnd
Dim hBitmap As Long
Dim IPic As IPicture
If IsClipboardFormatAvailable(CF_BITMAP) = 0 Then
    CloseClipboard
    MsgBox "No bitmap"
    Exit Sub
End If
hBitmap = GetClipboardData(CF_BITMAP)
Dim IID_IDispatch As GUID
  With IID_IDispatch
    .Data1 = &H20400
    .Data4(0) = &HC0
    .Data4(7) = &H46
  End With
  
Dim Pic As PICTDESC
Pic.cbSizeOfStruct = Len(Pic)
Pic.picType = PICTYPE_BITMAP
Pic.hBitmap = hBitmap
OleCreatePictureIndirect Pic, IID_IDispatch, PICTYPE_BITMAP, IPic
Picture1.Picture = IPic
CloseClipboard
End Sub

Ответить

Номер ответа: 10
Автор ответа:
 Sacred Phoenix



ICQ: 304238252 

Вопросов: 52
Ответов: 927
 Профиль | | #10 Добавлено: 02.08.06 18:24
ээээээээ... надо понимать намеки феникса :)
не это, ведь
Я знаю есть простой путь - средствами VB, но мне бы хотелось знать как это сделать при помощи API

а там я спрашивал, говорит ли ему [avdey] что-нибудь строчка Clipboard, имея в виду работу работу с буфером

Ответить

Номер ответа: 11
Автор ответа:
 Vit



Вопросов: 68
Ответов: 62
 Web-сайт: www.home-soft.jino-net.ru
 Профиль | | #11
Добавлено: 02.08.06 21:32
LamerOnLine
 Спасибо, то, что надо.

Всем
 Извинияюсь, есть текст вопроса не был понятен сразу.
 Иногда (точнее очень часто) бывает трудно выразить мысли словами.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам