Inconsistency in the Dictionary for structure COMT_BSP_BP_SEAREQ_DIVERSE
Please could someone help me out on this one. I am new to ABAP and CRM Technical and have just started my career on this new track. I am getting "Inconsistency in the Dictionary for the structure COMT_BSP_BP_SEAREQ_DIVERSE" on the WebUI as error when I am logging into it -this error has got generated after I was trying to create a field using AET on WebUI. I have taken the help of another ABAPer who is presently more adept that me and he used st22 to identify that a class 'CL_BUPA_IL_SEARCH_SERVICE' is not getting activated which is resulting in this error. There is 'Inconsistency in the Dictionary for the structure "COMT_BSP_BP_SEAREQ_DIVERSE".' The BASIS guys have told me that I need to find some note to get this fixed - I have never done this. Please could someone give me a step- by-step solution to get this issue resolved. Please if there is any notes that would supplement this, kindly mail me at nishant.prasad(at)zensar.in. Thank you.
Inconsistency in the Dictionary for the structure "COMT_BSP_BP_SEAREQ_DIVERSE".Error in the SAP kernel. The current ABAP "SAPLCOM_PARTNER_TOOLS" program had to be terminated because the ABAP processor detected an internal system error. Please could someone provide resolution.
Similar Messages
-
Inconsistency in the Dictionary for the structure "MC02M_0ITM".
Hi Expert,
we are applying ehp3 for ERP 6.0. I am getting the below abap dump DDIC_TYPE_INCONSISTENCY.
Runtime Errors DDIC_TYPE_INCONSISTENCY
Date and Time 29.08.2011 10:12:27
Short text
Inconsistency in the Dictionary for the structure "MC02M_0ITM".
What happened?
Error in the SAP kernel.
The current ABAP "SAPLMCEX" program had to be terminated because the
ABAP processor detected an internal system error.
Error analysis
There is an internal system error.
eliminated with ABAP/4.
How to correct the error
The internal system error cannot be fixed by ABAP means only.
You may be able to find a solution in the SAP note system. If you have
access to the SAP note system, try searching for the following terms:
"DDIC_TYPE_INCONSISTENCY" " "
"SAPLMCEX" or "LMCEXTOP"
I can see there is error on Table MC02M_0ITM:
Table MC02M_0ITM could not be activated (E- Field ZZUNDTSORT in table MC02M_0ITM is specified twice. Please check )
when I run the program RSDDCHECK in your system, for check the structure "MC02M_0ITM".
There is som error.
Any Idea how can I solve this kind of error. Is it some repport for help this?
RegardsHi Srikishan,
Thanks for reply.
There is just one field ZZUNDTSORT on talbe.
When I try to check the table I get this log:
Check table/structure MC02M_0ITM
Check table MC02M_0ITM (REZ/29.08.11/11:14)
Enhancement category 3 possible, but include or subty. not yet classified
Field ZZAFHENTFORM in table MC02M_0ITM is specified twice. Please check
Field ZZAFHKVANTUM in table MC02M_0ITM is specified twice. Please check
Field ZZAFHTERMFRA in table MC02M_0ITM is specified twice. Please check
Field ZZAFHTERMTIL in table MC02M_0ITM is specified twice. Please check
Field ZZAFREGNDATO in table MC02M_0ITM is specified twice. Please check
Field ZZAFREGNKVAMTUM in table MC02M_0ITM is specified twice. Please check
Field ZZAFREGNMEINS in table MC02M_0ITM is specified twice. Please check
Field ZZALTMATNR in table MC02M_0ITM is specified twice. Please check
Field ZZALTMPRIS in table MC02M_0ITM is specified twice. Please check
Field ZZANSOEGNR in table MC02M_0ITM is specified twice. Please check
Field ZZANTHA in table MC02M_0ITM is specified twice. Please check
Field ZZBK_DUMMY1 in table MC02M_0ITM is specified twice. Please check
Field ZZBK_DUMMY2 in table MC02M_0ITM is specified twice. Please check
Field ZZBK_GRKERN in table MC02M_0ITM is specified twice. Please check
Field ZZBK_KNKERN in table MC02M_0ITM is specified twice. Please check
Field ZZBK_MELDR in table MC02M_0ITM is specified twice. Please check
Field ZZBK_OLIEIND in table MC02M_0ITM is specified twice. Please check
Field ZZBK_RENS in table MC02M_0ITM is specified twice. Please check
Field ZZBK_RENTFRO in table MC02M_0ITM is specified twice. Please check
Field ZZBK_RENTIL in table MC02M_0ITM is specified twice. Please check
Field ZZBK_TOR in table MC02M_0ITM is specified twice. Please check
Field ZZBK_TORTIL in table MC02M_0ITM is specified twice. Please check
Field ZZBPROT in table MC02M_0ITM is specified twice. Please check
Field ZZBUREN in table MC02M_0ITM is specified twice. Please check
Field ZZBVAND in table MC02M_0ITM is specified twice. Please check
Field ZZFORBELNR in table MC02M_0ITM is specified twice. Please check
Field ZZFORFALDSDATO in table MC02M_0ITM is specified twice. Please check
Field ZZFORVUDB in table MC02M_0ITM is specified twice. Please check
Field ZZGJAHR in table MC02M_0ITM is specified twice. Please check
Field ZZKONCEPTNR in table MC02M_0ITM is specified twice. Please check
Field ZZLAESSELV in table MC02M_0ITM is specified twice. Please check
Field ZZLAGERLEJDATO in table MC02M_0ITM is specified twice. Please check
Field ZZLAGERLEJSATS in table MC02M_0ITM is specified twice. Please check
Field ZZLAGERSATSDATO in table MC02M_0ITM is specified twice. Please check
Field ZZLAGERSATSDATO2 in table MC02M_0ITM is specified twice. Please check
Field ZZLAGERSATSDATO3 in table MC02M_0ITM is specified twice. Please check
Regards -
Inconsistency in the Dictionary for the structure "VXO2APPL"
Hi gurus,
I started with SP stack upgrade to 10(Install SAP EHP1 for SAP NetWeaver 7.0 Stack 10 with Kernel 7.20).
--First i did kernel upgrade from 701 patch 111 to 720 patch 105 which was successfull.
--Now when i tried to upgrade the stack it gives me below error:
Runtime Errors DDIC_TYPE_INCONSISTENCY
Date and Time 22.02.2012 14:16:39
Short text
Inconsistency in the Dictionary for the structure "VXO2APPL".
What happened?
Error in the SAP kernel.
The current ABAP "SAPLSDOC" program had to be terminated because the
ABAP processor detected an internal system error.
Error analysis
There is an internal system error.
eliminated with ABAP/4.
Trigger Location of Runtime Error
Program SAPLSDOC
Include LSVRXPIN
Row 1.096
**************************************************************************8
I am able to login to the system in 000 client but when i give any tcode i get this error....(i am only able to fire st22 and no other t code)
Anyone who can help or has got the same problem earlier?
Thanks
SiddharthHi Siddharth,
Is Kernel upgrade to 720 really required for Support package stack upgrade ?
because information clearly states "Error in the SAP kernel" rather i would suggest to upgrade your SAP system kernel to latest of 701 patch level 150
Once you revert kernel to 701 , then try applying Support packages via client 000.
Let us know results
Regards, -
Inconsistency in the Dictionary for the structure "FAGLPOSX" - GL Planning
Hi,
We are in ECC 6.0. After inputting plan data for GL using TCode GP12N, I am trying to run the report F.01. However the system is giving the error "Inconsistency in the Dictionary for the structure "FAGLPOSX"". Has anyone faced this problem before? Do I have to activate something before I start planning? Do help if you have a solution for the same.
Thanks and Regards
Shivram.Hi,
Solved!! I had incorrectly added EBELN in the additional fields for line item display config. This resulted in the EBELN field appearing twice in FAGLPOSX and hence the error.
Rgds
Shivram. -
I still need help with the Dictionary for my Nokia...
I still need help with the Dictionary for my Nokia 6680...
Here's the error message I get when trying to open dictionary...
"Dictionary word information missing. Install word database."
Can someone please provide me a link the where I could download this dictionary for free?
Thanks!
DON'T HIT KIDS... THEY HAVE GUNS NOW.oops, im sorry, i didnt realised i've already submitted it
DON'T HIT KIDS... THEY HAVE GUNS NOW. -
Can i change the dictionary for spell checking
Hi,
I am using the trial version of robo help and I am testing
how the support for german is.
I changed my project to german (file / project setings /
language). The result up to now is, that there is german spell
checking, but the dictionary used doesn't know all words that I' m
using. Of course I can add word by word to the dictionory, but I
dont't like to do this hard job.
Is there a way to use the dictionary which MS Word is using,
which would be very fine for me?
If anyone can help me, thanks for this.
Kindly regards
FritzjHi all
I did a bit of digging around and here is what I've
discovered. Hopefully it will help?
I am using Word 2003, so the method outlined here is for that
version. Note that I'm not a particularly rabid Word user, as I
tend to avoid it if at all possible, so I suppose other versions
may differ. Additionally, I'm assuming here that you are referring
to the personal dictionary and not one that is supplied by virtue
of installing Word or some other component.
In Word, I located the personal dictionary. (Tools >
Options... > Spelling & Grammar tab > Custom
Dictionaries... button) This listed the "Full path" of
C:\...\Application Data\Microsoft\Proof\CUSTOM.DIC. I find this
mildly amusing, as I can't truly see the "full path" and am left
wondering what lies between C:\ and \Application Data. I mean, ...
could be anything, no?
So on a hunch, I looked in the following location:
C:\Documents and Settings\Rick Stone\Application
Data\Microsoft\Proof
As luck would have it, there was CUSTOM.DIC all big as life
and twice as natural.
Suspecting it was a simple ASCII text file as the RoboHelp
HTML personal dictionary is, I tried opening it using Windows
Notepad. Sure enough, it popped open. Seems to simply list terms
with no other information.
So at this point, we know how to access the contents of the
personal dictionary for Word 2003. Now let's look at RoboHelp HTML,
shall we?
In RoboHelp HTML, you click Tools > Spelling Options...
> Dictionaries tab. Here, you should see Personal Dictionary.tlx
listed in the left panel bearing the label of "Used dictionaries:"
(Sorta sounds like a library sale, eh?) To the right of the file
name, in the same pane, you should see the path listed. Mine reads:
file://C:/Documents and Settings/Rick Stone/Application
Data/eHelp/Lexicons/Personal Dictionary.tlx
I opened it using Windows Notepad and here is what I see:
#LID 30840
1boffo i
2xzxz azxzx
3ppp ApPp
4azx cxza
5winnie CWiNnIe
6garbo e
I have some really odd terms in there. And for good reason!
During my initial spelunking, it appears that a particular
structure is in place. So I tested by adding terms along with
different options for each term. The terms listed are matched to
the option used when you click the Modify... button on the Spelling
Options dialog.
1boffo i
1boffo is the term and the i means "No action" is the option
used for the term.
2xzxz azxzx
2xzxz is the term and the a means "Auto Change" is the option
used for the term. The zxzx following the a indicates the term to
automatically change to.
3ppp ApPp
3ppp is the term and the A means "Auto Change (Preserve
Case)" is the option used for the term. The pPp following the A
indicates the term to automatically change to.
4azx cxza
4azx is the term and the c means "Change" is the option used
for the term. The xza following the c inidicates the term to offer
to change to.
5winnie CWiNnIe
5winnie is the term and the C means "Change (Preserve Case)
is the option used for the term. The WINnie following the C
indicates the term to offer to change to.
6garbo e
6garbo is the term and the e means "Treat as misspelled" is
the option used for the term.
Sooo, having looked all that over, it would seem as simple as
copying the contents of the original Personal Dictionary from Word,
then opening the Personal Dictionary from RoboHelp HTML and pasting
the terms in. Then try modifying them a tad by inserting an "i"
following the term. I'm not sure if a tab is what was used between
the term and the i, so it may take a bit of trial and error.
Hopefully this helps a bit... Rick -
How do you get the dictionary for InDesign CS 5 to learn a word like "mm" as in mm/dd/yyyy
Sometimes I can't get the dictionary in InDesign CS 5 for windows to learn word that I use over & over. The Add button across from Add to User Dictionary is disabled. How can I enable that button & save something like "mm" in "mm/dd/yyyy?"
Thanks!A button that doesn't work when you think it should could indicate damaged preference files. See http://forums.adobe.com/thread/526990
-
Can someone post a .pkg of the Dictionary for OS X Tiger?
My efforts to find one already available didn't turn up anything. I'm trying to help a friend who's dictionary has mysteriously vanished and it would just be easiest to re-install the Dictionary application. Of course I could use Pacifist, but I have OLD install disks that don't have it, and he doesn't have his install disks.
Thanks!Components of OS X cannot legally be distributed outside of the installer for OS X. But you can replace lost or damaged parts.
How to Use Pacifist to Replace Deleted or Missing OS X Components
Insert the OS X Installer DVD into the optical drive. Use a simple utility like TinkerTool to toggle invisibility so you can see invisible items. Alternatively, open the Terminal application in your Utilities folder and at the prompt enter the following:
defaults write com.apple.finder AppleShowAllFiles Yes
Press RETURN.
To turn off the display of invisible files repeat the above command substituting No for Yes.
The install packages are located in the /System/Installation/ folder on the DVD.
Download the shareware utility Pacifist from VersionTracker or MacUpdate. Use it to extract a fresh copy of the missing item(s) from the file archives on your OS X installation DVD. The file archives are in the /System/Installations/ folder (use Go to Folder option in the Go menu of the Finder.)
Here are Four Basic ways to use Pacifist (courtesy of George Orville.)
A. Drag a .pkg icon onto the Pacifist window .....proceed to step 7.
B. Click on “Open Package ....” and navigate to package desired and click “Open” in the open/save window.....proceed to step 7.
C. Insert Mac OS X installer CD and when it mounts, navigate to .... Menu->Go->Go to Folder.
In the path field enter or paste ....
/Volumes/disc name/System/Installation/Packages (where disc name is the name of the CD/DVD that you inserted.
• Click on the "Go" button .....
• Drag a .pkg to Pacifist..... proceed to step 7.
The package you'll need will have to be discovered by trial and error, but for most applications you should start with the Essentials.pkg and/or Additional Essentials.pkg.
D. Insert your Mac OS X install disk 1 .... and open Pacifist.
1. In Pacifist, select "Open Mac OS X Install Packages" ... dialog may appear asking for disk 2, then disk 3 and finally disk 1 again.... {if DVD is not used)...If “Stop Loading” is selected...the procedure will stop!!!
2a. When loading is complete, a new window appears, click the triangle to display contents of each package...Select item and proceed to step 7.
2b. or click the “Find” icon in the Pacifist window and type the name of the software you need.
3. In the list that comes back, click the top most entry for the item that you want. ..... that is the one for the English language.
4. On the top of the Pacifist window, click “verify” .... you will probably be prompted for your password.
5. Enter checks for.... “verify permissions” and “verify file contents.” and click “verify” ....enter password when prompted.... you will get back output which may look like this:
20 files were scanned.
20 of 20 files were present on the hard disk.
0 of 20 files had file permissions that did not match those specified in the package.
0 of 20 files had checksums that did not match those specified in the package.
6. Click “close”. Go to step 7.
Extract or Install........
7. In the Toolbar (upper left), you now have the option to extract or install. Click a file in the lower list and those two icons will be enabled.
8. If “Extract to...” is selected.... navigate to the location where the file will be placed, select “choose”, select “extract” in new dialog that appears,authenicate , if prompted, click “OK”.
9. In the next dialog, click “Extract”.
10. If “Install” is selected... dialog will appear with the location/path of the installed software. Click “Install”
11. Type in your password, click “OK”
• Pacifist will begin to extract files.
12. In steps 8/10ß.... you also have the choice to “cancel”
Notes.....
• Pacifist may find that a file it is installing already exists on the hard disk. Pacifist will present you with an alert panel....
Stop
Leave original alone
Update ..... Default selection
Replace .... Replace option should only be used on full install packages -
Configuring Dictionary for password policy
Hi all,
I am trying to configure the dictionary for password checking. But it is showing me following error
XPRESS exception ==> com.waveset.util.WavesetException: Can't call method queryString on class com.waveset.util.JdbcUtil ==> com.waveset.util.WavesetException: ==> java.sql.SQLException: Base table or view not found, message from server: "Table 'waveset.dictionary' doesn't exist".
It looks that it needs some table "dictionary" in waveset database.
But what will b the structure for that table???
Please suggest the solution to remove this error.
ThanksHi,
I have created the table using the script given in sample folder and configured the dictionary.
But now when i am trying to change the password it is giving following error
The password policy is configured to check passwords against a dictionary, but the dictionary is not configured.
Please suggest any idea to remove this error.
Thanks -
Where has the dictionary gone with IOS 6?
After installing IOS 6 on my iPad 2 the dictionary for iBooks and New York Times is lost. I've done the recommended forced app restart and shut down of the iPad without result. I have also turned off the voiceover to no help. I see others are complaining about the same Issue. Does anyone know the status on this? Is it going to be fixed or are we going to be left without dictionary? Apple should tell us whether it is going to come back or if it doesn't fit into their business plan.
You should have the dictionary for all Apple apps. If you type a word in Notes and then select it, do you not get a "define" option? Have you also done a Reset of your iPad? Is your active Keyboard the one for English?
Nobody in these forums can tell you anything about Apple's plans, but you can tell them what you want via
http://www.apple.com/feedback -
I saw that selecting a word in a ibook, you can look up the dictionary for that word; is it possible to get to do the same for a word on a webpage? (I saw that, normally, selecting a word on a webpage you get only the "copy" function)
thanks!I do not know of any iPad browser that has that feature Maybe after multitasking is available someone can write an app to easily do that.
-
"The Dictionary structure or table "*C865" is either not active or does"
Hello experts,
I have a transaction - VKOA. I get the following error on executing this t-code. The program used by this t code is SAPL089C.
The error is
Runtime errors SYNTAX_ERROR
Occurred on 11/23/2009 at 05:12:58
Syntax error in program "SAPL089C ".
What happened?
The following syntax error occurred in the program SAPL089C :
"The Dictionary structure or table "*C865" is either not active or does not exist."
Error in ABAP application program.
The current ABAP program "SAPLSVIM" had to be terminated because one of the
statements could not be executed.
This is probably due to an error in the ABAP program.
Error analysis
The following syntax error was found in the program SAPL089C :
The Dictionary structure or table *C865 is either not active or does not exist.
Please suggest a suitable solution to this problem...
Many Thanks in adv.
Kunal
Edited by: kunal kotak on Nov 23, 2009 6:53 PMHi ,
I will try the solution propesed by Max.
In the meantime, I would like to confirm if there is something related to SAP Note # SAP Note 72121. Refer the following details from the note.
Symptom
When you maintain account determination (FI or SD), you get the error
message:
The DDIC structure or table "*C400" is not active or does not exist.
OR
The system writes a dump with DBIF_NTAB_TABLE_NOT_FOUND, C400 was not
found.
C401 can also appear instead of C400.
Additional key words
Tables C400, C401.
Program: SAPL089C, L089CT00
Transaction: VKOA
Solution as per the note
1. Execute the program RV12A002. On the selection screen, enter Usage C,
Tables 400 to 401.
WARNING: Make sure that you only delete C400 and C401!
Execute the program.
2. Execute program RV12A001. On the selection screen, enter Usage C and
mark 'Reports & Screens'.
Can there be sometihing similar to this for C865 table as well. Just a thought. -
Help for Structure in Local Dictionary
Hi All
I need to create a structure of structures in local dictionary of the application.
While setting the data type of the element in the structure, It just give me the option for simple data type and predefined datatype.
Is there any way in which we can create structure of structure?
Please help
Thanks in advance
Regards
Sonal ManglaI think it's no possible because the generated file .xlf have different tags inside for the structures and simple types....
I tried but without a solution.
Bye,
Vito -
I'm having some difficulty with transferring images from a UDP Client to a UDP Server. The issue is receiving the bytes necessary to update an original image sent from the Client to the Server and updating the Servers List(Of Byte) with the
new bytes replacing bytes in that list. This is a simplex connection where the Sever receives and the Client sends to utilize the least amount of bandwidth for a "Remote Desktop" style application where the Server side needs image updates of whatever
occurs on the Client desktop.
So far I can tranfer images with no issue. The images can be be any image type (.Bmp, .Gif, .JPeg, .Png, etc). I was working with sending .JPeg's as they appear to be the smallest size image when a Bitmap is saved to a memory stream as type
.JPeg. And then I am using GZip to compress that byte array again so it is much smaller. However on a loopback on my NIC the speed for sending a full size screen capture is not very fast as the Server updates fairly slowly unless the Clients screen capture
Bitmap is reduced in size to about 1/3'd of the original size. Then about 12000 bytes or less are sent for each update.
Due to .JPeg compression I suppose there is no way to get the difference in bytes between two .JPegs and only send those when something occurs on the desktop that alters the desktop screen capture image. Therefore I went to using .Bmp's as each
.Bmp contains the same number of bytes in its array regardless of the image alterations on the desktop. So I suppose the difference in bytes from a second screen capture and an inital screen capture are what is different in the second image from the initial
image.
What I have done so far is save an initial Bitmap of a screen capture using a memory stream and saving as type .Bmp which takes less than 93 milliseconds for 4196406 bytes. Compressing that takes less than 118 milliseconds to 197325 bytes for
the current windows on the desktop. When that is done PictureBox1 is updated from nothing to the captured image as the PictureBox's background image with image layout zoom and the PictureBox sized at 1/2 my screens width and 1/2 my screens height.
Then I save a new Bitmap the same way which now contains different image information as the PictureBox is now displaying an image so its back color is no longer displayed (solid color Aqua) and the cursor has moved to a different location. The
second Bitmap is also 4196406 in bytes and compressed it was 315473 bytes in size.
I also just found code from this link Converting a Bitmap to a Byte Array (and Byte Array to Bitmap) which gets a byte array
directly from a Bitmap and the size of that is 3148800 for whatever is full screen captured on my laptop. So I should be able to work with smaller byte arrays at some point.
The issue I'm having is that once the Client sends an image of the desktop to the Server I only want to update the server with any differences occuring on the Clients desktop. So what I have done is compare the first screen captures bytes (stored
in a List(Of Byte)) to the second screen captures bytes (stored in a List(Of Byte)) by using a For/Next for 0 to 4196405 where if a byte in the first screen captures List is not equal to a byte in the second screen captures List I add the index and byte of
the second screen captures list to a Dictionary(Of Integer, Byte). The Dictionary then only contains the indexes and bytes that are different between the first screen capture and second screen capture. This takes about 125 milliseconds which I think is pretty
fast for 4196406 byte comparison using a For/Next and adding all the different bytes and indexes for each byte to a Dictionary.
The difference in Bytes between the inital screen capture and the second screen capture is 242587 as an example which changes of course. For that amount of bytes the Dictionary contains 242587 integers as indexes and 242587 bytes as different
bytes totaling 485174 bytes for both arrays (keys, values). Compressed the indexes go from 242587 to 43489 bytes and the values go from 242587 to 34982 bytes. Which means I will have to send 78, 481 bytes from the Client to the Server to update the display
on the server. Quite smaller than the original 4196406 bytes of the second Bitmap saved to type .Bmp or the compressed size of that array which was 315473 bytes. Plus a few bytes I add as overhead so the server knows when an image array ends and how many packets
were sent for the array so it can discard complete arrays if necessary since UDP is lossfull although probably not so much in current networks like it may originally have been when the internet started.
In reality the data from the Client to the Server will mostly be the cursor as it moves and updating the Server image with only a few hundred bytes I would imagine at a time. Or when the cursor selects a Button for example and the Buttons
color changes causing those differences in the original screen capture.
But the problem is if I send the Dictionaries Indexes and Bytes to the Server then I need to update the original Bitmap List(Of Byte) on the server by removing the Bytes in the received informations Index locations array from the Servers Bitmap
List(Of Byte) and replacing those Bytes with the Bytes in the received informations Byte array. This takes so long using a For/Next for however many indexes are in the received informations Index array to update the Bitmap List(Of Byte) on the server using
"Bmp1Bytes.RemoveAt(Index As Integer)" followed by "Bmp1Bytes.Insert(Index As Integer, Item As Byte)" in the For/Next.
I've tried various For/Next statements including using a new List(Of Byte) with If statements so If the the integer for the For/Next ='s the Key in a Dictionary(Of Integer, Byte) using a Counter to provide the Dictionaries Key value then
the Dictionaries byte value will be added to the List(Of Byte) and the counter will increas by one Else the List(Of Byte) adds the original "Bmp1Bytes" byte at that index to the new List(Of Byte). This takes forever also.
I also tried the same For/Next adding to a new Dictionary(Of Integer, Byte) but that takes forever too.
I think I could use RemoveRange and AddRange to speed things up. But I don't know how to retrieve a contiguous range of indexes in the received indexes that need to be updated in the servers "Bmp1Bytes" List(Of Byte) from the received
array of indexes and bytes which are in a Dictionary(Of Integer, Byte). But I believe this would even be slower than some realistic method for replacing all Bytes in a List(Of Byte) when I have the indexes that need to be replaced and the bytes to replace
them with.
Even if I just used AddRange on a new List(Of Byte) to add ranges of bytes from the original "Bmp1Bytes" and the changes from the Dictionary(Of Integer, Byte) I think this would be rather slow. Although I don't know how to do that
by getting contiguous ranges of indexes from the Dictionaries keys.
So I was wondering if there is some method perhaps using Linq or IEnumerable which I've been unable to figure anything out which could do this.
I do have some copy and pasted code which I don't understand how it works that I am using which I would guess could be altered for doing something like this but I can't find information that provides how the code works. Or even if I did
maybe I can't understand it. Like the code below which is extremely fast.
Dim strArray() As String = Array.ConvertAll(Of Integer, String)(BmpComparisonDict.Keys.ToArray, Function(x) x.ToString())
La vida locaMonkeyboy,
That was quite a bit to read, but still a bit unclear. Could you put a specific list of goals/questions, asked in the smallest possible form?
It seems like either you're making a program that monitors activity on your computer, or you're writing some kind of remote pc app.
When you do get your bytes from using lockbits, keep in mind all the files header info would be lost. I think retaining the header info is worth the extra bytes.
The other, thing: I'm not sure if you're taking 32bpp screen shots, but also keep in mind that the "whole desktop" is the final destination for blended graphics, if that makes sense. What I mean is that there is no need to capture an "alpha"
channel for a desktop screenshot, as alpha would always be 255, this could save you 1 byte per pixel captured... Theres nothing "behind" the desktop, therefore no alpha, and every window shown above the desktop is already blended. I suggest using
24Bpp for a full screen capture.
Your X,Y information for the mouse could be stored as UINT16, this would save you a measly 2 bytes per location update/save.
When you update your byte arrays, maybe you can turn the array into a stream and write to whatever index, however many bytes, that should prevent a "Shift" of bytes, and instead overwrite any bytes that "get in the way".
ex
Dim example As String = "This is an example."
Dim insertString As String = "was"
Dim insertBytes As Byte() = System.Text.Encoding.ASCII.GetBytes(insertString)
Dim bytes As Byte() = System.Text.Encoding.ASCII.GetBytes(example)
Dim modifiedBytes As Byte() = {}
Using ms As New System.IO.MemoryStream(bytes)
ms.Position = 5
ms.Write(insertBytes, 0, 3)
modifiedBytes = ms.ToArray
End Using
Dim newString As String = System.Text.Encoding.ASCII.GetString(modifiedBytes)
'Notice how below there isn't the word "is" anymore, and that there isn't a
'space.
'This demonstrates that you overwrite existing data, versus shifting everything to
'the right.
'Returns: This wasan example.
MsgBox(newString)
“If you want something you've never had, you need to do something you've never done.”
Don't forget to mark
helpful posts and answers
! Answer an interesting question? Write a
new article
about it! My Articles
*This post does not reflect the opinion of Microsoft, or its employees.
Well it's too much to read. I was really tired when I wrote it. Even the below is too much to read but perhaps gets the point across of what I would like to do which I think
Joel Engineer may have answered but I'm not sure. As I'm still too tired to understand that yet and research what he said in order to figure it out yet.
But maybe the code below can provide the concept of the operation with the comments in it. But seeing as how I'm still tired it may be confused.
Option Strict On
Imports System.Windows.Forms
Imports System.IO
Imports System.IO.Compression
Imports System.Drawing.Imaging
Imports System.Runtime.InteropServices
Public Class Form1
Dim Bmp1Bytes As New List(Of Byte)
Dim Bmp1BytesCompressed As New List(Of Byte)
Dim Bmp2Bytes As New List(Of Byte)
Dim BmpComparisonDict As New Dictionary(Of Integer, Byte)
Dim BmpDifferenceIndexesCompressed As New List(Of Byte)
Dim BmpDifferenceBytesCompressed As New List(Of Byte)
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
SomeSub()
End Sub
Private Sub SomeSub()
' Pretend this code is in UDP Client app. A screen capture is performed of the desktop. Takes about 90 milliseconds.
Bmp1Bytes.Clear()
Using BMP1 As New Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height)
Using g1 As Graphics = Graphics.FromImage(BMP1)
g1.CopyFromScreen(0, 0, 0, 0, BMP1.Size)
Cursor.Draw(g1, New Rectangle(Cursor.Position.X, Cursor.Position.Y, Cursor.Size.Width, Cursor.Size.Height))
Using MS As New MemoryStream
BMP1.Save(MS, System.Drawing.Imaging.ImageFormat.Bmp)
Bmp1Bytes.AddRange(MS.ToArray)
End Using
End Using
End Using
Bmp1BytesCompressed.AddRange(Compress(Bmp1Bytes.ToArray))
' UDP Client app sends Bmp1BytesCompressed.ToArray to UDP Server which is the entire image of the desktop that the UDP
' Client is on. This image takes awhile to send since compressed it is about 177000 bytes from over 4000000 bytes.
' I will be using different code just to get the bytes from the actual Bitmap in the future. That is not important for now.
' Pretend the UDP Server has received the bytes, decompressed the array received into a List(Of Byte) and is displaying
' the image of the UDP Clients desktop in a PictureBox.
' Now the image on the UDP Clients desktop changes due to the mouse cursor moving as an example. Therefore a new Bitmap
' is created from a screen capture. This takes about 90 milliseconds.
Bmp2Bytes.Clear()
Using BMP2 As New Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height)
Using g1 As Graphics = Graphics.FromImage(BMP2)
g1.CopyFromScreen(0, 0, 0, 0, BMP2.Size)
Cursor.Draw(g1, New Rectangle(Cursor.Position.X, Cursor.Position.Y, Cursor.Size.Width, Cursor.Size.Height))
Using MS As New MemoryStream
BMP2.Save(MS, System.Drawing.Imaging.ImageFormat.Bmp)
Bmp2Bytes.AddRange(MS.ToArray)
End Using
End Using
End Using
' Now I have the original images bytes in Bmp1Bytes and the new images bytes in Bmp2Bytes on the UDP Client. But I don't
' want to send all of the bytes in Bmp2Bytes to the UDP Server. Just the indexes of and the bytes that are different in
' Bmp2Bytes from Bmp1Bytes.
' This takes less than 100 milliseconds for what I've tested so far where over 500000 bytes in Bmp2Bytes are different
' than the bytes in Bmp1Bytes. Usually that amount would be much less. But during testing I was displaying the image
' from Bmp1 bytes in a PictureBox so a large amount of data would change between the first screen shot, the PictureBox
' then displaying an image on the same PC and then the second screen shot.
BmpComparisonDict.Clear()
For i = 0 To Bmp1Bytes.Count - 1
If Bmp1Bytes(i) <> Bmp2Bytes(i) Then
BmpComparisonDict.Add(i, Bmp2Bytes(i))
End If
Next
' So now I have all the difference bytes and their indexes from Bmp2Bytes in the BmpComparisonDict. So I compress
' the indexes into on List and the Bytes into another List.
BmpDifferenceIndexesCompressed.Clear()
BmpDifferenceBytesCompressed.Clear()
BmpDifferenceIndexesCompressed.AddRange(Compress(BmpComparisonDict.Keys.SelectMany(Function(d) BitConverter.GetBytes(d)).ToArray()))
BmpDifferenceBytesCompressed.AddRange(Compress(BmpComparisonDict.Values.ToArray))
' Now pretend the UDP Client has sent both those arrays to the UDP Server which has added both decompressed arrays
' to a Dictionary(Of Integer, Byte). And the server has the original image decompressed bytes received in a List
' called Bmp1Bytes also.
' This is where I am stuck. The UDP Server has the Dictionary. That part was fast. However there is no
' fast method I have found for creating a new List(Of Byte) where bytes in the originally received List(Of Byte) that
' do not have to be altered are placed into a new List(Of Byte) except for the indexes listed in the
' Dictionary(Of Integer, Byte) that need to be placed into the appropriate index locations of the new List(Of Byte).
' The below example for doing so is exceptionally slow. Pretend UpdateDictionary has all of the decompressed indexes
' and bytes received by the UDP Server for the update contained within it.
Dim UpdateDictionary As New Dictionary(Of Integer, Byte)
Dim UpdatedBytes As New List(Of Byte)
Dim Counter As Integer = 0
For i = 0 To Bmp1Bytes.Count - 1
If i = UpdateDictionary.Keys(Counter) Then ' Provides the index contained in the Keys for the Dictionary
UpdatedBytes.Add(UpdateDictionary.Values(Counter))
Counter += 1
If Counter > UpdateDictionary.Count - 1 Then Counter = 0
Else
UpdatedBytes.Add(Bmp1Bytes(i))
End If
Next
' So what I'm trying to do is find an extremely fast method for performing something similar to what the
' above operation performs.
End Sub
Private Function Compress(BytesToCompress() As Byte) As List(Of Byte)
Dim BytesCompressed As New List(Of Byte)
Using compressedStream = New MemoryStream()
Using zipStream = New GZipStream(compressedStream, CompressionMode.Compress)
zipStream.Write(BytesToCompress, 0, BytesToCompress.Count)
zipStream.Close()
BytesCompressed.AddRange(compressedStream.ToArray)
End Using
End Using
Return BytesCompressed
End Function
Private Function Decompress(BytesToDecompress() As Byte) As List(Of Byte)
Dim BytesDecompressed As New List(Of Byte)
Using DecompressedStream = New MemoryStream()
Using zipStream = New GZipStream(DecompressedStream, CompressionMode.Decompress)
zipStream.Write(BytesToDecompress, 0, BytesToDecompress.Count)
zipStream.Close()
BytesDecompressed.AddRange(DecompressedStream.ToArray)
End Using
End Using
Return BytesDecompressed
End Function
End Class
La vida loca -
I have a mac osx 10.411 power pc and recently i downloaded excel for mac 2004 so that i could download some program that only would work if i have excel for mac but what happen was it went to script and said that unable to read the dictionary of the application of the extension because it is not scriptable and the second pop up said the document autorun,inf could not open script editor can not open files in script editor app can any one help me how do i get these program working thank you norro460
good afternoon Limnos i think i didnt give the right info I didnt download well in a way i did i bought a copy of microsoft excel for mac 2004 i loaded on to my mac then i went and down loaded some software that said i needed to have excel you see my mac is osx 10.4,11 power pc G4 and that is were i had the problem now the excell loaded allright but the the other programs did not the pop ups say it is not scriptable or can not read dictionary if you can help m,e iam not great with computers but i along
Maybe you are looking for
-
Enable/disable textbox depending on list option, list is dependent on Radio
Hi, I'm trying to enable/disable text_box which is dependent on select_list option, select_list is dependent on radio_button. I'm able to enable/disable select_list using radio_button options, but I'm unable to handle text box which is again dependen
-
what word processing program should I use with my Mac?
-
Progress indicator in the status bar
Bridge often does a number of time-consuming activities where it would be useful as a user to know how far along it is, and how far it has to go. Since most of these are done in the background and don't interfere with the user doing more things, a pr
-
Script/Automator action/CSS to change text encoding?
As an expat Israeli, I read an Isareli newspaper online every day. Most pages on their site <http://www.haaretz.co.il> display fine with the text encoding set to Default. Some, though, forget that Hebrew is written right-to-left, and insist on displa
-
Quicktime Pro - missing movie controls in browser plugins
When viewing QT movies in my browsers, I have full functionality except that the control strip is replaced with a black bar. Buttons do behave (the volume slider even appears if I click where it should be) but they are not displayed. This occurs in b